From 382cf87081fae9b53f0d214aece2cd1285cd8d05 Mon Sep 17 00:00:00 2001 From: armstrca Date: Wed, 22 Apr 2026 18:48:45 -0500 Subject: [PATCH 1/4] reset and add automation --- automation/CLAUD.md | 392 + automation/CONTINUE_SETUP.md | 223 + automation/HANDOFF.md | 199 + automation/QUICK_START_TYPE_LEARNING.md | 205 + automation/README.md | 360 + automation/TYPE_LEARNING.md | 383 + automation/agent.log | 1199 + automation/agent.py | 2624 ++ automation/agent_summary.json | 11 + automation/build.py | 514 + automation/build_warnings_analysis.txt | 318 + automation/compile_errors_report.json | 3579 +++ automation/database.py | 487 + automation/decomp.db | Bin 0 -> 57344 bytes automation/decompile.py | 1191 + automation/dependency_analyzer.py | 1073 + automation/dependency_report.txt | 2193 ++ automation/discover.py | 358 + automation/expand_strings.py | 147 + automation/fix_existing_errors.py | 1477 ++ automation/functions.db | Bin 0 -> 1052672 bytes automation/generate_decls.py | 364 + automation/initial run log.txt | 1646 ++ automation/intellisense_errors.json | 0 automation/intellisense_fixer.py | 448 + automation/llm_fixes_audit.log | 137 + automation/llm_helper.py | 827 + automation/make build log.txt | 35 + automation/missing_types_reports.json | 30258 ++++++++++++++++++++++ automation/rank_all.md | 1764 ++ automation/rank_all.py | 59 + automation/requirements.txt | 6 + automation/revert_nonmatching.py | 240 + automation/review_llm_fixes.py | 254 + 34 files changed, 52971 insertions(+) create mode 100644 automation/CLAUD.md create mode 100644 automation/CONTINUE_SETUP.md create mode 100644 automation/HANDOFF.md create mode 100644 automation/QUICK_START_TYPE_LEARNING.md create mode 100644 automation/README.md create mode 100644 automation/TYPE_LEARNING.md create mode 100644 automation/agent.log create mode 100755 automation/agent.py create mode 100644 automation/agent_summary.json create mode 100755 automation/build.py create mode 100644 automation/build_warnings_analysis.txt create mode 100644 automation/compile_errors_report.json create mode 100644 automation/database.py create mode 100644 automation/decomp.db create mode 100755 automation/decompile.py create mode 100644 automation/dependency_analyzer.py create mode 100644 automation/dependency_report.txt create mode 100644 automation/discover.py create mode 100644 automation/expand_strings.py create mode 100755 automation/fix_existing_errors.py create mode 100644 automation/functions.db create mode 100644 automation/generate_decls.py create mode 100644 automation/initial run log.txt create mode 100644 automation/intellisense_errors.json create mode 100644 automation/intellisense_fixer.py create mode 100644 automation/llm_fixes_audit.log create mode 100755 automation/llm_helper.py create mode 100644 automation/make build log.txt create mode 100644 automation/missing_types_reports.json create mode 100644 automation/rank_all.md create mode 100644 automation/rank_all.py create mode 100644 automation/requirements.txt create mode 100644 automation/revert_nonmatching.py create mode 100755 automation/review_llm_fixes.py diff --git a/automation/CLAUD.md b/automation/CLAUD.md new file mode 100644 index 0000000..4d1f467 --- /dev/null +++ b/automation/CLAUD.md @@ -0,0 +1,392 @@ +## FF7 Decomp: Working Notes for Agents + +Final Fantasy VII (PS1 USA) decompilation project. Goal: byte-accurate recompilation of game executables. + +## Quick Reference + +### Docker Build Commands (Optimized) +```shell +# Build Docker image (only needed once) +docker build --platform=linux/amd64 --tag ff7-build:latest . + +# Run a build (FAST - uses Go caching, ~12s clean, ~2s incremental) +./tools/docker-build.sh "make build" + +# Format code after changes +./tools/docker-build.sh "make format" + +# Enter container interactively +./tools/docker-build.sh bash +``` + +The `docker-build.sh` wrapper adds Go module and build caching which provides a significant speedup. + +**Legacy commands** - only use if you have issues with the optimized script: +```shell +docker run --rm --platform=linux/amd64 -v "$(pwd)":/ff7 -v ff7_venv:/ff7/.venv -v "$(pwd)/build":/ff7/build ff7-build:latest -lc 'cd /ff7 && make build' +``` + +### Key Make Targets +- `make build` - Build all overlays, verify SHA1 checksums +- `make format` - Run clang-format on code +- `make clean` - Remove build artifacts +- `make submit` - Clean + build + format + stage files for commit + +### Mako Commands (via `./mako.sh`) +- `./mako.sh build` - Build project +- `./mako.sh dec ` - Decompile function, replace INCLUDE_ASM +- `./mako.sh dec --fix-structs` - Also replace D_8009XXXX with Savemap fields +- `./mako.sh rank ` - Rank functions by difficulty (easiest first) +- `./mako.sh symbols add [size]` - Add new symbol +- `./mako.sh format` - Format code + +## Project Structure + +``` +src/ # Decompiled C source (organized by overlay) +asm/us/ # MIPS assembly (original/undecompiled) + └── / + ├── nonmatchings/ # Undecompiled function .s files + └── data/ # Data segment .s files +include/ # Headers (common.h, game.h, psxsdk/) +config/ # Build config and symbol files + ├── us.yaml # Main overlay definitions + ├── symbols.*.txt # Symbol address files + └── sym_*.txt # Import/export symbol files +build/us/ # Build output (.o, .exe, .map files) +tools/ # Build tools (Go builder, Python scripts) +disks/us/ # Extracted game files (from disc image) +``` + +## Overlays + +| Overlay | VRAM Start | Source | Description | +|---------|------------|--------|-------------| +| main | 0x80010000 | `src/main/` | Core engine, initialization | +| battle | 0x800A0000 | `src/battle/` | Battle system | +| batini | 0x801B0000 | `src/battle/batini.c` | Battle initialization | +| field | 0x800A0000 | `src/field/` | Field exploration | +| world | 0x800A0000 | `src/world/` | World map | +| menu | varies | `src/menu/` | Menu systems (savemenu, title, etc.) | + +## Decompilation Workflow + +### 1. Find a function to decompile +```shell +# List undecompiled functions, ranked by difficulty (easiest first) +./mako.sh rank src/battle/nonmatchings/battle + +# Or browse asm files directly +ls asm/us/battle/nonmatchings/battle/ +``` + +### 2. Decompile with m2c +```shell +# This replaces INCLUDE_ASM in the .c file with decompiled code and performs struct field replacement +./mako.sh dec func_800A1158 --fix-structs +``` + +### 3. Refine the code +- Fix unknown types (marked with `/*?*/`) +- Match register allocation and instruction order +- Add/reference symbols in `config/symbols.*.txt` +- The goal is to produce a decompiled code that is 1:1 matching the original PSX binaries + +### 4. Build and verify +```shell +make build # Rebuilds and verifies SHA1 match +``` + +### 5. Format and submit +```shell +make format +git add config/ include/ src/ +git commit -m "Decompile func_800A1158" +``` + +## Code Patterns + +### INCLUDE_ASM Macro +Embeds undecompiled assembly: +```c +INCLUDE_ASM("asm/us/battle/nonmatchings/battle", func_800A1158); +``` +Replace with decompiled C code when function matches. + +### Renaming INCLUDE_ASM Functions + +INCLUDE_ASM functions can be renamed without decompiling them. The process differs between the **main overlay** and **other overlays**: + +#### Main Overlay (src/main/*.c) +The asm files in `asm/us/main/nonmatchings/` are **static** - they persist on disk and are not regenerated. + +To rename a function (e.g., `func_80026F44` → `MenuDrawText`): +1. **Rename the asm file**: `mv asm/us/main/nonmatchings/18B8/func_80026F44.s asm/us/main/nonmatchings/18B8/MenuDrawText.s` +2. **Update the asm file contents**: + - Change `glabel func_80026F44` → `glabel MenuDrawText` + - Change `.size func_80026F44, . - func_80026F44` → `.size MenuDrawText, . - MenuDrawText` +3. **Update the INCLUDE_ASM macro** in the C file +4. **Update all call sites** in `src/` that reference this function +5. **Update the symbol file** (e.g., `config/symbols.main.us.txt`) + +#### Other Overlays (src/menu/*.c, src/battle/*.c, etc.) +The asm files in overlay directories are **regenerated by splat** on each build. Renaming the files directly won't work - splat will recreate them with the old names. + +To rename a function (e.g., `func_801D080C` → `MenuConfig` in cnfgmenu): +1. **Add the new name to the overlay's symbol file** (e.g., `config/symbols.cnfgmenu.us.txt`): + ``` + MenuConfig = 0x801D080C; + ``` +2. **Update `config/sym_ovl_export.us.txt`** (for cross-overlay references): + - Change `func_801D080C = 0x801d080c;` → `MenuConfig = 0x801d080c;` +3. **Update the INCLUDE_ASM macro** in the C file +4. **Update any references** in other files (e.g., `src/main/ovl.c` for exported functions) +5. **Run the build** - splat will generate the asm file with the new name + +The old asm file may remain in the directory but will be unused. It can be deleted manually. + +### Common Types +```c +typedef signed char s8; typedef unsigned char u8; +typedef signed short s16; typedef unsigned short u16; +typedef signed int s32; typedef unsigned int u32; +typedef u8 unk_data; typedef unsigned int* unk_ptr; +``` + +### String Encoding +FF7 uses custom character encoding, not ASCII. Use `_S()` macro: +```c +const char* msg = _S("Save game?"); +``` + +## Naming Conventions + +### Functions +- Undecompiled: `func_800XXXXX` (address-based) +- Decompiled: verb-first descriptive names, prefer PSX SDK names when applicable +- Examples: `InitBattle`, `LoadScene`, `DrawSprite` + +### Data/Globals +- Unknown: `D_800XXXXX` (address-based) +- Known game state: `g_` prefix (e.g., `g_BattleState`) +- Module constants: module prefix (e.g., `BATTLE_MAX_ENEMIES`) +- Struct fields: `unkXX` until purpose known + +## Symbol Files + +Located in `config/`: +- `symbols.main.us.txt` - Main overlay symbols +- `symbols.battle.txt` - Battle overlay symbols +- `sym_export.us.txt` - Cross-overlay exports +- `sym_extern.us.txt` - External references + +Format: +``` +function_name = 0x800A1158; +D_800F5BB8 = 0x800F5BB8; // size:0xCC +``` + +Add symbols with: +```shell +./mako.sh symbols add config/symbols.battle.txt MyFunction 0x800A1234 +``` + +## Key Data Structures + +### Savemap (0x8009C6E4) +Game save data. Use `--fix-structs` to auto-replace `D_8009XXXX` references: +- `Savemap.party[9]` - Party member data +- `Savemap.inventory` - Item inventory +- `Savemap.materia` - Materia slots +- `Savemap.gil` - Money +- See `tools/fix_structs.py` for full field list + +### Battle Structures (`src/battle/battle.h`) +- `BattleSetup` - Battle configuration +- `Unk800F83E0` - Battle state (0x68 bytes) +- `BattleSetupType` - Encounter types (preemptive, back attack, etc.) + +## Tips for Matching + +1. **Compiler quirks**: Two PSX compilers available (`cc1-psx-26`, `cc1-psx-272`). Check which one the overlay uses in `config/us.yaml`. + +2. **Register allocation**: Order of operations matters. Sometimes restructuring expressions helps match. + +3. **Global pointer (GP)**: Main overlay uses `gp=0x80062D44`. Variables near this use gp-relative addressing. + +4. **Rodata association**: Battle overlay has `migrate_rodata_to_functions: true` - rodata is bundled with functions. + +5. **Use mipsel-linux-gnu-objdump** for line-by-line comparison + +## Comparing Original vs Compiled Assembly + +When a decompiled function doesn't match, compare the original assembly with the compiled output: + +### 1. Check Function Size (Quick Check) +```shell +# Get compiled function size from symbol table +./tools/docker-build.sh "mipsel-linux-gnu-objdump -t build/us/src/main/18B8.c.o" | grep func_80026F44 + +# Output: 00015e8c g F .text 00000128 func_80026F44 +# ^^^^^^^^ ^^^^^^^^ <- size in hex (0x128 = 296 bytes) +``` + +Compare with original size: count bytes from function start to end in the `.s` file, or calculate from addresses (end_addr - start_addr + 4). + +### 2. View Compiled Disassembly +```shell +# Disassemble a specific function from the compiled object +./tools/docker-build.sh "mipsel-linux-gnu-objdump -d build/us/src/main/18B8.c.o" | grep -A100 ':' +``` + +### 3. View Original Assembly +```shell +# Original assembly is in asm/us//nonmatchings// +cat asm/us/main/nonmatchings/18B8/func_80026F44.s +``` + +### 4. Common Size Mismatch Causes +- **Code merged after branches**: Compiler optimizes common code after if/else. Fix: put function calls inside each branch. +- **Delay slot optimization**: Original uses delay slots cleverly. The compiled code may not reproduce this. +- **Sign extension duplication**: Original may have `sll/sra` pairs duplicated in branches; compiler merges them. +- **Register allocation**: Different register choices can cause different instruction sequences. +- **Type differences**: `s8` vs `u8` generates `lb` vs `lbu` instructions. + +### 5. Useful Patterns +```shell +# Count instructions in original (each line with glabel excluded, /* */ comments have instructions) +grep -c '/\*' asm/us/main/nonmatchings/18B8/func_80026F44.s + +# Find jr ra (function returns) to identify function boundaries +./tools/docker-build.sh "mipsel-linux-gnu-objdump -d build/us/src/main/18B8.c.o" | grep 'jr.*ra' +``` + +## Decompilation Tips Checklist + +When decompiling a function, follow this checklist: + +- [ ] No prototypes or parameters with '?' as type +- [ ] No 'void*' parameters that should be typed structs +- [ ] No pointer arithmetic with manual offset calculations +- [ ] Use array indices to access arrays, do not use arithmetic calculations +- [ ] All struct field accesses use '->' or '.' operators +- [ ] Struct sizes match the assembly access patterns +- [ ] 'goto loop_*' are converted as 'while' loops +- [ ] 'goto block_*' in 'switch' are inlined, to reverse code optimization + +Alignment is critical. Code and data are aligned by 4-byte. + +## Finding symbol names and applying them to the decompiled code + +Our goal in this project currently is to find out as many symbol names (functions, variables, enums, structs, local variables, function parameters) as possible and apply them to the decompiled code. At the same time we want to ensure the code compiles 1:1 matching the original PSX binaries so we cannot alter the parameter types and change any logic. + +1. First we need to analyse both the decompiled PSX code in the @src/ folder and the PC decompiled code in the @assets/ folder. You usually start with a function in the PSX code that is unique enough and already has some symbols decompiled or its logic is recognizable enough that it can be matched to the PC code. +2. Spawn a sub-agent to look through the PC code in the @assets/ folder (do not read these files directly because they're huge) and find any corresponding code that can help us find new symbol names +3. Map out the connections between the PSX code (skip function names defined with INCLUDE_ASM macro, only functions fully defined in C can be renamed) and the PC code and store your findings in @CLAUDE_DECOMP.md for future reference. Make sure you're absolutely certain when creating this mapping - if there is any doubt about a specific symbol you should skip it. +4. Apply the changes. To do this spawn an Apply sub-agent that will take a map of symbol names to update (eg. "func_800A1158 = MyFunction", "D_800F5BB8 = MyVariable") and then the sub-agent will figure out how to efficiently and comprehensively apply these changes to the PSX code in @src/ (remember to update references to the changed symbol names in other source and header files; when changing a function name you should update all function calls to it in the code). The sub-agent should think hard to make sure it does not break anything as some symbol names are used in multiple places. The sub-agent shall not alter parameter types in function signatures. The sub-agent shall not read or update the assembly files in asm/ (these are generated by the disassembler and should not be manually edited). After finishing applying the changes it should return immediately without trying to run the build. +5. In parallel spawn a second sub-agent that will update the symbol maps in @config/ in symbols.main.us.txt and any other *.txt files that contain symbol names (skip sym_export.us.txt and sym_export_battle.us.txt since these are autogenerated by the build system) +6. After the work is done run the build to verify if the changes are correct. The build should succeed without any errors and all the SHA1 sums should match. Fix any issues that arise and repeat the process until the changes are correct. +7. Take one more look at CLAUDE_DECOMP.md and make sure its updated with all the new knowledge you've gained. +8. Finally think about what the next steps would be and suggest options to the user + +## Files to Commit +When submitting decompiled code: +```shell +git add config/ # Symbol files +git add include/ # Headers (if modified) +git add src/ # Decompiled source +``` + +## Advanced Matching Techniques + +### Understanding Why Decompiled Code Doesn't Match + +When the size is wrong, the compiler is generating different code structure. Common causes: + +#### 1. Merged Function Calls +**Problem**: Modern compilers merge common code after if/else branches. +```c +// BAD - compiler merges the call after the branches +if (condition) { + setup_a(); +} else { + setup_b(); +} +common_call(); // Compiler optimizes: one call site + +// GOOD - forces separate code paths (matches original) +if (condition) { + setup_a(); + common_call(); // Call inside branch +} else { + setup_b(); + common_call(); // Duplicate call +} +``` + +#### 2. Variable Type Affects Load Instructions +- `s8` generates `lb` (load byte signed) +- `u8` generates `lbu` (load byte unsigned) +- Check if global variables need type changes to match original instructions + +#### 3. Struct vs Separate Variables +**Problem**: Compiler optimizes away stores to local variables if it thinks they're unused. +```c +// BAD - compiler may skip storing to sp1C, sp1E +s16 sp18, sp1A, sp1C, sp1E; +sp1C = 0xFF; // May be optimized away! +sp1E = 0xFF; +sp18 = 0; +sp1A = 0; +SetDrawMode(..., (RECT*)&sp18); + +// GOOD - using proper struct ensures all fields are stored +RECT rect; +rect.w = 0xFF; // Compiler knows RECT fields are accessed +rect.h = 0xFF; +rect.x = 0; +rect.y = 0; +SetDrawMode(..., &rect); +``` + +#### 4. Delay Slot Optimization +Original PSX compiler often put useful instructions in branch delay slots. Modern compilers may: +- Put the instruction before the branch instead +- Use NOP in delay slots + +Example: Original saves `y << 16` before loop, uses delay slot for `s2 = 0`: +```asm +beqz v0, check_mode +addu s2, zero, zero # delay slot: s2 = 0 +sll s1, a1, 16 # after branch: save y +``` + +#### 5. Redundant Instructions in Original +The original compiler sometimes generated redundant code: +- `andi t0, v1, 0xFF` after `lbu v1` (already 8-bit) +- Duplicate `sra a1, s1, 16` in both branches + +These are hard to reproduce with modern compilers without tricks. + +### Matching Workflow + +1. **Get size right first** - Restructure code until instruction count matches (note: if the output size is wrong you might see compiler/linker errors in unrelated files - this is a good indicator that the size is wrong) +2. **Fix types second** - Change s8/u8, s16/u16 to match load/store instructions +3. **Reorder operations** - Match the order of stores/loads in original +4. **Check branch structure** - Use goto labels to match original control flow +5. Look at other decompiled functions in the same file to see how they handle similar patterns to the ones you're trying to match + +### Debugging Commands +```shell +# Compare function sizes +./tools/docker-build.sh "mipsel-linux-gnu-objdump -t build/us/src/main/18B8.c.o" | grep func_NAME + +# View compiled assembly +./tools/docker-build.sh "mipsel-linux-gnu-objdump -d build/us/src/main/18B8.c.o" | grep -A100 ':' + +# Original is in asm/us//nonmatchings//func_NAME.s +``` + +## Reference Links +- PSX SDK docs: PSY-Q library documentation +- FF7 Scarlet: https://github.com/petfriendamy/ff7-scarlet (game data structures) \ No newline at end of file diff --git a/automation/CONTINUE_SETUP.md b/automation/CONTINUE_SETUP.md new file mode 100644 index 0000000..187bcb8 --- /dev/null +++ b/automation/CONTINUE_SETUP.md @@ -0,0 +1,223 @@ +# Continue + Qwen Setup Guide + +## ✅ Setup Complete! + +Your system is configured to use **Continue** with **Qwen2.5-Coder 7B** locally via Ollama. + +## What's Installed + +- ✅ **Ollama** v0.17.4 (`/usr/local/bin/ollama`) +- ✅ **qwen2.5-coder:7b** model (4.7 GB) +- ✅ **Continue config** at `~/.continue/config.json` + +## Quick Start + +### 1. Install Continue Extension (If Not Already) + +If Continue isn't installed in VS Code: +1. Open VS Code +2. Go to Extensions (Ctrl+Shift+X) +3. Search for "Continue" +4. Install "Continue - Codestral, Claude, and more" +5. Reload VS Code + +### 2. Start Ollama Service + +Ollama needs to be running in the background: + +```bash +# Start ollama service (if not already running) +ollama serve +``` + +Or better yet, run it in the background: + +```bash +# Check if ollama is running +pgrep ollama || ollama serve & +``` + +### 3. Using Continue + +Once Continue is installed and Ollama is running: + +**Open Continue Panel:** +- Click the Continue icon in the left sidebar (or Ctrl+L) + +**Chat with Qwen:** +- Type questions in the Continue chat +- Select code and ask questions about it +- Use @ to reference files/symbols + +**Custom Commands (for decompilation):** + +We've added special commands for your decompilation workflow: + +1. **`/explain-asm`** - Analyze MIPS assembly + - Select assembly code + - Type `/explain-asm` + - Get detailed explanation + +2. **`/decompile-hint`** - Get decompilation suggestions + - Select assembly function + - Type `/decompile-hint` + - Get C equivalent suggestions + +3. **`/review-decomp`** - Review decompiled C code + - Select your C code + - Type `/review-decomp` + - Get accuracy check + +**Code Completion:** +- Just start typing - Qwen will suggest completions +- Press Tab to accept + +## Example Workflow + +### Decompile a Function with AI Help + +1. **Find a function to decompile:** + ```bash + cd ~/GitHub/ff7-decomp-armstrca/automation + python3 discover.py --list-todo | head -10 + ``` + +2. **Get the assembly:** + Look at the corresponding .s file in `asm/us/` + +3. **Ask Qwen for help:** + - Open the .s file in VS Code + - Select the assembly + - Open Continue (Ctrl+L) + - Type: `/decompile-hint` + +4. **Implement the C code:** + - Use Qwen's suggestions + - Write C in the appropriate src/ file + +5. **Run decompilation:** + ```bash + python3 decompile.py --function func_name + ``` + +6. **Verify it matches:** + ```bash + make build + # Check for matching + ``` + +## Configuration Details + +Your Continue config (`~/.continue/config.json`) includes: + +- **Main model**: Qwen2.5-Coder 7B (32K context) +- **Autocomplete**: Optimized for fast suggestions +- **Temperature**: 0.2 (balanced creativity/accuracy) +- **Custom commands**: Decompilation-specific prompts + +## Performance Expectations + +With your RTX 2060 (6GB VRAM) and i5-9300H: + +- **Chat responses**: ~20-40 tokens/sec +- **Autocomplete**: Nearly instant (<100ms) +- **Context window**: 32K tokens (~24K lines of code) +- **Model size**: 4.7 GB (fits in VRAM + RAM) + +## Troubleshooting + +### Ollama not responding: +```bash +# Restart ollama service +pkill ollama +ollama serve & +``` + +### Model not loading: +```bash +# Verify model is installed +ollama list + +# Pull again if needed +ollama pull qwen2.5-coder:7b +``` + +### Continue can't connect: +- Check Ollama is running: `pgrep ollama` +- Verify port 11434 is open: `curl http://localhost:11434` +- Restart VS Code + +### Slow responses: +- Close other applications to free RAM +- Use smaller batch sizes in automation +- Consider running only Ollama during heavy AI use + +## Advanced: Running Ollama as a Service + +To auto-start Ollama on boot: + +```bash +# Create systemd service +sudo tee /etc/systemd/system/ollama.service > /dev/null < \ + | bin/str \ + | iconv --from-code=UTF-8 --to-code=Shift-JIS \ + | bin/cc1-psx-26 -quiet -mcpu=3000 -g -mgas -gcoff > /dev/null +``` + +Compiler flags (`cc1=` and `cc_flags=`) are read from `build.ninja` per source file. + +--- + +## mako.sh Commands + +```bash +./mako.sh dec # Decompile one function +./mako.sh dec --fix-structs # Also replace D_8009XXXX with Savemap fields +./mako.sh build # Full build +./mako.sh rank # Rank functions by difficulty +./mako.sh format # clang-format all C files +``` + +--- + +## Agent Run Commands + +From `automation/` directory: + +```bash +# Status only +python3 agent.py --status + +# Full agent run (recommended starting point) +python3 agent.py --run --verbose + +# Single function smoke test +python3 agent.py --run --target 1 --batch 1 --verbose + +# LLM-assisted (requires Ollama + qwen2.5-coder:7b) +python3 agent.py --run --llm --llm-auto-fix --verbose + +# Timed run (e.g. 8 hours) +python3 agent.py --run --duration 28800 --batch 20 --llm --llm-auto-fix + +# Module-specific +python3 agent.py --run --module battle --target 50 --verbose + +# Bootstrap DB from ASM files (run once first) +python3 discover.py +``` + +--- + +## Key Implementation Decisions (This Conversation) + +### 1. Per-file PSY-Q Compile Gate (`build.py`) +Every decompiled function is now compiled through the real PSY-Q toolchain **before** being committed to `decompiled` status. If it fails, the file is reverted and the function is marked `failed` / `blocked`. + +Added methods: +- `BuildVerifier._get_psyq_params(rel_path)` — parses `build.ninja` for cc1 + cc_flags +- `BuildVerifier.check_file_compiles(file_path)` — runs the full CPP→str→iconv→cc1 pipeline, returns `(ok, errors)` + +Failure mode: if `build.ninja` doesn't exist or toolchain errors out, returns `(True, [])` to avoid false reverts. + +### 2. `--fix-structs` Always On (`decompile.py`, `agent.py`) +`mako.sh dec --fix-structs` replaces `D_8009XXXX` savemap globals with proper `Savemap.field` struct member references. This eliminates an entire class of incompatible-declaration errors. + +- `DecompilationRunner.__init__` now takes `fix_structs: bool` +- `run_mako_dec()` appends `--fix-structs` when enabled +- `AgentConfig.fix_structs = True` (always on) + +### 3. Startup Cleanup (`agent.py::_cleanup_failure_comments`) +On every agent startup, sweeps all `src/**/*.c` files and removes `/* Decompilation failure: ... */` comment blocks injected by m2c. These blocks corrupt subsequent decompile attempts if left in place. + +### 4. Startup Audit (`agent.py::_initial_audit`) +On every agent startup, compiles all C files containing `decompiled` functions. Any function whose line range contains compile errors is downgraded to `decompiled_needs_refine`. This catches bad decompilations from before the compile gate was added. + +### 5. `full_build_interval` Lowered +`AgentConfig.full_build_interval = 10` (was 60). Full builds are cheap to run now that per-file checks handle individual errors. + +--- + +## Text-Based Validation Patterns in `decompile.py::validate_c_file` + +These heuristics run **before** the PSY-Q compile check: + +| Pattern | What it catches | +|---------|----------------| +| `M2C_ERROR` | m2c hit an internal error | +| `saved_reg_ra` | Callee-save register leak (m2c gave up) | +| `Decompilation failure:` | m2c added a failure comment block | +| `#error` | Preprocessor error in output | +| `INCLUDE_ASM` still present after decompile | mako.sh exited 0 but didn't write C | + +--- + +## Previously Fixed Functions + +- **`func_80034BB0`** (`src/main/psxsdk.c`): LZSS decompressor — cleaned up m2c output, fully decompiled +- **`func_80034DB0`** (`src/main/psxsdk.c`): Reverted to `INCLUDE_ASM` stub (too complex) + +--- + +## PSX SDK Sentinel Exclusion + +Functions in `src/main/psxsdk.c` (and other PSX SDK wrappers) that are too complex or have compiler intrinsics are excluded from the automation queue via a sentinel comment at the top of the file. `discover.py` respects this sentinel and won't add excluded functions to the DB. + +--- + +## Known Issues / Follow-Up Work + +1. **`build.ninja` must exist** before `check_file_compiles` works. Run `./tools/docker-build.sh "make build"` once to generate it if it doesn't exist. +2. **CLI `--build-interval` argparse default** is still `100` in `agent.py`'s argparse, while `AgentConfig` default is now `10`. Pass `--build-interval 10` explicitly or update argparse. +3. **`--fix-structs` is not a CLI flag** — it's hardcoded `True` in `AgentConfig`. Can add `--no-fix-structs` flag if needed. +4. **`decompiled_needs_refine` functions** surfaced by `_initial_audit` need either LLM post-fixer or manual revert + re-queue. +5. **Dependency analyzer call graph** takes <1s for 3500+ functions at startup. + +--- + +## Important File Paths + +| File | Lines | Notes | +|------|-------|-------| +| `automation/agent.py` | ~1100 | `AgentConfig`, `DecompilationAgent`, `main()` CLI | +| `automation/decompile.py` | ~640 | `DecompilationRunner`, `validate_c_file`, `decompile_function` | +| `automation/build.py` | ~400 | `BuildVerifier`, `check_file_compiles`, `verify_decompiled_functions` | +| `automation/database.py` | ~300 | `DecompDatabase`, SQLite wrapper | +| `automation/discover.py` | ~250 | `DiscoverFunctions`, sentinel exclusion | +| `include/common.h` | - | Core types: s8, s16, s32, u8, u16, u32, Savemap | +| `src/main/psxsdk.c` | - | PSX SDK wrappers, partially decompiled | + +--- + +## Quick Verification + +All Python imports should pass: +```bash +cd /home/calvin/GitHub/ff7-decomp-armstrca/automation +python3 -c "from build import BuildVerifier; print('OK')" +python3 -c "from decompile import DecompilationRunner; print('OK')" +python3 -c "from agent import AgentConfig, DecompilationAgent; print('OK')" +``` diff --git a/automation/QUICK_START_TYPE_LEARNING.md b/automation/QUICK_START_TYPE_LEARNING.md new file mode 100644 index 0000000..792e806 --- /dev/null +++ b/automation/QUICK_START_TYPE_LEARNING.md @@ -0,0 +1,205 @@ +# Quick Start: Type Learning System + +## First Run + +The type learning system works automatically. Just run the agent as usual: + +```bash +cd automation + +# Standard run with type learning enabled +python3 agent.py --run --llm --batch 20 --verbose + +# Long run (8 hours) +python3 agent.py --run --llm --duration 28800 --batch 64 --parallel 8 +``` + +## What's Different? + +### Before +``` +[2026-03-29 10:00:00] Processing func_800A1234... +[2026-03-29 10:00:05] ❌ PSY-Q compilation failed: void* pointer access +[2026-03-29 10:00:05] Reverting to INCLUDE_ASM +``` + +### After +``` +[2026-03-29 10:00:00] Processing func_800A1234... +[2026-03-29 10:00:01] 🔍 Found 3 extern symbols, inferring types... +[2026-03-29 10:00:08] 🤖 Inferring types for 2 unknown symbols... +[2026-03-29 10:00:15] ✅ Generated type definitions in include/auto_types.h +[2026-03-29 10:00:20] ✅ Decompilation successful! +[2026-03-29 10:00:20] 📈 Increased confidence for D_800F83D0 pattern + +📚 Struct learning database: 12 known types +``` + +## Checking Progress + +### View Learned Types + +```bash +python3 -c " +from database import DecompDatabase +db = DecompDatabase() + +# Stats +stats = db.get_struct_learning_stats() +print(f'📚 Struct Learning Stats:') +print(f' Total patterns: {stats[\"total_patterns\"]}') +print(f' High confidence (≥70%%): {stats[\"high_confidence\"]}') +print(f' Medium confidence (30-70%%): {stats[\"medium_confidence\"]}') +print(f' Low confidence (<30%%): {stats[\"low_confidence\"]}') +print() + +# List known types +print('Known Types:') +known = db.get_all_known_types(min_confidence=0.3) +for symbol, info in sorted(known.items(), key=lambda x: -x[1]['confidence'])[:10]: + print(f' {symbol:20} → {info[\"likely_type\"]:20} (confidence: {info[\"confidence\"]:.2f}, seen: {info[\"seen_count\"]}x)') +" +``` + +### Check Which Functions Use a Type + +```bash +python3 -c " +from database import DecompDatabase +db = DecompDatabase() + +symbol = 'D_800F83D0' # Change this +funcs = db.get_functions_using_symbol(symbol) +print(f'Functions using {symbol}:') +for func in funcs: + print(f' - {func}') +" +``` + +## Database Migration + +The new tables are created automatically on first run. No manual steps needed. + +If you want to reset the learning database: + +```bash +# Backup first +cp automation/functions.db automation/functions.db.backup + +# Reset struct learning (keeps function data) +python3 -c " +from database import DecompDatabase +db = DecompDatabase() +db.conn.execute('DELETE FROM struct_patterns') +db.conn.execute('DELETE FROM symbol_usage') +db.conn.commit() +print('✅ Struct learning reset') +" +``` + +## Monitoring During Runs + +Watch the logs for: + +### Good Signs ✅ +``` +✅ All extern symbols have known types +📈 Increased confidence for D_800F83D0 pattern +types=3/3 ✅ +``` + +### Needs Attention ⚠️ +``` +⚠️ Type inference failed: timeout +types=0/5 ⚠️ +``` + +### Expected First Few Functions +``` +🤖 Inferring types for 12 unknown symbols... ← Normal, learning phase +``` + +### After 50+ Functions +``` +✅ All extern symbols have known types ← Database is learning! +``` + +## Performance Notes + +### Initial Slowdown +- First 20-30 functions: +10 sec each (LLM type inference) +- After that: Most types known → no inference needed + +### Long-term Speedup +- Fewer reversions = more successful decomps +- More successful decomps = less wasted work +- Net: ~30% faster once types are learned + +## Troubleshooting + +### "LLM not available" + +Make sure Ollama is running: +```bash +ollama serve & +ollama list # Should show qwen2.5-coder:7b +``` + +### "Type inference timeout" + +Increase timeout in `llm_helper.py::infer_types_from_assembly()`: +```python +response = self._call_ollama(prompt, temperature=0.1, max_tokens=2048, timeout=120) # Was 90 +``` + +### Wrong Types Learned + +Remove bad entries: +```bash +python3 -c " +from database import DecompDatabase +db = DecompDatabase() +db.conn.execute('DELETE FROM struct_patterns WHERE symbol_name = ?', ('D_BADTYPE',)) +db.conn.commit() +" +``` + +### No Auto-Generated Header + +Check if type inference is enabled: +```bash +# Should see LLM initialization +python3 agent.py --run --llm --verbose 2>&1 | grep -i llm +``` + +## Best Practices + +1. **Start with verbose:** First few runs should use `--verbose` to see learning in action +2. **Check stats periodically:** Run the stats check every 50 functions +3. **Review inferred types:** Check `include/auto_types.h` occasionally, move confirmed types to proper headers +4. **Batch by module:** Run `--module battle` first to learn battle types, then move to other modules + +## Example Session + +```bash +# Day 1: Bootstrap battle module +python3 agent.py --run --llm --module battle --batch 30 --verbose + +# Check what was learned +python3 -c "from database import DecompDatabase; db = DecompDatabase(); print(db.get_struct_learning_stats())" + +# Day 2: Use learned types for world module +python3 agent.py --run --llm --module world --batch 50 + +# Day 3: Full run with accumulated knowledge +python3 agent.py --run --llm --batch 100 --parallel 8 --duration 28800 +``` + +## Next Steps + +1. Run with `--llm --verbose` to see the system in action +2. After 50 functions, check stats to see learned types +3. Review `include/auto_types.h` and promote good types to proper headers +4. Continue running - the system gets smarter over time! + +For detailed information, see [TYPE_LEARNING.md](TYPE_LEARNING.md) diff --git a/automation/README.md b/automation/README.md new file mode 100644 index 0000000..20f405a --- /dev/null +++ b/automation/README.md @@ -0,0 +1,360 @@ +# FF7 Decompilation Automation + +Automated pipeline that discovers, decompiles, validates, and tracks every +function in the FF7 PSX codebase using +[m2c](https://github.com/matt-kempster/m2c) and the PSYQ 3.3 compiler +(`cc1-psx-26`). + +--- + +## Table of Contents + +1. [Prerequisites](#prerequisites) +2. [Quick Start](#quick-start) +3. [First Run (Empty Database)](#first-run-empty-database) +4. [Running the Agent](#running-the-agent) +5. [Database States](#database-states) +6. [Validation and Rejection Rules](#validation-and-rejection-rules) +7. [Script Reference](#script-reference) +8. [LLM Integration (Optional)](#llm-integration-optional) +9. [Monitoring and Building](#monitoring-and-building) + +--- + +## Prerequisites + +All scripts require **Python 3.9+** (no extra packages needed — pure stdlib). + +The following must also be available from the **repository root**: + +| Tool | Location | Notes | +|------|----------|-------| +| `mako.sh` | `../mako.sh` | Main wrapper for m2c + PSY-Q pipeline | +| `cc1-psx-26` | `../bin/cc1-psx-26` | PSYQ 3.3 compiler; needs 32-bit ELF support or wine | +| `build.ninja` | `../build.ninja` | Generated by `make build` (Docker); needed by the per-file compile check | +| Docker (optional) | system | Only needed for the full `make build` step; per-file checks run natively | + +> **First time only:** Run `./tools/docker-build.sh "make build"` from the +> repository root once to generate `build.ninja`. Subsequent validation runs +> use native PSY-Q without Docker. + +--- + +## Quick Start + +```bash +# 1. Clone / enter the repo +cd /path/to/ff7-decomp + +# 2. (First time only) build to generate build.ninja +./tools/docker-build.sh "make build" + +# 3. Enter the automation directory +cd automation/ + +# 4. Populate the database from INCLUDE_ASM macros in src/ +python3 discover.py --scan + +# 5. Check what was found +python3 agent.py --status + +# 6. Run the agent +python3 agent.py --run --verbose +``` + +--- + +## First Run (Empty Database) + +The database file (`automation/functions.db`) is **not committed** to the +repository. When you first clone the repo (or delete the file), you must +bootstrap it: + +```bash +cd automation/ + +# Scan all C source files for INCLUDE_ASM macros and populate the DB +python3 discover.py --scan +``` + +`discover.py --scan` does the following: + +- Walks every `.c` file under `src/` +- Finds every `INCLUDE_ASM(...)` macro (halts at any + `// NOTE: please do not decompile any of these functions.` sentinel) +- Resolves the corresponding `.s` file under `asm/us/` +- Records each function with `status='todo'` and a `line_count` difficulty + score derived from the assembly file +- Skips functions that are already in the database (re-running is idempotent) + +Verify the scan succeeded: + +```bash +python3 discover.py --stats # module-by-module totals +python3 discover.py --list-todo # next functions queued +python3 agent.py --status # overall progress breakdown +``` + +If `discover.py` reports zero functions found, check that `src/` contains +`.c` files with `INCLUDE_ASM` macros and that you are running from inside +`automation/`. + +--- + +## Running the Agent + +All commands are run from the `automation/` directory. + +```bash +# One-shot: decompile the easiest 10 functions and stop +python3 agent.py --run --batch 10 --verbose + +# Continuous run until the queue is empty +python3 agent.py --run --verbose + +# Parallel execution (8 workers, 128 functions per batch) +python3 agent.py --run --batch 128 --parallel 8 + +# Timed run (e.g. 8 hours) +python3 agent.py --run --duration 28800 --batch 20 + +# Only process one module +python3 agent.py --run --module battle + +# Retry functions previously marked blocked or verified-but-stale +python3 agent.py --run --retry-blocked --retry-verified + +# Force-retry ALL blocked functions (use after adding new type definitions) +python3 agent.py --run --force-retry-blocked + +# Strict validation: treat '?' type-unknown artifacts as hard rejects +# (reverts to INCLUDE_ASM) instead of keeping as decompiled_needs_refine +python3 agent.py --run --strict-validation + +# Show current statistics without running +python3 agent.py --status + +# Promote decompiled_needs_refine functions whose code is now clean +python3 agent.py --verify-needs-refine +``` + +### What the agent does each iteration + +1. **Cleanup** — resets functions stuck in `in_progress` (from a prior crash) + back to `failed`, and resets retry counters for `failed`/`blocked` + functions so each new session starts fresh. +2. **Select batch** — picks the highest-priority `todo` functions using a + combined dependency-aware + simplicity score. Functions whose in-file + callees are already decompiled are preferred so m2c has full type context. +3. **Decompile** — runs `./mako.sh dec --fix-structs` for each + function (`--fix-structs` post-processes the output via `tools/fix_structs.py`, + replacing raw addresses in the `Savemap` range (`0x8009C6E4`–`0x8009D7D8`) + with named field accesses like `Savemap.party[2]` or `Savemap.gil`). +4. **Validate** — checks the output C for m2c artifacts (see below). + Accepted output → `decompiled`; rejected output → reverted to + `INCLUDE_ASM` and marked `failed` or `blocked`. +5. **PSY-Q compile check** — after each batch, compiles the affected C files + with `cc1-psx-26` to catch errors the text checks missed. Files that fail + are downgraded to `decompiled_needs_refine`. +6. **Verify** — every 20 (this number is customizeable) decompiled functions runs `objdiff` to check binary matching + and promotes clean functions to `verified`. +7. **Generate declarations** — regenerates `include/decomp_decls_*.h` so + freshly verified functions are available as m2c context for subsequent + decompilations. +8. **Full build** — every 10 (this number is customizeable) functions runs a full `mako.sh build` as a + safety net. + +--- + +## Database States + +Functions flow through the following states in `functions.db`: + +``` + ┌──────────────────────────────────────────────┐ + │ todo │ + └────────────────────┬─────────────────────────┘ + │ agent picks function + ▼ + in_progress + / \ + (validation pass) (validation fail — hard error) + │ │ + ▼ ▼ + decompiled blocked + │ (soft error, PSY-Q fails) (no automatic retry; + │ ▼ use --force-retry-blocked + │ decompiled_needs_refine after adding type defs) + │ │ (re-queued on + │ │ next run) + │ objdiff binary match + ▼ + verified + + failed ←── decompilation error (retried up to max_retries times) +``` + +| Status | Meaning | +|--------|---------| +| `todo` | Queued; not yet attempted | +| `in_progress` | Currently being decompiled (or crashed mid-run) | +| `decompiled` | m2c output accepted; text and PSY-Q checks passed | +| `verified` | Binary output matches the original; gold standard | +| `failed` | Decompilation rejected; will be retried automatically | +| `blocked` | Hard error; reverted to `INCLUDE_ASM`; not retried by default | +| `decompiled_needs_refine` | Accepted by text check but PSY-Q compile failed; needs fixing | +| `sdk_excluded` | SDK/library function; intentionally excluded | + +--- + +## Validation and Rejection Rules + +After `mako.sh dec` runs, `decompile.py` validates the output C before +accepting it. A function is **rejected** (output reverted to `INCLUDE_ASM`, +status set to `failed` or `blocked`) if any of the following apply. + +### Hard rejections → `blocked` (not retried automatically) + +These represent structural errors m2c cannot fix without additional type +information being added to the codebase: + +| Artifact | Example | Reason | +|----------|---------|--------| +| `INCLUDE_ASM` still present | `INCLUDE_ASM(..., func_800ABC00)` | mako.sh failed to produce C output | +| `M2C_ERROR()` macro | `M2C_ERROR(unset_reg(v0))` | m2c could not resolve a register value | +| `Decompilation failure:` comment | `/* Decompilation failure: ... */` | m2c internal error on a dependency | +| `?*` pointer type | `?* var_a0;` | m2c could not infer the pointer's struct type | +| `/*?*/` on non-primitive | `/*?*/MyStruct D_800ABC00;` | m2c guessed a non-primitive type | +| `?` in parameter list | `void func(? arg0, s32 arg1)` | m2c could not infer a parameter type | +| `(? *)` cast | `(? **) temp_v0` | m2c type inference failure in cast context | +| `void*` local used with `->` | `void* ptr; ptr->unk4 = 0;` | struct type was not inferred | +| Primitive pointer with `->unk` | `s32* p; p->unk8 = 0;` | struct masquerading as scalar pointer | +| Negative field offset | `temp->unk-4` | m2c struct offset arithmetic error | +| `saved_reg_ra` | `saved_reg_ra = ...` | Leaked return-address register | +| `missing "jr $ra"` warning | `// Warning: missing "jr $ra"` | Function does not end with a return | +| `Internal error in function` | `/* Internal error in function ... */` | m2c traceback in output | +| Function name as integer | `func_800ABC00 * 4` | Function pointer mistaken for data | +| `sp` used as pointer | `sp->field`, `*(sp + 4)` | Leaked PSX stack-pointer register | +| `void*` parameter dereferenced | `void foo(void* p) { p->x = 1; }` | Parameter struct type not inferred | +| Mid-block variable declaration | declaration after a statement | PSY-Q `cc1` is C89-only | +| PSY-Q compile failure | actual `cc1-psx-26` error | Something the text checks missed | + +To retry blocked functions after adding the missing type definitions: + +```bash +python3 agent.py --run --force-retry-blocked +``` + +### Soft rejections → `decompiled_needs_refine` (retried automatically) + +These produce syntactically valid C that compiles under PSY-Q but contain +m2c artifacts that should be resolved before verification. There are two +tiers, controlled by `--strict-validation`: + +**Always soft** (both default and `--strict-validation`): + +| Artifact | Example | Fix | +|----------|---------|-----| +| `saved_reg_s0`–`s7`, `saved_reg_v0`, etc. | `saved_reg_s3 = ...` | Callee-save register not resolved; re-run with better context | +| `(unaligned type)` cast | `(unaligned s32) D_800F0000` | Unaligned access; needs a cast substitution | + +**Soft by default only** (become hard rejects with `--strict-validation`): + +| Artifact | Example | Fix | +|----------|---------|-----| +| `? var_name;` unknown variable type | `? sp10;` | Local type not inferred; re-run or replace with `s32` | +| `? func(...)` unknown return type | `? func_80012345(s32);` | Extern return type unknown | +| `pointer to unknown type` | `?* var_s0` | Less-common unknown-type marker | +| `?` in parameter list | `void func(? arg0)` | Parameter type not inferred | +| `(? *)` cast | `(? *) temp_v0` | Type inference failure in cast context | + +Use `--strict-validation` when you want to be aggressive about keeping the +source tree clean — functions with any `?` type holes are immediately +reverted to `INCLUDE_ASM` and marked `blocked` rather than accumulating as +`decompiled_needs_refine`. Use the default (lenient) mode when iterating +quickly and planning to fix type annotations in a later pass. + +The agent re-queues `decompiled_needs_refine` functions automatically on the +next run. If the LLM is enabled (`--llm --llm-auto-fix`), it will also +attempt to substitute a concrete type for each artifact. + +### What is never rejected + +- `extern /*?*/s32 D_800XXXX;` — `/*?*/` before a **known primitive** + (`s8`, `s16`, `s32`, `u8`, …) is a harmless annotation; the preprocessor + strips the comment. Not rejected. +- Ternary expressions (`x ? a : b`) — never confused with the `?` type marker. +- Functions already fully present in the C source — skipped without touching + the file. + +--- + +## Script Reference + +| Script | Primary use | Key flags | +|--------|-------------|-----------| +| `agent.py` | Main orchestration loop | `--run`, `--status`, `--batch N`, `--parallel N`, `--module X`, `--duration S`, `--force-retry-blocked`, `--strict-validation` | +| `discover.py` | Populate DB from source | `--scan`, `--stats`, `--list [module]`, `--list-todo` | +| `decompile.py` | Decompile one function | `--function func_NAME`, `--auto`, `--batch N` | +| `build.py` | Build + objdiff verify | `--build`, `--verify`, `--report` | +| `database.py` | DB wrapper (not a CLI tool) | — | +| `dependency_analyzer.py` | Call-graph analysis | Used internally by agent | +| `generate_decls.py` | Regenerate `decomp_decls_*.h` | Run automatically after each verify pass | +| `fix_existing_errors.py` | LLM-based PSY-Q error fixer | Used internally when `--llm` is on | +| `review_llm_fixes.py` | Approve/reject LLM fixes | `--list`, `--promote func_NAME` | +| `expand_strings.py` | Expand FF7 string macros | Utility; run manually if needed | +| `intellisense_fixer.py` | Fix IntelliSense artifacts | Applied automatically pre-validation | + +--- + +## LLM Integration (Optional) + +The agent can use a local LLM (via [Ollama](https://ollama.ai)) for: + +- **Pre-analysis** (`--llm`): Summarise the assembly before decompilation and + store complexity hints in the DB. +- **Auto-fix** (`--llm-auto-fix`): After decompilation, run `TypeErrorFixer` + to repair `?` type markers and simple PSY-Q errors automatically. + +Setup: + +```bash +# Install and start Ollama +ollama serve + +# Pull the recommended model +ollama pull qwen2.5-coder:7b + +# Run with LLM enabled +python3 agent.py --run --llm --llm-auto-fix --verbose +``` + +The LLM is entirely optional; all core decompilation and validation works +without it. When `--llm` is active, parallel execution is automatically +disabled so the per-function LLM patch runs before the next function is +picked. Frankly, I have not found it to be anywhere near as useful for error +correction as just using a Claude Code model via copilot - the goal was to +save some money even though it'd work slower, but the results so far just +really have not been worth it on local. + +--- + +## Monitoring and Building + +```bash +# Check current status +python3 agent.py --status + +# Verify all decompiled functions against their binary +python3 build.py --verify + +# Full build (requires Docker the first time for build.ninja) +bash ../mako.sh build + +# Docker full build (regenerates build.ninja if needed) +../tools/docker-build.sh "make build" + +# Inspect the DB directly +sqlite3 functions.db "SELECT status, COUNT(*) FROM functions GROUP BY status" +sqlite3 functions.db "SELECT name, status, notes FROM functions WHERE status='blocked' LIMIT 20" +``` diff --git a/automation/TYPE_LEARNING.md b/automation/TYPE_LEARNING.md new file mode 100644 index 0000000..3a35027 --- /dev/null +++ b/automation/TYPE_LEARNING.md @@ -0,0 +1,383 @@ +# Type Learning & Intelligent Decompilation + +## Overview + +Three major improvements to reduce `void*` reversions and improve decompilation success rates: + +1. **Struct Learning Database** - Learns struct types from successful decomps +2. **Type-Aware Function Prioritization** - Prioritizes functions where types are known +3. **Pre-Decompilation Type Inference** - Infers types from assembly BEFORE m2c runs + +--- + +## 1. Struct Learning Database + +**Files Modified:** `database.py` + +### What It Does + +Tracks struct patterns across successful decompilations to build institutional knowledge. + +### New Database Tables + +```sql +-- Learned struct patterns +CREATE TABLE struct_patterns ( + symbol_name TEXT UNIQUE, -- e.g., "D_800F83D0" + likely_type TEXT, -- e.g., "Unk800F83D0" + field_map TEXT, -- JSON: {offset: [name, type]} + confidence REAL, -- 0.0-1.0 + seen_count INTEGER, -- How many functions reference it + successful_uses INTEGER -- How many successful decomps used it +); + +-- Track which functions use which symbols +CREATE TABLE symbol_usage ( + function_name TEXT, + symbol_name TEXT, + access_pattern TEXT -- e.g., "read field at offset 0x4" +); +``` + +### New Methods + +- `learn_struct_pattern()` - Record a struct type for a symbol +- `get_known_type()` - Retrieve known type for symbol +- `get_all_known_types()` - Get all learned types above confidence threshold +- `mark_struct_success()` - Increment success counter (boosts confidence) +- `get_struct_learning_stats()` - Statistics on learned patterns + +### How It Works + +When a function decompiles successfully: +1. Extract extern symbols it references +2. Record the types used +3. Increment confidence for those type patterns + +Over time, the database learns: +- `D_800F83D0` → `Unk800F83D0` with fields at offsets 0x0, 0x2 +- `g_BattleState` → `BattleState*` +- Etc. + +--- + +## 2. Type-Aware Function Prioritization + +**Files Modified:** `dependency_analyzer.py`, `agent.py` + +### What It Does + +Scores functions based on whether their types are known, prioritizing "ready" functions. + +### New Methods in `dependency_analyzer.py` + +- `extract_extern_symbols()` - Parse assembly for symbol references +- `get_function_extern_symbols()` - Get all extern symbols a function uses +- `check_type_availability()` - Check if types are known for those symbols +- `compute_type_aware_score()` - Enhanced scoring with type consideration +- `get_type_aware_recommendations()` - Get best candidates with type info + +### Scoring Algorithm + +```python +base_score = compute_dependency_score() # 0-250 (existing) + +if no_extern_symbols: + score += 25 # Small bonus, no type issues +elif all_types_known: + score += 50 # Big bonus, ready to decompile! +else: + # Penalty proportional to unknown types + type_ratio = known / total + score += (type_ratio * 100) - 50 # -50 to +50 +``` + +**Result:** Functions with known types bubble to the top of the queue. + +### Integration in `agent.py` + +The `_get_next_batch()` method now: +1. Gets candidate functions +2. Loads known types from database +3. Scores using `compute_type_aware_score()` (not old `compute_dependency_score()`) +4. Shows type availability in verbose logs + +Example log output: +``` +Top candidates (weighted: dep=0.7, simple=0.3): + func_800A1234: score=245.3, dep=210.5, lines=45, unresolved=0, types=3/3, file_completion=67.5% + func_800A5678: score=198.7, dep=180.2, lines=89, unresolved=1, types=2/5, file_completion=45.0% +``` + +--- + +## 3. Pre-Decompilation Type Inference + +**Files Modified:** `llm_helper.py`, `decompile.py` + +### What It Does + +Before running m2c, analyzes assembly to infer struct definitions using LLM. + +### New Methods in `llm_helper.py` + +- `infer_types_from_assembly()` - LLM analyzes assembly, generates typedef suggestions +- `generate_type_header()` - Writes inferred types to header file + +### How It Works + +**Step 1: Assembly Analysis** (in `decompile.py::decompile_function`) +```python +# Before running mako.sh dec: +extern_symbols = analyzer.get_function_extern_symbols(function_name) +known_types = db.get_all_known_types() +unknown_symbols = [s for s in extern_symbols if s not in known_types] + +if unknown_symbols: + inferred = llm.infer_types_from_assembly(function_name, unknown_symbols) +``` + +**Step 2: LLM Inference** (in `llm_helper.py`) + +LLM examines assembly patterns like: +```assembly +lui $v0, %hi(D_800F83D0) +lhu $v1, %lo(D_800F83D0)($v0) # offset 0x0, unsigned half +lhu $a0, 0x2($v0) # offset 0x2, unsigned half +``` + +Generates: +```c +typedef struct { + u16 unk0; // offset 0x0 + u16 unk2; // offset 0x2 +} Unk800F83D0; + +extern Unk800F83D0 D_800F83D0; +``` + +**Step 3: Header Generation** + +Writes to `include/auto_types.h`: +```c +/* Auto-generated type definitions */ +#ifndef AUTO_TYPES_H +#define AUTO_TYPES_H + +#include "common.h" + +/* D_800F83D0 - confidence: 0.80 */ +typedef struct { + u16 unk0; + u16 unk2; +} Unk800F83D0; + +extern Unk800F83D0 D_800F83D0; + +#endif +``` + +**Step 4: Learning Database Update** + +The inferred types are stored in the struct learning database with: +- Symbol name +- Typedef definition +- Field map (offset → name, type) +- Confidence score (0.0-1.0) + +**Step 5: Success Tracking** + +After successful decompilation, `mark_struct_success()` increases confidence for types that worked. + +--- + +## Workflow Integration + +### Old Workflow (Lots of Reversions) +``` +1. Pick easiest function (line count only) +2. Run mako.sh dec +3. m2c outputs void* everywhere +4. PSY-Q compilation fails +5. Revert to INCLUDE_ASM +``` + +### New Workflow (Fewer Reversions) +``` +1. Pick function with known types (type-aware scoring) +2. If types unknown → LLM infers from assembly +3. Generate temp header with types +4. Store in learning database +5. Run mako.sh dec (now has type context) +6. m2c outputs typed structs (not void*) +7. PSY-Q compilation succeeds! +8. Mark types as successful (boost confidence) +``` + +--- + +## Usage + +### Enable All Features + +```bash +# Run agent with full type learning enabled +python3 agent.py --run --llm --batch 20 --verbose +``` + +The system will: +- ✅ Use type-aware prioritization automatically +- ✅ Infer types before decompilation (if LLM enabled with `--llm`) +- ✅ Learn from successful decomps +- ✅ Show struct learning stats at end + +### Check Learning Progress + +```bash +# View struct learning statistics +python3 -c " +from database import DecompDatabase +db = DecompDatabase() +stats = db.get_struct_learning_stats() +print(f'Total patterns: {stats[\"total_patterns\"]}') +print(f'High confidence: {stats[\"high_confidence\"]}') + +# List all known types +known = db.get_all_known_types(min_confidence=0.3) +for symbol, info in list(known.items())[:5]: + print(f'{symbol}: {info[\"likely_type\"]} (confidence: {info[\"confidence\"]:.2f})') +" +``` + +### Inspect Learned Types + +```bash +# Interactive check +python3 +>>> from database import DecompDatabase +>>> db = DecompDatabase() +>>> info = db.get_known_type('D_800F83D0') +>>> print(info) +{ + 'likely_type': 'Unk800F83D0', + 'field_map': { + '0x0': {'name': 'unk0', 'type': 'u16'}, + '0x2': {'name': 'unk2', 'type': 'u16'} + }, + 'confidence': 0.85, + 'seen_count': 4 +} +``` + +--- + +## Expected Impact + +### Reduction in Reversions + +**Before:** +- Functions with unknown types → 80% reversion rate +- Manual type hunting required + +**After:** +- First pass: LLM infers types → 50% success rate (halved reversions) +- After 10 similar functions: Types learned → 70% success rate +- After 50 similar functions: High confidence types → 85% success rate + +### Compounding Benefits + +As the database learns more types: +1. **Bootstrapping:** Early functions teach types for later functions +2. **Module completion:** Similar functions in same module benefit from each other +3. **Cross-module learning:** Shared externs (like savemap) benefit entire codebase + +### Practical Example + +**Battle Module:** +- `func_800A1798` fails → LLM infers `D_800F83D0` is struct → Store in DB +- `func_800A3828` attempts → DB already knows `D_800F83D0` → Success! +- 10 more battle functions → All benefit from learned types +- **Net:** 1 reversion instead of 11 + +--- + +## Maintenance & Tuning + +### Confidence Thresholds + +Adjust in your code: +```python +known_types = db.get_all_known_types(min_confidence=0.3) # Default: 30% +``` + +**Recommendations:** +- `0.3` - Permissive, more functions attempted (more failures possible) +- `0.5` - Balanced (default) +- `0.7` - Conservative, only high-confidence types used + +### Learning Cleanup + +If bad types get learned: +```python +# Remove incorrect pattern +db.conn.execute("DELETE FROM struct_patterns WHERE symbol_name = ?", ('D_BADTYPE',)) +db.conn.commit() +``` + +### Header Management + +The auto-generated `include/auto_types.h` is temporary. When types are confirmed: +1. Move them to proper headers (`battle_private.h`, etc.) +2. Delete `auto_types.h` +3. Re-run discovery to rebuild database + +--- + +## Limitations + +1. **LLM Accuracy:** Type inference is best-effort, not guaranteed correct +2. **Confidence Lag:** Takes 3-5 successful uses before confidence is high +3. **Assembly Only:** Can't infer types not visible in assembly access patterns +4. **Performance:** LLM inference adds ~5-10 seconds per function + +--- + +## Debug Output + +Enable verbose logging to see the system in action: +```bash +python3 agent.py --run --llm --verbose +``` + +Look for: +``` +🔍 Found 3 extern symbols, inferring types... + 🤖 Inferring types for 2 unknown symbols: D_800F83D0, g_BattleData... + ✅ Generated type definitions in include/auto_types.h + 📈 Increased confidence for D_800F83D0 pattern + +📚 Struct learning database: 47 known types +Top candidates: + func_800A1234: score=245.3, types=3/3 ✅ + func_800A5678: score=198.7, types=2/5 ⚠️ +``` + +--- + +## Future Enhancements + +1. **Type Voting:** Multiple functions vote on same symbol → highest confidence wins +2. **Context Diffing:** Compare inferred types across similar functions +3. **Header Mining:** Parse existing headers to seed database +4. **Interactive Correction:** CLI tool to fix wrong types, boost correct ones +5. **Type Templates:** Common patterns (linked lists, callback structs) pre-learned + +--- + +## Summary + +**Before:** Agent blindly decompiles, hits void* errors, reverts constantly. + +**After:** Agent learns types, prioritizes ready functions, pre-generates definitions. + +**Result:** Fewer reversions, faster convergence, compounding improvement over time. diff --git a/automation/agent.log b/automation/agent.log new file mode 100644 index 0000000..d64c8d6 --- /dev/null +++ b/automation/agent.log @@ -0,0 +1,1199 @@ +[2026-04-22 17:15:48] [INFO] Dependency analysis enabled - building call graph... +[2026-04-22 17:15:49] [INFO] Analyzed 3520 functions across all modules +[2026-04-22 17:15:49] [INFO] 1986 leaf functions (56.4%) +[2026-04-22 17:15:49] [INFO] Most depended on: func_800BEAD4 (237 dependents) +[2026-04-22 17:15:49] [INFO] ============================================================ +[2026-04-22 17:15:49] [INFO] STARTING DECOMPILATION AGENT +[2026-04-22 17:15:49] [INFO] ============================================================ +[2026-04-22 17:15:49] [INFO] Batch size: 3 +[2026-04-22 17:15:49] [INFO] Verify interval: 20 +[2026-04-22 17:15:49] [INFO] Checking ASM splits... +[2026-04-22 17:15:49] [INFO] ASM splits up to date +[2026-04-22 17:15:49] [INFO] Refreshed decomp_decls.h + per-module decls: 366 declarations +[2026-04-22 17:15:49] [WARN] Reverted func_800293F4 in akao.c (? in extern block) +[2026-04-22 17:15:49] [WARN] Reverted func_800A22E4 in ending.c (? in extern block) +[2026-04-22 17:15:49] [WARN] Reverted func_800AEB80 in battle.c (? type marker) +[2026-04-22 17:15:49] [WARN] Reverted func_800A23BC in battle.c (? in extern block) +[2026-04-22 17:15:49] [WARN] Reverted func_800D61AC in battle2.c (? type marker) +[2026-04-22 17:15:49] [WARN] Reverted func_800CD558 in battle2.c (? in extern block) +[2026-04-22 17:15:49] [WARN] Reverted 6 function(s) with '?' type markers to INCLUDE_ASM +[2026-04-22 17:15:49] [INFO] Running initial compilation audit of decompiled functions... +[2026-04-22 17:15:50] [INFO] Startup audit: all decompiled functions compile cleanly +[2026-04-22 17:15:50] [INFO] sym_export alias check: all overlay jal targets accounted for +[2026-04-22 17:15:50] [INFO] Reset retry counters for 797 failed/blocked function(s) +[2026-04-22 17:15:50] [INFO] Initial state: 25/1281 verified +[2026-04-22 17:15:51] [INFO] Processing batch of 3 functions +[2026-04-22 17:15:51] [INFO] [1/3] Decompiling func_801D027C (48 lines) + +============================================================ +Attempting to decompile: func_801D027C +============================================================ +Module: menu +Current status: todo +⚠️ Decompilation produced invalid output: PSY-Q compilation failed: aggregate value used where an integer was expected; incompatible types in assignment +🔄 Reverting bginmenu.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:15:52] [INFO] [2/3] Decompiling func_800AC6B4 (41 lines) + +============================================================ +Attempting to decompile: func_800AC6B4 +============================================================ +Module: battle +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting battle.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:15:53] [INFO] [3/3] Decompiling func_800D3548 (43 lines) + +============================================================ +Attempting to decompile: func_800D3548 +============================================================ +Module: battle +Current status: todo +⚠️ Decompilation produced invalid output: Function 'func_800D3548' not found as a definition after decompilation (LLM may have renamed it) +🔄 Reverting battle2.c to INCLUDE_ASM (keeping file clean) + +============================================================ +AGENT PROGRESS - 17:15:54 +============================================================ +Processed: 0 functions +Verified: 25/1281 (2.0%) +Decompiled: 0 +Needs Refine: 5 +Blocked: 647 +Failed: 153 +Todo: 451 +Batches: 1 +Builds: 0 +Rate: 0.00 functions/second +Elapsed: 0:00:04 +============================================================ + +[2026-04-22 17:15:54] [INFO] Processing batch of 3 functions +[2026-04-22 17:15:54] [INFO] [1/3] Decompiling func_800AA468 (42 lines) + +============================================================ +Attempting to decompile: func_800AA468 +============================================================ +Module: battle +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting battle.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:15:55] [INFO] [2/3] Decompiling func_80018ECC (68 lines) + +============================================================ +Attempting to decompile: func_80018ECC +============================================================ +Module: main +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting 18B8.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:15:56] [INFO] [3/3] Decompiling func_800AFFBC (65 lines) + +============================================================ +Attempting to decompile: func_800AFFBC +============================================================ +Module: world +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) + +============================================================ +AGENT PROGRESS - 17:15:57 +============================================================ +Processed: 0 functions +Verified: 25/1281 (2.0%) +Decompiled: 0 +Needs Refine: 5 +Blocked: 650 +Failed: 153 +Todo: 448 +Batches: 2 +Builds: 0 +Rate: 0.00 functions/second +Elapsed: 0:00:07 +============================================================ + +[2026-04-22 17:15:57] [INFO] Processing batch of 3 functions +[2026-04-22 17:15:57] [INFO] [1/3] Decompiling func_800A5AD8 (53 lines) + +============================================================ +Attempting to decompile: func_800A5AD8 +============================================================ +Module: world +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:15:58] [INFO] [2/3] Decompiling func_800AB788 (47 lines) + +============================================================ +Attempting to decompile: func_800AB788 +============================================================ +Module: battle +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting battle.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:15:59] [INFO] [3/3] Decompiling func_800A0000 (55 lines) + +============================================================ +Attempting to decompile: func_800A0000 +============================================================ +Module: brom +Current status: todo +⚠️ Decompilation produced invalid output: Function 'func_800A0000' not found as a definition after decompilation (LLM may have renamed it) +🔄 Reverting brom.c to INCLUDE_ASM (keeping file clean) + +============================================================ +AGENT PROGRESS - 17:15:59 +============================================================ +Processed: 0 functions +Verified: 25/1281 (2.0%) +Decompiled: 0 +Needs Refine: 5 +Blocked: 653 +Failed: 153 +Todo: 445 +Batches: 3 +Builds: 0 +Rate: 0.00 functions/second +Elapsed: 0:00:10 +============================================================ + +[2026-04-22 17:16:00] [INFO] Processing batch of 3 functions +[2026-04-22 17:16:00] [INFO] [1/3] Decompiling func_800D4284 (62 lines) + +============================================================ +Attempting to decompile: func_800D4284 +============================================================ +Module: battle +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting battle2.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:01] [INFO] [2/3] Decompiling func_800BA938 (57 lines) + +============================================================ +Attempting to decompile: func_800BA938 +============================================================ +Module: world +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:02] [INFO] [3/3] Decompiling func_800B69A4 (47 lines) + +============================================================ +Attempting to decompile: func_800B69A4 +============================================================ +Module: world +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) + +============================================================ +AGENT PROGRESS - 17:16:03 +============================================================ +Processed: 0 functions +Verified: 25/1281 (2.0%) +Decompiled: 0 +Needs Refine: 5 +Blocked: 656 +Failed: 153 +Todo: 442 +Batches: 4 +Builds: 0 +Rate: 0.00 functions/second +Elapsed: 0:00:13 +============================================================ + +[2026-04-22 17:16:03] [INFO] Processing batch of 3 functions +[2026-04-22 17:16:03] [INFO] [1/3] Decompiling func_800C0254 (54 lines) + +============================================================ +Attempting to decompile: func_800C0254 +============================================================ +Module: battle +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting battle1.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:04] [INFO] [2/3] Decompiling func_800ADF38 (41 lines) + +============================================================ +Attempting to decompile: func_800ADF38 +============================================================ +Module: battle +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting battle.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:05] [INFO] [3/3] Decompiling func_800A4138 (50 lines) + +============================================================ +Attempting to decompile: func_800A4138 +============================================================ +Module: world +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) + +============================================================ +AGENT PROGRESS - 17:16:06 +============================================================ +Processed: 0 functions +Verified: 25/1281 (2.0%) +Decompiled: 0 +Needs Refine: 5 +Blocked: 659 +Failed: 153 +Todo: 439 +Batches: 5 +Builds: 0 +Rate: 0.00 functions/second +Elapsed: 0:00:16 +============================================================ + +[2026-04-22 17:16:07] [INFO] Processing batch of 3 functions +[2026-04-22 17:16:07] [INFO] [1/3] Decompiling func_800BFCAC (430 lines) + +============================================================ +Attempting to decompile: func_800BFCAC +============================================================ +Module: world +Current status: todo +⚠️ Decompilation produced invalid output: Function 'func_800BFCAC' not found as a definition after decompilation (LLM may have renamed it) +🔄 Reverting world2.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:07] [INFO] [2/3] Decompiling func_80035430 (45 lines) + +============================================================ +Attempting to decompile: func_80035430 +============================================================ +Module: main +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting psxsdk.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:08] [INFO] [3/3] Decompiling func_80028E00 (211 lines) + +============================================================ +Attempting to decompile: func_80028E00 +============================================================ +Module: main +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting 18B8.c to INCLUDE_ASM (keeping file clean) + +============================================================ +AGENT PROGRESS - 17:16:09 +============================================================ +Processed: 0 functions +Verified: 25/1281 (2.0%) +Decompiled: 0 +Needs Refine: 5 +Blocked: 662 +Failed: 153 +Todo: 436 +Batches: 6 +Builds: 0 +Rate: 0.00 functions/second +Elapsed: 0:00:19 +============================================================ + +[2026-04-22 17:16:09] [INFO] Processing batch of 3 functions +[2026-04-22 17:16:09] [INFO] [1/3] Decompiling func_80025174 (81 lines) + +============================================================ +Attempting to decompile: func_80025174 +============================================================ +Module: main +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting 18B8.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:10] [INFO] [2/3] Decompiling func_8002D410 (41 lines) + +============================================================ +Attempting to decompile: func_8002D410 +============================================================ +Module: main +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting akao.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:11] [INFO] [3/3] Decompiling func_8002D4A0 (41 lines) + +============================================================ +Attempting to decompile: func_8002D4A0 +============================================================ +Module: main +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting akao.c to INCLUDE_ASM (keeping file clean) + +============================================================ +AGENT PROGRESS - 17:16:11 +============================================================ +Processed: 0 functions +Verified: 25/1281 (2.0%) +Decompiled: 0 +Needs Refine: 5 +Blocked: 665 +Failed: 153 +Todo: 433 +Batches: 7 +Builds: 0 +Rate: 0.00 functions/second +Elapsed: 0:00:22 +============================================================ + +[2026-04-22 17:16:12] [INFO] Processing batch of 3 functions +[2026-04-22 17:16:12] [INFO] [1/3] Decompiling func_800A7F38 (79 lines) + +============================================================ +Attempting to decompile: func_800A7F38 +============================================================ +Module: world +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:13] [INFO] [2/3] Decompiling func_8002BB20 (44 lines) + +============================================================ +Attempting to decompile: func_8002BB20 +============================================================ +Module: main +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting akao.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:13] [INFO] [3/3] Decompiling func_800AC3C0 (57 lines) + +============================================================ +Attempting to decompile: func_800AC3C0 +============================================================ +Module: world +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) + +============================================================ +AGENT PROGRESS - 17:16:14 +============================================================ +Processed: 0 functions +Verified: 25/1281 (2.0%) +Decompiled: 0 +Needs Refine: 5 +Blocked: 668 +Failed: 153 +Todo: 430 +Batches: 8 +Builds: 0 +Rate: 0.00 functions/second +Elapsed: 0:00:24 +============================================================ + +[2026-04-22 17:16:14] [INFO] Processing batch of 3 functions +[2026-04-22 17:16:14] [INFO] [1/3] Decompiling func_800AE4B8 (69 lines) + +============================================================ +Attempting to decompile: func_800AE4B8 +============================================================ +Module: world +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:18] [INFO] [2/3] Decompiling func_80036190 (53 lines) + +============================================================ +Attempting to decompile: func_80036190 +============================================================ +Module: main +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting psxsdk.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:19] [INFO] [3/3] Decompiling func_800A76CC (52 lines) + +============================================================ +Attempting to decompile: func_800A76CC +============================================================ +Module: battle +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting battle.c to INCLUDE_ASM (keeping file clean) + +============================================================ +AGENT PROGRESS - 17:16:19 +============================================================ +Processed: 0 functions +Verified: 25/1281 (2.0%) +Decompiled: 0 +Needs Refine: 5 +Blocked: 671 +Failed: 153 +Todo: 427 +Batches: 9 +Builds: 0 +Rate: 0.00 functions/second +Elapsed: 0:00:30 +============================================================ + +[2026-04-22 17:16:20] [INFO] Processing batch of 3 functions +[2026-04-22 17:16:20] [INFO] [1/3] Decompiling func_80017678 (137 lines) + +============================================================ +Attempting to decompile: func_80017678 +============================================================ +Module: main +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting 18B8.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:21] [INFO] [2/3] Decompiling func_800C02F4 (354 lines) + +============================================================ +Attempting to decompile: func_800C02F4 +============================================================ +Module: world +Current status: todo +⚠️ Decompilation produced invalid output: Function 'func_800C02F4' not found as a definition after decompilation (LLM may have renamed it) +🔄 Reverting world2.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:21] [INFO] [3/3] Decompiling func_80036038 (57 lines) + +============================================================ +Attempting to decompile: func_80036038 +============================================================ +Module: main +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting psxsdk.c to INCLUDE_ASM (keeping file clean) + +============================================================ +AGENT PROGRESS - 17:16:22 +============================================================ +Processed: 0 functions +Verified: 25/1281 (2.0%) +Decompiled: 0 +Needs Refine: 5 +Blocked: 674 +Failed: 153 +Todo: 424 +Batches: 10 +Builds: 0 +Rate: 0.00 functions/second +Elapsed: 0:00:33 +============================================================ + +[2026-04-22 17:16:23] [INFO] Processing batch of 3 functions +[2026-04-22 17:16:23] [INFO] [1/3] Decompiling func_800A4860 (70 lines) + +============================================================ +Attempting to decompile: func_800A4860 +============================================================ +Module: battle +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting battle.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:24] [INFO] [2/3] Decompiling func_800B10AC (80 lines) + +============================================================ +Attempting to decompile: func_800B10AC +============================================================ +Module: world +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:24] [INFO] [3/3] Decompiling func_800BC338 (69 lines) + +============================================================ +Attempting to decompile: func_800BC338 +============================================================ +Module: field +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting field.c to INCLUDE_ASM (keeping file clean) + +============================================================ +AGENT PROGRESS - 17:16:25 +============================================================ +Processed: 0 functions +Verified: 25/1281 (2.0%) +Decompiled: 0 +Needs Refine: 5 +Blocked: 677 +Failed: 153 +Todo: 421 +Batches: 11 +Builds: 0 +Rate: 0.00 functions/second +Elapsed: 0:00:36 +============================================================ + +[2026-04-22 17:16:25] [INFO] Processing batch of 3 functions +[2026-04-22 17:16:25] [INFO] [1/3] Decompiling func_800D751C (110 lines) + +============================================================ +Attempting to decompile: func_800D751C +============================================================ +Module: battle +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting battle2.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:26] [INFO] [2/3] Decompiling func_800BB7DC (61 lines) + +============================================================ +Attempting to decompile: func_800BB7DC +============================================================ +Module: world +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:27] [INFO] [3/3] Decompiling func_800A5FB4 (89 lines) + +============================================================ +Attempting to decompile: func_800A5FB4 +============================================================ +Module: world +Current status: todo +⚠️ Decompilation produced invalid output: Function 'func_800A5FB4' not found as a definition after decompilation (LLM may have renamed it) +🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) + +============================================================ +AGENT PROGRESS - 17:16:27 +============================================================ +Processed: 0 functions +Verified: 25/1281 (2.0%) +Decompiled: 0 +Needs Refine: 5 +Blocked: 680 +Failed: 153 +Todo: 418 +Batches: 12 +Builds: 0 +Rate: 0.00 functions/second +Elapsed: 0:00:38 +============================================================ + +[2026-04-22 17:16:28] [INFO] Processing batch of 3 functions +[2026-04-22 17:16:28] [INFO] [1/3] Decompiling func_8002A7E8 (102 lines) + +============================================================ +Attempting to decompile: func_8002A7E8 +============================================================ +Module: main +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting akao.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:28] [INFO] [2/3] Decompiling func_800B69C0 (80 lines) + +============================================================ +Attempting to decompile: func_800B69C0 +============================================================ +Module: field +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting field.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:29] [INFO] [3/3] Decompiling func_800A4954 (85 lines) + +============================================================ +Attempting to decompile: func_800A4954 +============================================================ +Module: battle +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting battle.c to INCLUDE_ASM (keeping file clean) + +============================================================ +AGENT PROGRESS - 17:16:30 +============================================================ +Processed: 0 functions +Verified: 25/1281 (2.0%) +Decompiled: 0 +Needs Refine: 5 +Blocked: 683 +Failed: 153 +Todo: 415 +Batches: 13 +Builds: 0 +Rate: 0.00 functions/second +Elapsed: 0:00:40 +============================================================ + +[2026-04-22 17:16:30] [INFO] Processing batch of 3 functions +[2026-04-22 17:16:30] [INFO] [1/3] Decompiling func_800AAA00 (82 lines) + +============================================================ +Attempting to decompile: func_800AAA00 +============================================================ +Module: world +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:31] [INFO] [2/3] Decompiling func_800112E8 (111 lines) + +============================================================ +Attempting to decompile: func_800112E8 +============================================================ +Module: main +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting 18B8.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:32] [INFO] [3/3] Decompiling func_800BAA00 (96 lines) + +============================================================ +Attempting to decompile: func_800BAA00 +============================================================ +Module: world +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) + +============================================================ +AGENT PROGRESS - 17:16:32 +============================================================ +Processed: 0 functions +Verified: 25/1281 (2.0%) +Decompiled: 0 +Needs Refine: 5 +Blocked: 686 +Failed: 153 +Todo: 412 +Batches: 14 +Builds: 0 +Rate: 0.00 functions/second +Elapsed: 0:00:43 +============================================================ + +[2026-04-22 17:16:33] [INFO] Processing batch of 3 functions +[2026-04-22 17:16:33] [INFO] [1/3] Decompiling func_800D44E8 (81 lines) + +============================================================ +Attempting to decompile: func_800D44E8 +============================================================ +Module: battle +Current status: todo +⚠️ Decompilation produced invalid output: Function 'func_800D44E8' not found as a definition after decompilation (LLM may have renamed it) +🔄 Reverting battle2.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:34] [INFO] [2/3] Decompiling func_800AE954 (131 lines) + +============================================================ +Attempting to decompile: func_800AE954 +============================================================ +Module: battle +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting battle.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:34] [INFO] [3/3] Decompiling func_800C4814 (85 lines) + +============================================================ +Attempting to decompile: func_800C4814 +============================================================ +Module: battle +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting battle1.c to INCLUDE_ASM (keeping file clean) + +============================================================ +AGENT PROGRESS - 17:16:35 +============================================================ +Processed: 0 functions +Verified: 25/1281 (2.0%) +Decompiled: 0 +Needs Refine: 5 +Blocked: 689 +Failed: 153 +Todo: 409 +Batches: 15 +Builds: 0 +Rate: 0.00 functions/second +Elapsed: 0:00:46 +============================================================ + +[2026-04-22 17:16:36] [INFO] Processing batch of 3 functions +[2026-04-22 17:16:36] [INFO] [1/3] Decompiling func_800C3CA8 (86 lines) + +============================================================ +Attempting to decompile: func_800C3CA8 +============================================================ +Module: battle +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting battle1.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:37] [INFO] [2/3] Decompiling func_800B6B28 (96 lines) + +============================================================ +Attempting to decompile: func_800B6B28 +============================================================ +Module: world +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:37] [INFO] [3/3] Decompiling func_801D1C2C (87 lines) + +============================================================ +Attempting to decompile: func_801D1C2C +============================================================ +Module: menu +Current status: todo +✅ Decompilation successful! +[2026-04-22 17:16:38] [INFO] Running verification... + +============================================================ +VERIFYING DECOMPILED FUNCTIONS +============================================================ + +Found 1 decompiled function(s) to verify + +[1/1] Checking func_801D1C2C... + ✅ Matches + +============================================================ +VERIFICATION COMPLETE +============================================================ +✅ Verified: 1 +❌ Not matching: 0 +============================================================ + +[2026-04-22 17:16:39] [INFO] Verified 1 functions +[2026-04-22 17:16:39] [INFO] Refreshed decomp_decls.h + per-module decls: 360 declarations + +============================================================ +AGENT PROGRESS - 17:16:39 +============================================================ +Processed: 1 functions +Verified: 26/1281 (2.0%) +Decompiled: 0 +Needs Refine: 5 +Blocked: 691 +Failed: 153 +Todo: 406 +Batches: 16 +Builds: 0 +Rate: 0.02 functions/second +Elapsed: 0:00:49 +============================================================ + +[2026-04-22 17:16:39] [INFO] Processing batch of 3 functions +[2026-04-22 17:16:39] [INFO] [1/3] Decompiling func_800B0334 (100 lines) + +============================================================ +Attempting to decompile: func_800B0334 +============================================================ +Module: world +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:40] [INFO] [2/3] Decompiling func_800AEF68 (95 lines) + +============================================================ +Attempting to decompile: func_800AEF68 +============================================================ +Module: battle +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting battle.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:40] [INFO] [3/3] Decompiling func_800ABE58 (103 lines) + +============================================================ +Attempting to decompile: func_800ABE58 +============================================================ +Module: world +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) + +============================================================ +AGENT PROGRESS - 17:16:41 +============================================================ +Processed: 1 functions +Verified: 26/1281 (2.0%) +Decompiled: 0 +Needs Refine: 5 +Blocked: 694 +Failed: 153 +Todo: 403 +Batches: 17 +Builds: 0 +Rate: 0.02 functions/second +Elapsed: 0:00:52 +============================================================ + +[2026-04-22 17:16:42] [INFO] Processing batch of 3 functions +[2026-04-22 17:16:42] [INFO] [1/3] Decompiling func_8001CB48 (168 lines) + +============================================================ +Attempting to decompile: func_8001CB48 +============================================================ +Module: main +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting 18B8.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:42] [INFO] [2/3] Decompiling func_800B062C (100 lines) + +============================================================ +Attempting to decompile: func_800B062C +============================================================ +Module: battle +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting battle.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:43] [INFO] [3/3] Decompiling func_800A8A6C (150 lines) + +============================================================ +Attempting to decompile: func_800A8A6C +============================================================ +Module: battle +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting battle.c to INCLUDE_ASM (keeping file clean) + +============================================================ +AGENT PROGRESS - 17:16:44 +============================================================ +Processed: 1 functions +Verified: 26/1281 (2.0%) +Decompiled: 0 +Needs Refine: 5 +Blocked: 697 +Failed: 153 +Todo: 400 +Batches: 18 +Builds: 0 +Rate: 0.02 functions/second +Elapsed: 0:00:55 +============================================================ + +[2026-04-22 17:16:44] [INFO] Processing batch of 3 functions +[2026-04-22 17:16:44] [INFO] [1/3] Decompiling func_800AB6E4 (145 lines) + +============================================================ +Attempting to decompile: func_800AB6E4 +============================================================ +Module: world +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:45] [INFO] [2/3] Decompiling func_8001C5BC (139 lines) + +============================================================ +Attempting to decompile: func_8001C5BC +============================================================ +Module: main +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting 18B8.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:46] [INFO] [3/3] Decompiling func_800DDCE8 (111 lines) + +============================================================ +Attempting to decompile: func_800DDCE8 +============================================================ +Module: battle +Current status: todo +⚠️ Decompilation produced invalid output: Contains unknown parameter type '?' +📋 Soft error — keeping decompiled code, marking as needs_refine + +============================================================ +AGENT PROGRESS - 17:16:47 +============================================================ +Processed: 1 functions +Verified: 26/1281 (2.0%) +Decompiled: 0 +Needs Refine: 6 +Blocked: 699 +Failed: 153 +Todo: 397 +Batches: 19 +Builds: 0 +Rate: 0.02 functions/second +Elapsed: 0:00:57 +============================================================ + +[2026-04-22 17:16:47] [INFO] Processing batch of 3 functions +[2026-04-22 17:16:47] [INFO] [1/3] Decompiling func_80027990 (129 lines) + +============================================================ +Attempting to decompile: func_80027990 +============================================================ +Module: main +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting 18B8.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:48] [INFO] [2/3] Decompiling func_800AE8AC (113 lines) + +============================================================ +Attempting to decompile: func_800AE8AC +============================================================ +Module: world +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:48] [INFO] [3/3] Decompiling func_800A358C (139 lines) + +============================================================ +Attempting to decompile: func_800A358C +============================================================ +Module: ending +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting ending.c to INCLUDE_ASM (keeping file clean) + +============================================================ +AGENT PROGRESS - 17:16:49 +============================================================ +Processed: 1 functions +Verified: 26/1281 (2.0%) +Decompiled: 0 +Needs Refine: 6 +Blocked: 702 +Failed: 153 +Todo: 394 +Batches: 20 +Builds: 0 +Rate: 0.02 functions/second +Elapsed: 0:01:00 +============================================================ + +[2026-04-22 17:16:49] [INFO] Processing batch of 3 functions +[2026-04-22 17:16:49] [INFO] [1/3] Decompiling func_8002708C (187 lines) + +============================================================ +Attempting to decompile: func_8002708C +============================================================ +Module: main +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting 18B8.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:53] [INFO] [2/3] Decompiling func_800A86C4 (124 lines) + +============================================================ +Attempting to decompile: func_800A86C4 +============================================================ +Module: world +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:54] [INFO] [3/3] Decompiling func_800A2504 (150 lines) + +============================================================ +Attempting to decompile: func_800A2504 +============================================================ +Module: ending +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting ending.c to INCLUDE_ASM (keeping file clean) + +============================================================ +AGENT PROGRESS - 17:16:54 +============================================================ +Processed: 1 functions +Verified: 26/1281 (2.0%) +Decompiled: 0 +Needs Refine: 6 +Blocked: 705 +Failed: 153 +Todo: 391 +Batches: 21 +Builds: 0 +Rate: 0.02 functions/second +Elapsed: 0:01:05 +============================================================ + +[2026-04-22 17:16:55] [INFO] Processing batch of 3 functions +[2026-04-22 17:16:55] [INFO] [1/3] Decompiling func_800B04AC (127 lines) + +============================================================ +Attempting to decompile: func_800B04AC +============================================================ +Module: world +Current status: todo +[2026-04-22 17:16:55] [ERROR] Error processing func_800B04AC: [Errno 32] Broken pipe +[2026-04-22 17:16:55] [INFO] [2/3] Decompiling func_800AE080 (125 lines) + +============================================================ +Attempting to decompile: func_800AE080 +============================================================ +Module: battle +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting battle.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:56] [INFO] [3/3] Decompiling func_800AB480 (139 lines) + +============================================================ +Attempting to decompile: func_800AB480 +============================================================ +Module: battle +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting battle.c to INCLUDE_ASM (keeping file clean) + +============================================================ +AGENT PROGRESS - 17:16:57 +============================================================ +Processed: 1 functions +Verified: 26/1281 (2.0%) +Decompiled: 0 +Needs Refine: 6 +Blocked: 707 +Failed: 153 +Todo: 388 +Batches: 22 +Builds: 0 +Rate: 0.01 functions/second +Elapsed: 0:01:08 +============================================================ + +[2026-04-22 17:16:58] [INFO] Processing batch of 3 functions +[2026-04-22 17:16:58] [INFO] [1/3] Decompiling func_800AD0FC (152 lines) + +============================================================ +Attempting to decompile: func_800AD0FC +============================================================ +Module: battle +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting battle.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:58] [INFO] [2/3] Decompiling func_800C7924 (154 lines) + +============================================================ +Attempting to decompile: func_800C7924 +============================================================ +Module: battle +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting battle1.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:16:59] [INFO] [3/3] Decompiling func_800B98F0 (155 lines) + +============================================================ +Attempting to decompile: func_800B98F0 +============================================================ +Module: world +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) + +============================================================ +AGENT PROGRESS - 17:17:00 +============================================================ +Processed: 1 functions +Verified: 26/1281 (2.0%) +Decompiled: 0 +Needs Refine: 6 +Blocked: 710 +Failed: 153 +Todo: 385 +Batches: 23 +Builds: 0 +Rate: 0.01 functions/second +Elapsed: 0:01:11 +============================================================ + +[2026-04-22 17:17:00] [INFO] Processing batch of 3 functions +[2026-04-22 17:17:00] [INFO] [1/3] Decompiling func_80029114 (184 lines) + +============================================================ +Attempting to decompile: func_80029114 +============================================================ +Module: main +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting 18B8.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:17:02] [INFO] [2/3] Decompiling func_800B87D8 (144 lines) + +============================================================ +Attempting to decompile: func_800B87D8 +============================================================ +Module: world +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:17:03] [INFO] [3/3] Decompiling func_800BFB88 (139 lines) + +============================================================ +Attempting to decompile: func_800BFB88 +============================================================ +Module: battle +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting battle1.c to INCLUDE_ASM (keeping file clean) + +============================================================ +AGENT PROGRESS - 17:17:03 +============================================================ +Processed: 1 functions +Verified: 26/1281 (2.0%) +Decompiled: 0 +Needs Refine: 6 +Blocked: 713 +Failed: 153 +Todo: 382 +Batches: 24 +Builds: 0 +Rate: 0.01 functions/second +Elapsed: 0:01:14 +============================================================ + +[2026-04-22 17:17:04] [INFO] Processing batch of 3 functions +[2026-04-22 17:17:04] [INFO] [1/3] Decompiling func_80026C5C (198 lines) + +============================================================ +Attempting to decompile: func_80026C5C +============================================================ +Module: main +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting 18B8.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:17:05] [INFO] [2/3] Decompiling func_800B39B4 (170 lines) + +============================================================ +Attempting to decompile: func_800B39B4 +============================================================ +Module: world +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:17:05] [INFO] [3/3] Decompiling func_80028930 (224 lines) + +============================================================ +Attempting to decompile: func_80028930 +============================================================ +Module: main +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting 18B8.c to INCLUDE_ASM (keeping file clean) + +============================================================ +AGENT PROGRESS - 17:17:06 +============================================================ +Processed: 1 functions +Verified: 26/1281 (2.0%) +Decompiled: 0 +Needs Refine: 6 +Blocked: 716 +Failed: 153 +Todo: 379 +Batches: 25 +Builds: 0 +Rate: 0.01 functions/second +Elapsed: 0:01:17 +============================================================ + +[2026-04-22 17:17:06] [INFO] Processing batch of 3 functions +[2026-04-22 17:17:06] [INFO] [1/3] Decompiling func_800285AC (229 lines) + +============================================================ +Attempting to decompile: func_800285AC +============================================================ +Module: main +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting 18B8.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:17:07] [INFO] [2/3] Decompiling func_800A4268 (149 lines) + +============================================================ +Attempting to decompile: func_800A4268 +============================================================ +Module: world +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) +[2026-04-22 17:17:08] [INFO] [3/3] Decompiling func_80014E74 (180 lines) + +============================================================ +Attempting to decompile: func_80014E74 +============================================================ +Module: main +Current status: todo +⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) +🔄 Reverting 18B8.c to INCLUDE_ASM (keeping file clean) + + +❌ Fatal error: [Errno 32] Broken pipe +Exception ignored in: <__main__._TeeOutput object at 0x7e29f695ea50>Exception ignored in sys.unraisablehook: \ No newline at end of file diff --git a/automation/agent.py b/automation/agent.py new file mode 100755 index 0000000..db68c6b --- /dev/null +++ b/automation/agent.py @@ -0,0 +1,2624 @@ +#!/usr/bin/env python3 +""" +Autonomous Decompilation Agent + +Orchestrates the full decompilation workflow: +1. Discover functions from priority queue +2. Decompile functions automatically +3. Periodically verify with builds +4. Retry failed functions with different strategies +5. Monitor progress and adapt + +Usage: + # Basic usage + python agent.py --run # Start the agent + python agent.py --status # Show current statistics + python agent.py --verify-needs-refine # Promote fixed needs_refine functions to verified + + # Time and target limits + python agent.py --run --duration 3600 # Run for 1 hour + python agent.py --run --target 100 # Stop after 100 functions + python agent.py --run --target-percent 25.0 # Stop at 25% completion + + # Batch processing and intervals + python agent.py --run --batch 20 # Process 20 functions at a time + python agent.py --run --batch 20 --parallel 4 # Decompile 4 functions in parallel + python agent.py --run --verify-interval 30 # Verify every 30 functions + python agent.py --run --build-interval 100 # Full build every 100 functions + + # Module and size filtering + python agent.py --run --module battle # Only process battle module + python agent.py --run --max-lines 50 # Skip functions >50 lines + + # LLM-assisted decompilation (requires Ollama) + python agent.py --run --llm # Enable LLM analysis + python agent.py --run --llm --llm-threshold 30 # Analyze functions ≥30 lines + python agent.py --run --llm --llm-auto-fix # Enable automatic LLM fixing + python agent.py --run --llm --llm-model qwen2.5-coder:7b # Specify LLM model + + # Dependency-aware scheduling (enabled by default) + python agent.py --run --dependency-weight 0.7 # Prioritize resolved dependencies + python agent.py --run --no-dependency-analysis # Disable dependency analysis + + # Combined examples (recommended) + python agent.py --run --duration 28800 --batch 20 --parallel 4 --verbose + python agent.py --run --batch 20 --parallel 4 --retry-blocked --target 500 + python agent.py --run --module world --target 50 --llm --llm-auto-fix + python agent.py --run --target-percent 30.0 --batch 25 --llm --dependency-weight 0.8 + + # Review LLM-fixed functions + python review_llm_fixes.py --list # List functions needing review + python review_llm_fixes.py --promote func_800A1234 # Approve after manual review +""" + +import argparse +import sys +import time +import signal +import re +import os +from pathlib import Path +from datetime import datetime, timedelta +from typing import Optional, Dict, List +import json +from multiprocessing import Pool, cpu_count, Manager +from functools import partial + +from database import DecompDatabase +from decompile import DecompilationRunner +from build import BuildVerifier +from dependency_analyzer import DependencyAnalyzer +from generate_decls import generate as generate_decls +from discover import populate_rank_scores + +try: + from fix_existing_errors import TypeErrorFixer + TYPE_FIXER_AVAILABLE = True +except ImportError: + TYPE_FIXER_AVAILABLE = False + TypeErrorFixer = None + +# Optional LLM support +try: + from llm_helper import LLMHelper + LLM_AVAILABLE = True +except ImportError: + LLM_AVAILABLE = False + LLMHelper = None + + +class _TeeOutput: + """Splits writes to both the original stream and a log file.""" + + def __init__(self, stream, filepath: str): + self._stream = stream + self._file = open(filepath, 'a', buffering=1) # line-buffered + + def write(self, data: str) -> int: + self._stream.write(data) + self._file.write(data) + return len(data) + + def flush(self): + self._stream.flush() + self._file.flush() + + def fileno(self): + return self._stream.fileno() + + def isatty(self) -> bool: + return self._stream.isatty() + + @property + def encoding(self): + return self._stream.encoding + + @property + def errors(self): + return self._stream.errors + + +# Module-level lock dictionary for file-level mutual exclusion +_file_locks = None + +# Module-level worker function for parallel processing (must be picklable) +def _parallel_decompile_worker(data: Dict) -> Dict: + """ + Worker function for parallel decompilation. + Each process gets its own database connection. + Uses file-level locking to prevent race conditions. + + Args: + data: Dict with keys 'func', 'project_root', 'fix_structs', 'verbose', 'db_path', 'file_lock' (optional) + + Returns: + Dict with 'success' bool and 'error' string (if failed) + """ + func = data['func'] + func_name = func['name'] + project_root = Path(data['project_root']) + fix_structs = data['fix_structs'] + strict_validation = data.get('strict_validation', False) + verbose = data['verbose'] + db_path = data['db_path'] + c_file = func.get('c_file_path', 'unknown') + + # Reset signal handlers in worker processes so only the main process + # handles shutdown signals. Child processes inherit handlers on fork, + # which caused the worker processes to print the agent's handler and + # set their own `should_stop` state multiple times. + try: + import signal as _signal + _signal.signal(_signal.SIGINT, _signal.SIG_DFL) + _signal.signal(_signal.SIGTERM, _signal.SIG_DFL) + _signal.signal(_signal.SIGHUP, _signal.SIG_DFL) + except Exception: + pass + # Acquire file lock if provided (prevents concurrent modification of same C file) + file_lock = data.get('file_lock') + if file_lock: + if verbose: + print(f" [{func_name}] Acquiring lock for {c_file}...") + file_lock.acquire() + if verbose: + print(f" [{func_name}] Lock acquired for {c_file}") + + try: + # Each worker needs its own database connection (SQLite is not thread-safe) + db = DecompDatabase(db_path) + + # Each worker creates its own LLMHelper via enable_llm_fixes so the + # runner-level auto-fix (void*/struct errors etc.) fires per-worker. + # The main process's pre-analysis LLM pass is separate and runs after. + enable_llm = data.get('enable_llm_fixes', False) + + # Create a minimal runner for this worker + runner = DecompilationRunner( + db, + verbose=verbose, + enable_llm_fixes=enable_llm, + build_verifier=None, + fix_structs=fix_structs, + strict_validation=strict_validation, + ) + + success = runner.decompile_function(func_name) + + # Close database connection before releasing lock + db.conn.close() + + if success: + return {'success': True} + else: + return {'success': False, 'error': 'Decompilation failed'} + except Exception as e: + return {'success': False, 'error': str(e)} + finally: + # Always release lock + if file_lock: + file_lock.release() + if verbose: + print(f" [{func_name}] Lock released for {c_file}") + + +class AgentConfig: + """Configuration for the decompilation agent.""" + + def __init__(self): + # Batch processing + self.batch_size = 10 + self.min_batch_size = 1 + self.max_batch_size = 50 + + # Build verification + self.verify_interval = 20 # Verify every N functions + self.full_build_interval = 10 # Full build every N functions (kept low; per-file compile checks handle most errors) + + # Retry logic + self.max_retries = 5 + self.retry_failed_after = 50 # Retry failed after N successful + + # Time limits + self.max_duration = None # seconds (None = unlimited) + self.max_idle_time = 600 # Stop if no progress for 5 minutes + + # Targets + self.target_count = None # Stop after N functions (None = unlimited) + self.target_progress = None # Stop at percentage (None = unlimited) + + # Filtering + self.module_filter = None # Only process specific module + self.max_function_lines = None # Skip functions larger than N lines + + # LLM assistance + self.use_llm = False # Enable LLM-assisted decompilation + self.llm_analyze_threshold = 20 # Analyze functions >= N lines with LLM + self.llm_model = "qwen2.5-coder:7b" + self.llm_auto_fix = True # Enable automatic LLM fixing of m2c errors + self.fix_structs = True # Pass --fix-structs to mako.sh dec (replaces D_8009XXXX with Savemap fields) + self.strict_validation = False # When True use only base soft errors; revert '?' type artifacts + + # Retry behaviour + self.retry_blocked = True # Retry blocked functions when queue is empty + self.force_retry_blocked = False # Bypass smart filter and retry all blocked (use after adding type defs) + self.retry_verified = True # Re-check verified/decompiled that still have INCLUDE_ASM (false positives) + + # Dependency-aware scheduling + self.use_dependency_analysis = True # Prioritize functions with resolved dependencies + self.dependency_weight = 0.8 # How much to weight dependency score vs line count (0-1) + self.blocker_multiplier = 2.0 # Per-dependent bonus added to agent-level score + self.strict_dependency_ordering = True # Only decompile when all in-DB callees are resolved + self.filter_cross_module_unresolved = False # Skip functions whose cross-module callees are not yet decompiled + + # Performance + self.pause_between_batches = 0 # seconds + self.pause_on_error = 0 # seconds + self.parallel_workers = 2 # Number of parallel decompilation workers (1 = sequential) + + # Logging + self.verbose = True + self.log_file = "agent.log" + + +class DecompilationAgent: + """Autonomous agent for decompilation workflow.""" + + def __init__(self, config: AgentConfig): + self.config = config + self.db = DecompDatabase() + self.verifier = BuildVerifier(self.db, verbose=config.verbose) + self.runner = DecompilationRunner( + self.db, + verbose=config.verbose, + enable_llm_fixes=config.llm_auto_fix, + build_verifier=self.verifier, + fix_structs=config.fix_structs, + strict_validation=config.strict_validation, + ) + + # Dependency analysis + self.dep_analyzer = None + if config.use_dependency_analysis: + self.dep_analyzer = DependencyAnalyzer( + Path.cwd().parent if Path.cwd().name == 'automation' else Path.cwd(), + blocker_multiplier=int(config.blocker_multiplier), + ) + self._log("Dependency analysis enabled - building call graph...") + + # Build global call graph (analyze all modules for cross-module dependencies) + # This takes <1 second for all 3500+ functions + self.dep_analyzer.build_call_graph(None) # None = all modules + stats = self.dep_analyzer.get_statistics() + self._log(f" Analyzed {stats['total_functions']} functions across all modules") + self._log(f" {stats['leaf_functions']} leaf functions ({stats['leaf_functions']/stats['total_functions']*100:.1f}%)") + self._log(f" Most depended on: {stats['most_depended_on']} ({stats['most_depended_count']} dependents)") + + if config.module_filter: + self._log(f" Will prioritize functions from module '{config.module_filter}' with resolved dependencies") + + # LLM support + self.llm = None + if config.use_llm and LLM_AVAILABLE: + self.llm = LLMHelper(model=config.llm_model, verbose=config.verbose) + if not self.llm.available: + self._log("LLM requested but not available, continuing without it", "WARN") + self.llm = None + # Post-run LLM pass controls + self.config.llm_post_pass = getattr(self.config, 'llm_post_pass', True) + self.config.llm_post_pass_limit = getattr(self.config, 'llm_post_pass_limit', 200) + + # Statistics + self.stats = { + 'functions_processed': 0, + 'functions_verified': 0, + 'functions_failed': 0, + 'functions_analyzed_by_llm': 0, + 'batches_completed': 0, + 'builds_run': 0, + 'start_time': None, + 'last_progress_time': None, + 'errors': [] + } + + # Control flags + self.should_stop = False + self.paused = False + # Count of shutdown signals received to allow forced exit on repeated SIGINT + self._shutdown_signal_count = 0 + + # Retry-round progress tracking: + # _retry_round: how many retry cycles have been triggered (0 = none yet) + # _retry_progress_since_last_retry: successes+needs_refine since last retry + # A retry cycle is only attempted if the previous one produced progress. + self._retry_round = 0 + self._retry_progress_since_last_retry = 0 + + # Setup signal handlers + signal.signal(signal.SIGINT, self._signal_handler) + signal.signal(signal.SIGTERM, self._signal_handler) + + def _signal_handler(self, signum, frame): + """Handle shutdown signals gracefully.""" + # First signal: request graceful stop. Second signal: force immediate exit. + self._shutdown_signal_count += 1 + print("\n\n🛑 Received shutdown signal, stopping gracefully...") + if self._shutdown_signal_count > 1: + print("🧨 Received multiple shutdown signals — forcing exit now.") + import os + os._exit(1) + self.should_stop = True + + def _log(self, message: str, level: str = "INFO"): + """Log message to console and file.""" + timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + log_line = f"[{timestamp}] [{level}] {message}" + print(log_line) + + def _check_stop_conditions(self) -> bool: + """Check if any stop conditions are met.""" + # Manual stop + if self.should_stop: + self._log("Manual stop requested", "INFO") + return True + + # Duration limit + if self.config.max_duration: + elapsed = time.time() - self.stats['start_time'] + if elapsed >= self.config.max_duration: + self._log(f"Duration limit reached ({self.config.max_duration}s)", "INFO") + return True + + # Target count + if self.config.target_count: + if self.stats['functions_processed'] >= self.config.target_count: + self._log(f"Target count reached ({self.config.target_count})", "INFO") + return True + + # Target progress + if self.config.target_progress: + stats = self.db.get_statistics() + total = stats['total'] + verified = stats['by_status'].get('verified', 0) + progress = (verified / total * 100) if total > 0 else 0 + if progress >= self.config.target_progress: + self._log(f"Target progress reached ({self.config.target_progress}%)", "INFO") + return True + + # Idle timeout + if self.config.max_idle_time and self.stats['last_progress_time']: + idle_time = time.time() - self.stats['last_progress_time'] + if idle_time >= self.config.max_idle_time: + self._log(f"No progress for {self.config.max_idle_time}s, stopping", "WARN") + return True + + return False + + def _get_available_asm_modules(self) -> set: + """Return the set of module names that have ASM files extracted on disk.""" + project_root = Path(__file__).parent.parent + asm_root = project_root / 'asm' / 'us' + if not asm_root.is_dir(): + return set() + return {child.name for child in asm_root.iterdir() if child.is_dir()} + + def _get_next_batch(self) -> List[Dict]: + """Get next batch of functions to process, prioritizing based on dependencies.""" + available_modules = self._get_available_asm_modules() + + # In strict ordering mode we need all TODO functions so we can find every + # "ready" one, regardless of line count. Otherwise the small fetch window + # could miss ready large functions and keep picking not-ready small ones. + # When dep_analyzer is active (even in soft-scoring mode) we also fetch all + # candidates so that high-blocker large functions are never excluded from + # the scoring window by the line_count ASC pre-sort. + strict = self.dep_analyzer and self.config.strict_dependency_ordering + candidate_limit = None if (strict or self.dep_analyzer) else self.config.batch_size + + if self.config.module_filter: + project_root = Path(__file__).parent.parent + functions = self.db.get_functions_by_status( + 'todo', + limit=candidate_limit, + module=self.config.module_filter, + order_by='difficulty_score' + ) + functions = [ + f for f in functions + if not f.get('asm_file_path') or (project_root / f['asm_file_path']).exists() + ] + elif available_modules: + cursor = self.db.conn.cursor() + placeholders = ','.join('?' * len(available_modules)) + limit_clause = f"LIMIT {candidate_limit}" if candidate_limit else "" + cursor.execute( + f"SELECT id, name, c_file_path, asm_file_path, module, status, " + f"difficulty_score, line_count, attempt_count, notes " + f"FROM functions WHERE status='todo' AND module IN ({placeholders}) " + f"ORDER BY CASE WHEN difficulty_score IS NULL THEN 1 ELSE 0 END ASC, " + f"difficulty_score ASC, line_count ASC {limit_clause}", + tuple(sorted(available_modules)) + ) + functions = [dict(row) for row in cursor.fetchall()] + else: + functions = self.db.get_functions_by_status( + 'todo', limit=candidate_limit, order_by='difficulty_score' + ) + + if self.config.max_function_lines: + functions = [f for f in functions + if f['line_count'] <= self.config.max_function_lines] + + if not (self.dep_analyzer and functions): + return functions[:self.config.batch_size] + + # ---------------------------------------------------------------- + # Build resolved / db_funcs sets used by both code paths below + # ---------------------------------------------------------------- + cursor = self.db.conn.cursor() + + # "resolved" = functions whose C body is already concrete in the source file, + # so m2c can read their signatures from the preprocessed context. + cursor.execute(""" + SELECT name FROM functions + WHERE status IN ('decompiled', 'verified', 'decompiled_needs_refine', 'sdk_excluded') + """) + resolved_funcs = {row['name'] for row in cursor} + + # All DB-tracked names (used to distinguish in-scope vs SDK/extern callees) + cursor.execute("SELECT name, c_file_path FROM functions") + func_to_c_file: Dict[str, str] = {} + db_funcs: set = set() + for row in cursor: + db_funcs.add(row['name']) + if row['c_file_path']: + func_to_c_file[row['name']] = row['c_file_path'] + + # For scoring, use the narrower decompiled+verified set + decompiled_funcs = resolved_funcs - self._get_sdk_excluded_cache() + + known_types = self.db.get_all_known_types(min_confidence=0.3) + if self.config.verbose and known_types: + self._log(f"\n📚 Struct learning database: {len(known_types)} known types") + + def _score(func): + dep_score = self.dep_analyzer.compute_type_aware_score( + func['name'], decompiled_funcs, known_types, + c_file_path=func.get('c_file_path') + ) + simplicity = 100.0 * (1.0 - min(func['line_count'], 200) / 200.0) + w = self.config.dependency_weight + # Extra blocker bonus: reward functions that directly unblock many + # callers, visible at the agent level independently of dep_score scaling. + blocker_count = len(self.dep_analyzer.called_by.get(func['name'], set())) + blocker_bonus = blocker_count * self.config.blocker_multiplier + return (w * dep_score) + ((1 - w) * simplicity) + blocker_bonus + + if strict: + # Partition: ready (all same-file callees resolved) vs waiting. + # When --filter-cross-module is set, cross-file callees are also + # checked, ensuring m2c never sees an unresolved cross-module callee. + check_cross = self.config.filter_cross_module_unresolved + ready_names = set(self.dep_analyzer.get_ready_functions( + [f['name'] for f in functions], resolved_funcs, db_funcs, + func_to_c_file=func_to_c_file, + check_cross_file=check_cross, + )) + ready = [f for f in functions if f['name'] in ready_names] + waiting = [f for f in functions if f['name'] not in ready_names] + + if self.config.verbose: + label = "cross-module-filtered" if check_cross else "strict" + self._log( + f" {label.capitalize()} ordering: {len(ready)} ready, " + f"{len(waiting)} waiting on unresolved callees" + ) + + ready.sort(key=lambda f: -_score(f)) + + if len(ready) >= self.config.batch_size: + functions = ready[:self.config.batch_size] + elif ready: + if check_cross: + # Never mix in unresolved-cross-module functions + functions = ready + if self.config.verbose: + self._log( + f" Cross-module filter: {len(ready)} fully-ready " + f"(not padding with unresolved)" + ) + else: + # Fill remainder with fewest-unresolved waiting functions + waiting.sort(key=lambda f: len( + self.dep_analyzer.get_unresolved_dependencies(f['name'], resolved_funcs) + )) + needed = self.config.batch_size - len(ready) + functions = ready + waiting[:needed] + if self.config.verbose: + self._log( + f" Strict ordering: only {len(ready)} fully-ready; " + f"adding {needed} lowest-unresolved waiting functions" + ) + else: + if check_cross: + # No cross-module-clean functions available — return empty so + # the main loop can try blocked/needs-refine queues instead. + if self.config.verbose: + self._log( + " Cross-module filter: no fully-ready functions; " + "returning empty batch" + ) + return [] + else: + # No ready functions — process fewest-unresolved first + waiting.sort(key=lambda f: len( + self.dep_analyzer.get_unresolved_dependencies(f['name'], resolved_funcs) + )) + functions = waiting[:self.config.batch_size] + if self.config.verbose: + self._log( + f" Strict ordering: no fully-ready functions; " + f"using fewest-unresolved fallback" + ) + else: + # Original soft-scoring path + scored = [(f, _score(f)) for f in functions] + scored.sort(key=lambda x: -x[1]) + + if self.config.verbose and scored: + self._log(f"\nTop candidates (dep_weight={self.config.dependency_weight:.1f}):") + for func, combined in scored[:5]: + unresolved = len(self.dep_analyzer.get_unresolved_dependencies( + func['name'], decompiled_funcs)) + self._log( + f" {func['name']}: score={combined:.1f}, " + f"lines={func['line_count']}, unresolved={unresolved}" + ) + + functions = [f for f, _ in scored[:self.config.batch_size]] + + return functions + + def _get_sdk_excluded_cache(self) -> set: + """Return the current set of sdk_excluded function names (fresh per call).""" + cursor = self.db.conn.cursor() + cursor.execute("SELECT name FROM functions WHERE status='sdk_excluded'") + return {row['name'] for row in cursor} + + def _llm_preanalyze(self, func: Dict) -> Optional[Dict]: + """Use LLM to analyze function before decompilation.""" + if not self.llm: + return None + + # Only analyze if function meets threshold + if func['line_count'] < self.config.llm_analyze_threshold: + return None + + self._log(f" ⚙️ Analyzing with LLM ({func['line_count']} lines)...") + + try: + analysis = self.llm.analyze_assembly(func['name']) + if analysis: + self.stats['functions_analyzed_by_llm'] += 1 + self._log(f" 📊 Complexity: {analysis['complexity']}, Summary: {analysis['summary'][:80]}...") + + # Store full analysis in database notes as JSON for later retrieval + import json + notes = json.dumps({ + 'llm_analysis': { + 'complexity': analysis['complexity'], + 'summary': analysis['summary'][:200], + 'c_suggestion': analysis.get('c_suggestion', '')[:500] if analysis.get('c_suggestion') else None, + 'patterns': analysis.get('patterns', []) + } + }) + self.db.update_function_status(func['name'], func['status'], notes=notes) + + return analysis + except Exception as e: + self._log(f" ⚠️ LLM analysis failed: {e}", "WARN") + + return None + + def _process_batch(self, functions: List[Dict]) -> Dict: + """Process a batch of functions.""" + if not functions: + return {'success': 0, 'failed': 0} + + # Use parallel processing if enabled. + # LLM pre-analysis (--llm flag) cannot run inside parallel worker processes + # (spawned without LLM runner to avoid concurrent Ollama calls and pickle + # limitations). Force sequential execution when --llm is on so every function + # gets the full pre-analysis + auto-fix pipeline. + # Note: runner-level auto-fix (llm_auto_fix) already works sequentially inside + # each worker via decompile.py, so no sequential forcing is needed for that. + llm_preanalysis_active = self.config.use_llm and self.llm is not None + if self.config.parallel_workers > 1 and not llm_preanalysis_active: + return self._process_batch_parallel(functions) + elif self.config.parallel_workers > 1 and llm_preanalysis_active: + self._log("LLM pre-analysis enabled (--llm) — running sequentially to allow per-function LLM patching", "INFO") + + self._log(f"Processing batch of {len(functions)} functions", "INFO") + + success_count = 0 + failed_count = 0 + + # Create one TypeErrorFixer for the whole batch if LLM auto-fix is on + post_fixer = None + if self.llm and self.config.llm_auto_fix and TYPE_FIXER_AVAILABLE: + try: + post_fixer = TypeErrorFixer(model=self.config.llm_model, verbose=self.config.verbose) + except SystemExit: + self._log("TypeErrorFixer: LLM not available, post-decompile error fixing disabled", "WARN") + + project_root = Path(__file__).parent.parent + + for i, func in enumerate(functions, 1): + if self._check_stop_conditions(): + break + + func_name = func['name'] + self._log(f"[{i}/{len(functions)}] Decompiling {func_name} ({func['line_count']} lines)") + + try: + # Run optional LLM pre-analysis (may store notes + increment counter) + if self.llm: + try: + self._llm_preanalyze(func) + except Exception as e: + self._log(f" ⚠️ LLM pre-analysis failed: {e}", "WARN") + + success = self.runner.decompile_function(func_name) + + if success: + success_count += 1 + self.stats['functions_processed'] += 1 + self.stats['last_progress_time'] = time.time() + + # Immediately check and fix compilation errors in this file, + # but ONLY if errors fall within the newly-decompiled function. + # Pre-existing errors in other functions in the same file are + # intentionally ignored here to avoid wasted LLM calls. + if post_fixer is not None: + c_file = func.get('c_file_path') + if c_file: + full_path = project_root / c_file + if full_path.exists(): + try: + errors = post_fixer.get_compilation_errors(str(full_path)) + if errors: + # Find the line range of the newly-decompiled function + all_funcs = post_fixer.discover_functions_in_file(str(full_path)) + func_range = next( + ((s, e) for n, s, e in all_funcs if n == func_name), None) + if func_range is not None: + func_errors = [err for err in errors + if func_range[0] <= err['line'] <= func_range[1]] + else: + func_errors = [] + if func_errors: + self._log( + f" {func_name}: {len(func_errors)} compilation error(s) after decompile, fixing...", + "INFO" + ) + n = post_fixer.fix_file(str(full_path), max_functions=1, + max_passes=2, target_function=func_name) + if n > 0: + self._log(f" {func_name}: fixed {n} function(s)", "INFO") + else: + self._log( + f" {func_name}: {len(errors)} pre-existing error(s) elsewhere in file, skipping LLM fix", + "INFO" + ) + except Exception as e: + self._log(f" Post-decompile error fix failed for {func_name}: {e}", "WARN") + else: + failed_count += 1 + self.stats['functions_failed'] += 1 + + except Exception as e: + self._log(f"Error processing {func_name}: {e}", "ERROR") + self.stats['errors'].append({ + 'function': func_name, + 'error': str(e), + 'time': datetime.now().isoformat() + }) + failed_count += 1 + + self.stats['batches_completed'] += 1 + + return {'success': success_count, 'failed': failed_count} + + def _process_batch_parallel(self, functions: List[Dict]) -> Dict: + """Process a batch of functions in parallel, with per-file locking to prevent race conditions.""" + if not functions: + return {'success': 0, 'failed': 0} + + # Group functions by C file + functions_by_file = {} + for func in functions: + c_file = func.get('c_file_path', 'unknown') + if c_file not in functions_by_file: + functions_by_file[c_file] = [] + functions_by_file[c_file].append(func) + + num_workers = min(self.config.parallel_workers, len(functions), cpu_count()) + self._log(f"Processing {len(functions)} functions from {len(functions_by_file)} files with {num_workers} parallel workers (file-level locking enabled)", "INFO") + + # Create locks for each file using Manager (shared across processes) + with Manager() as manager: + file_locks = {c_file: manager.Lock() for c_file in functions_by_file.keys()} + + # Prepare data for workers + project_root = Path(__file__).parent.parent + worker_data = [] + for func in functions: + c_file = func.get('c_file_path', 'unknown') + worker_data.append({ + 'func': func, + 'project_root': str(project_root), + 'fix_structs': self.config.fix_structs, + 'strict_validation': self.config.strict_validation, + 'verbose': self.config.verbose, + 'db_path': self.db.db_path, + 'file_lock': file_locks.get(c_file), # Pass lock for this file + 'enable_llm_fixes': self.config.llm_auto_fix, # Enable runner-level LLM auto-fix + }) + + # Run decompilations in parallel with file-level mutual exclusion + with Pool(processes=num_workers) as pool: + results = pool.map(_parallel_decompile_worker, worker_data) + + # Process results + success_count = 0 + failed_count = 0 + needs_refine_count = 0 + + for i, (func, result) in enumerate(zip(functions, results), 1): + func_name = func['name'] + + if result['success']: + success_count += 1 + self.stats['functions_processed'] += 1 + self.stats['last_progress_time'] = time.time() + self._log(f"[{i}/{len(functions)}] ✅ {func_name} ({func['line_count']} lines)", "INFO") + else: + failed_count += 1 + self.stats['functions_failed'] += 1 + error_msg = result.get('error', 'Unknown error') + self._log(f"[{i}/{len(functions)}] ❌ {func_name}: {error_msg}", "WARN") + self.stats['errors'].append({ + 'function': func_name, + 'error': error_msg, + 'time': datetime.now().isoformat() + }) + + # Post-parallel PSY-Q compile gate. + # Workers run without build_verifier (the subprocess-based checker cannot be + # pickled for inter-process use), so text-validated functions that contain + # m2c artifacts that the text checks miss (e.g. `.unk-N`, `(?** )` casts, + # `*(void*)lval =` writes) are caught here instead. + # For each C file that had at least one success, compile the whole file once. + # If it fails, downgrade every newly-decompiled function in that file to + # 'decompiled_needs_refine' so the LLM fixer or manual review can handle them. + files_with_successes: Dict[str, list] = {} + for func, result in zip(functions, results): + if result['success']: + c_file = func.get('c_file_path') + if c_file: + files_with_successes.setdefault(c_file, []).append(func['name']) + + if files_with_successes: + self._log("Post-parallel PSY-Q compile check...", "INFO") + for rel_path, func_names in files_with_successes.items(): + full_path = project_root / rel_path + if not full_path.exists(): + continue + try: + compile_ok, compile_errors = self.verifier.check_file_compiles(full_path) + except Exception as e: + self._log(f" Compile check failed for {rel_path}: {e}", "WARN") + continue + if not compile_ok: + errors_summary = "; ".join( + e['message'] for e in compile_errors[:2] + ) + self._log( + f" ⚠️ {rel_path}: PSY-Q errors after batch — {errors_summary}", + "WARN", + ) + for fname in func_names: + entry = self.db.get_function(fname) + if entry and entry.get('status') == 'decompiled': + self.db.update_function_status( + fname, + 'decompiled_needs_refine', + notes=f"Post-parallel compile check failed: {errors_summary}", + ) + self._log( + f" {fname} → decompiled_needs_refine (compile errors)", + "WARN", + ) + success_count -= 1 + needs_refine_count += 1 + + # LLM post-processing (kept sequential as requested) + if self.llm and self.config.llm_auto_fix and TYPE_FIXER_AVAILABLE: + self._log("Running LLM post-processing on decompiled functions (sequential)...", "INFO") + try: + post_fixer = TypeErrorFixer(model=self.config.llm_model, verbose=self.config.verbose) + + for func, result in zip(functions, results): + if not result['success']: + continue + + func_name = func['name'] + c_file = func.get('c_file_path') + if not c_file: + continue + + full_path = project_root / c_file + if not full_path.exists(): + continue + + try: + errors = post_fixer.get_compilation_errors(str(full_path)) + if errors: + all_funcs = post_fixer.discover_functions_in_file(str(full_path)) + func_range = next( + ((s, e) for n, s, e in all_funcs if n == func_name), None) + if func_range is not None: + func_errors = [err for err in errors + if func_range[0] <= err['line'] <= func_range[1]] + else: + func_errors = [] + + if func_errors: + self._log( + f" {func_name}: {len(func_errors)} compilation error(s), fixing...", + "INFO" + ) + n = post_fixer.fix_file(str(full_path), max_functions=1, + max_passes=2, target_function=func_name) + if n > 0: + self._log(f" {func_name}: fixed {n} function(s)", "INFO") + except Exception as e: + self._log(f" Post-decompile fix failed for {func_name}: {e}", "WARN") + + except SystemExit: + self._log("TypeErrorFixer: LLM not available, post-decompile error fixing disabled", "WARN") + + self.stats['batches_completed'] += 1 + return {'success': success_count, 'failed': failed_count, 'needs_refine': needs_refine_count} + + def _refresh_decls(self): + """Regenerate include/decomp_decls.h from current C source files. + + Called at startup and after each verification pass so that newly + verified functions immediately become available as m2c context for + all subsequent decompilations in the same session. + """ + project_root = Path(__file__).parent.parent + try: + count = generate_decls(project_root=project_root, verbose=False) + self._log(f"Refreshed decomp_decls.h + per-module decls: {count} declarations", "INFO") + except Exception as e: + self._log(f"generate_decls failed (non-fatal): {e}", "WARN") + + def _verify_batch(self): + """Run verification on decompiled functions.""" + self._log("Running verification...", "INFO") + + try: + results = self.verifier.verify_decompiled_functions() + self.stats['functions_verified'] += results['verified'] + self._log(f"Verified {results['verified']} functions", "INFO") + except Exception as e: + self._log(f"Verification error: {e}", "ERROR") + self.stats['errors'].append({ + 'type': 'verification', + 'error': str(e), + 'time': datetime.now().isoformat() + }) + + # Refresh declarations so newly-verified functions are available as context + self._refresh_decls() + + def _run_full_build(self) -> bool: + """Run a full build to check for errors.""" + self._log("Running full build check...", "INFO") + self.stats['builds_run'] += 1 + + try: + success = self.verifier.full_build_and_verify() + if success: + self._log("Build successful!", "INFO") + else: + self._log("Build failed, check output for errors", "WARN") + # Refresh rank scores so the queue stays sorted easiest→hardest + # as functions are removed from the asm/ directories. + try: + updated = populate_rank_scores(self.db) + self._log(f"Rank scores refreshed ({updated} functions updated)", "INFO") + except Exception as rank_err: + self._log(f"Rank refresh failed (non-fatal): {rank_err}", "WARN") + return success + except Exception as e: + self._log(f"Build error: {e}", "ERROR") + self.stats['errors'].append({ + 'type': 'build', + 'error': str(e), + 'time': datetime.now().isoformat() + }) + return False + + def _fix_type_errors_with_llm(self) -> int: + """ + Scan C files with decompiled functions for actual PSY-Q compilation errors + and fix them with LLM via TypeErrorFixer. + + Returns: + Number of functions fixed + """ + if not self.llm or not TYPE_FIXER_AVAILABLE: + return 0 + + # Collect unique C files that have decompiled functions + decompiled = self.db.get_functions_by_status('decompiled', limit=50) + if not decompiled: + return 0 + + seen_files = set() + c_files_to_check = [] + for func in decompiled: + c_file = func.get('c_file_path') + if c_file and c_file not in seen_files: + seen_files.add(c_file) + c_files_to_check.append(c_file) + + if not c_files_to_check: + return 0 + + self._log(f"Checking {len(c_files_to_check)} file(s) for PSY-Q compilation errors...", "INFO") + + fixed_count = 0 + try: + fixer = TypeErrorFixer(model=self.config.llm_model, verbose=self.config.verbose) + except SystemExit: + self._log("TypeErrorFixer: LLM not available, skipping type error fixing", "WARN") + return 0 + + project_root = Path(__file__).parent.parent + for c_file in c_files_to_check: + if self._check_stop_conditions(): + break + full_path = project_root / c_file + if not full_path.exists(): + continue + try: + # Compile the file directly via PSY-Q to get real errors + errors = fixer.get_compilation_errors(str(full_path)) + if not errors: + continue + self._log(f" {c_file}: {len(errors)} PSY-Q error(s) — attempting LLM fix", "INFO") + n = fixer.fix_file(str(full_path), max_functions=5) + fixed_count += n + except Exception as e: + self._log(f" Error fixing {c_file}: {e}", "ERROR") + + if fixed_count > 0: + self._log(f"🔧 Fixed type errors in {fixed_count} function(s) with LLM", "INFO") + + return fixed_count + + def _reset_stale_in_progress(self): + """Reset functions stuck in 'in_progress' (from crashed runs) back to 'failed'. + + These occur when the agent is killed mid-decompilation. Without this + cleanup they never re-enter the retry queue. + """ + cursor = self.db.conn.cursor() + cursor.execute( + "UPDATE functions SET status='failed', attempt_count=1, " + "notes='Reset from stale in_progress (agent crash)' " + "WHERE status='in_progress'" + ) + count = cursor.rowcount + self.db.conn.commit() + if count: + self._log(f"Reset {count} stale in_progress function(s) to failed", "INFO") + + def _reset_failed_attempt_counts(self): + """Reset attempt_count=0 for all failed/blocked functions on agent startup. + + This gives every function a fresh chance on each new agent run, preventing + permanent dead-ends when the decompilation system has been improved. + The max_retries limit then controls per-session attempts only. + """ + cursor = self.db.conn.cursor() + cursor.execute( + "UPDATE functions SET attempt_count=0 WHERE status IN ('failed', 'blocked')" + ) + reset_count = cursor.rowcount + self.db.conn.commit() + if reset_count: + self._log(f"Reset retry counters for {reset_count} failed/blocked function(s)", "INFO") + + def _retry_failed_functions(self): + """Re-queue functions that previously failed (status='failed').""" + failed = self.db.get_functions_by_status( + 'failed', module=self.config.module_filter) + + if not failed: + return + + self._log(f"Retrying {len(failed)} failed functions...", "INFO") + + queued = 0 + skipped = 0 + infra_skip = 0 + for func in failed: + if func['attempt_count'] >= self.config.max_retries: + skipped += 1 + continue + + # Skip permanent infrastructure failures (missing ASM files, etc.) + # These cannot succeed until the ASM extraction is done for that module + notes = func.get('notes') or '' + if 'Function not found in version' in notes or 'not found in version' in notes.lower(): + infra_skip += 1 + continue + + self.db.update_function_status(func['name'], 'todo', + notes=f"Retry attempt {func['attempt_count'] + 1}") + queued += 1 + + if queued: + self._log(f" Queued {queued} function(s) for retry", "INFO") + if skipped: + self._log(f" Skipped {skipped} function(s) (max retries this session)", "INFO") + if infra_skip: + self._log(f" Skipped {infra_skip} function(s) (permanent infra failure - missing ASM)", "INFO") + + @staticmethod + def _find_func_body_range(text: str, func_name: str): + """Return (start_line, end_line) of the C body definition of func_name + in `text` (1-indexed, inclusive), or None if not found. + + Looks for patterns like: + return_type func_name(...) { + where the line ends with '{' (body definition, not a prototype ending in ';'). + Walks forward counting braces to find the closing '}'. + """ + import re as _re + # Match a definition line: any return type, the function name, params, opening brace. + # The line must contain '{' (not just a prototype). + pattern = _re.compile( + r'^[^\n]*\b' + _re.escape(func_name) + r'\s*\([^)]*\)[^;{]*\{', + _re.MULTILINE, + ) + m = pattern.search(text) + if not m: + return None + + start_line = text[:m.start()].count('\n') + 1 + # Walk from the '{' to find the matching '}' + depth = 0 + for i, ch in enumerate(text[m.start():]): + if ch == '{': + depth += 1 + elif ch == '}': + depth -= 1 + if depth == 0: + end_line = text[:m.start() + i].count('\n') + 1 + return (start_line, end_line) + return None + + def _retry_needs_refine(self): + """Re-queue or promote decompiled_needs_refine functions whose code is clean. + + When a file has compile errors, we now check each function individually: + - If no error line falls within the function's body range → the function's + own code is fine; promote it directly to 'decompiled' so it can be verified. + - If an error line overlaps the function's body → leave as + decompiled_needs_refine for manual/LLM fixing. + + This handles the common case where a file has pre-existing errors (unrelated + to the newly-decompiled functions) that would otherwise permanently block all + decompiled_needs_refine functions in that file. + """ + needs_refine = self.db.get_functions_by_status( + 'decompiled_needs_refine', module=self.config.module_filter) + + if not needs_refine: + return + + self._log(f"Re-queuing {len(needs_refine)} decompiled_needs_refine functions for retry...", "INFO") + + project_root = Path(__file__).parent.parent + + # Group by C file so we only compile-check each file once + file_to_funcs: dict = {} + funcs_without_file = [] + for func in needs_refine: + c_file = func.get('c_file_path') + if c_file: + file_to_funcs.setdefault(c_file, []).append(func) + else: + funcs_without_file.append(func) + + queued = 0 + promoted = 0 + left_pending = 0 + + for rel_c_path, funcs_in_file in file_to_funcs.items(): + full_path = project_root / rel_c_path + compile_ok = True + error_lines = set() + if full_path.exists(): + try: + compile_ok, compile_errors = self.verifier.check_file_compiles(full_path) + if not compile_ok: + error_lines = {e['line'] for e in compile_errors if e.get('line')} + except Exception: + compile_ok = True # Can't tell — give it a chance + + if compile_ok: + for func in funcs_in_file: + self.db.update_function_status(func['name'], 'todo', + notes="Re-queued after fix (file now compiles)") + self._log(f" Queued {func['name']} for retry", "INFO") + queued += 1 + else: + # File still has errors — but check each function individually. + try: + file_text = full_path.read_text(errors='replace') + except OSError: + file_text = None + + for func in funcs_in_file: + fname = func['name'] + + # DB out of sync: function still has INCLUDE_ASM stub — reset to todo + if file_text and f', {fname})' in file_text and 'INCLUDE_ASM(' in file_text: + body_range_check = self._find_func_body_range(file_text, fname) + if body_range_check is None: + self.db.update_function_status(fname, 'todo', + notes="Reset from needs_refine: still has INCLUDE_ASM stub") + self._log(f" Reset {fname} → todo (INCLUDE_ASM stub present)", "INFO") + queued += 1 + continue + + body_range = None + if file_text: + body_range = self._find_func_body_range(file_text, fname) + + if body_range is not None: + start, end = body_range + overlapping = {ln for ln in error_lines if start <= ln <= end} + if not overlapping: + # No errors inside this function's body — promote to decompiled + self.db.update_function_status( + fname, 'decompiled', + notes="Promoted from needs_refine: no errors in function body (pre-existing errors elsewhere in file)" + ) + self._log(f" Promoted {fname} → decompiled (errors are outside its body)", "INFO") + promoted += 1 + continue + + left_pending += 1 + if self.config.verbose: + self._log(f" Skipped {fname} — file still has compile errors in/near its body", "INFO") + + # Functions with no recorded C file path: re-queue unconditionally + for func in funcs_without_file: + self.db.update_function_status(func['name'], 'todo', + notes="Re-queued after manual fix") + self._log(f" Queued {func['name']} for retry (no C file path recorded)", "INFO") + queued += 1 + + if queued: + self._log(f" Queued {queued} function(s) for retry", "INFO") + if promoted: + self._log(f" Promoted {promoted} function(s) → decompiled (errors outside their bodies)", "INFO") + if left_pending: + self._log(f" Left {left_pending} function(s) as decompiled_needs_refine (file still has compile errors)", "INFO") + + def verify_needs_refine(self, module: str = None, verbose: bool = True): + """Attempt to promote all decompiled_needs_refine functions to verified. + + For each function in the decompiled_needs_refine state: + 1. Re-run PSY-Q compile check on its source file. + 2. If the file now compiles cleanly, run check_function_match() and + promote the function to 'verified' (matches) or 'decompiled' + (compile ok but still needs objdiff confirmation). + 3. If the file still has errors but the error lines don't overlap the + function body, promote to 'decompiled' so the normal verify path + can handle it. + 4. Leave remaining functions as decompiled_needs_refine and report them. + + This is intended to be called after manually fixing compile errors outside + the automation workflow (e.g. ``python agent.py --verify-needs-refine``). + """ + project_root = Path(__file__).parent.parent + needs_refine = self.db.get_functions_by_status('decompiled_needs_refine', module=module) + + if not needs_refine: + print("No decompiled_needs_refine functions found.") + return + + print(f"\n{'='*60}") + print(f"VERIFY NEEDS-REFINE ({len(needs_refine)} functions)") + print(f"{'='*60}\n") + + # Group by C file so we only compile-check each file once + file_to_funcs: dict = {} + funcs_without_file = [] + for func in needs_refine: + c_file = func.get('c_file_path') + if c_file: + file_to_funcs.setdefault(c_file, []).append(func) + else: + funcs_without_file.append(func) + + verified_count = 0 + promoted_count = 0 + still_broken_count = 0 + + for rel_c_path, funcs_in_file in file_to_funcs.items(): + full_path = project_root / rel_c_path + compile_ok = True + error_lines: set = set() + errors: list = [] + + if full_path.exists(): + try: + compile_ok, errors = self.verifier.check_file_compiles(full_path) + if not compile_ok: + error_lines = {e['line'] for e in errors if e.get('line')} + except Exception: + compile_ok = True # Can't determine — give it a chance + + file_text = None + if full_path.exists(): + try: + file_text = full_path.read_text(errors='replace') + except OSError: + pass + + for func in funcs_in_file: + fname = func['name'] + + # If the file still has an INCLUDE_ASM stub for this function the + # C body was never written (or was reverted) — the DB is out of sync. + # Reset to todo so the function can be decompiled fresh. + if file_text and f', {fname})' in file_text and 'INCLUDE_ASM(' in file_text: + body_range = self._find_func_body_range(file_text, fname) + if body_range is None: + self.db.update_function_status(fname, 'todo', + notes="Reset from needs_refine: still has INCLUDE_ASM stub (DB was out of sync)") + print(f" 🔄 {fname} → todo (INCLUDE_ASM stub present, DB was stale)") + promoted_count += 1 + continue + + if compile_ok: + # File compiles — run match check then promote + matches, err_msg = self.verifier.check_function_match(fname) + if matches: + self.db.update_function_status(fname, 'verified', + notes="Promoted from needs_refine after compile errors resolved") + print(f" ✅ {fname} → verified") + verified_count += 1 + else: + # Compiled but objdiff says no match yet — push to decompiled + self.db.update_function_status(fname, 'decompiled', + notes=f"Promoted from needs_refine; needs objdiff: {err_msg}") + print(f" ➡️ {fname} → decompiled (compile ok, pending objdiff)") + promoted_count += 1 + else: + # File still has errors — check whether they overlap this function + overlap_found = True # default: assume overlap if we can't tell + if file_text: + body_range = self._find_func_body_range(file_text, fname) + if body_range is not None: + start, end = body_range + overlap_found = bool({ln for ln in error_lines if start <= ln <= end}) + + if not overlap_found: + # Errors are elsewhere in the file — safe to promote + self.db.update_function_status(fname, 'decompiled', + notes="Promoted from needs_refine: compile errors are outside function body") + print(f" ➡️ {fname} → decompiled (errors outside its body)") + promoted_count += 1 + else: + if verbose: + first_err = errors[0].get('message', '?') if errors else '?' + print(f" ❌ {fname} still broken — {first_err}") + still_broken_count += 1 + + # Functions with no recorded C file — re-queue so the agent can retry + for func in funcs_without_file: + self.db.update_function_status(func['name'], 'todo', + notes="Re-queued from needs_refine (no C file recorded)") + print(f" 🔄 {func['name']} → todo (no C file path)") + promoted_count += 1 + + print(f"\n{'='*60}") + print(f"Verified: {verified_count}") + print(f"Promoted→decompiled: {promoted_count}") + print(f"Still needs fixing: {still_broken_count}") + print(f"{'='*60}\n") + + def _reset_false_verified(self): + """Find verified/decompiled functions whose source file still contains + INCLUDE_ASM (i.e. mako.sh exited 0 but never actually wrote C code) and + reset them back to todo so they can be retried properly. + """ + from pathlib import Path + + statuses = ('verified', 'decompiled') + false_names = [] + + for status in statuses: + funcs = self.db.get_functions_by_status(status, module=self.config.module_filter) + for func in funcs: + c_file = func.get('c_file_path') + if not c_file: + continue + try: + content = Path(c_file).read_text() + if 'INCLUDE_ASM(' in content and f", {func['name']})".encode().decode() in content: + false_names.append(func['name']) + except OSError: + pass + + if not false_names: + self._log("No false-verified functions found", "INFO") + return + + self._log(f"Found {len(false_names)} falsely-verified functions (INCLUDE_ASM still present) — resetting to todo", "WARN") + for name in false_names: + self.db.update_function_status(name, 'todo', notes="Reset: INCLUDE_ASM still present despite verified status") + self.db.conn.execute("UPDATE functions SET attempt_count=0 WHERE name=?", (name,)) + self.db.conn.commit() + self._log(f" Reset {len(false_names)} functions to todo", "INFO") + + def _retry_blocked_functions(self): + """Re-queue blocked functions so they can be re-attempted. + + In smart mode (dep_analyzer available, force_retry_blocked=False): + Only re-queues blocked functions where a same-file callee has been + resolved since last_attempt_at. This avoids burning the session + re-trying functions stuck on structural /*?*/ type gaps. + + In force mode (force_retry_blocked=True or no dep_analyzer): + Re-queues all eligible blocked functions regardless. + """ + blocked = self.db.get_functions_by_status( + 'blocked', module=self.config.module_filter) + + eligible = [f for f in blocked if f['attempt_count'] < self.config.max_retries] + + if not eligible: + self._log("No eligible blocked functions to retry (all at max retries)", "INFO") + return + + # Smart filtering: only re-queue if a same-file callee was resolved since last attempt + if self.dep_analyzer and not self.config.force_retry_blocked: + cursor = self.db.conn.cursor() + func_to_c_file = { + row[0]: row[1] for row in cursor.execute( + "SELECT name, c_file_path FROM functions WHERE c_file_path IS NOT NULL" + ) + } + resolved_statuses = "('verified', 'decompiled', 'decompiled_needs_refine', 'sdk_excluded')" + + filtered = [] + for func in eligible: + fname = func['name'] + last_attempt = func.get('last_attempt_at') + c_file = func_to_c_file.get(fname) + + if not last_attempt or not c_file: + continue # Skip if never attempted or c_file unknown + + # Only consider same-file callees (cross-file ordering has no benefit) + callees = list(self.dep_analyzer.calls.get(fname, set())) + same_file_callees = [c for c in callees if func_to_c_file.get(c) == c_file] + + if not same_file_callees: + continue # Blocked on structural type issue — retry won't help + + # Re-queue only if a same-file callee was resolved after last attempt + placeholders = ','.join('?' * len(same_file_callees)) + row = cursor.execute( + f"SELECT MAX(updated_at) FROM functions " + f"WHERE name IN ({placeholders}) AND status IN {resolved_statuses}", + same_file_callees + ).fetchone() + last_resolved = row[0] if row else None + + if last_resolved and last_resolved > last_attempt: + filtered.append(func) + + original_count = len(eligible) + eligible = filtered + + if not eligible: + self._log( + f"No blocked functions have newly-resolved same-file callees " + f"({original_count} checked); skipping retry", "INFO" + ) + self._log(" Use --force-retry-blocked to override and retry all", "INFO") + return + + self._log( + f"Smart retry: {len(eligible)}/{original_count} blocked functions " + f"have newly-resolved same-file callees", "INFO" + ) + else: + self._log(f"Re-queuing {len(eligible)}/{len(blocked)} blocked functions for retry...", "INFO") + + for func in eligible: + self.db.update_function_status(func['name'], 'todo', + notes=f"Retry after block (attempt {func['attempt_count'] + 1})") + + self._log(f" Done — {len(eligible)} function(s) re-queued", "INFO") + + def _show_progress(self): + """Display current progress.""" + stats = self.db.get_statistics() + + total = stats['total'] + verified = stats['by_status'].get('verified', 0) + decompiled = stats['by_status'].get('decompiled', 0) + needs_refine = stats['by_status'].get('decompiled_needs_refine', 0) + failed = stats['by_status'].get('failed', 0) + blocked = stats['by_status'].get('blocked', 0) + todo = stats['by_status'].get('todo', 0) + + completed = verified + decompiled + needs_refine + progress = (completed / total * 100) if total > 0 else 0 + + elapsed = time.time() - self.stats['start_time'] + rate = self.stats['functions_processed'] / elapsed if elapsed > 0 else 0 + + print("\n" + "="*60) + print(f"AGENT PROGRESS - {datetime.now().strftime('%H:%M:%S')}") + print("="*60) + print(f"Processed: {self.stats['functions_processed']} functions") + print(f"Verified: {verified}/{total} ({verified/total*100:.1f}%)") + print(f"Decompiled: {decompiled}") + print(f"Needs Refine: {needs_refine}") + print(f"Blocked: {blocked}") + print(f"Failed: {failed}") + print(f"Todo: {todo}") + print(f"Batches: {self.stats['batches_completed']}") + print(f"Builds: {self.stats['builds_run']}") + if self.llm: + print(f"LLM analyzed: {self.stats['functions_analyzed_by_llm']}") + print(f"Rate: {rate:.2f} functions/second") + print(f"Elapsed: {timedelta(seconds=int(elapsed))}") + + if self.config.max_duration: + remaining = self.config.max_duration - elapsed + print(f"Time left: {timedelta(seconds=int(max(0, remaining)))}") + + print("="*60 + "\n") + + def _sync_main_func_aliases(self): + """Ensure every `func_8XXXXXXX` jal target referenced in overlay ASM files + that maps to a known main-segment symbol has a `func_XXXXXXXX = 0xXXXXXXXX;` + alias in config/sym_export.us.txt. + + This prevents linker undefined-reference errors when overlay object files + call PSX SDK / runtime functions by their raw address alias rather than + their canonical name. The alias file is shared by all overlay linker + invocations, so a single addition here fixes every affected overlay. + + Safe to run repeatedly: existing entries are never touched. + """ + project_root = Path(__file__).parent.parent + sym_export_path = project_root / "config" / "sym_export.us.txt" + main_syms_path = project_root / "config" / "symbols.main.us.txt" + asm_root = project_root / "asm" / "us" + + if not sym_export_path.exists() or not main_syms_path.exists(): + return + + # --- 1. Load all addresses known to the main-segment symbol file --- + main_addrs: set = set() + addr_re = re.compile(r'\w+\s*=\s*(0x[0-9a-fA-F]+)\s*;') + with open(main_syms_path) as f: + for line in f: + m = addr_re.search(line) + if m: + main_addrs.add(int(m.group(1), 16)) + + # --- 2. Load addresses already in sym_export.us.txt --- + existing_names: set = set() + existing_addrs: set = set() + name_re = re.compile(r'^(\w+)\s*=\s*(0x[0-9a-fA-F]+)\s*;') + with open(sym_export_path) as f: + for line in f: + m = name_re.match(line.strip()) + if m: + existing_names.add(m.group(1)) + existing_addrs.add(int(m.group(2), 16)) + + # --- 3. Scan overlay ASM files for `jal func_8XXXXXXX` references --- + jal_func_re = re.compile(r'\bjal\s+(func_[0-9a-fA-F]{8})\b') + referenced: set = set() + if asm_root.is_dir(): + for asm_file in asm_root.rglob("*.s"): + # Skip main/ — it defines these symbols, not references them + try: + parts = asm_file.relative_to(asm_root).parts + if parts and parts[0] == "main": + continue + except ValueError: + pass + try: + text = asm_file.read_text(errors="replace") + for name in jal_func_re.findall(text): + referenced.add(name) + except OSError: + pass + + # --- 4. Determine which are missing from sym_export and known to main --- + to_add = [] + for sym_name in sorted(referenced): + if sym_name in existing_names: + continue + addr = int(sym_name[len("func_"):], 16) + if addr in main_addrs and addr not in existing_addrs: + to_add.append((sym_name, addr)) + + if not to_add: + self._log("sym_export alias check: all overlay jal targets accounted for", "INFO") + return + + # --- 5. Append missing aliases --- + with open(sym_export_path, "a") as f: + for sym_name, addr in to_add: + f.write(f"{sym_name} = 0x{addr:08X};\n") + + self._log( + f"sym_export alias check: added {len(to_add)} missing func_ alias(es) " + f"to {sym_export_path.relative_to(project_root)}", + "INFO", + ) + if self.config.verbose: + for sym_name, addr in to_add: + self._log(f" + {sym_name} = 0x{addr:08X};", "INFO") + + def _initial_audit(self): + """ + At startup, compile each C file that contains 'decompiled' or 'verified' + functions and flag any that fail PSY-Q compilation as 'decompiled_needs_refine'. + + This catches functions that were accepted by the old heuristic validator + but actually produce type/declaration errors in the real compiler. They + are NOT automatically reverted here (too risky without the original ASM + context), but they'll be picked up by the LLM post-fixer or can be + manually reverted and re-queued. + """ + self._log("Running initial compilation audit of decompiled functions...", "INFO") + + # Gather unique C files that contain 'decompiled' OR 'verified' functions + # We include verified because old agent runs may have accepted bad code. + decompiled = self.db.get_functions_by_status('decompiled', limit=None, + module=self.config.module_filter) + verified = self.db.get_functions_by_status('verified', limit=None, + module=self.config.module_filter) + all_funcs = (decompiled or []) + (verified or []) + if not all_funcs: + self._log(" No decompiled/verified functions to audit", "INFO") + return + + # Build a map: c_file_path -> [func_name, ...] + file_to_funcs = {} + for func in all_funcs: + cp = func.get('c_file_path') + if cp: + file_to_funcs.setdefault(cp, []).append(func['name']) + + project_root = Path(__file__).parent.parent + flagged = 0 + + for rel_c_path, func_names in file_to_funcs.items(): + full_path = project_root / rel_c_path + if not full_path.exists(): + continue + + compile_ok, errors = self.verifier.check_file_compiles(full_path) + if compile_ok: + continue + + # Identify which lines are affected + error_lines = {e['line'] for e in errors} + if not error_lines: + continue + + # Find function body ranges using precise brace-counting so we only + # flag functions whose body actually contains an error line. + try: + file_text = full_path.read_text(errors='replace') + for name in func_names: + body_range = self._find_func_body_range(file_text, name) + if body_range is None: + continue # stub / prototype — skip + start, end = body_range + if any(start <= el <= end for el in error_lines): + self.db.update_function_status( + name, 'decompiled_needs_refine', + notes=f"Startup audit: PSY-Q compile errors in {rel_c_path}" + ) + flagged += 1 + if self.config.verbose: + self._log(f" Flagged {name} ({rel_c_path})", "WARN") + except Exception as e: + self._log(f" Audit error for {rel_c_path}: {e}", "WARN") + + if flagged: + self._log(f"Startup audit: flagged {flagged} function(s) as decompiled_needs_refine", "WARN") + else: + self._log("Startup audit: all decompiled functions compile cleanly", "INFO") + + def _ensure_asm_splits(self): + """ + Run splat for any module whose nonmatchings/ directory is missing or empty. + + This happens after `make clean`, which deletes the gitignored asm/ tree. + The agent needs those .s files to decompile functions, so we regenerate them + automatically rather than requiring the user to remember the splat step. + """ + project_root = Path(__file__).parent.parent + build_us = project_root / 'build' / 'us' + asm_us = project_root / 'asm' / 'us' + splat_bin = project_root / '.venv' / 'bin' / 'splat' + + if not splat_bin.exists(): + self._log(" splat not found in .venv; skipping ASM regeneration", "WARN") + return + + # Which modules have todo functions that need ASM files? + module_filter = self.config.module_filter + cursor = self.db.conn.cursor() + if module_filter: + cursor.execute( + "SELECT DISTINCT module FROM functions WHERE status='todo' AND module=?", + (module_filter,) + ) + else: + cursor.execute("SELECT DISTINCT module FROM functions WHERE status='todo'") + modules_needing_asm = {row['module'] for row in cursor} + + regenerated = [] + for module in sorted(modules_needing_asm): + nonmatch_dir = asm_us / module / 'nonmatchings' + if nonmatch_dir.is_dir() and any(nonmatch_dir.rglob('*.s')): + continue # Already present + + # Try to find the yaml for this module + yaml_path = build_us / f'{module}.yaml' + if not yaml_path.exists(): + # Some modules use a different yaml name (e.g. batini → battle.yaml covers it) + continue + + self._log(f" Re-running splat for {module} (nonmatchings/ missing or empty)...", "INFO") + try: + import subprocess as _sp + result = _sp.run( + [str(splat_bin), 'split', str(yaml_path)], + capture_output=True, text=True, + cwd=str(project_root) + ) + if result.returncode == 0: + count = sum(1 for _ in nonmatch_dir.rglob('*.s')) if nonmatch_dir.is_dir() else 0 + self._log(f" {module}: generated {count} nonmatching .s files", "INFO") + regenerated.append(module) + else: + self._log(f" {module}: splat failed: {result.stderr[:200]}", "WARN") + except Exception as e: + self._log(f" {module}: splat error: {e}", "WARN") + + if not regenerated: + self._log(" ASM splits up to date", "INFO") + + # Fix matchings/ directories: some C files use INCLUDE_ASM("…/matchings/…") + # for functions that splat now emits to nonmatchings/. Copy any missing ones. + self._fix_matchings_from_nonmatchings() + + def _fix_matchings_from_nonmatchings(self): + """ + After a splat run, copy .s files from nonmatchings/ to matchings/ for any + INCLUDE_ASM references that point at matchings/ but whose file is missing. + This keeps `make build` working after `make clean`. + """ + import re as _re + import shutil as _shutil + project_root = Path(__file__).parent.parent + src_root = project_root / 'src' + asm_us = project_root / 'asm' / 'us' + pattern = _re.compile(r'INCLUDE_ASM\s*\(\s*"(asm/us/[^"]+/matchings/[^"]+)"\s*,\s*([^);\s]+)') + copied = 0 + for c_file in src_root.rglob('*.s'): + pass # not needed + for c_file in src_root.rglob('*.c'): + try: + text = c_file.read_text(errors='replace') + except Exception: + continue + for m in pattern.finditer(text): + asm_hint, func_name = m.group(1), m.group(2) + dst = project_root / asm_hint / f'{func_name}.s' + if dst.exists(): + continue + # Look for the same file in nonmatchings/ + nonmatch_path = str(asm_hint).replace('/matchings/', '/nonmatchings/') + src = project_root / nonmatch_path / f'{func_name}.s' + if src.exists(): + dst.parent.mkdir(parents=True, exist_ok=True) + _shutil.copy2(str(src), str(dst)) + copied += 1 + if copied: + self._log(f" Copied {copied} .s file(s) from nonmatchings → matchings to satisfy INCLUDE_ASM paths", "INFO") + + def _cleanup_failure_comments(self): + """ + Remove 'Decompilation failure:' comment blocks from all C source files. + + These are left behind by m2c when it can't parse external declarations. + They prevent subsequent decompilations from getting clean context and + must be swept out before each run. + """ + import re as _re + src_dir = Path(__file__).parent.parent / 'src' + pattern = _re.compile(r'/\*\s*Decompilation failure[^\n]*\n.*?\*/', _re.DOTALL) + total_removed = 0 + + for c_file in src_dir.rglob('*.c'): + content = c_file.read_text() + cleaned, n = pattern.subn('', content) + if n: + # Collapse runs of blank lines left by removal + cleaned = _re.sub(r'\n\n\n+', '\n\n', cleaned) + c_file.write_text(cleaned) + total_removed += n + + if total_removed: + self._log(f"Cleaned {total_removed} 'Decompilation failure' comment block(s) from src/", "INFO") + + def _hoist_externs_all_files(self): + """ + Apply the extern-declaration hoisting pass to every C source file. + + extern declarations generated by mako.sh dec are placed inline beside + each function body. This pass gathers them all and moves them to a + single block before the first INCLUDE_ASM / function definition so every + file has a clean layout: + #include ... + typedefs (if any, hoisted before their first use) + extern declarations ← ALL here + function bodies / INCLUDE_ASM stubs + + Uses apply_all_fixes (which runs extern-hoist then typedef-hoist) so + that any typedef whose first use is now an extern in the header section + also gets moved up correctly. + """ + try: + from intellisense_fixer import apply_all_fixes + except ImportError: + self._log("intellisense_fixer not available; skipping extern hoist", "WARN") + return + + src_dir = Path(__file__).parent.parent / 'src' + total_moved = 0 + files_changed = 0 + + for c_file in src_dir.rglob('*.c'): + try: + content = c_file.read_text() + fixed, changes = apply_all_fixes(content) + extern_changes = [c for c in changes if 'extern' in c] + if extern_changes: + c_file.write_text(fixed) + n = sum(int(c.split()[1]) for c in extern_changes if c.split()[1].isdigit()) + total_moved += n + files_changed += 1 + if self.config.verbose: + self._log(f" {c_file.relative_to(Path(__file__).parent.parent)}: {', '.join(changes)}", "INFO") + except Exception as e: + self._log(f" extern hoist error in {c_file.name}: {e}", "WARN") + + if total_moved: + self._log(f"Hoisted {total_moved} extern declaration(s) across {files_changed} file(s) to file headers", "INFO") + + def _revert_function_to_include_asm(self, c_file: Path, func_name: str) -> bool: + """ + Replace a decompiled function body with its INCLUDE_ASM stub. + + Walks the file to find the function definition by name, counts braces to + locate the closing }, then replaces the whole definition with the stub. + Returns True if the revert succeeded. + """ + import re as _re + content = c_file.read_text() + lines = content.splitlines(keepends=True) + + # Derive asm directory from the file path: + # src/{overlay}/{stem}.c → asm/us/{overlay}/nonmatchings/{stem} + stem = c_file.stem + overlay = c_file.parent.name + asm_dir = f"asm/us/{overlay}/nonmatchings/{stem}" + + # Find the function definition start using a strict pattern that requires a + # return type before the function name. This prevents matching call sites + # like: '} else if (func_name(-1) != 0) {' which the old loose search + # mistakenly treated as a definition start. + strict_def_pattern = _re.compile( + rf'^(?:(?:const|static|inline)\s+)*' + rf'(?:(?:unsigned|signed)\s+)*' + rf'(?:void|char|int|u8|s8|u16|s16|u32|s32|long|short|\w+)\s+' + rf'\*?\s*{_re.escape(func_name)}\s*\(', + _re.MULTILINE, + ) + # Fallback: implicit-int — function name at beginning of line with no type + implicit_def_pattern = _re.compile( + rf'^{_re.escape(func_name)}\s*\(', + _re.MULTILINE, + ) + m = strict_def_pattern.search(content) + if m is None: + m = implicit_def_pattern.search(content) + if m is None: + return False + start_idx = content[:m.start()].count('\n') + + # Find the opening brace (may be on the same or next few lines) + brace_start = None + for i in range(start_idx, min(start_idx + 6, len(lines))): + if '{' in lines[i]: + brace_start = i + break + + if brace_start is None: + return False # No opening brace found — probably just a declaration + + # Count braces to find the matching closing brace + depth = 0 + end_idx = None + for i in range(brace_start, len(lines)): + depth += lines[i].count('{') - lines[i].count('}') + if depth == 0: + end_idx = i + break + + if end_idx is None: + return False + + # Build the replacement stub + include_asm_line = f'INCLUDE_ASM("{asm_dir}", {func_name});\n' + + # Also strip m2c-emitted extern/forward-declaration lines that precede the + # function body. These are orphaned when a function is reverted and would + # poison m2c context on the next run. + # Pattern: blank lines OR lines ending with "// extern" OR lines starting + # with "extern " (bare extern declarations for D_ globals / unknown funcs). + _extern_or_blank = _re.compile(r'^\s*$|//\s*extern\s*$|^\s*extern\s') + i = start_idx - 1 + while i >= 0 and _extern_or_blank.search(lines[i].rstrip('\n\r')): + i -= 1 + trim_start = i + 1 + + new_lines = lines[:trim_start] + [include_asm_line] + lines[end_idx + 1:] + c_file.write_text(''.join(new_lines)) + return True + + def _cleanup_unknown_type_functions(self): + """ + Scan C source files for decompiled functions that contain '?' type markers + (from m2c's inability to determine types). These poison m2c context for every + other function in the same file. + + Any such function is reverted to its INCLUDE_ASM stub and marked 'blocked'. + """ + import re as _re + src_dir = Path(__file__).parent.parent / 'src' + + # Match ? used as a parameter type, e.g.: "(s32 arg0, ? arg2)" or "(? arg)" + # Ternary operators like "x ? y : z" are NOT matched because ternary '?' is + # preceded by an expression value, not by '(' or ','. + unknown_param = _re.compile(r'[,(]\s*\?\s*(?:[,)]|\w)') + # Also catch ? as return type at start of a function definition line + unknown_return = _re.compile(r'^\s*\?\s+\w+\s*\(', _re.MULTILINE) + # And ?* pointer type + unknown_ptr = _re.compile(r'\?\s*\*\s+\w+') + + total_reverted = 0 + + for c_file in src_dir.rglob('*.c'): + content = c_file.read_text() + + # Quick check — does this file even have a '?' type marker? + if not ('/*?*/' in content + or unknown_param.search(content) + or unknown_return.search(content) + or unknown_ptr.search(content)): + continue + + # Identify the specific function(s) that contain '?' markers. + # We look for a function signature containing '?' then revert it. + func_sig_pattern = _re.compile( + r'^(\w[\w\s*]*?)\s+(\w+)\s*\([^)]*(?:\([^)]*\)[^)]*|[^)])*\?\s*[^;{]*\)', + _re.MULTILINE + ) + + reverted_in_file = set() + for match in func_sig_pattern.finditer(content): + func_name = match.group(2) + if func_name in reverted_in_file: + continue + + # Skip if it's only a forward declaration (ends with ;) + after = content[match.end():match.end() + 20].lstrip() + if after.startswith(';'): + continue + + # Also skip INCLUDE_ASM lines + line_start = content.rfind('\n', 0, match.start()) + 1 + line = content[line_start:match.start() + 100] + if 'INCLUDE_ASM' in line: + continue + + reverted = self._revert_function_to_include_asm(c_file, func_name) + if reverted: + reverted_in_file.add(func_name) + total_reverted += 1 + # Re-read — file was modified + content = c_file.read_text() + # Mark as blocked in DB if it's tracked + try: + existing = self.db.get_function(func_name) + if existing and existing.get('status') in ('verified', 'decompiled', + 'decompiled_needs_refine'): + self.db.update_function_status( + func_name, 'blocked', + notes="Reverted: had unknown '?' type marker in signature" + ) + except Exception: + pass + self._log(f" Reverted {func_name} in {c_file.name} (? type marker)", "WARN") + + # Second pass: catch '?' in m2c-emitted extern blocks that precede a function + # body. These are lines ending with "// extern" that contain '?' types, or + # "extern /*?*/" lines with NO valid type after the comment. They won't + # match func_sig_pattern (which looks at function signatures, not forward + # declarations) but still poison the context. + # Pattern 1: "extern /*?*/" where ? is the ONLY type (no valid C type follows) + # e.g. "extern /*?*/ some_sym;" — poisoned, type unknown + # NOT "extern /*?*/s32 D_800F9F3C;" — ok, s32 is the resolved type + # Pattern 2: "? ... // extern" — unknown-type forward decl emitted by m2c + extern_unknown = _re.compile( + r'^extern\s+/\*\?\*/\s+\w+\s*;|\?[^*].*//\s*extern\s*$', _re.MULTILINE + ) + func_def_pattern = _re.compile( + r'^(?:const\s+)?(?:unsigned\s+|signed\s+)?' + r'(?:void|u8|s8|u16|s16|u32|s32|int|char|short|long|unk_\w+|ff7s|\w+)\s*\*?\s+' + r'(\w+)\s*\([^)]*\)\s*\{', + _re.MULTILINE, + ) + # Snapshot content once so all finditer positions remain valid, then + # collect target function names before making any modifications. + # Updating content inside the loop caused position drift: after each + # revert the file shrinks, and old byte positions from the finditer + # landed in wrong places, causing unrelated functions to be reverted. + content = c_file.read_text() + funcs_to_revert_by_extern = [] + for ext_match in extern_unknown.finditer(content): + # Find the next concrete function definition after this bad extern line + # (within a reasonable window — externs are adjacent to their function) + search_start = ext_match.end() + def_match = func_def_pattern.search(content, search_start, + search_start + 4000) + if def_match is None: + continue + fname = def_match.group(1) + if fname not in reverted_in_file and fname not in funcs_to_revert_by_extern: + funcs_to_revert_by_extern.append(fname) + + for func_name in funcs_to_revert_by_extern: + if func_name in reverted_in_file: + continue + reverted = self._revert_function_to_include_asm(c_file, func_name) + if reverted: + reverted_in_file.add(func_name) + total_reverted += 1 + try: + existing = self.db.get_function(func_name) + if existing and existing.get('status') in ('verified', 'decompiled', + 'decompiled_needs_refine'): + self.db.update_function_status( + func_name, 'blocked', + notes="Reverted: had '?' type in preceding extern declarations" + ) + except Exception: + pass + self._log( + f" Reverted {func_name} in {c_file.name} (? in extern block)", "WARN" + ) + + if total_reverted: + self._log(f"Reverted {total_reverted} function(s) with '?' type markers to INCLUDE_ASM", + "WARN") + + def _cleanup_file_level_question_marks(self): + """ + Remove bare file-scope lines that use '?' as a type — these are m2c + artifacts for SDK/external functions whose type is unknown. They are + syntactically invalid C and cause build failures. + + Examples removed: + ? SpuSetTransferCallback(?*); // extern + extern ?* jtbl_80034D14; + s16 GetTPage(s32, ?, s16, s16); // extern + ? LoadImage(void*, s32); // extern + """ + import re as _re + + # Line is at file scope if it starts at column 0 (no leading whitespace) + # and contains ? used as a type (not inside a string or comment). + # Patterns: + # 1. Line starting with '?' — unknown-return-type extern + # 2. Line starting with 'extern ?*' — extern pointer of unknown type + # 3. Forward-declaration line (no leading brace) with '?' in parameter list + bad_line = _re.compile( + r'^(?:' + r'\?\s+\w[\w\s*,]*\(.*\)\s*(?:;|//.*)?' # ? ReturnType FuncName(...) or ? FuncName(...) + r'|extern\s+\?\s*\*[^;]*;' # extern ?* sym; + r'|(?:extern\s+)?(?:\w+\s+)?\w+\s*\([^)]*\?[^)]*\)\s*;(?:\s*//.*)?' # Decl with ? param + r')$', + _re.MULTILINE, + ) + + src_dir = Path(__file__).parent.parent / 'src' + total_removed = 0 + for c_file in src_dir.rglob('*.c'): + content = c_file.read_text() + if '?' not in content: + continue + cleaned = bad_line.sub('', content) + # Remove any double blank lines left behind + cleaned = _re.sub(r'\n{3,}', '\n\n', cleaned) + if cleaned != content: + c_file.write_text(cleaned) + removed = content.count('\n') - cleaned.count('\n') + total_removed += removed + self._log(f" Removed {removed} file-scope '?' line(s) from {c_file.name}", "INFO") + if total_removed: + self._log(f"Removed {total_removed} file-scope '?' type line(s) from source files", "INFO") + + def run(self): + """Main agent loop.""" + self._log("="*60) + self._log("STARTING DECOMPILATION AGENT") + self._log("="*60) + + # Show configuration + self._log(f"Batch size: {self.config.batch_size}") + self._log(f"Verify interval: {self.config.verify_interval}") + if self.config.module_filter: + self._log(f"Module filter: {self.config.module_filter}") + if self.config.max_duration: + self._log(f"Duration limit: {self.config.max_duration}s") + if self.config.target_count: + self._log(f"Target count: {self.config.target_count}") + + self.stats['start_time'] = time.time() + self.stats['last_progress_time'] = time.time() + + # Regenerate nonmatchings/ ASM files if wiped by make clean + self._log("Checking ASM splits...", "INFO") + self._ensure_asm_splits() + + # Regenerate cross-file forward declarations so m2c has full type context + self._refresh_decls() + + # Sweep stale 'Decompilation failure:' comment blocks that block m2c context + self._cleanup_failure_comments() + + # Hoist all scattered extern declarations to the file header section + self._hoist_externs_all_files() + + # Revert functions with '?' type markers (left by old agent runs without the fix) + self._cleanup_unknown_type_functions() + + # Remove bare file-scope lines with '?' types (e.g. "? SpuSetTransferCallback(?*);") + self._cleanup_file_level_question_marks() + + # Reset false-verified functions before starting if requested + if self.config.retry_verified: + self._reset_false_verified() + + # Flag currently-decompiled functions whose file fails PSY-Q compilation + self._initial_audit() + + # Ensure all overlay ASM jal targets have func_ aliases in sym_export.us.txt + self._sync_main_func_aliases() + + # Reset functions that were left in_progress from a previous crash + self._reset_stale_in_progress() + + # Give all previously-failed/blocked functions a fresh retry chance this session + self._reset_failed_attempt_counts() + + # Initial status + initial_stats = self.db.get_statistics() + self._log(f"Initial state: {initial_stats['by_status'].get('verified', 0)}/{initial_stats['total']} verified") + + # Main loop + functions_since_build = 0 + + while not self._check_stop_conditions(): + # Get next batch + batch = self._get_next_batch() + + if not batch: + self._log("No more functions to process", "INFO") + + # Dynamic retry gate: if we've already done at least one retry round + # and that round produced zero new decompilations or needs_refine + # results, stop — further retries won't help. + if self._retry_round > 0 and self._retry_progress_since_last_retry == 0: + self._log( + f"Retry round {self._retry_round} produced no progress — stopping retries", + "INFO", + ) + break + + # Start a new retry round: reset progress counter. + self._retry_round += 1 + self._retry_progress_since_last_retry = 0 + self._log(f"Starting retry round {self._retry_round}...", "INFO") + + # Try retrying failed functions (check DB, not just runtime counter) + failed_in_db = self.db.get_functions_by_status( + 'failed', limit=1, module=self.config.module_filter) + if failed_in_db: + self._retry_failed_functions() + batch = self._get_next_batch() + + # Try re-queuing decompiled_needs_refine functions (may have been manually fixed) + if not batch: + self._retry_needs_refine() + batch = self._get_next_batch() + + # Try retrying blocked functions if flag is set + if not batch and self.config.retry_blocked: + self._retry_blocked_functions() + batch = self._get_next_batch() + + if not batch: + # Check if we have blocked functions + cursor = self.db.conn.cursor() + if self.config.module_filter: + cursor.execute("SELECT COUNT(*) FROM functions WHERE status='blocked' AND module=?", (self.config.module_filter,)) + else: + cursor.execute("SELECT COUNT(*) FROM functions WHERE status='blocked'") + blocked_count = cursor.fetchone()[0] + if blocked_count: + self._log(f"Queue empty; {blocked_count} functions blocked (will retry on next run)", "INFO") + self._log("No functions available, stopping", "INFO") + break + + # Process batch + result = self._process_batch(batch) + functions_since_build += result['success'] + + # Accumulate progress for retry-round tracking. + # Count both true successes and needs_refine (compiled but with pre-existing + # errors) as forward progress, since both represent real decompilation work. + self._retry_progress_since_last_retry += result['success'] + result.get('needs_refine', 0) + + # Verify after every batch that produced at least one success so that + # newly-decompiled signatures land in decomp_decls.h immediately and + # are available as m2c context for the very next batch. + if result['success'] > 0: + self._verify_batch() + + # Fix type errors with LLM if enabled (after verification) + if self.llm and self.config.llm_auto_fix: + self._fix_type_errors_with_llm() + + # Periodic full build + if functions_since_build >= self.config.full_build_interval: + self._run_full_build() + functions_since_build = 0 + + # Show progress + self._show_progress() + + # Pause between batches + if not self._check_stop_conditions(): + time.sleep(self.config.pause_between_batches) + + # Final verification (catches any successes from the last batch if it + # was skipped above, e.g. if stop conditions fired before verify ran) + self._log("Running final verification...", "INFO") + self._verify_batch() + + # LLM fix pass: attempt to repair decompiled_needs_refine functions + if self.llm: + try: + self._llm_fix_needs_refine() + except Exception as e: + self._log(f"LLM fix pass failed: {e}", "WARN") + + # Final stats + self._show_final_report() + + def _show_final_report(self): + """Show final statistics.""" + elapsed = time.time() - self.stats['start_time'] + + print("\n" + "="*60) + print("AGENT EXECUTION COMPLETE") + print("="*60) + print(f"Total time: {timedelta(seconds=int(elapsed))}") + print(f"Functions processed: {self.stats['functions_processed']}") + print(f"Functions verified: {self.stats['functions_verified']}") + print(f"Functions failed: {self.stats['functions_failed']}") + print(f"Batches completed: {self.stats['batches_completed']}") + print(f"Builds run: {self.stats['builds_run']}") + if self.llm: + print(f"LLM analyzed: {self.stats['functions_analyzed_by_llm']}") + + if elapsed > 0: + rate = self.stats['functions_processed'] / elapsed + print(f"Average rate: {rate:.2f} functions/second") + + if self.stats['errors']: + print(f"\nErrors encountered: {len(self.stats['errors'])}") + print("Check agent.log for details") + + # Final database state + final_stats = self.db.get_statistics() + verified = final_stats['by_status'].get('verified', 0) + total = final_stats['total'] + progress = (verified / total * 100) if total > 0 else 0 + + print(f"\nFinal Progress: {verified}/{total} ({progress:.1f}%)") + + # Struct learning statistics + try: + struct_stats = self.db.get_struct_learning_stats() + if struct_stats['total_patterns'] > 0: + print(f"\n📚 Struct Learning:") + print(f" Total patterns learned: {struct_stats['total_patterns']}") + print(f" High confidence (≥70%): {struct_stats['high_confidence']}") + print(f" Medium confidence (30-70%): {struct_stats['medium_confidence']}") + print(f" Low confidence (<30%): {struct_stats['low_confidence']}") + except Exception as e: + if self.config.verbose: + self._log(f"Could not get struct learning stats: {e}") + + print("="*60 + "\n") + + # Write summary to file + summary = { + 'completed_at': datetime.now().isoformat(), + 'duration_seconds': int(elapsed), + 'functions_processed': self.stats['functions_processed'], + 'functions_verified': self.stats['functions_verified'], + 'functions_failed': self.stats['functions_failed'], + 'functions_analyzed_by_llm': self.stats['functions_analyzed_by_llm'], + 'final_progress_percent': progress, + 'llm_enabled': self.llm is not None, + 'errors': self.stats['errors'] + } + + try: + with open('agent_summary.json', 'w') as f: + json.dump(summary, f, indent=2) + print("Summary saved to agent_summary.json") + except Exception as e: + print(f"Could not save summary: {e}") + + @staticmethod + def _extract_c_function(content: str, func_name: str) -> Optional[str]: + """Extract a complete C function body by brace-matching.""" + pattern = rf'\b{re.escape(func_name)}\s*\([^)]*\)\s*\{{' + m = re.search(pattern, content, re.DOTALL) + if not m: + return None + brace_start = m.end() - 1 # index of opening '{' + depth = 0 + for i, ch in enumerate(content[brace_start:], brace_start): + if ch == '{': + depth += 1 + elif ch == '}': + depth -= 1 + if depth == 0: + return content[m.start():i + 1] + return None + + def _llm_fix_needs_refine(self): + """ + For each decompiled_needs_refine function whose C code is already in the + source file, use the LLM to fix PSY-Q compile errors, re-check compilation, + and promote to 'decompiled' on success. + """ + needs_refine = self.db.get_functions_by_status( + 'decompiled_needs_refine', module=self.config.module_filter) + if not needs_refine: + self._log("No decompiled_needs_refine functions to fix", "INFO") + return + + self._log(f"LLM fix pass: {len(needs_refine)} decompiled_needs_refine function(s)", "INFO") + project_root = Path(__file__).parent.parent + + # Group by C file so we only compile-check each file once per outer loop + file_to_funcs: dict = {} + for func in needs_refine: + c_file = func.get('c_file_path') + if c_file: + file_to_funcs.setdefault(c_file, []).append(func) + + fixed_total = 0 + + for rel_c_path, funcs_in_file in file_to_funcs.items(): + full_path = project_root / rel_c_path + if not full_path.exists(): + continue + + compile_ok, errors = self.verifier.check_file_compiles(full_path) + + if compile_ok: + # File already compiles without any changes — promote immediately + for func in funcs_in_file: + self.db.update_function_status( + func['name'], 'decompiled', + notes="LLM fix pass: file compiles cleanly") + fixed_total += 1 + self._log(f" {rel_c_path}: already compiles — promoted {len(funcs_in_file)} function(s)", "INFO") + continue + + # Attempt to fix each function in this file with the LLM + content = full_path.read_text() + for func in funcs_in_file: + func_name = func['name'] + error_summary = "; ".join(e['message'] for e in errors[:5]) + + broken_code = self._extract_c_function(content, func_name) + if not broken_code: + if self.config.verbose: + self._log(f" {func_name}: function body not found in {rel_c_path}, skipping", "INFO") + continue + + self._log(f" Fixing {func_name} (errors: {error_summary[:80]})", "INFO") + + try: + fix_result = self.llm.fix_m2c_error(func_name, broken_code, error_summary) + except Exception as e: + self._log(f" {func_name}: LLM call failed: {e}", "WARN") + continue + + if not fix_result or not fix_result.get('fixed_code') or fix_result.get('confidence') == 'low': + confidence = fix_result.get('confidence', 'none') if fix_result else 'none' + self._log(f" {func_name}: no usable fix (confidence={confidence})", "INFO") + continue + + # Apply fix tentatively + patched_content = content.replace(broken_code, fix_result['fixed_code']) + full_path.write_text(patched_content) + + compile_ok_after, errors_after = self.verifier.check_file_compiles(full_path) + + if compile_ok_after: + explanation = (fix_result.get('explanation') or '')[:200] + self.db.update_function_status( + func_name, 'decompiled', + notes=f"LLM fix ({fix_result['confidence']} confidence): {explanation}") + self.stats['functions_analyzed_by_llm'] += 1 + fixed_total += 1 + content = patched_content # carry forward for next func in same file + errors = errors_after # update error list (may be empty now) + self._log(f" ✅ {func_name}: fixed and promoted to decompiled", "INFO") + + # Audit log + try: + audit_log = project_root / "automation" / "llm_fixes_audit.log" + with open(audit_log, 'a') as f: + from datetime import datetime as _dt + f.write(f"{_dt.now().isoformat()}\t{func_name}\t{rel_c_path}\t" + f"{fix_result['confidence']}\t{error_summary[:120]}\t{explanation}\n") + except Exception: + pass + else: + # Revert this function's change and keep looking + full_path.write_text(content) + self._log(f" ❌ {func_name}: LLM fix didn't resolve errors, reverted", "INFO") + + self._log(f"LLM fix pass complete — fixed {fixed_total} function(s)", "INFO") + + +def main(): + parser = argparse.ArgumentParser(description="Autonomous decompilation agent") + + # Main commands + parser.add_argument('--run', action='store_true', + help='Start the agent') + parser.add_argument('--status', action='store_true', + help='Show agent statistics') + + # Configuration + parser.add_argument('--batch', type=int, default=10, + help='Batch size (default: 10)') + parser.add_argument('--parallel', type=int, default=1, metavar='N', + help='Decompile N functions in parallel (default: 1, max: cpu_count)') + parser.add_argument('--duration', type=int, + help='Max duration in seconds') + parser.add_argument('--target', type=int, + help='Stop after N functions') + parser.add_argument('--target-percent', type=float, + help='Stop at completion percentage') + parser.add_argument('--module', type=str, + help='Filter by module (battle, field, etc.)') + parser.add_argument('--max-lines', type=int, + help='Skip functions larger than N lines') + + # Intervals + parser.add_argument('--verify-interval', type=int, default=20, + help='Verify every N functions (default: 20)') + parser.add_argument('--build-interval', type=int, default=100, + help='Full build every N functions (default: 100)') + + # LLM assistance + parser.add_argument('--llm', action='store_true', + help='Enable LLM-assisted analysis (requires Ollama)') + parser.add_argument('--llm-threshold', type=int, default=20, + help='Analyze functions >= N lines with LLM (default: 20)') + parser.add_argument('--llm-model', type=str, default='qwen2.5-coder:7b', + help='LLM model to use (default: qwen2.5-coder:7b)') + parser.add_argument('--llm-auto-fix', action='store_true', + help='Enable automatic LLM fixing of m2c errors') + + # Dependency analysis + parser.add_argument('--no-dependency-analysis', action='store_true', + help='Disable dependency-aware function prioritization') + parser.add_argument('--dependency-weight', type=float, default=0.5, + help='Weight for dependency score vs simplicity (0-1, default: 0.5)') + parser.add_argument('--blocker-multiplier', type=float, default=2.0, + help='Per-dependent bonus added to agent score (default: 2.0; higher = more aggressive blocker prioritization)') + parser.add_argument('--no-strict-ordering', action='store_true', + help='Disable strict bottom-up decompilation ordering (allow decompiling callers before callees)') + parser.add_argument('--filter-cross-module', action='store_true', + help='Only attempt functions whose cross-module callees are already decompiled (eliminates /*?*/ markers)') + + # Retry / recovery + parser.add_argument('--retry-blocked', action='store_true', + help='Re-queue blocked functions when todo queue is empty (smart: only if a same-file callee was recently resolved)') + parser.add_argument('--force-retry-blocked', action='store_true', + help='Re-queue ALL blocked functions regardless of whether callees changed (use after adding type definitions to headers)') + parser.add_argument('--retry-verified', action='store_true', + help='Scan verified/decompiled functions for false positives (INCLUDE_ASM still present) and reset them to todo') + parser.add_argument('--verify-needs-refine', action='store_true', + help='Re-check all decompiled_needs_refine functions: promote to verified/decompiled those whose compile errors are now fixed') + + # Behavior + parser.add_argument('--verbose', '-v', action='store_true', + help='Verbose output') + parser.add_argument('--log-file', type=str, default='agent.log', + help='Log file path') + parser.add_argument('--strict-validation', action='store_true', + help="Use only base soft errors (saved_reg_*, unaligned type); treat '?' type-unknown artifacts as hard rejects (revert to INCLUDE_ASM) instead of decompiled_needs_refine") + + args = parser.parse_args() + + if args.status: + # Show current status + db = DecompDatabase() + stats = db.get_statistics() + + print("\n" + "="*60) + print("AGENT STATUS") + print("="*60) + + total = stats['total'] + by_status = stats['by_status'] + verified = by_status.get('verified', 0) + decompiled = by_status.get('decompiled', 0) + needs_refine = by_status.get('decompiled_needs_refine', 0) + failed = by_status.get('failed', 0) + blocked = by_status.get('blocked', 0) + + print(f"Total: {total}") + print(f"Verified: {verified} ({verified/total*100:.1f}%)") + print(f"Decompiled: {decompiled}") + print(f"Needs Refine: {needs_refine}") + print(f"Blocked: {blocked}") + print(f"Failed: {failed}") + print(f"Todo: {by_status.get('todo', 0)}") + print("="*60 + "\n") + + sys.exit(0) + + if args.verify_needs_refine: + config = AgentConfig() + config.verbose = args.verbose + config.log_file = args.log_file + config.module_filter = args.module + agent = DecompilationAgent(config) + agent.verify_needs_refine(module=args.module, verbose=args.verbose) + sys.exit(0) + + if args.run: + # Create configuration + config = AgentConfig() + config.batch_size = args.batch + config.parallel_workers = max(1, min(args.parallel, cpu_count())) # Clamp to valid range + config.max_duration = args.duration + config.target_count = args.target + config.target_progress = args.target_percent + config.module_filter = args.module + config.max_function_lines = args.max_lines + config.verify_interval = args.verify_interval + config.full_build_interval = args.build_interval + config.use_llm = args.llm + config.llm_analyze_threshold = args.llm_threshold + config.llm_model = args.llm_model + config.llm_auto_fix = args.llm_auto_fix + config.use_dependency_analysis = not args.no_dependency_analysis + config.dependency_weight = args.dependency_weight + config.blocker_multiplier = args.blocker_multiplier + config.strict_dependency_ordering = not args.no_strict_ordering + config.filter_cross_module_unresolved = args.filter_cross_module + config.retry_blocked = args.retry_blocked or args.force_retry_blocked + config.force_retry_blocked = args.force_retry_blocked + config.retry_verified = args.retry_verified + config.verbose = args.verbose + config.log_file = args.log_file + config.strict_validation = args.strict_validation + + # Clear the log file at the start of every manual run so it only + # captures output from this invocation. + if config.log_file: + try: + open(config.log_file, 'w').close() + except OSError: + pass + + # Tee stdout/stderr so every print() call also goes to the log file + if config.log_file: + tee = _TeeOutput(sys.stdout, config.log_file) + sys.stdout = tee + sys.stderr = _TeeOutput(sys.stderr, config.log_file) + + # Create and run agent + agent = DecompilationAgent(config) + + try: + agent.run() + except KeyboardInterrupt: + print("\n\n⚠️ Interrupted by user") + agent._show_final_report() + sys.exit(1) + except Exception as e: + print(f"\n\n❌ Fatal error: {e}") + import traceback + traceback.print_exc() + sys.exit(1) + + else: + parser.print_help() + print("\nQuick examples:") + print(" python agent.py --run") + print(" python agent.py --run --duration 3600 --batch 20 --parallel 4") + print(" python agent.py --run --target 100 --module battle") + print(" python agent.py --run --target-percent 10.0") + print(" python agent.py --run --retry-blocked --parallel 4") + print(" python agent.py --status") + + +if __name__ == '__main__': + main() diff --git a/automation/agent_summary.json b/automation/agent_summary.json new file mode 100644 index 0000000..50f733b --- /dev/null +++ b/automation/agent_summary.json @@ -0,0 +1,11 @@ +{ + "completed_at": "2026-04-22T17:15:44.887510", + "duration_seconds": 131, + "functions_processed": 8, + "functions_verified": 8, + "functions_failed": 110, + "functions_analyzed_by_llm": 0, + "final_progress_percent": 2.029664324746292, + "llm_enabled": false, + "errors": [] +} \ No newline at end of file diff --git a/automation/build.py b/automation/build.py new file mode 100755 index 0000000..4e251c1 --- /dev/null +++ b/automation/build.py @@ -0,0 +1,514 @@ +#!/usr/bin/env python3 +""" +Build & Verification System + +Handles building the project and verifying function matches: +1. Runs ./mako.sh build +2. Parses build output for errors/warnings +3. Checks binary matching for functions +4. Updates database with verification status + +Usage: + python build.py --build # Build entire project + python build.py --verify # Verify all decompiled functions + python build.py --check-function func_name # Check specific function + python build.py --report # Show build/match statistics +""" + +import subprocess +import argparse +import sys +import re +import json +from pathlib import Path +from typing import Optional, Tuple, Dict, List +from database import DecompDatabase + +# Project root is one level up from automation/ +PROJECT_ROOT = Path(__file__).parent.parent +MAKO_SCRIPT = PROJECT_ROOT / "mako.sh" +BUILD_DIR = PROJECT_ROOT / "build" / "us" +OBJDIFF_CLI = PROJECT_ROOT / "bin" / "objdiff-cli-linux-x86_64" + + +class BuildVerifier: + """Handles building and verifying function matches.""" + + def __init__(self, db: DecompDatabase, verbose: bool = False): + self.db = db + self.verbose = verbose + self._objdiff_report_cache: Optional[Dict] = None + + # ------------------------------------------------------------------ + # Per-file PSY-Q compilation check (no LLM required) + # ------------------------------------------------------------------ + + def _get_psyq_params(self, rel_path: str): + """ + Parse build.ninja to find PSY-Q compiler parameters for a source file. + Returns (cc1_binary, cc_flags) or None if the file has no psx-cc rule. + """ + ninja_file = PROJECT_ROOT / 'build.ninja' + if not ninja_file.exists(): + return None + + lines = ninja_file.read_text().splitlines() + + build_line_idx = None + for i, line in enumerate(lines): + if re.match(r'build\s+\S+\.o\s*:\s*psx-cc\s+' + re.escape(rel_path) + r'\b', line): + build_line_idx = i + break + + if build_line_idx is None: + return None + + # Skip the build rule and any continuation lines (ending with "$") + idx = build_line_idx + 1 + while idx < len(lines) and lines[idx - 1].endswith('$'): + idx += 1 + + # Read the indented variable block that follows + cc1 = 'cc1-psx-26' + cc_flags = '-O2 -G0' + while idx < len(lines) and lines[idx].startswith(' '): + m = re.match(r'\s+cc1\s*=\s*(\S+)', lines[idx]) + if m: + cc1 = m.group(1) + m = re.match(r'\s+cc_flags\s*=\s*(.+)', lines[idx]) + if m: + cc_flags = m.group(1).strip() + idx += 1 + + return cc1, cc_flags + + def check_file_compiles(self, file_path: Path) -> Tuple[bool, List[Dict]]: + """ + Compile a single C file using the PSY-Q toolchain and return errors. + + Uses build.ninja to find the correct compiler flags for the file. + Returns (success, errors) where errors is a list of {'line', 'message'} dicts. + On tool/timeout failure returns (True, []) to avoid false-positive reverts. + """ + try: + file_path = Path(file_path) + if not file_path.is_absolute(): + file_path = PROJECT_ROOT / file_path + rel_path = str(file_path.relative_to(PROJECT_ROOT)) + file_name = file_path.name + + params = self._get_psyq_params(rel_path) + if params is None: + # No PSY-Q rule in build.ninja — skip silently. + if self.verbose: + print(f" No PSY-Q build rule for {rel_path}, skipping compile check") + return True, [] + + cc1, cc_flags = params + cmd = ( + f'mipsel-linux-gnu-cpp -Iinclude -Iinclude/psxsdk -DUSE_INCLUDE_ASM -DFF7_STR' + f' -lang-c -Iinclude -Iinclude/psxsdk -undef -Wall -fno-builtin {rel_path}' + f' | bin/str' + f' | iconv --from-code=UTF-8 --to-code=Shift-JIS' + f' | bin/{cc1} -quiet -mcpu=3000 -g -mgas -gcoff {cc_flags} > /dev/null' + ) + result = subprocess.run( + cmd, shell=True, + cwd=str(PROJECT_ROOT), + stderr=subprocess.PIPE, + text=True, + timeout=60 + ) + output = result.stderr + + errors = [] + error_pattern = re.compile(rf'{re.escape(file_name)}:(\d+):\s*(.+)') + for line in output.split('\n'): + match = error_pattern.search(line) + if match: + line_num = int(match.group(1)) + message = match.group(2).strip() + # Skip all warnings — only true errors (undeclared, syntax, etc.) block progress + if 'warning:' in line.lower(): + continue + errors.append({'line': line_num, 'message': message}) + + return len(errors) == 0, errors + + except subprocess.TimeoutExpired: + if self.verbose: + print(f" Compile check timed out for {file_path.name}") + return True, [] + except Exception as e: + if self.verbose: + print(f" Compile check error for {file_path.name}: {e}") + return True, [] + + def run_build(self) -> Tuple[bool, str, str, Dict]: + """ + Run ./mako.sh build + + Returns: + (success, stdout, stderr, parsed_info) tuple + """ + if not MAKO_SCRIPT.exists(): + return False, "", f"mako.sh not found at {MAKO_SCRIPT}", {} + + cmd = [str(MAKO_SCRIPT), "build"] + + if self.verbose: + print(f"Running: {' '.join(cmd)}") + + try: + result = subprocess.run( + cmd, + cwd=PROJECT_ROOT, + capture_output=True, + text=True, + timeout=300 # 5 minute timeout for builds + ) + + success = result.returncode == 0 + parsed = self.parse_build_output(result.stdout, result.stderr) + + return success, result.stdout, result.stderr, parsed + + except subprocess.TimeoutExpired: + return False, "", "Build timed out after 5 minutes", {} + except Exception as e: + return False, "", f"Exception running build: {str(e)}", {} + + def parse_build_output(self, stdout: str, stderr: str) -> Dict: + """ + Parse build output to extract useful information. + + Returns dict with: + - success: bool + - errors: list of error messages + - warnings: list of warning messages + - compile_errors: dict of file -> errors + - link_errors: list of link errors + """ + result = { + 'success': True, + 'errors': [], + 'warnings': [], + 'compile_errors': {}, + 'link_errors': [] + } + + combined = stdout + "\n" + stderr + + # Parse compile errors: "src/file.c:123: error message" + compile_error_pattern = r'(src/[^:]+):(\d+):\s*(.*?)(?=\n|$)' + for match in re.finditer(compile_error_pattern, combined): + file_path, line_num, message = match.groups() + + if 'error' in message.lower(): + result['success'] = False + if file_path not in result['compile_errors']: + result['compile_errors'][file_path] = [] + result['compile_errors'][file_path].append({ + 'line': int(line_num), + 'message': message.strip() + }) + result['errors'].append(f"{file_path}:{line_num}: {message}") + elif 'warning' in message.lower(): + result['warnings'].append(f"{file_path}:{line_num}: {message}") + + # Parse linker errors: "undefined reference to `func_name'" + link_error_pattern = r"undefined reference to `([^']+)'" + for match in re.finditer(link_error_pattern, combined): + func_name = match.group(1) + result['success'] = False + result['link_errors'].append(func_name) + result['errors'].append(f"Undefined reference: {func_name}") + + # Check for ninja failure + if 'ninja: build stopped' in combined or 'FAILED:' in combined: + result['success'] = False + + return result + + def check_function_match(self, function_name: str) -> Tuple[bool, Optional[str]]: + """ + Check if a decompiled function matches the original binary using objdiff-cli. + + Returns: + (matches, error_message) tuple + """ + func = self.db.get_function(function_name) + if not func: + return False, "Function not in database" + + # Check if function still has INCLUDE_ASM in the C file + c_file = PROJECT_ROOT / func['c_file_path'] + if not c_file.exists(): + return False, f"C file not found: {c_file}" + + content = c_file.read_text() + include_asm_pattern = rf'INCLUDE_ASM\s*\(\s*"[^"]*"\s*,\s*{re.escape(function_name)}\s*\)' + if re.search(include_asm_pattern, content): + return False, "Function still uses INCLUDE_ASM" + + # Use objdiff-cli for real binary matching + if not OBJDIFF_CLI.exists(): + return False, "objdiff-cli not found — cannot verify binary match" + + expected_dir = PROJECT_ROOT / "expected" + if not expected_dir.exists(): + return False, "expected/ directory missing — run make rebuild first" + + try: + import tempfile, os + if self._objdiff_report_cache is None: + with tempfile.NamedTemporaryFile(suffix='.json', delete=False) as tf: + tmp_path = tf.name + + result = subprocess.run( + [str(OBJDIFF_CLI), 'report', 'generate', '-o', tmp_path, '--format', 'json'], + cwd=str(PROJECT_ROOT), + capture_output=True, + text=True, + timeout=60, + ) + + if result.returncode != 0: + return False, f"objdiff-cli failed: {result.stderr.strip()[:300]}" + + with open(tmp_path) as f: + self._objdiff_report_cache = json.load(f) + os.unlink(tmp_path) + + report = self._objdiff_report_cache + + # Search for the function in all units + for unit in report.get('units', []): + for sym in unit.get('functions', []): + if sym.get('name') == function_name: + pct = sym.get('fuzzy_match_percent', 0) + if pct >= 100.0: + return True, None + return False, f"Binary match {pct:.1f}% (need 100%)" + + return False, "Function not found in objdiff report" + + except Exception as e: + return False, f"objdiff error: {e}" + + + def verify_decompiled_functions(self) -> Dict[str, any]: + """ + Verify all functions marked as 'decompiled' in the database. + + Returns summary of verification results. + """ + print(f"\n{'='*60}") + print("VERIFYING DECOMPILED FUNCTIONS") + print(f"{'='*60}\n") + + # Get all decompiled functions + decompiled = self.db.get_functions_by_status('decompiled') + + if not decompiled: + print("No functions to verify (none marked as decompiled)") + return {'verified': 0, 'failed': 0, 'total': 0} + + print(f"Found {len(decompiled)} decompiled function(s) to verify\n") + + verified_count = 0 + failed_count = 0 + + for i, func in enumerate(decompiled, 1): + func_name = func['name'] + print(f"[{i}/{len(decompiled)}] Checking {func_name}...") + + matches, error = self.check_function_match(func_name) + + if matches: + print(f" ✅ Matches") + self.db.update_function_status( + func_name, + 'verified', + notes="Verified - no longer uses INCLUDE_ASM" + ) + verified_count += 1 + else: + print(f" ❌ Not matching: {error}") + # Mark as needs refinement (decompiled but doesn't match) + if "still uses INCLUDE_ASM" in error: + self.db.update_function_status( + func_name, + 'decompiled_needs_refine', + notes=f"Decompiled but verification failed: {error}" + ) + else: + self.db.update_function_status( + func_name, + 'decompiled', + notes=f"Decompiled but needs verification: {error}" + ) + failed_count += 1 + + print(f"\n{'='*60}") + print(f"VERIFICATION COMPLETE") + print(f"{'='*60}") + print(f"✅ Verified: {verified_count}") + print(f"❌ Not matching: {failed_count}") + print(f"{'='*60}\n") + + return { + 'verified': verified_count, + 'failed': failed_count, + 'total': len(decompiled) + } + + def full_build_and_verify(self) -> bool: + """ + Run full build and verify all functions. + + Returns True if build succeeded. + """ + print(f"\n{'='*60}") + print("RUNNING BUILD") + print(f"{'='*60}\n") + + success, stdout, stderr, parsed = self.run_build() + self._objdiff_report_cache = None # Invalidate cache after build + + if self.verbose: + print("--- BUILD OUTPUT ---") + print(stdout) + if stderr: + print("--- STDERR ---") + print(stderr) + + if success: + print("✅ Build succeeded!") + print(f"\nWarnings: {len(parsed['warnings'])}") + if parsed['warnings'] and self.verbose: + for warning in parsed['warnings'][:5]: # Show first 5 + print(f" ⚠️ {warning}") + + # Now verify functions + print("\n" + "="*60) + self.verify_decompiled_functions() + + else: + print("❌ Build failed!") + print(f"\nErrors: {len(parsed['errors'])}") + + # Show compile errors + if parsed['compile_errors']: + print("\nCompile Errors:") + for file_path, errors in parsed['compile_errors'].items(): + print(f" {file_path}:") + for err in errors[:3]: # Show first 3 per file + print(f" Line {err['line']}: {err['message']}") + + # Show link errors + if parsed['link_errors']: + print(f"\nUndefined References ({len(parsed['link_errors'])}):") + for func in parsed['link_errors'][:10]: # Show first 10 + print(f" - {func}") + if len(parsed['link_errors']) > 10: + print(f" ... and {len(parsed['link_errors']) - 10} more") + + print(f"\n{'='*60}\n") + return success + + +def show_build_report(db: DecompDatabase): + """Show statistics on build/verification status.""" + stats = db.get_statistics() + + print("\n" + "="*60) + print("BUILD & VERIFICATION REPORT") + print("="*60) + + total = stats['total'] + by_status = stats['by_status'] + + # Status breakdown + verified = by_status.get('verified', 0) + decompiled = by_status.get('decompiled', 0) + needs_refine = by_status.get('decompiled_needs_refine', 0) + in_progress = by_status.get('in_progress', 0) + failed = by_status.get('failed', 0) + blocked = by_status.get('blocked', 0) + todo = by_status.get('todo', 0) + + print(f"\nTotal Functions: {total}") + print(f"\nStatus Breakdown:") + print(f" ✅ Verified: {verified:>6} ({verified/total*100:.1f}%)") + print(f" 🔄 Decompiled: {decompiled:>6} ({decompiled/total*100:.1f}%)") + print(f" 🔧 Needs Refine: {needs_refine:>6} ({needs_refine/total*100:.1f}%)") + print(f" ⚙️ In Progress: {in_progress:>6}") + print(f" ⚠️ Blocked: {blocked:>6}") + print(f" ❌ Failed: {failed:>6}") + print(f" ⏳ Todo: {todo:>6}") + + # Progress calculation (verified = truly done) + completed = verified + if total > 0: + progress_pct = (completed / total) * 100 + print(f"\nVerified Progress: {completed}/{total} ({progress_pct:.1f}%)") + + # Recent activity + print(f"\nBy Module:") + for module, count in stats['by_module'].items(): + print(f" {module:15s}: {count:>4}") + + print("="*60 + "\n") + + +def main(): + parser = argparse.ArgumentParser(description="Build and verification system") + parser.add_argument('--build', action='store_true', + help='Run full build') + parser.add_argument('--verify', action='store_true', + help='Verify all decompiled functions') + parser.add_argument('--check-function', type=str, + help='Check if specific function matches') + parser.add_argument('--report', action='store_true', + help='Show build/verification statistics') + parser.add_argument('--verbose', '-v', action='store_true', + help='Verbose output') + + args = parser.parse_args() + + # Initialize database + db = DecompDatabase() + verifier = BuildVerifier(db, verbose=args.verbose) + + if args.report: + show_build_report(db) + + elif args.build: + success = verifier.full_build_and_verify() + sys.exit(0 if success else 1) + + elif args.verify: + results = verifier.verify_decompiled_functions() + sys.exit(0 if results['failed'] == 0 else 1) + + elif args.check_function: + matches, error = verifier.check_function_match(args.check_function) + if matches: + print(f"✅ {args.check_function} matches!") + sys.exit(0) + else: + print(f"❌ {args.check_function} does not match: {error}") + sys.exit(1) + + else: + parser.print_help() + print("\nQuick examples:") + print(" python build.py --report") + print(" python build.py --verify") + print(" python build.py --build") + print(" python build.py --check-function AverageSZ4") + + +if __name__ == '__main__': + main() diff --git a/automation/build_warnings_analysis.txt b/automation/build_warnings_analysis.txt new file mode 100644 index 0000000..5d269e1 --- /dev/null +++ b/automation/build_warnings_analysis.txt @@ -0,0 +1,318 @@ +FF7 DECOMPILATION BUILD WARNINGS ANALYSIS +Generated: 2026-04-12 +Source: make rebuild output +================================================================================ + +SEVERITY DEFINITIONS +-------------------- +BLOCKING - File fails to produce any object file. All functions in that TU are + broken. Must fix before ANY decompilation in that module can be + validated. +CRITICAL - Produces a valid object file but generates wrong machine code for + specific functions. Will prevent byte-exact matching and can cause + runtime crashes if the function is tested. +HARMFUL - Changes calling-convention assumptions (implicit-int return type, + extern/static mismatch). The function may still match the original + binary by accident, but any freshly decompiled function that calls + it will assume the wrong ABI. +COSMETIC - The compiler resolves the issue correctly. No impact on generated + code or matching. Safe to ignore. + +================================================================================ +SECTION 1 — BLOCKING (file fails to build) +================================================================================ + +FILE: src/field/field.c + field.c:3365: parse error before `->' + field.c:3370: redefinition of `__maspsx_include_asm_hack_func_800DA480' + field.c:3362: previously defined here + field.c:3372: redefinition of `__maspsx_include_asm_hack_func_800DA4FC' + field.c:3364: previously defined here + (+ assembler duplicate-symbol errors for func_800DA480 / func_800DA4FC) + + ROOT CAUSE: The agent successfully decompiled func_800DA444 and inserted the + function body, but failed to remove the original INCLUDE_ASM macro. The result + was that the decompiled function body was appended AFTER its own INCLUDE_ASM + replacement attempt, leaving a naked fragment of the function body (3 lines of + struct member assignments, no function header) at the top level of the file, + followed by duplicate INCLUDE_ASM macros for func_800DA480 and func_800DA4FC. + + The naked `arg1->unk2 = 0;` at top level triggers the parse error. The parser + then falls out of sync and re-encounters the INCLUDE_ASM macros, which expand + to label declarations that were already emitted, causing assembler + "symbol already defined" errors. + + STATUS: FIXED IN THIS SESSION — duplicate fragment removed from field.c. + field.c now compiles (produces object file). The remaining ~79 "request for + member" diagnostics in field.c are Category 2c (Critical, wrong offset) — the + file builds but many functions produce incorrect machine code. + + SECONDARY ISSUE (same file — harmful, not blocking): + Multiple struct-member accesses on void* and unknown-struct pointers throughout + field.c (unk4, unk5, unk10, unk26, unkA6, etc.). PSY-Q C89 emits warnings but + still compiles these as pointer arithmetic. The generated code is functionally + correct for accessing struct fields by offset, but the compiler may occasionally + choose different load/store width. Not blocking; does not cause matching + failures in practice. + +================================================================================ +SECTION 2 — CRITICAL (valid object file, wrong code for specific functions) +================================================================================ + +--- 2a. ? placeholders in extern declarations (unknown type) --- + + akao.c:213: ? SpuSetIRQ(?); / ? SpuSetIRQAddr(?); / ? SpuSetTransferCallback(?); + psxsdk.c:247: /*?*/ void func_80034CAC(?); + psxsdk.c:249: s32 func_80041E30(?, ?); + 18B8.c:554: u16 func_800A460C(s32*, s32*, ?*, ?); + battle1.c:311: s32 func_800429E0(?, ?); + battle1.c:312: /*?*/ void func_80043938(?); + + IMPACT: A `?` at the TOP LEVEL (in an extern declaration, not inside a function + body) causes a parse error for that line. PSY-Q C89 then discards the rest of + the current "declaration" and attempts to recover. Subsequent functions in the + same file may compile with incorrect prototype assumptions about the affected + symbol because the declaration was silently dropped. + + This is especially harmful for akao.c:213 where THREE SpuXxx SDK functions lose + their prototype, causing every call to them in akao.c to use implicit-int + calling convention. Since those are BIOS/PSYQ library functions with defined + signatures, every call site in that file generates wrong argument-narrowing or + wrong return-value-widening code. + + FIX NEEDED: + - akao.c:213: Replace `? SpuSetIRQ(?)` etc. with correct PSYQ signatures + (available from psxsdk headers). SpuSetIRQ(void), SpuSetIRQAddr(SpuIRQAttr*), + SpuSetTransferCallback(SpuTransferCallbackProc) — use `void func(void)` as + safe fallback if exact types unknown. + - psxsdk.c:247-249: Replace `?` parameters with `s32` or `void*` as appropriate. + - 18B8.c:554: Replace `?*` and `?` with `void*` and `s32`. + - battle1.c:311-312: Replace `?` parameters with `s32`. + +--- 2b. too many arguments to function --- + + akao.c:1454: too many arguments to function `func_80032E6C' + (in func_800335D8) + + IMPACT: In PSY-Q C89, passing extra arguments pushes values to registers $a0-$a3 + beyond what the callee expects. The callee ignores these, so runtime behaviour + is unchanged. However, the call site emits extra argument-setup instructions, + making the compiled code longer and different from the original binary. + func_800335D8 will never produce a byte-exact match with this mismatch. + + FIX NEEDED: Inspect the call at akao.c:1454. Either the call passes one extra + argument (remove it), or func_80032E6C actually accepts more parameters than + declared — in which case fix the declaration. + +--- 2c. Struct member access on a non-struct pointer (real errors, not warnings) --- + + psxsdk.c:412-413: request for member `unk0/unk8/unk2C/unk2/unkA/unk28' + in func_80036100 + akao.c:770,776: request for member `unk4/unk8' (void* pointer) in func_8002C6C8 + akao.c:1378-1383: request for member `unk0/unkE0/unkFC/unk38/unk24' + (void* pointer) in func_80032E6C + ending.c:378-392: request for member `unk0/unk6/unk8/unkC/unk1' + (void* pointer) in func_800A34C4 + field.c: multiple functions — struct has no member / request for member + (on incorrect pointer type) + + IMPACT: When PSY-Q C89 cannot resolve a struct member access, it falls back to + treating the expression as integer arithmetic using offset 0. The member name + is lost and fields at non-zero offsets produce WRONG loads/stores — the + generated code accesses offset 0 instead of the actual field offset. This + directly produces wrong behaviour and impossible matching. + + These are symptoms of m2c emitting `void*` for a pointer that needed a typed + struct. The struct definitions for these pointers likely exist in the module + headers but m2c used `void*` due to incomplete context. + + FIX NEEDED: Identify the correct struct type for the pointer variable in each + function and cast it appropriately, e.g. cast `void* var_a0` to the actual + struct type before accessing members. Each function needs individual attention. + +================================================================================ +SECTION 3 — HARMFUL (ABI/calling-convention mismatch) +================================================================================ + +--- 3a. Functions used before declared (implicit int return type) --- + + psxsdk.c:357: func_80034F3C was implicitly declared to return `int', later redeclared + 18B8.c:4524: func_80025C94 was implicitly declared to return `int', later redeclared + 18B8.c:4533: func_80025CD4 was implicitly declared to return `int', later redeclared + world.c:2208: func_800B7C44 was implicitly declared to return `int', later redeclared + battle3.c:1884: func_800E593C was implicitly declared to return `int', later redeclared + battle1.c:1699: func_800BAF34 was implicitly declared to return `int', later redeclared + battle.c:3652: func_800AE954 was implicitly declared to return `int', later redeclared + + IMPACT: In C89, calling a function before its first declaration causes the + compiler to assume it returns `int`. If the actual return type is `void` or a + pointer, the compiler emits a zero-extension or truncation at every call site + encountered BEFORE the definition. Functions decompiled that call these + symbols before their definition will contain extra sign-extend or move + instructions not present in the original binary. + + FIX NEEDED: Add forward declarations for each of these functions at the top of + their respective files (or in the per-module decomp_decls header), before their + first call site. The declaration just needs the correct return type. + +--- 3b. Functions declared implicitly extern, redefined as static --- + + world.c:2208: func_800B7C44 declared implicitly extern and later static + world.c:2580: func_800BC1AC declared implicitly extern and later static + battle3.c:1884: func_800E593C declared implicitly extern and later static + battle1.c:1699: func_800BAF34 declared implicitly extern and later static + + IMPACT: PSY-Q C89 gives these functions extern linkage for every call site that + appears before the static definition. The linker resolves correctly (same TU), + but the compiler may emit different register-save/restore prologues for + "extern" vs "static" functions in this compiler version. Any function that + calls one of these before its definition may not match the original binary. + + FIX NEEDED: Add `static` (or a static forward declaration) for these functions + before their first call site within the file. + +--- 3c. savemenu.c conflicting types for func_801D0408 --- + + savemenu.c:17: conflicting types for `func_801D0408' + include/decomp_decls_menu.h:10: previous declaration of `func_801D0408' + + IMPACT: decomp_decls_menu.h declared it as `s32 func_801D0408(s32)` but the + actual definition is `static void func_801D0408(u16)`. Every call site in + savemenu.c compiled by m2c for context will see the wrong signature. + + STATUS: FIXED IN THIS SESSION — decomp_decls_menu.h updated to + `void func_801D0408(u16 arg0)`. + +================================================================================ +SECTION 4 — COSMETIC (no impact on generated code or matching) +================================================================================ + +--- 4a. Battle headers included twice (double-include of battle.h / battle_private.h) --- + + Affects: battle.c, battle1.c, battle2.c, battle3.c + ~60+ "conflicting types / redefinition" messages per file: + include/../src/battle/battle.h vs src/battle/battle.h + include/../src/battle/battle_private.h vs src/battle/battle_private.h + + ROOT CAUSE: battle*.c files include `battle_private.h` directly (from src/), + AND decomp_decls_battle.h also includes `battle_private.h` via the path + `include/../src/battle/battle_private.h`. PSY-Q's preprocessor sees these as + different files (different paths) and processes both. The headers lack + `#pragma once` or proper include guards compatible with this preprocessor. + + IMPACT: None. PSY-Q C89 warns about redefined enum values and struct types but + uses the FIRST definition in both cases, which is identical to the second. + Generated code is byte-for-byte identical to a clean include. The battle module + compiles successfully despite this noise. + + FIX STRATEGY: Add `#ifndef BATTLE_H / #define BATTLE_H ... #endif` guards to + `src/battle/battle.h` and `src/battle/battle_private.h`. This is the correct + permanent fix, but it is not urgent. + +--- 4b. Incompatible pointer type warnings (passing arg N / assignment) --- + + Numerous occurrences in: akao.c, psxsdk.c, 18B8.c, cnfgmenu.c, ending.c, + field.c, world.c, battle.c, battle1.c, battle2.c, battle3.c + + e.g.: "passing arg 1 of `func_80028030' from incompatible pointer type" + "assignment from incompatible pointer type" + "assignment makes pointer from integer without a cast" + + IMPACT: On MIPS/PSX, all pointers are 32-bit regardless of pointed-to type. + Passing an incompatible pointer type generates identical machine code to + passing the matching type — the register value is the same. These warnings + indicate m2c used void* or a generic opaque struct where a typed pointer was + expected, but the function call itself is correct. + + Exception: "makes pointer from integer without a cast" can indicate a genuine + integer-to-pointer conversion which the compiler sign-extends. These are rare + and in practice still produce the expected 32-bit load into the pointer register. + + VERDICT: Cosmetic. No action needed for matching purposes. + +--- 4c. Large integer truncation / overflow in constant conversion --- + + battle.c:1549,1740,1754 battle1.c:1236,1619,1908 + 18B8.c:4791,4814,4856,4899 + + e.g.: "large integer implicitly truncated to unsigned type" + "overflow in implicit constant conversion" + + IMPACT: The compiler truncates the constant correctly to the target width. + These are informational only; the generated instruction uses the truncated + value, matching the original binary. + +--- 4d. Comparison is always 1 / comparison between pointer and integer --- + + 18B8.c:1580: comparison is always 1 due to limited range of data type + (in func_800159B0) + field.c:1971: comparison between pointer and integer (in func_800CF368) + + IMPACT: The comparison with a constant that exceeds the type's range folds to + a constant at compile time. The generated code may differ from the original + (which wouldn't have this fold), making the affected function un-matchable + from this decompilation. However, these are in already-decompiled functions + and are quality issues rather than blocking issues. + +--- 4e. psxsdk.c: assignment from incompatible pointer type (lines 120, 139, 144) --- + + "warning: assignment from incompatible pointer type" in func_80033CB8, + func_80033E34, DS_read + + IMPACT: Function pointer table assignment with void* intermediary. MIPS ABI + passes function pointers as 32-bit values. Cosmetic. + +--- 4f. cast from pointer to integer of different size (battle2.c:1427,1434) --- + + In func_800D54EC. On MIPS-O32 all pointers and integers are 32-bit, so this + cast is safe and generates no extra instructions. + +================================================================================ +SECTION 5 — SUMMARY TABLE +================================================================================ + +| File | Severity | Issue | Fixed? | +|---------------|----------|--------------------------------------------|--------| +| field.c | BLOCKING | Duplicate func_800DA444 body at top level | YES | +| akao.c:213 | CRITICAL | ? in SpuSetXxx extern decls | NO | +| psxsdk.c:247+ | CRITICAL | ? in func_80034CAC / func_80041E30 params | NO | +| 18B8.c:554 | CRITICAL | ? in func_800A460C params | NO | +| battle1.c:311 | CRITICAL | ? in func_800429E0 / func_80043938 params | NO | +| akao.c:1454 | CRITICAL | Too many args to func_80032E6C | NO | +| psxsdk.c:412 | CRITICAL | void* struct members in func_80036100 | NO | +| akao.c:770+ | CRITICAL | void* struct members in akao functions | NO | +| ending.c:378+ | CRITICAL | void* struct members in func_800A34C4 | NO | +| psxsdk.c:357 | HARMFUL | func_80034F3C implicit int forward decl | NO | +| 18B8.c:4524+ | HARMFUL | func_80025C94/D4 implicit int | NO | +| world.c:2208 | HARMFUL | func_800B7C44 implicit int + later static | NO | +| battle3.c:1884| HARMFUL | func_800E593C implicit int + later static | NO | +| battle1.c:1699| HARMFUL | func_800BAF34 implicit int + later static | NO | +| battle.c:3652 | HARMFUL | func_800AE954 implicit int | NO | +| savemenu.c:17 | HARMFUL | func_801D0408 conflicting types (header) | YES | +| battle*.c | COSMETIC | double-include of battle.h/battle_private | NO | +| all files | COSMETIC | incompatible pointer type (void* vs typed) | N/A | +| 18B8.c,battle | COSMETIC | large integer truncation / overflow | N/A | +| 18B8.c,field | COSMETIC | range-limited comparison / ptr vs int | N/A | + +================================================================================ +RECOMMENDED FIX PRIORITY +================================================================================ + +1. IMMEDIATE — Fix ? parameters in extern decls (akao.c, psxsdk.c, 18B8.c, + battle1.c). Replace all bare `?` with `s32` or `void*` as appropriate. + These suppress parse errors that silently corrupt prototype assumptions for + entire compilation units. + +2. HIGH — Fix implicit-int / static mismatch functions (section 3a/3b). Add + forward declarations before the first call site in each file. This prevents + ABI mismatches that make newly-decompiled callers impossible to match. + +3. MEDIUM — Fix void* struct member access (section 2c). These require identifying + the correct struct type per pointer variable, which is manual work. Functions + with these issues cannot currently produce correct code and will be rejected + by the decompilation verifier. + +4. MEDIUM — Fix akao.c:1454 extra argument. Inspect call vs declaration. + +5. LOW — Add include guards to battle.h and battle_private.h to eliminate the + double-include noise. Not urgent but cleans up hundreds of cosmetic warnings. diff --git a/automation/compile_errors_report.json b/automation/compile_errors_report.json new file mode 100644 index 0000000..215d912 --- /dev/null +++ b/automation/compile_errors_report.json @@ -0,0 +1,3579 @@ +{ + "src/main/psxsdk.c": { + "exists": true, + "ok": false, + "errors": [ + { + "line": 187, + "message": "parse error before `?'" + }, + { + "line": 190, + "message": "parse error before `?'" + }, + { + "line": 191, + "message": "parse error before `?'" + }, + { + "line": 331, + "message": "invalid type argument of `unary *'" + } + ], + "severe_errors": [], + "functions": [ + "CdLastPos", + "ChangeClearPAD", + "ChangeClearRCnt", + "ChangeClearSIO", + "CheckCallback", + "CloseEvent", + "DecDCTBufSize", + "DeliverEvent", + "DisableEvent", + "EnableEvent", + "FlushCache", + "GPU_cw", + "GetGraphDebug", + "GetVideoMode", + "HookEntryInt", + "InitCARD2", + "InitHeap", + "InitPAD", + "OpenEvent", + "OpenTIM", + "PAD_dr", + "PAD_init", + "ResetEntryInt", + "ReturnFromException", + "SetDQA", + "SetDQB", + "SetData32", + "SetIR0", + "SetMem", + "SetSp", + "SetVertex0", + "SetVertex1", + "SetVertex2", + "StartCARD2", + "StartPAD", + "StopPAD", + "SystemError", + "TestEvent", + "UnDeliverEvent", + "WaitEvent", + "_96_remove", + "_bu_init", + "func_80033C20", + "func_8003408C", + "func_80034410", + "func_80034430", + "func_80034444", + "func_8003447C", + "func_800345BC", + "func_800347B4", + "func_800347F8", + "func_80034BB0", + "func_80034D18", + "func_80034D5C", + "func_80034DB0", + "func_80035D64", + "func_80036038", + "func_80036190", + "func_800425F8" + ], + "recommendation": "recommend_fix" + }, + "src/main/18B8.c": { + "exists": true, + "ok": false, + "errors": [ + { + "line": 825, + "message": "warning: type mismatch with previous external decl" + }, + { + "line": 825, + "message": "warning: type mismatch with previous implicit declaration" + }, + { + "line": 649, + "message": "warning: previous implicit declaration of `func_80014C80'" + }, + { + "line": 825, + "message": "warning: `func_80014C80' was previously implicitly declared to return `int'" + }, + { + "line": 946, + "message": "warning: type mismatch with previous external decl" + }, + { + "line": 946, + "message": "warning: type mismatch with previous implicit declaration" + }, + { + "line": 641, + "message": "warning: previous implicit declaration of `func_80015B44'" + }, + { + "line": 946, + "message": "warning: `func_80015B44' was previously implicitly declared to return `int'" + }, + { + "line": 979, + "message": "invalid type argument of `->'" + }, + { + "line": 979, + "message": "invalid type argument of `->'" + }, + { + "line": 983, + "message": "invalid type argument of `->'" + }, + { + "line": 983, + "message": "invalid type argument of `->'" + }, + { + "line": 1550, + "message": "invalid type argument of `unary *'" + }, + { + "line": 1556, + "message": "invalid type argument of `unary *'" + }, + { + "line": 1752, + "message": "request for member `unk0' in something not a structure or union" + }, + { + "line": 1758, + "message": "request for member `unk2' in something not a structure or union" + }, + { + "line": 1771, + "message": "request for member `unk2' in something not a structure or union" + }, + { + "line": 1776, + "message": "request for member `unk2' in something not a structure or union" + }, + { + "line": 1776, + "message": "request for member `unk2' in something not a structure or union" + }, + { + "line": 1776, + "message": "request for member `unk0' in something not a structure or union" + }, + { + "line": 2033, + "message": "warning: type mismatch with previous external decl" + }, + { + "line": 2033, + "message": "warning: type mismatch with previous implicit declaration" + }, + { + "line": 1547, + "message": "warning: previous implicit declaration of `func_8001F6C0'" + }, + { + "line": 2033, + "message": "warning: `func_8001F6C0' was previously implicitly declared to return `int'" + }, + { + "line": 2041, + "message": "warning: type mismatch with previous external decl" + }, + { + "line": 2041, + "message": "warning: type mismatch with previous implicit declaration" + }, + { + "line": 1546, + "message": "warning: previous implicit declaration of `func_8001F6E4'" + }, + { + "line": 2041, + "message": "warning: `func_8001F6E4' was previously implicitly declared to return `int'" + }, + { + "line": 2309, + "message": "incompatible types in assignment" + }, + { + "line": 2586, + "message": "warning: assignment from incompatible pointer type" + }, + { + "line": 2612, + "message": "warning: passing arg 1 of `func_80025CD4' from incompatible pointer type" + }, + { + "line": 2701, + "message": "warning: type mismatch with previous external decl" + }, + { + "line": 2701, + "message": "warning: type mismatch with previous implicit declaration" + }, + { + "line": 2024, + "message": "warning: previous implicit declaration of `func_80026A34'" + }, + { + "line": 2701, + "message": "warning: `func_80026A34' was previously implicitly declared to return `int'" + }, + { + "line": 2799, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2799, + "message": "request for member `unk3' in something not a structure or union" + }, + { + "line": 2800, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2800, + "message": "request for member `unk7' in something not a structure or union" + }, + { + "line": 2802, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2802, + "message": "request for member `unk8' in something not a structure or union" + }, + { + "line": 2803, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2803, + "message": "request for member `unkA' in something not a structure or union" + }, + { + "line": 2804, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2804, + "message": "request for member `unkC' in something not a structure or union" + }, + { + "line": 2805, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2805, + "message": "request for member `unkD' in something not a structure or union" + }, + { + "line": 2806, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2806, + "message": "request for member `unkE' in something not a structure or union" + }, + { + "line": 2816, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2816, + "message": "request for member `unk3' in something not a structure or union" + }, + { + "line": 2817, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2817, + "message": "request for member `unk7' in something not a structure or union" + }, + { + "line": 2819, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2819, + "message": "request for member `unk8' in something not a structure or union" + }, + { + "line": 2820, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2820, + "message": "request for member `unkA' in something not a structure or union" + }, + { + "line": 2821, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2821, + "message": "request for member `unkC' in something not a structure or union" + }, + { + "line": 2822, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2822, + "message": "request for member `unkD' in something not a structure or union" + }, + { + "line": 2823, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2823, + "message": "request for member `unkE' in something not a structure or union" + }, + { + "line": 2840, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2840, + "message": "request for member `unk3' in something not a structure or union" + }, + { + "line": 2841, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2841, + "message": "request for member `unk7' in something not a structure or union" + }, + { + "line": 2843, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2843, + "message": "request for member `unk8' in something not a structure or union" + }, + { + "line": 2844, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2844, + "message": "request for member `unkA' in something not a structure or union" + }, + { + "line": 2845, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2845, + "message": "request for member `unkC' in something not a structure or union" + }, + { + "line": 2846, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2846, + "message": "request for member `unkD' in something not a structure or union" + }, + { + "line": 2847, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2847, + "message": "request for member `unkE' in something not a structure or union" + }, + { + "line": 2864, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2864, + "message": "request for member `unk3' in something not a structure or union" + }, + { + "line": 2865, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2865, + "message": "request for member `unk7' in something not a structure or union" + }, + { + "line": 2866, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2866, + "message": "request for member `unk18' in something not a structure or union" + }, + { + "line": 2867, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2867, + "message": "request for member `unk8' in something not a structure or union" + }, + { + "line": 2868, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2868, + "message": "request for member `unkA' in something not a structure or union" + }, + { + "line": 2870, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2870, + "message": "request for member `unkC' in something not a structure or union" + }, + { + "line": 2871, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2871, + "message": "request for member `unkE' in something not a structure or union" + }, + { + "line": 2872, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2872, + "message": "request for member `unk10' in something not a structure or union" + }, + { + "line": 2874, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2874, + "message": "request for member `unk12' in something not a structure or union" + }, + { + "line": 2875, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2875, + "message": "request for member `unk14' in something not a structure or union" + }, + { + "line": 2876, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2876, + "message": "request for member `unk16' in something not a structure or union" + }, + { + "line": 2877, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2877, + "message": "request for member `unk4' in something not a structure or union" + }, + { + "line": 2878, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2878, + "message": "request for member `unk5' in something not a structure or union" + }, + { + "line": 2879, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2879, + "message": "request for member `unk6' in something not a structure or union" + }, + { + "line": 2883, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2883, + "message": "request for member `unk3' in something not a structure or union" + }, + { + "line": 2884, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2884, + "message": "request for member `unk7' in something not a structure or union" + }, + { + "line": 2885, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2885, + "message": "request for member `unk8' in something not a structure or union" + }, + { + "line": 2886, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2886, + "message": "request for member `unkA' in something not a structure or union" + }, + { + "line": 2887, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2887, + "message": "request for member `unkC' in something not a structure or union" + }, + { + "line": 2888, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2888, + "message": "request for member `unkE' in something not a structure or union" + }, + { + "line": 2889, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2889, + "message": "request for member `unk4' in something not a structure or union" + }, + { + "line": 2890, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2890, + "message": "request for member `unk5' in something not a structure or union" + }, + { + "line": 2891, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2891, + "message": "request for member `unk6' in something not a structure or union" + }, + { + "line": 2913, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2913, + "message": "request for member `unk8' in something not a structure or union" + }, + { + "line": 2914, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2914, + "message": "request for member `unkA' in something not a structure or union" + }, + { + "line": 2916, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2916, + "message": "request for member `unk10' in something not a structure or union" + }, + { + "line": 2917, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2917, + "message": "request for member `unk12' in something not a structure or union" + }, + { + "line": 2918, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2918, + "message": "request for member `unk18' in something not a structure or union" + }, + { + "line": 2920, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2920, + "message": "request for member `unk1A' in something not a structure or union" + }, + { + "line": 2921, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2921, + "message": "request for member `unk20' in something not a structure or union" + }, + { + "line": 2922, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2922, + "message": "request for member `unk22' in something not a structure or union" + }, + { + "line": 2923, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2923, + "message": "request for member `unk4' in something not a structure or union" + }, + { + "line": 2924, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2924, + "message": "request for member `unk5' in something not a structure or union" + }, + { + "line": 2925, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2925, + "message": "request for member `unk6' in something not a structure or union" + }, + { + "line": 2926, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2926, + "message": "request for member `unkC' in something not a structure or union" + }, + { + "line": 2927, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2927, + "message": "request for member `unkD' in something not a structure or union" + }, + { + "line": 2928, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2928, + "message": "request for member `unkE' in something not a structure or union" + }, + { + "line": 2929, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2929, + "message": "request for member `unk14' in something not a structure or union" + }, + { + "line": 2930, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2930, + "message": "request for member `unk15' in something not a structure or union" + }, + { + "line": 2931, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2931, + "message": "request for member `unk16' in something not a structure or union" + }, + { + "line": 2932, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2932, + "message": "request for member `unk1C' in something not a structure or union" + }, + { + "line": 2933, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2933, + "message": "request for member `unk1D' in something not a structure or union" + }, + { + "line": 2934, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2934, + "message": "request for member `unk1E' in something not a structure or union" + }, + { + "line": 2941, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2941, + "message": "request for member `unk8' in something not a structure or union" + }, + { + "line": 2942, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2942, + "message": "request for member `unkA' in something not a structure or union" + }, + { + "line": 2943, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2943, + "message": "request for member `unk10' in something not a structure or union" + }, + { + "line": 2944, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2944, + "message": "request for member `unk12' in something not a structure or union" + }, + { + "line": 2945, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2945, + "message": "request for member `unk18' in something not a structure or union" + }, + { + "line": 2946, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2946, + "message": "request for member `unk1A' in something not a structure or union" + }, + { + "line": 2947, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2947, + "message": "request for member `unk20' in something not a structure or union" + }, + { + "line": 2948, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2948, + "message": "request for member `unk22' in something not a structure or union" + }, + { + "line": 2949, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2949, + "message": "request for member `unk4' in something not a structure or union" + }, + { + "line": 2950, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2950, + "message": "request for member `unk5' in something not a structure or union" + }, + { + "line": 2951, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2951, + "message": "request for member `unk6' in something not a structure or union" + }, + { + "line": 2952, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2952, + "message": "request for member `unkC' in something not a structure or union" + }, + { + "line": 2953, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2953, + "message": "request for member `unkD' in something not a structure or union" + }, + { + "line": 2954, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2954, + "message": "request for member `unkE' in something not a structure or union" + }, + { + "line": 2955, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2955, + "message": "request for member `unk14' in something not a structure or union" + }, + { + "line": 2956, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2956, + "message": "request for member `unk15' in something not a structure or union" + }, + { + "line": 2957, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2957, + "message": "request for member `unk16' in something not a structure or union" + }, + { + "line": 2958, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2958, + "message": "request for member `unk1C' in something not a structure or union" + }, + { + "line": 2959, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2959, + "message": "request for member `unk1D' in something not a structure or union" + }, + { + "line": 2960, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 2960, + "message": "request for member `unk1E' in something not a structure or union" + }, + { + "line": 3018, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 3018, + "message": "request for member `unk3' in something not a structure or union" + }, + { + "line": 3019, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 3019, + "message": "request for member `unk7' in something not a structure or union" + }, + { + "line": 3023, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 3023, + "message": "request for member `unk8' in something not a structure or union" + }, + { + "line": 3024, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 3024, + "message": "request for member `unkA' in something not a structure or union" + }, + { + "line": 3025, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 3025, + "message": "request for member `unkC' in something not a structure or union" + }, + { + "line": 3026, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 3026, + "message": "request for member `unkD' in something not a structure or union" + }, + { + "line": 3027, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 3027, + "message": "request for member `unk10' in something not a structure or union" + }, + { + "line": 3028, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 3028, + "message": "request for member `unk12' in something not a structure or union" + }, + { + "line": 3029, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 3029, + "message": "request for member `unkE' in something not a structure or union" + }, + { + "line": 3037, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 3037, + "message": "request for member `unk3' in something not a structure or union" + }, + { + "line": 3038, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 3038, + "message": "request for member `unk7' in something not a structure or union" + }, + { + "line": 3040, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 3040, + "message": "request for member `unk8' in something not a structure or union" + }, + { + "line": 3041, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 3041, + "message": "request for member `unkA' in something not a structure or union" + }, + { + "line": 3042, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 3042, + "message": "request for member `unkC' in something not a structure or union" + }, + { + "line": 3043, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 3043, + "message": "request for member `unkD' in something not a structure or union" + }, + { + "line": 3044, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 3044, + "message": "request for member `unk10' in something not a structure or union" + }, + { + "line": 3045, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 3045, + "message": "request for member `unk12' in something not a structure or union" + }, + { + "line": 3046, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 3046, + "message": "request for member `unkE' in something not a structure or union" + } + ], + "severe_errors": [], + "functions": [ + "__SN_ENTRY_POINT", + "func_8001117C", + "func_8001155C", + "func_80011784", + "func_80011AEC", + "func_80011BB4", + "func_80012840", + "func_800128B8", + "func_80012DB0", + "func_800131B8", + "func_800134F4", + "func_80013564", + "func_800135C0", + "func_800138EC", + "func_800148A0", + "func_80014980", + "func_80014A84", + "func_80014B08", + "func_80014BE4", + "func_80014C44", + "func_80014C80", + "func_80014E0C", + "func_80014E74", + "func_800150E4", + "func_800155A4", + "func_80015668", + "func_80015AFC", + "func_80015B44", + "func_80015B50", + "func_80015B88", + "func_80015BC0", + "func_80015C3C", + "func_80015D14", + "func_80015D64", + "func_80016340", + "func_800166C0", + "func_80016808", + "func_800169B8", + "func_80016F90", + "func_8001708C", + "func_80017678", + "func_80018028", + "func_800184C0", + "func_800185A8", + "func_80018AB0", + "func_80018B14", + "func_80018C94", + "func_80018D4C", + "func_80018E18", + "func_80018E90", + "func_80018ECC", + "func_80019338", + "func_8001937C", + "func_800193F4", + "func_8001964C", + "func_80019690", + "func_800197B8", + "func_80019E4C", + "func_8001A280", + "func_8001A384", + "func_8001A684", + "func_8001A980", + "func_8001A9CC", + "func_8001AB1C", + "func_8001AE08", + "func_8001AEE4", + "func_8001B704", + "func_8001BA54", + "func_8001BB30", + "func_8001C3CC", + "func_8001C484", + "func_8001C498", + "func_8001C4E8", + "func_8001C5BC", + "func_8001C788", + "func_8001C808", + "func_8001C8D4", + "func_8001C980", + "func_8001CB48", + "func_8001D6A8", + "func_8001DE70", + "func_8001DEF0", + "func_8001EC70", + "func_8001FA28", + "func_8001FA68", + "func_8001FAAC", + "func_8001FCDC", + "func_8001FF8C", + "func_8001FFD4", + "func_80020B68", + "func_800211B8", + "func_80022B5C", + "func_80023050", + "func_8002305C", + "func_800230C4", + "func_8002368C", + "func_80023788", + "func_8002382C", + "func_80023940", + "func_80023AC4", + "func_80024A04", + "func_80025040", + "func_80025174", + "func_80025288", + "func_80025310", + "func_80025380", + "func_800254E4", + "func_80025788", + "func_80025B10", + "func_80025B48", + "func_80025ED4", + "func_8002603C", + "func_80026408", + "func_800269D0", + "func_800269E8", + "func_80026A00", + "func_80026A0C", + "func_80026A20", + "func_80026A34", + "func_80026B64", + "func_80026B70", + "func_80026C5C", + "func_80026F44", + "func_8002708C", + "func_80027354", + "func_80027990", + "func_800285AC", + "func_80028930", + "func_80028CA0", + "func_80028E00", + "func_80029114", + "main" + ], + "recommendation": "recommend_revert" + }, + "src/main/akao.c": { + "exists": true, + "ok": false, + "errors": [ + { + "line": 276, + "message": "warning: overflow in implicit constant conversion" + } + ], + "severe_errors": [], + "functions": [ + "func_800293D0", + "func_800294A4", + "func_8002988C", + "func_80029998", + "func_80029B78", + "func_8002A6C4", + "func_8002A798", + "func_8002A7E8", + "func_8002A958", + "func_8002B1A8", + "func_8002BCCC", + "func_8002BD04", + "func_8002BFCC", + "func_8002C004", + "func_8002CA84", + "func_8002FDA0", + "func_800318BC", + "func_80032B30", + "func_80032C20", + "func_80032CE8", + "func_80033A90" + ], + "recommendation": "recommend_fix" + }, + "src/brom/brom.c": { + "exists": true, + "ok": true, + "errors": [], + "severe_errors": [], + "functions": [ + "func_800A0000", + "func_800A0514" + ], + "recommendation": "no_action" + }, + "src/ending/ending.c": { + "exists": true, + "ok": false, + "errors": [ + { + "line": 78, + "message": "`D_800A6528' undeclared (first use this function)" + }, + { + "line": 78, + "message": "(Each undeclared identifier is reported only once" + }, + { + "line": 78, + "message": "for each function it appears in.)" + }, + { + "line": 95, + "message": "`D_800A6528' used prior to declaration" + }, + { + "line": 129, + "message": "request for member `unk0' in something not a structure or union" + }, + { + "line": 130, + "message": "request for member `unk2' in something not a structure or union" + }, + { + "line": 133, + "message": "request for member `unk4' in something not a structure or union" + }, + { + "line": 151, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 151, + "message": "request for member `unk8' in something not a structure or union" + }, + { + "line": 187, + "message": "`D_800AF3CC' undeclared (first use this function)" + }, + { + "line": 188, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 188, + "message": "request for member `unk4' in something not a structure or union" + }, + { + "line": 190, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 190, + "message": "request for member `unkE' in something not a structure or union" + }, + { + "line": 191, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 191, + "message": "request for member `unk8' in something not a structure or union" + }, + { + "line": 193, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 193, + "message": "request for member `unk4' in something not a structure or union" + }, + { + "line": 194, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 194, + "message": "request for member `unk4' in something not a structure or union" + }, + { + "line": 197, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 197, + "message": "request for member `unk4' in something not a structure or union" + }, + { + "line": 199, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 199, + "message": "request for member `unkE' in something not a structure or union" + }, + { + "line": 200, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 200, + "message": "request for member `unkE' in something not a structure or union" + }, + { + "line": 202, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 202, + "message": "request for member `unk4' in something not a structure or union" + }, + { + "line": 203, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 203, + "message": "request for member `unk4' in something not a structure or union" + }, + { + "line": 208, + "message": "warning: type mismatch with previous external decl" + }, + { + "line": 208, + "message": "warning: type mismatch with previous implicit declaration" + }, + { + "line": 91, + "message": "warning: previous implicit declaration of `func_800A32D8'" + }, + { + "line": 208, + "message": "warning: `func_800A32D8' was previously implicitly declared to return `int'" + }, + { + "line": 212, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 212, + "message": "request for member `unk0' in something not a structure or union" + }, + { + "line": 213, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 213, + "message": "request for member `unk4' in something not a structure or union" + }, + { + "line": 214, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 214, + "message": "request for member `unk4' in something not a structure or union" + }, + { + "line": 220, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 220, + "message": "request for member `unkE' in something not a structure or union" + }, + { + "line": 225, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 225, + "message": "request for member `unkE' in something not a structure or union" + }, + { + "line": 230, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 230, + "message": "request for member `unkE' in something not a structure or union" + }, + { + "line": 233, + "message": "`D_800AF3CC' used prior to declaration" + }, + { + "line": 236, + "message": "warning: type mismatch with previous external decl" + }, + { + "line": 236, + "message": "warning: type mismatch with previous implicit declaration" + }, + { + "line": 91, + "message": "warning: previous implicit declaration of `func_800A3314'" + }, + { + "line": 236, + "message": "warning: `func_800A3314' was previously implicitly declared to return `int'" + }, + { + "line": 241, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 241, + "message": "request for member `unk4' in something not a structure or union" + }, + { + "line": 244, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 244, + "message": "request for member `unkC' in something not a structure or union" + }, + { + "line": 245, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 245, + "message": "request for member `unk4' in something not a structure or union" + }, + { + "line": 246, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 246, + "message": "request for member `unk4' in something not a structure or union" + } + ], + "severe_errors": [], + "functions": [ + "func_800A04C4", + "func_800A0E68", + "func_800A0F90", + "func_800A1F48", + "func_800A1FA4", + "func_800A20D4", + "func_800A21CC", + "func_800A2248", + "func_800A2274", + "func_800A22A4", + "func_800A22E4", + "func_800A2380", + "func_800A23F8", + "func_800A2420", + "func_800A2504", + "func_800A2E80", + "func_800A3210", + "func_800A32D8", + "func_800A3314", + "func_800A358C" + ], + "recommendation": "recommend_revert" + }, + "src/world/world.c": { + "exists": true, + "ok": false, + "errors": [ + { + "line": 145, + "message": "`saved_reg_s0' undeclared (first use this function)" + }, + { + "line": 145, + "message": "(Each undeclared identifier is reported only once" + }, + { + "line": 145, + "message": "for each function it appears in.)" + }, + { + "line": 481, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 481, + "message": "request for member `unkC' in something not a structure or union" + }, + { + "line": 482, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 482, + "message": "request for member `unk0' in something not a structure or union" + }, + { + "line": 483, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 483, + "message": "request for member `unk1' in something not a structure or union" + }, + { + "line": 484, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 484, + "message": "request for member `unk2' in something not a structure or union" + }, + { + "line": 485, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 485, + "message": "request for member `unk0' in something not a structure or union" + }, + { + "line": 485, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 485, + "message": "request for member `unk0' in something not a structure or union" + }, + { + "line": 485, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 485, + "message": "request for member `unk0' in something not a structure or union" + }, + { + "line": 485, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 485, + "message": "request for member `unk0' in something not a structure or union" + }, + { + "line": 486, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 486, + "message": "request for member `unk4' in something not a structure or union" + }, + { + "line": 486, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 486, + "message": "request for member `unk2' in something not a structure or union" + }, + { + "line": 486, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 486, + "message": "request for member `unk2' in something not a structure or union" + }, + { + "line": 486, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 486, + "message": "request for member `unk2' in something not a structure or union" + }, + { + "line": 487, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 487, + "message": "request for member `unk8' in something not a structure or union" + }, + { + "line": 487, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 487, + "message": "request for member `unk4' in something not a structure or union" + }, + { + "line": 487, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 487, + "message": "request for member `unk4' in something not a structure or union" + }, + { + "line": 487, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 487, + "message": "request for member `unk4' in something not a structure or union" + }, + { + "line": 503, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 503, + "message": "request for member `unk5E' in something not a structure or union" + }, + { + "line": 504, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 504, + "message": "request for member `unk0' in something not a structure or union" + }, + { + "line": 539, + "message": "`D_8010AD40' undeclared (first use this function)" + }, + { + "line": 547, + "message": "`D_8010AD40' undeclared (first use this function)" + }, + { + "line": 569, + "message": "`D_8010AD40' undeclared (first use this function)" + }, + { + "line": 600, + "message": "`D_8010AD40' undeclared (first use this function)" + }, + { + "line": 626, + "message": "`D_8010AD40' undeclared (first use this function)" + }, + { + "line": 660, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 660, + "message": "request for member `unk3C' in something not a structure or union" + }, + { + "line": 665, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 665, + "message": "request for member `unk3C' in something not a structure or union" + }, + { + "line": 686, + "message": "`D_8011650C' undeclared (first use this function)" + }, + { + "line": 687, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 687, + "message": "request for member `unk3C' in something not a structure or union" + }, + { + "line": 689, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 689, + "message": "request for member `unk3C' in something not a structure or union" + }, + { + "line": 691, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 691, + "message": "request for member `unk3C' in something not a structure or union" + }, + { + "line": 699, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 699, + "message": "request for member `unk3C' in something not a structure or union" + }, + { + "line": 708, + "message": "`D_8011650C' used prior to declaration" + }, + { + "line": 716, + "message": "structure has no member named `unk51'" + }, + { + "line": 717, + "message": "structure has no member named `unk3E'" + }, + { + "line": 719, + "message": "structure has no member named `unk3E'" + }, + { + "line": 721, + "message": "structure has no member named `unk51'" + }, + { + "line": 722, + "message": "structure has no member named `unk3E'" + }, + { + "line": 724, + "message": "structure has no member named `unk3E'" + }, + { + "line": 726, + "message": "structure has no member named `unk3E'" + }, + { + "line": 744, + "message": "`D_8010AD40' undeclared (first use this function)" + }, + { + "line": 756, + "message": "`D_8010AD40' used prior to declaration" + }, + { + "line": 775, + "message": "warning: comparison of distinct pointer types lacks a cast" + }, + { + "line": 776, + "message": "structure has no member named `unk51'" + }, + { + "line": 881, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 881, + "message": "void value not ignored as it ought to be" + }, + { + "line": 967, + "message": "conflicting types for `Unk8010AD40'" + }, + { + "line": 65, + "message": "previous declaration of `Unk8010AD40'" + }, + { + "line": 975, + "message": "structure has no member named `unk51'" + }, + { + "line": 977, + "message": "structure has no member named `unk51'" + }, + { + "line": 979, + "message": "structure has no member named `unk51'" + }, + { + "line": 1017, + "message": "request for member `unk4' in something not a structure or union" + }, + { + "line": 1018, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1018, + "message": "request for member `unk46' in something not a structure or union" + }, + { + "line": 1019, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1019, + "message": "request for member `unk46' in something not a structure or union" + }, + { + "line": 1021, + "message": "request for member `unk0' in something not a structure or union" + }, + { + "line": 1021, + "message": "invalid type argument of `unary *'" + }, + { + "line": 1046, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1046, + "message": "request for member `unk46' in something not a structure or union" + }, + { + "line": 1047, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1047, + "message": "request for member `unk0' in something not a structure or union" + }, + { + "line": 1305, + "message": "`D_8010CA74' undeclared (first use this function)" + }, + { + "line": 1308, + "message": "`D_8010CA8C' undeclared (first use this function)" + }, + { + "line": 1312, + "message": "`D_8010CAF4' undeclared (first use this function)" + }, + { + "line": 1316, + "message": "`D_8010CA74' used prior to declaration" + }, + { + "line": 1329, + "message": "warning: comparison between pointer and integer" + }, + { + "line": 1345, + "message": "invalid type argument of `unary *'" + }, + { + "line": 1346, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1346, + "message": "request for member `unk4' in something not a structure or union" + }, + { + "line": 1347, + "message": "warning: assignment makes pointer from integer without a cast" + }, + { + "line": 1348, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1348, + "message": "request for member `unk14' in something not a structure or union" + }, + { + "line": 1353, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1353, + "message": "request for member `unk14' in something not a structure or union" + }, + { + "line": 1353, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1353, + "message": "request for member `unk4' in something not a structure or union" + }, + { + "line": 1385, + "message": "`D_8010CA8C' used prior to declaration" + }, + { + "line": 1397, + "message": "`D_8010CAF4' used prior to declaration" + }, + { + "line": 1486, + "message": "warning: assignment makes pointer from integer without a cast" + }, + { + "line": 1488, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1488, + "message": "request for member `unk' in something not a structure or union" + }, + { + "line": 1488, + "message": "nondigits in number and not hexadecimal" + }, + { + "line": 1489, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1489, + "message": "request for member `unk' in something not a structure or union" + }, + { + "line": 1490, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1490, + "message": "request for member `unk' in something not a structure or union" + }, + { + "line": 1491, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1491, + "message": "request for member `unk' in something not a structure or union" + }, + { + "line": 1492, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1492, + "message": "request for member `unk' in something not a structure or union" + }, + { + "line": 1493, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1493, + "message": "request for member `unk' in something not a structure or union" + }, + { + "line": 1493, + "message": "`F' undeclared (first use this function)" + }, + { + "line": 1501, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1501, + "message": "request for member `unk' in something not a structure or union" + }, + { + "line": 1502, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1502, + "message": "request for member `unk0' in something not a structure or union" + }, + { + "line": 1503, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1503, + "message": "request for member `unk' in something not a structure or union" + }, + { + "line": 1504, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1504, + "message": "request for member `unk' in something not a structure or union" + }, + { + "line": 1505, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1505, + "message": "request for member `unk2' in something not a structure or union" + }, + { + "line": 1506, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1506, + "message": "request for member `unk' in something not a structure or union" + }, + { + "line": 1507, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1507, + "message": "request for member `unk' in something not a structure or union" + }, + { + "line": 1508, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1508, + "message": "request for member `unk0' in something not a structure or union" + }, + { + "line": 1508, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1508, + "message": "request for member `unk4' in something not a structure or union" + }, + { + "line": 1509, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1509, + "message": "request for member `unk7' in something not a structure or union" + }, + { + "line": 1510, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1510, + "message": "request for member `unk' in something not a structure or union" + }, + { + "line": 1512, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1512, + "message": "request for member `unk2' in something not a structure or union" + }, + { + "line": 1512, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1512, + "message": "request for member `unk6' in something not a structure or union" + }, + { + "line": 1513, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1513, + "message": "request for member `unk8' in something not a structure or union" + }, + { + "line": 1514, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1514, + "message": "request for member `unk0' in something not a structure or union" + }, + { + "line": 1857, + "message": "invalid type argument of `->'" + }, + { + "line": 1857, + "message": "invalid type argument of `->'" + }, + { + "line": 1870, + "message": "warning: assignment makes pointer from integer without a cast" + }, + { + "line": 1922, + "message": "invalid type argument of `->'" + }, + { + "line": 1922, + "message": "invalid type argument of `->'" + }, + { + "line": 1930, + "message": "invalid type argument of `unary *'" + }, + { + "line": 1936, + "message": "invalid type argument of `unary *'" + }, + { + "line": 1948, + "message": "`D_801163E8' undeclared (first use this function)" + }, + { + "line": 1951, + "message": "invalid type argument of `unary *'" + }, + { + "line": 1961, + "message": "`D_801163E8' used prior to declaration" + } + ], + "severe_errors": [], + "functions": [ + "func_800A0B48", + "func_800A0BE4", + "func_800A0C54", + "func_800A0D2C", + "func_800A12AC", + "func_800A1370", + "func_800A141C", + "func_800A16E0", + "func_800A19FC", + "func_800A1D38", + "func_800A1D54", + "func_800A1DF0", + "func_800A1FAC", + "func_800A2040", + "func_800A2088", + "func_800A2108", + "func_800A21B4", + "func_800A31C0", + "func_800A31F8", + "func_800A3304", + "func_800A38C8", + "func_800A3908", + "func_800A3964", + "func_800A3C74", + "func_800A3DFC", + "func_800A3E4C", + "func_800A3E9C", + "func_800A3EC8", + "func_800A4008", + "func_800A4080", + "func_800A40B8", + "func_800A40F0", + "func_800A4138", + "func_800A41E8", + "func_800A4268", + "func_800A44B4", + "func_800A44C4", + "func_800A460C", + "func_800A4DDC", + "func_800A4F08", + "func_800A4F78", + "func_800A5208", + "func_800A52A4", + "func_800A5348", + "func_800A53A8", + "func_800A54F0", + "func_800A57C8", + "func_800A5924", + "func_800A5970", + "func_800A59A0", + "func_800A5A20", + "func_800A5A94", + "func_800A5AD8", + "func_800A5B88", + "func_800A5C08", + "func_800A5D00", + "func_800A5E28", + "func_800A5FB4", + "func_800A60D8", + "func_800A63FC", + "func_800A64AC", + "func_800A67A8", + "func_800A6884", + "func_800A692C", + "func_800A6994", + "func_800A6B8C", + "func_800A6C00", + "func_800A6C3C", + "func_800A71E8", + "func_800A7EA4", + "func_800A7F18", + "func_800A7F38", + "func_800A806C", + "func_800A82F0", + "func_800A8300", + "func_800A86C4", + "func_800A886C", + "func_800A8888", + "func_800A8898", + "func_800A891C", + "func_800A8A1C", + "func_800A8A88", + "func_800A8ABC", + "func_800A8AF4", + "func_800A8C70", + "func_800A8CA4", + "func_800A8CE4", + "func_800A8D58", + "func_800A8F48", + "func_800A8F74", + "func_800A8FA0", + "func_800A8FCC", + "func_800A9018", + "func_800A9064", + "func_800A90EC", + "func_800A9110", + "func_800A9134", + "func_800A9154", + "func_800A9174", + "func_800A9194", + "func_800A91A4", + "func_800A91E0", + "func_800A921C", + "func_800A9240", + "func_800A929C", + "func_800A92F8", + "func_800A9480", + "func_800A94A8", + "func_800A94D0", + "func_800A94F4", + "func_800A9520", + "func_800A9678", + "func_800A96A4", + "func_800A96D0", + "func_800A97A8", + "func_800A97E4", + "func_800A9820", + "func_800A984C", + "func_800A98A4", + "func_800A98E4", + "func_800A9910", + "func_800A993C", + "func_800A9988", + "func_800A99BC", + "func_800A9A44", + "func_800A9A70", + "func_800A9AA4", + "func_800A9AD0", + "func_800A9B04", + "func_800A9C64", + "func_800A9D5C", + "func_800A9D88", + "func_800A9E14", + "func_800AA04C", + "func_800AA098", + "func_800AA0E0", + "func_800AA128", + "func_800AA170", + "func_800AA1B8", + "func_800AA238", + "func_800AA2B8", + "func_800AA580", + "func_800AA640", + "func_800AA684", + "func_800AA6A4", + "func_800AA7DC", + "func_800AA8D8", + "func_800AA8F8", + "func_800AAA00", + "func_800AAB18", + "func_800AB36C", + "func_800AB398", + "func_800AB48C", + "func_800AB4F4", + "func_800AB570", + "func_800AB5E4", + "func_800AB6E4", + "func_800AB8EC", + "func_800AB92C", + "func_800AB988", + "func_800ABA18", + "func_800ABA78", + "func_800ABB24", + "func_800ABE58", + "func_800ABFC0", + "func_800AC3C0", + "func_800AC484", + "func_800AC700", + "func_800AD63C", + "func_800AD788", + "func_800AD804", + "func_800AD928", + "func_800ADA08", + "func_800ADA64", + "func_800ADB30", + "func_800ADC3C", + "func_800ADC70", + "func_800ADD4C", + "func_800ADE30", + "func_800ADFC0", + "func_800AE024", + "func_800AE0BC", + "func_800AE180", + "func_800AE47C", + "func_800AE4B8", + "func_800AE5B8", + "func_800AE5F0", + "func_800AE628", + "func_800AE638", + "func_800AE8AC", + "func_800AEA48", + "func_800AF0A0", + "func_800AF0B0", + "func_800AF1A8", + "func_800AF1E8", + "func_800AF24C", + "func_800AF2A4", + "func_800AF324", + "func_800AF364", + "func_800AF3A4", + "func_800AF96C", + "func_800AF9A0", + "func_800AFCC8", + "func_800AFFBC", + "func_800B0098", + "func_800B017C", + "func_800B01C4", + "func_800B0200", + "func_800B0240", + "func_800B0250", + "func_800B0334", + "func_800B04AC", + "func_800B0670", + "func_800B075C", + "func_800B0794", + "func_800B0810", + "func_800B0BF4", + "func_800B0D98", + "func_800B0E84", + "func_800B104C", + "func_800B10AC", + "func_800B11C4", + "func_800B1650", + "func_800B1C80", + "func_800B21E4", + "func_800B2304", + "func_800B2638", + "func_800B28CC", + "func_800B29CC", + "func_800B2E90", + "func_800B2FA4", + "func_800B2FD0", + "func_800B3018", + "func_800B3044", + "func_800B307C", + "func_800B3300", + "func_800B3350", + "func_800B338C", + "func_800B3418", + "func_800B37E0", + "func_800B3828", + "func_800B392C", + "func_800B39B4", + "func_800B3C40", + "func_800B40B4", + "func_800B4244", + "func_800B45DC", + "func_800B5314", + "func_800B579C", + "func_800B57C0", + "func_800B57DC", + "func_800B58F8", + "func_800B59F4", + "func_800B5DD8", + "func_800B5E28", + "func_800B624C", + "func_800B6348", + "func_800B64A0", + "func_800B64D8", + "func_800B650C", + "func_800B6570", + "func_800B65A4", + "func_800B667C", + "func_800B6724", + "func_800B69A4", + "func_800B6A4C", + "func_800B6B28", + "func_800B6C84", + "func_800B6D10", + "func_800B6DCC", + "func_800B6E08", + "func_800B6E78", + "func_800B6EFC", + "func_800B7104", + "func_800B7134", + "func_800B717C", + "func_800B7200", + "func_800B7228", + "func_800B7480", + "func_800B7620", + "func_800B76A8", + "func_800B7714", + "func_800B77A8", + "func_800B77F4", + "func_800B7820", + "func_800B7838", + "func_800B785C", + "func_800B786C", + "func_800B79B8", + "func_800B7A40", + "func_800B7AC0", + "func_800B7B1C", + "func_800B7B3C", + "func_800B7B54", + "func_800B7B78", + "func_800B7BA0", + "func_800B7BC0", + "func_800B7BD8", + "func_800B7C1C", + "func_800B7C7C", + "func_800B832C", + "func_800B8488", + "func_800B84D8", + "func_800B851C", + "func_800B858C", + "func_800B86C4", + "func_800B86E8", + "func_800B8720", + "func_800B8760", + "func_800B87D8", + "func_800B89C4", + "func_800B8A5C", + "func_800B8A98", + "func_800B8CBC", + "func_800B8D20", + "func_800B8D4C", + "func_800B90C0", + "func_800B95E8", + "func_800B962C", + "func_800B98F0", + "func_800BA938", + "func_800BAA00", + "func_800BB350", + "func_800BB450", + "func_800BB568", + "func_800BB650", + "func_800BB7DC", + "func_800BB8B0", + "func_800BB8E8", + "func_800BB9A0", + "func_800BB9D0", + "func_800BBA0C", + "func_800BBA44", + "func_800BBBB0", + "func_800BBC4C", + "func_800BBD20", + "func_800BC1CC", + "func_800BC420", + "func_800BC9E8", + "func_800BCA38", + "func_800BCA48", + "func_800BCA78", + "func_800BCB2C", + "func_800BCBE8", + "func_800BCECC" + ], + "recommendation": "recommend_revert" + }, + "src/battle/battle.c": { + "exists": true, + "ok": false, + "errors": [ + { + "line": 161, + "message": "warning: assignment from incompatible pointer type" + }, + { + "line": 168, + "message": "warning: large integer implicitly truncated to unsigned type" + }, + { + "line": 171, + "message": "warning: assignment from incompatible pointer type" + }, + { + "line": 387, + "message": "request for member `unk2' in something not a structure or union" + }, + { + "line": 414, + "message": "request for member `unk2' in something not a structure or union" + }, + { + "line": 639, + "message": "request for member `unk0' in something not a structure or union" + }, + { + "line": 659, + "message": "warning: type mismatch with previous external decl" + }, + { + "line": 659, + "message": "warning: type mismatch with previous implicit declaration" + }, + { + "line": 469, + "message": "warning: previous implicit declaration of `func_800A3E98'" + }, + { + "line": 659, + "message": "warning: `func_800A3E98' was previously implicitly declared to return `int'" + }, + { + "line": 724, + "message": "warning: type mismatch with previous external decl" + }, + { + "line": 724, + "message": "warning: type mismatch with previous implicit declaration" + }, + { + "line": 187, + "message": "warning: previous implicit declaration of `func_800A4CA8'" + }, + { + "line": 724, + "message": "warning: `func_800A4CA8' was previously implicitly declared to return `int'" + }, + { + "line": 936, + "message": "warning: type mismatch with previous external decl" + }, + { + "line": 936, + "message": "warning: type mismatch with previous implicit declaration" + }, + { + "line": 274, + "message": "warning: previous implicit declaration of `func_800A7254'" + }, + { + "line": 936, + "message": "warning: `func_800A7254' was previously implicitly declared to return `int'" + }, + { + "line": 941, + "message": "warning: type mismatch with previous external decl" + }, + { + "line": 941, + "message": "warning: type mismatch with previous implicit declaration" + }, + { + "line": 323, + "message": "warning: previous implicit declaration of `func_800B0FFC'" + }, + { + "line": 941, + "message": "warning: `func_800B0FFC' was previously implicitly declared to return `int'" + }, + { + "line": 1126, + "message": "warning: type mismatch with previous external decl" + }, + { + "line": 1126, + "message": "warning: type mismatch with previous implicit declaration" + }, + { + "line": 244, + "message": "warning: previous implicit declaration of `func_800A8E54'" + }, + { + "line": 1126, + "message": "warning: `func_800A8E54' was previously implicitly declared to return `int'" + }, + { + "line": 1432, + "message": "invalid operands to binary &" + }, + { + "line": 1459, + "message": "conflicting types for `D_800F49F8'" + }, + { + "line": 1463, + "message": "subscripted value is neither array nor pointer" + }, + { + "line": 1518, + "message": "parse error before `value'" + }, + { + "line": 1521, + "message": "parse error before `compare_value'" + }, + { + "line": 1523, + "message": "`value' undeclared (first use this function)" + }, + { + "line": 1523, + "message": "(Each undeclared identifier is reported only once" + }, + { + "line": 1523, + "message": "for each function it appears in.)" + }, + { + "line": 1523, + "message": "`compare_value' undeclared (first use this function)" + }, + { + "line": 1582, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1582, + "message": "request for member `unk28' in something not a structure or union" + }, + { + "line": 1583, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1583, + "message": "request for member `unk28' in something not a structure or union" + }, + { + "line": 1588, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1588, + "message": "request for member `unk28' in something not a structure or union" + }, + { + "line": 1594, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1594, + "message": "request for member `unk2C' in something not a structure or union" + }, + { + "line": 1598, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1598, + "message": "request for member `unk2C' in something not a structure or union" + }, + { + "line": 1602, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1602, + "message": "request for member `unk8' in something not a structure or union" + }, + { + "line": 1603, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1603, + "message": "request for member `unk8' in something not a structure or union" + }, + { + "line": 1604, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1604, + "message": "request for member `unk7C' in something not a structure or union" + } + ], + "severe_errors": [], + "functions": [ + "func_800A2894", + "func_800A4350", + "func_800A4860", + "func_800A4954", + "func_800A5EB0", + "func_800A7560", + "func_800A8424", + "func_800ADD2C", + "func_800AF874", + "func_800B10B4", + "func_800B16D0", + "func_800B2A2C", + "func_800B2EBC" + ], + "recommendation": "recommend_revert" + }, + "src/field/field.c": { + "exists": true, + "ok": false, + "errors": [ + { + "line": 162, + "message": "default label not within a switch statement" + }, + { + "line": 220, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 220, + "message": "request for member `unk15' in something not a structure or union" + }, + { + "line": 317, + "message": "request for member `unk2' in something not a structure or union" + }, + { + "line": 318, + "message": "request for member `unk3' in something not a structure or union" + }, + { + "line": 375, + "message": "warning: assignment makes pointer from integer without a cast" + }, + { + "line": 376, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 376, + "message": "request for member `unk1C' in something not a structure or union" + }, + { + "line": 378, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 378, + "message": "request for member `unk7' in something not a structure or union" + }, + { + "line": 379, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 379, + "message": "request for member `unk2F' in something not a structure or union" + }, + { + "line": 381, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 381, + "message": "request for member `unk3' in something not a structure or union" + }, + { + "line": 382, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 382, + "message": "request for member `unk2B' in something not a structure or union" + }, + { + "line": 383, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 383, + "message": "request for member `unk2E' in something not a structure or union" + }, + { + "line": 384, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 384, + "message": "request for member `unk6' in something not a structure or union" + }, + { + "line": 385, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 385, + "message": "request for member `unk2D' in something not a structure or union" + }, + { + "line": 386, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 386, + "message": "request for member `unk5' in something not a structure or union" + }, + { + "line": 387, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 387, + "message": "request for member `unk2C' in something not a structure or union" + }, + { + "line": 388, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 388, + "message": "request for member `unk4' in something not a structure or union" + }, + { + "line": 389, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 389, + "message": "request for member `unk36' in something not a structure or union" + }, + { + "line": 390, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 390, + "message": "request for member `unkE' in something not a structure or union" + }, + { + "line": 391, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 391, + "message": "request for member `unk3E' in something not a structure or union" + }, + { + "line": 392, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 392, + "message": "request for member `unk16' in something not a structure or union" + }, + { + "line": 393, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 393, + "message": "request for member `unk50' in something not a structure or union" + }, + { + "line": 394, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 394, + "message": "request for member `unk52' in something not a structure or union" + }, + { + "line": 395, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 395, + "message": "request for member `unk54' in something not a structure or union" + }, + { + "line": 396, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 396, + "message": "request for member `unk7' in something not a structure or union" + }, + { + "line": 396, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 396, + "message": "request for member `unk7' in something not a structure or union" + }, + { + "line": 397, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 397, + "message": "request for member `unk2F' in something not a structure or union" + }, + { + "line": 397, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 397, + "message": "request for member `unk2F' in something not a structure or union" + }, + { + "line": 400, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 400, + "message": "request for member `unk5A' in something not a structure or union" + }, + { + "line": 401, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 401, + "message": "request for member `unk58' in something not a structure or union" + }, + { + "line": 564, + "message": "request for member `unk4' in something not a structure or union" + }, + { + "line": 892, + "message": "warning: comparison between pointer and integer" + }, + { + "line": 910, + "message": "warning: comparison between pointer and integer" + }, + { + "line": 936, + "message": "`Savemap' undeclared (first use this function)" + }, + { + "line": 936, + "message": "(Each undeclared identifier is reported only once" + }, + { + "line": 936, + "message": "for each function it appears in.)" + }, + { + "line": 947, + "message": "`Savemap' undeclared (first use this function)" + }, + { + "line": 953, + "message": "warning: type mismatch with previous external decl" + }, + { + "line": 953, + "message": "warning: type mismatch with previous implicit declaration" + }, + { + "line": 948, + "message": "warning: previous implicit declaration of `func_800CF66C'" + }, + { + "line": 953, + "message": "warning: `func_800CF66C' was previously implicitly declared to return `int'" + }, + { + "line": 961, + "message": "warning: assignment makes integer from pointer without a cast" + }, + { + "line": 963, + "message": "invalid type argument of `unary *'" + }, + { + "line": 975, + "message": "warning: type mismatch with previous external decl" + }, + { + "line": 975, + "message": "warning: type mismatch with previous implicit declaration" + }, + { + "line": 949, + "message": "warning: previous implicit declaration of `func_800CF6C0'" + }, + { + "line": 975, + "message": "warning: `func_800CF6C0' was previously implicitly declared to return `int'" + }, + { + "line": 983, + "message": "warning: assignment makes integer from pointer without a cast" + }, + { + "line": 986, + "message": "invalid type argument of `unary *'" + } + ], + "severe_errors": [], + "functions": [ + "func_800A2F78", + "func_800A4094", + "func_800A4134", + "func_800A4430", + "func_800A65A4", + "func_800AA32C", + "func_800AB2B4", + "func_800ABF0C", + "func_800AFDE4", + "func_800B69C0", + "func_800BC338", + "func_800BEAD4", + "func_800C0DE0", + "func_800C32CC", + "func_800C43C4", + "func_800C46A4", + "func_800C4AE8", + "func_800C4C9C", + "func_800C4CE8", + "func_800C5740", + "func_800CB450", + "func_800CB660", + "func_800CC284", + "func_800CC404", + "func_800CC70C", + "func_800CC944", + "func_800CCA68", + "func_800CD0C4", + "func_800CD16C", + "func_800CD214", + "func_800CD6B0", + "func_800CEB94", + "func_800CF4CC", + "func_800CF5A0", + "func_800CF60C", + "func_800CF66C", + "func_800CF6C0", + "func_800CF874", + "func_800CFC1C", + "func_800D298C", + "func_800D3E64", + "func_800D4160", + "func_800D4378", + "func_800D4420", + "func_800D85C0", + "func_800DA124", + "func_800DA2CC", + "func_800DA310", + "func_800DA334", + "func_800DA368", + "func_800DA3C4", + "func_800DA3F0", + "func_800DA480" + ], + "recommendation": "recommend_revert" + }, + "src/battle/battle1.c": { + "exists": true, + "ok": false, + "errors": [ + { + "line": 207, + "message": "`D_800F8384' undeclared (first use this function)" + }, + { + "line": 207, + "message": "(Each undeclared identifier is reported only once" + }, + { + "line": 207, + "message": "for each function it appears in.)" + }, + { + "line": 209, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 209, + "message": "request for member `unk4' in something not a structure or union" + }, + { + "line": 210, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 210, + "message": "request for member `unk8' in something not a structure or union" + }, + { + "line": 212, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 212, + "message": "request for member `unk2' in something not a structure or union" + }, + { + "line": 213, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 213, + "message": "request for member `unk4' in something not a structure or union" + }, + { + "line": 214, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 214, + "message": "request for member `unk6' in something not a structure or union" + }, + { + "line": 215, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 215, + "message": "request for member `unk8' in something not a structure or union" + }, + { + "line": 216, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 216, + "message": "request for member `unkA' in something not a structure or union" + }, + { + "line": 217, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 217, + "message": "request for member `unk0' in something not a structure or union" + }, + { + "line": 218, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 218, + "message": "request for member `unkC' in something not a structure or union" + }, + { + "line": 220, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 220, + "message": "request for member `unkE' in something not a structure or union" + }, + { + "line": 221, + "message": "warning: assignment from incompatible pointer type" + }, + { + "line": 223, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 223, + "message": "request for member `unk10' in something not a structure or union" + }, + { + "line": 225, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 225, + "message": "request for member `unk64' in something not a structure or union" + }, + { + "line": 227, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 227, + "message": "request for member `unk44' in something not a structure or union" + }, + { + "line": 240, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 240, + "message": "request for member `unk4C' in something not a structure or union" + }, + { + "line": 242, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 242, + "message": "request for member `unk58' in something not a structure or union" + }, + { + "line": 252, + "message": "`D_80163F34' undeclared (first use this function)" + }, + { + "line": 257, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 257, + "message": "request for member `unk12' in something not a structure or union" + }, + { + "line": 611, + "message": "warning: passing arg 2 of `func_800D29D4' from incompatible pointer type" + }, + { + "line": 623, + "message": "warning: type mismatch with previous external decl" + }, + { + "line": 623, + "message": "warning: type mismatch with previous implicit declaration" + }, + { + "line": 251, + "message": "warning: previous implicit declaration of `func_800BB67C'" + }, + { + "line": 623, + "message": "warning: `func_800BB67C' was previously implicitly declared to return `int'" + }, + { + "line": 1132, + "message": "conflicting types for `D_800F9DA8'" + }, + { + "line": 1140, + "message": "subscripted value is neither array nor pointer" + }, + { + "line": 1216, + "message": "warning: type mismatch with previous implicit declaration" + }, + { + "line": 1208, + "message": "warning: previous implicit declaration of `func_800C74A4'" + }, + { + "line": 1216, + "message": "warning: `func_800C74A4' was previously implicitly declared to return `int'" + }, + { + "line": 1216, + "message": "warning: `func_800C74A4' was declared implicitly `extern' and later `static'" + } + ], + "severe_errors": [], + "functions": [ + "func_800B4E30", + "func_800B5AAC", + "func_800B7DB4", + "func_800B8944", + "func_800B8E48", + "func_800BBF7C", + "func_800BFB88", + "func_800C3068", + "func_800C3CA8", + "func_800C3DE4", + "func_800C428C", + "func_800C4814", + "func_800C5694", + "func_800C7220", + "func_800C7340" + ], + "recommendation": "recommend_revert" + }, + "src/world/world2.c": { + "exists": true, + "ok": true, + "errors": [], + "severe_errors": [], + "functions": [ + "func_800BFCAC", + "func_800C02F4", + "func_800C1490", + "func_800C1D58", + "func_800C1FD8", + "func_800C2130", + "func_800C31F0", + "func_800C3948", + "func_800C6104" + ], + "recommendation": "no_action" + }, + "src/battle/battle2.c": { + "exists": true, + "ok": false, + "errors": [ + { + "line": 68, + "message": "warning: passing arg 3 of `func_800C7B60' makes pointer from integer without a cast" + }, + { + "line": 79, + "message": "warning: passing arg 3 of `func_800C7BE8' makes pointer from integer without a cast" + }, + { + "line": 178, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 178, + "message": "request for member `unk0' in something not a structure or union" + }, + { + "line": 179, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 179, + "message": "request for member `unk4' in something not a structure or union" + }, + { + "line": 190, + "message": "invalid operands to binary -" + }, + { + "line": 423, + "message": "warning: assignment makes pointer from integer without a cast" + }, + { + "line": 1336, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1336, + "message": "request for member `unkC' in something not a structure or union" + }, + { + "line": 1336, + "message": "warning: dereferencing `void *' pointer" + }, + { + "line": 1336, + "message": "request for member `unk4' in something not a structure or union" + }, + { + "line": 1351, + "message": "structure has no member named `unk4'" + }, + { + "line": 1352, + "message": "structure has no member named `unk4'" + }, + { + "line": 1401, + "message": "warning: cast from pointer to integer of different size" + }, + { + "line": 1408, + "message": "warning: cast from pointer to integer of different size" + }, + { + "line": 1435, + "message": "parse error before `value1'" + }, + { + "line": 1439, + "message": "parse error before `value2'" + }, + { + "line": 1441, + "message": "`value1' undeclared (first use this function)" + }, + { + "line": 1441, + "message": "(Each undeclared identifier is reported only once" + }, + { + "line": 1441, + "message": "for each function it appears in.)" + }, + { + "line": 1441, + "message": "`value2' undeclared (first use this function)" + }, + { + "line": 1491, + "message": "warning: passing arg 2 of `func_800D54EC' from incompatible pointer type" + }, + { + "line": 1501, + "message": "warning: passing arg 1 of `func_800BBEAC' makes pointer from integer without a cast" + }, + { + "line": 1614, + "message": "`func_800D7888' undeclared (first use this function)" + } + ], + "severe_errors": [], + "functions": [ + "func_800C7C4C", + "func_800CD860", + "func_800CEB48", + "func_800D0958", + "func_800D09D0", + "func_800D1530", + "func_800D29D4", + "func_800D32B4", + "func_800D3354", + "func_800D3418", + "func_800D3474", + "func_800D3548", + "func_800D3A6C", + "func_800D3BF0", + "func_800D41FC", + "func_800D4284", + "func_800D44E8", + "func_800D491C", + "func_800D4FA8", + "func_800D4FF0", + "func_800D51D4", + "func_800D5230", + "func_800D55A4", + "func_800D5774", + "func_800D57C0", + "func_800D5B6C", + "func_800D61AC", + "func_800D6260", + "func_800D6394", + "func_800D6998", + "func_800D6ACC", + "func_800D6D8C", + "func_800D70C0", + "func_800D72B4", + "func_800D7368", + "func_800D7724", + "func_800D7888", + "func_800D7B1C", + "func_800D7BA4", + "func_800D7C2C", + "func_800D8304", + "func_800D83A4", + "func_800D8468", + "func_800D84F8", + "func_800D87EC" + ], + "recommendation": "recommend_revert" + }, + "src/battle/battle3.c": { + "exists": true, + "ok": false, + "errors": [ + { + "line": 212, + "message": "`D_80158CFC' undeclared (first use this function)" + }, + { + "line": 212, + "message": "(Each undeclared identifier is reported only once" + }, + { + "line": 212, + "message": "for each function it appears in.)" + }, + { + "line": 237, + "message": "`D_800F38A6' undeclared (first use this function)" + }, + { + "line": 251, + "message": "`D_80151698' undeclared (first use this function)" + }, + { + "line": 267, + "message": "`D_800F38A6' used prior to declaration" + }, + { + "line": 273, + "message": "`D_80151698' used prior to declaration" + }, + { + "line": 967, + "message": "warning: assignment from incompatible pointer type" + }, + { + "line": 969, + "message": "warning: assignment from incompatible pointer type" + }, + { + "line": 1121, + "message": "`D_80158CFC' used prior to declaration" + }, + { + "line": 1233, + "message": "`saved_reg_s0' undeclared (first use this function)" + }, + { + "line": 1442, + "message": "request for member `unk148' in something not a structure or union" + }, + { + "line": 1466, + "message": "request for member `unk148' in something not a structure or union" + } + ], + "severe_errors": [], + "functions": [ + "func_800D8A88", + "func_800DCFD4", + "func_800DDCE8", + "func_800DDFEC", + "func_800DEC10", + "func_800E0E34", + "func_800E1C40", + "func_800E2098", + "func_800E6018", + "func_800E68B4", + "func_800E6B94", + "func_800E7170" + ], + "recommendation": "recommend_revert" + }, + "src/menu/bginmenu.c": { + "exists": true, + "ok": false, + "errors": [ + { + "line": 140, + "message": "warning: assignment from incompatible pointer type" + }, + { + "line": 141, + "message": "warning: assignment from incompatible pointer type" + }, + { + "line": 143, + "message": "aggregate value used where an integer was expected" + }, + { + "line": 147, + "message": "incompatible types in assignment" + }, + { + "line": 340, + "message": "warning: assignment from incompatible pointer type" + } + ], + "severe_errors": [], + "functions": [ + "func_801D01C4", + "func_801D027C", + "func_801D0324", + "func_801D0408", + "func_801D0500" + ], + "recommendation": "recommend_fix" + }, + "src/menu/savemenu.c": { + "exists": true, + "ok": true, + "errors": [], + "severe_errors": [], + "functions": [ + "func_801D1F40" + ], + "recommendation": "no_action" + } +} \ No newline at end of file diff --git a/automation/database.py b/automation/database.py new file mode 100644 index 0000000..268b76e --- /dev/null +++ b/automation/database.py @@ -0,0 +1,487 @@ +""" +Database module for tracking decompilation progress. + +This uses SQLite (zero setup required) to store: +- Which functions exist in the codebase +- Their current status (todo, in_progress, decompiled, etc.) +- Metadata like file paths, modules, difficulty scores +""" + +import sqlite3 +import os +from pathlib import Path +from datetime import datetime +from typing import List, Dict, Optional + + +class DecompDatabase: + """Simple SQLite database for tracking decompilation functions.""" + + def __init__(self, db_path: str = "functions.db"): + """Initialize database connection and create tables if needed.""" + self.db_path = db_path + self.conn = sqlite3.connect(db_path) + self.conn.row_factory = sqlite3.Row # Return rows as dicts + self._create_tables() + self._migrate() + + def _create_tables(self): + """Create the database schema.""" + cursor = self.conn.cursor() + + # Main functions table + cursor.execute(""" + CREATE TABLE IF NOT EXISTS functions ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT UNIQUE NOT NULL, + c_file_path TEXT, + asm_file_path TEXT, + module TEXT, + status TEXT DEFAULT 'todo', + difficulty_score REAL, + line_count INTEGER, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + last_attempt_at TIMESTAMP, + attempt_count INTEGER DEFAULT 0, + notes TEXT + ) + """) + + # Index for faster queries + cursor.execute(""" + CREATE INDEX IF NOT EXISTS idx_status + ON functions(status) + """) + cursor.execute(""" + CREATE INDEX IF NOT EXISTS idx_module + ON functions(module) + """) + cursor.execute(""" + CREATE INDEX IF NOT EXISTS idx_difficulty + ON functions(difficulty_score) + """) + + # Attempt log (for tracking decompilation tries) + cursor.execute(""" + CREATE TABLE IF NOT EXISTS attempt_log ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + function_id INTEGER, + attempt_type TEXT, + success BOOLEAN, + error_message TEXT, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (function_id) REFERENCES functions(id) + ) + """) + + # Struct patterns table (for learning types across decomps) + cursor.execute(""" + CREATE TABLE IF NOT EXISTS struct_patterns ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + symbol_name TEXT UNIQUE NOT NULL, + likely_type TEXT, + base_type TEXT, + confidence REAL DEFAULT 0.0, + field_map TEXT, + seen_count INTEGER DEFAULT 1, + successful_uses INTEGER DEFAULT 0, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + ) + """) + + cursor.execute(""" + CREATE INDEX IF NOT EXISTS idx_struct_symbol + ON struct_patterns(symbol_name) + """) + + cursor.execute(""" + CREATE INDEX IF NOT EXISTS idx_struct_confidence + ON struct_patterns(confidence DESC) + """) + + # Symbol usage tracking (which functions use which symbols) + cursor.execute(""" + CREATE TABLE IF NOT EXISTS symbol_usage ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + function_name TEXT NOT NULL, + symbol_name TEXT NOT NULL, + access_pattern TEXT, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (function_name) REFERENCES functions(name) + ) + """) + + cursor.execute(""" + CREATE INDEX IF NOT EXISTS idx_symbol_usage + ON symbol_usage(symbol_name) + """) + + self.conn.commit() + + def remove_functions_not_in_set(self, c_file_path: str, valid_names: set): + """ + Delete all functions from c_file_path whose names are not in valid_names. + Used to prune entries that fall below a sentinel comment in the source file. + """ + cursor = self.conn.cursor() + cursor.execute( + "SELECT name FROM functions WHERE c_file_path = ?", (c_file_path,) + ) + to_remove = [row[0] for row in cursor.fetchall() if row[0] not in valid_names] + if to_remove: + cursor.executemany( + "DELETE FROM functions WHERE name = ?", [(n,) for n in to_remove] + ) + self.conn.commit() + return to_remove + + def add_function(self, name: str, c_file_path: str, asm_file_path: str, + module: str, line_count: int = 0) -> int: + """Add a new function to the database.""" + cursor = self.conn.cursor() + try: + cursor.execute(""" + INSERT INTO functions + (name, c_file_path, asm_file_path, module, line_count) + VALUES (?, ?, ?, ?, ?) + """, (name, c_file_path, asm_file_path, module, line_count)) + self.conn.commit() + return cursor.lastrowid + except sqlite3.IntegrityError: + # Function already exists, update it instead + cursor.execute(""" + UPDATE functions + SET c_file_path = ?, asm_file_path = ?, module = ?, + line_count = ?, updated_at = CURRENT_TIMESTAMP + WHERE name = ? + """, (c_file_path, asm_file_path, module, line_count, name)) + self.conn.commit() + cursor.execute("SELECT id FROM functions WHERE name = ?", (name,)) + return cursor.fetchone()[0] + + def get_function(self, name: str) -> Optional[Dict]: + """Get a single function by name.""" + cursor = self.conn.cursor() + cursor.execute("SELECT * FROM functions WHERE name = ?", (name,)) + row = cursor.fetchone() + return dict(row) if row else None + + def update_status(self, name: str, status: str, notes: str = None): + """Update the status of a function (does NOT increment attempt_count).""" + cursor = self.conn.cursor() + cursor.execute(""" + UPDATE functions + SET status = ?, notes = ?, updated_at = CURRENT_TIMESTAMP + WHERE name = ? + """, (status, notes, name)) + self.conn.commit() + + def record_decompilation_attempt(self, name: str, status: str, notes: str = None): + """Record an actual decompilation attempt (increments attempt_count).""" + cursor = self.conn.cursor() + cursor.execute(""" + UPDATE functions + SET status = ?, notes = ?, updated_at = CURRENT_TIMESTAMP, + last_attempt_at = CURRENT_TIMESTAMP, + attempt_count = attempt_count + 1 + WHERE name = ? + """, (status, notes, name)) + self.conn.commit() + + def update_function_status(self, name: str, status: str, notes: str = None): + """Alias for update_status for compatibility.""" + self.update_status(name, status, notes) + + def get_functions_by_status(self, status: str, limit: Optional[int] = None, + module: Optional[str] = None, + order_by: str = 'name') -> List[Dict]: + """ + Get functions with a specific status. + + Args: + status: Status to filter by + limit: Maximum number of results (None = all) + module: Optional module filter + order_by: Field to sort by (default: 'name') + """ + cursor = self.conn.cursor() + + query = "SELECT * FROM functions WHERE status = ?" + params = [status] + + if module: + query += " AND module = ?" + params.append(module) + + # Determine order + if order_by == 'line_count': + query += " ORDER BY line_count ASC, name ASC" + elif order_by == 'difficulty_score': + query += " ORDER BY difficulty_score ASC, line_count ASC, name ASC" + else: + query += f" ORDER BY {order_by} ASC" + + if limit: + query += " LIMIT ?" + params.append(limit) + + cursor.execute(query, params) + return [dict(row) for row in cursor.fetchall()] + + def get_functions_by_module(self, module: str) -> List[Dict]: + """Get all functions in a specific module.""" + cursor = self.conn.cursor() + cursor.execute(""" + SELECT * FROM functions + WHERE module = ? + ORDER BY status, name + """, (module,)) + return [dict(row) for row in cursor.fetchall()] + + def get_statistics(self) -> Dict: + """Get overall statistics about decompilation progress.""" + cursor = self.conn.cursor() + + # Total counts by status + cursor.execute(""" + SELECT status, COUNT(*) as count + FROM functions + GROUP BY status + """) + status_counts = {row['status']: row['count'] for row in cursor.fetchall()} + + # Total count + cursor.execute("SELECT COUNT(*) as total FROM functions") + total = cursor.fetchone()['total'] + + # Counts by module + cursor.execute(""" + SELECT module, COUNT(*) as count + FROM functions + GROUP BY module + ORDER BY count DESC + """) + module_counts = {row['module']: row['count'] for row in cursor.fetchall()} + + return { + 'total': total, + 'total_functions': total, # Keep both for compatibility + 'by_status': status_counts, + 'by_module': module_counts + } + + def get_next_todo(self, limit: int = 10) -> List[Dict]: + """Get the next functions to work on (todo status, ordered by difficulty). + + Functions with a rank score (from ``mako.sh rank``) come first, sorted + easiest-to-hardest. Functions without a score fall back to line_count. + """ + cursor = self.conn.cursor() + cursor.execute(""" + SELECT * FROM functions + WHERE status = 'todo' + ORDER BY + CASE WHEN difficulty_score IS NULL THEN 1 ELSE 0 END ASC, + difficulty_score ASC, + line_count ASC, + name ASC + LIMIT ? + """, (limit,)) + return [dict(row) for row in cursor.fetchall()] + + def update_rank_scores(self, scores: Dict[str, float]) -> int: + """Bulk-update difficulty_score from mako.sh rank output. + + Args: + scores: Mapping of function_name → rank score (0.0 easiest, 1.0 hardest). + + Returns: + Number of rows updated. + """ + if not scores: + return 0 + cursor = self.conn.cursor() + updated = 0 + for name, score in scores.items(): + cursor.execute( + "UPDATE functions SET difficulty_score = ?, updated_at = CURRENT_TIMESTAMP " + "WHERE name = ?", + (score, name), + ) + updated += cursor.rowcount + self.conn.commit() + return updated + + def _migrate(self): + """Apply any schema migrations needed for existing databases.""" + cursor = self.conn.cursor() + # Ensure difficulty_score column exists (older DBs may pre-date it). + cursor.execute("PRAGMA table_info(functions)") + cols = {row['name'] for row in cursor.fetchall()} + if 'difficulty_score' not in cols: + cursor.execute("ALTER TABLE functions ADD COLUMN difficulty_score REAL") + self.conn.commit() + + def close(self): + """Close database connection.""" + self.conn.close() + + # ============================================================ + # Struct Learning Methods + # ============================================================ + + def record_struct_usage(self, function_name: str, symbol_name: str, + access_pattern: str = None): + """Record that a function uses a particular symbol/struct.""" + cursor = self.conn.cursor() + cursor.execute(""" + INSERT INTO symbol_usage (function_name, symbol_name, access_pattern) + VALUES (?, ?, ?) + """, (function_name, symbol_name, access_pattern)) + self.conn.commit() + + def learn_struct_pattern(self, symbol_name: str, likely_type: str = None, + field_map: Dict = None, confidence: float = 0.5): + """ + Learn or update a struct pattern from a successful decompilation. + + Args: + symbol_name: Symbol like 'D_800F83D0' + likely_type: Type name like 'Unk800F83D0' or 'BattleStruct' + field_map: Dict of {offset: (field_name, field_type)} + confidence: 0.0-1.0 confidence score + """ + import json + cursor = self.conn.cursor() + + field_map_json = json.dumps(field_map) if field_map else None + + # Check if we already have this symbol + cursor.execute(""" + SELECT seen_count, confidence FROM struct_patterns + WHERE symbol_name = ? + """, (symbol_name,)) + existing = cursor.fetchone() + + if existing: + # Update existing pattern (increase confidence with more sightings) + new_seen = existing['seen_count'] + 1 + # Weighted average of confidence + new_confidence = (existing['confidence'] * existing['seen_count'] + confidence) / new_seen + + cursor.execute(""" + UPDATE struct_patterns + SET likely_type = COALESCE(?, likely_type), + field_map = COALESCE(?, field_map), + confidence = ?, + seen_count = ?, + updated_at = CURRENT_TIMESTAMP + WHERE symbol_name = ? + """, (likely_type, field_map_json, new_confidence, new_seen, symbol_name)) + else: + # Insert new pattern + cursor.execute(""" + INSERT INTO struct_patterns + (symbol_name, likely_type, field_map, confidence) + VALUES (?, ?, ?, ?) + """, (symbol_name, likely_type, field_map_json, confidence)) + + self.conn.commit() + + def get_known_type(self, symbol_name: str, min_confidence: float = 0.3) -> Optional[Dict]: + """ + Get known type information for a symbol. + + Returns: + Dict with 'likely_type', 'field_map', 'confidence' if known, else None + """ + import json + cursor = self.conn.cursor() + cursor.execute(""" + SELECT likely_type, field_map, confidence, seen_count + FROM struct_patterns + WHERE symbol_name = ? AND confidence >= ? + """, (symbol_name, min_confidence)) + + row = cursor.fetchone() + if not row: + return None + + return { + 'likely_type': row['likely_type'], + 'field_map': json.loads(row['field_map']) if row['field_map'] else {}, + 'confidence': row['confidence'], + 'seen_count': row['seen_count'] + } + + def get_all_known_types(self, min_confidence: float = 0.3) -> Dict[str, Dict]: + """Get all known struct patterns above confidence threshold.""" + import json + cursor = self.conn.cursor() + cursor.execute(""" + SELECT symbol_name, likely_type, field_map, confidence, seen_count + FROM struct_patterns + WHERE confidence >= ? + ORDER BY confidence DESC, seen_count DESC + """, (min_confidence,)) + + return { + row['symbol_name']: { + 'likely_type': row['likely_type'], + 'field_map': json.loads(row['field_map']) if row['field_map'] else {}, + 'confidence': row['confidence'], + 'seen_count': row['seen_count'] + } + for row in cursor.fetchall() + } + + def get_functions_using_symbol(self, symbol_name: str) -> List[str]: + """Get list of functions that reference a symbol.""" + cursor = self.conn.cursor() + cursor.execute(""" + SELECT DISTINCT function_name + FROM symbol_usage + WHERE symbol_name = ? + """, (symbol_name,)) + return [row['function_name'] for row in cursor.fetchall()] + + def mark_struct_success(self, symbol_name: str): + """Increment successful use counter for a struct pattern.""" + cursor = self.conn.cursor() + cursor.execute(""" + UPDATE struct_patterns + SET successful_uses = successful_uses + 1, + confidence = MIN(1.0, confidence + 0.05) + WHERE symbol_name = ? + """, (symbol_name,)) + self.conn.commit() + + def get_struct_learning_stats(self) -> Dict: + """Get statistics on struct learning.""" + cursor = self.conn.cursor() + + cursor.execute("SELECT COUNT(*) as total FROM struct_patterns") + total = cursor.fetchone()['total'] + + cursor.execute(""" + SELECT COUNT(*) as high_conf + FROM struct_patterns + WHERE confidence >= 0.7 + """) + high_conf = cursor.fetchone()['high_conf'] + + cursor.execute(""" + SELECT COUNT(*) as medium_conf + FROM struct_patterns + WHERE confidence >= 0.3 AND confidence < 0.7 + """) + medium_conf = cursor.fetchone()['medium_conf'] + + return { + 'total_patterns': total, + 'high_confidence': high_conf, + 'medium_confidence': medium_conf, + 'low_confidence': total - high_conf - medium_conf + } diff --git a/automation/decomp.db b/automation/decomp.db new file mode 100644 index 0000000000000000000000000000000000000000..0eaddbbe7ecb4d16f7b2567f895dd86f2514ce94 GIT binary patch literal 57344 zcmeI(&rjQC7{Kwk1x!=YQcaqVc&bp7(Xygx+G)~KYPx74fsjZ=Jy<4oI%|$iV|yyQ zp|;Yh-FDpW`%m^SO*`&&oH%w&Koy*qwNxsV#rvLkPhZjg(sW1smQve`Hp`{$Up`ju|5vIk{Z*>`aQ~mRf7kw4+b;jP z`epf*{I~r1^6$&*;t($c5I`U;;8$d&wjrHw*{*55wavG>X%7Z=KXih#LFo1a+jISU zyB)3G)zn7ox%N`c7AmW$SG%Pqm8!FbbieP7tXfj^Y)w|4Y)a=(l1}}z;fd$yp>Mpl z(%Y3>&*`IT(qc3Q(Run{b+Y3c!&KMrR`1Hn=BD)FC@@Z(Oke5BYm+iKYTH{4)JkM%oCN;IA?P;R^u6C3PhU_XtYPIu9SysN?lFqeR7zCrRALxD0 z9oVMjiiyM@OeW*s&4Y zX&l%2@HsJj>$2miH4>SpnMCH(?Wg(12Dasx`p`IC5bM5Wxgw-OH%Ly?X{7JuTl2&5 z`7;QkY-IVlDi;jkx+hb3YJS4Wm`NnH?^aio!!4;a4q5+=BknVGBMiLpzCIT)`p(=3 zciuf%k(GxJr4RNv-lCi_JPmZmd!5>pGjWzWaAPr+WRO`Z&9BU~<4fXdvUuvVcDt$7 zTlqGu(a0O=Ly;iGg=Rs#Tz5Gy&W*OYATx>s*(E($mX$BWCHX;;hK8OQI@T1)U&&>j zxIixDBsHpWfmuftiJ`QfLM5*jJ&SY_D`qrCpoY%9v zOPL6pgz>a&HM({@7JIe#ze=*Qu_1lj9k-bbHrcq9X(##k#^Q8#slGA^_Vt17SkYzp zrv-6l_`@s9Ocpk}JIDv~WJSie4%3YGDDX`0QNHZ_&Db=rQWswUF39Gt7l^bUp=M9Zom(r4wy`MFCb6dPB%8OzjrMAE zvt5aPtVch1A%Fk^2q1s}0tg_000IagfIv|NqA&G%{x9n4GA{%WKmY**5I_I{1Q0*~ z0R&X5_5I_I{ z1Q0*~0R#|0009ILD82xH|6lwyW`+nLfB*srAb +3. Updates database with results +4. Optionally verifies the decompilation +5. Handles errors gracefully + +Usage: + python decompile.py --auto # Process next function + python decompile.py --auto --batch 10 # Process 10 functions + python decompile.py --auto --verify # Auto-verify after decompilation + python decompile.py --function func_800A1158 # Specific function + python decompile.py --status # Show decompilation progress +""" + +import subprocess +import argparse +import sys +import re +import json +from pathlib import Path +from datetime import datetime +from typing import Optional, Tuple, Dict +from database import DecompDatabase + +# Project root is one level up from automation/ +PROJECT_ROOT = Path(__file__).parent.parent +MAKO_SCRIPT = PROJECT_ROOT / "mako.sh" + +# Validation errors that represent m2c artifacts that are syntactically valid C and +# can be fixed without reverting the decompiled code. Functions that fail only with +# one of these errors are kept in the source file and marked 'decompiled_needs_refine' +# instead of being reverted to INCLUDE_ASM and marked 'blocked'. +# +# Hard errors (still revert → blocked): +# M2C_ERROR(), Decompilation failure:, INCLUDE_ASM still present, void*/sp pointer, +# saved_reg_ra, missing jr $ra, internal error traceback, func_XXXX as integer, +# PSY-Q compilation failed, negative-offset unk-N field, C99 mid-block declaration. + +# Base set: always treated as soft (code compiles, just needs renaming/casting). +BASE_SOFT_VALIDATION_ERRORS = ( + # saved_reg_s0..s7, saved_reg_v0, etc. — valid C identifiers, code compiles, + # just needs the variables renamed to something meaningful. + "saved_reg_", + # (unaligned type) casts — compile fine, just need a cast substitution. + "unaligned type", +) + +# Extended set (used by default): additionally treats '?' type-unknown artifacts as +# soft errors so that functions are kept as decompiled_needs_refine rather than +# being immediately reverted to INCLUDE_ASM. Pass --strict-validation to agent.py +# to use only BASE_SOFT_VALIDATION_ERRORS and revert these functions instead. +SOFT_VALIDATION_ERRORS = BASE_SOFT_VALIDATION_ERRORS + ( + # Unknown '?' type markers — m2c could not infer a type; the surrounding code + # structure is intact and the issue is purely a missing type annotation. + "pointer to unknown type", + "unknown parameter type", + "unknown variable type", + "unknown type marker", + "unknown return type", + "'?' type in cast expression", +) + + +class DecompilationRunner: + """Automates running mako.sh dec and tracking results.""" + + def __init__(self, db: DecompDatabase, verbose: bool = False, enable_llm_fixes: bool = False, + build_verifier=None, fix_structs: bool = False, strict_validation: bool = False): + self.db = db + self.verbose = verbose + self.enable_llm_fixes = enable_llm_fixes + # Optional BuildVerifier for per-file PSY-Q compilation check + self.build_verifier = build_verifier + # Pass --fix-structs to mako.sh dec (replaces D_8009XXXX with Savemap fields) + self.fix_structs = fix_structs + # Strict mode: only BASE_SOFT_VALIDATION_ERRORS are treated as soft. + # Default (False) uses the extended SOFT_VALIDATION_ERRORS set which also + # keeps '?' type-unknown functions as decompiled_needs_refine. + self.soft_errors = BASE_SOFT_VALIDATION_ERRORS if strict_validation else SOFT_VALIDATION_ERRORS + + # Optional LLM support for auto-fixing + self.llm = None + if enable_llm_fixes: + try: + from llm_helper import LLMHelper + self.llm = LLMHelper(verbose=verbose) + if not self.llm.available: + if verbose: + print("⚠️ LLM requested but not available, continuing without auto-fix") + self.llm = None + except ImportError: + if verbose: + print("⚠️ LLMHelper not available, continuing without auto-fix") + self.llm = None + + def run_mako_dec(self, function_name: str) -> Tuple[bool, str, str]: + """ + Run ./mako.sh dec + + Returns: + (success, stdout, stderr) tuple + """ + if not MAKO_SCRIPT.exists(): + return False, "", f"mako.sh not found at {MAKO_SCRIPT}" + + cmd = [str(MAKO_SCRIPT), "dec", function_name] + if self.fix_structs: + cmd.append("--fix-structs") + + if self.verbose: + print(f"Running: {' '.join(cmd)}") + + try: + result = subprocess.run( + cmd, + cwd=PROJECT_ROOT, + capture_output=True, + text=True, + timeout=60 # 60 second timeout + ) + + success = result.returncode == 0 + return success, result.stdout, result.stderr + + except subprocess.TimeoutExpired: + return False, "", "Command timed out after 60 seconds" + except Exception as e: + return False, "", f"Exception running command: {str(e)}" + + def validate_c_file(self, c_file_path: Path, function_name: str, original_content: Optional[str] = None) -> Tuple[bool, Optional[str]]: + """ + Validate the C file after decompilation to catch m2c failures. + + Checks both function-specific issues and file-wide pollution from m2c errors. + + Returns: + (is_valid, error_message) tuple + """ + if not c_file_path.exists(): + return False, "C file not found" + + try: + content = c_file_path.read_text() + + # File-wide check: Did m2c add decompilation failure comments? + # These appear when m2c can't parse external declarations + if "Decompilation failure:" in content: + if original_content: + old_failure_count = original_content.count("Decompilation failure:") + new_failure_count = content.count("Decompilation failure:") + if new_failure_count > old_failure_count: + return False, f"m2c added {new_failure_count - old_failure_count} decompilation failure comment(s) (dependency issues)" + else: + return False, "Contains 'Decompilation failure' marker from m2c" + + # Primary check: Is INCLUDE_ASM still present for THIS specific function? + # If mako.sh dec succeeded, it should have replaced INCLUDE_ASM with actual C code + include_asm_pattern = rf'INCLUDE_ASM\s*\([^,]*,\s*"[^"]*",\s*{re.escape(function_name)}' + if re.search(include_asm_pattern, content): + return False, "INCLUDE_ASM still present (decompilation incomplete)" + + # Sanity check: the function name must appear as a definition in the file. + # Catches LLM hallucinations where the function was renamed or completely + # replaced with a fabricated stub under a different name. + func_def_pattern = rf'\b{re.escape(function_name)}\s*\(' + if not re.search(func_def_pattern, content): + return False, f"Function '{function_name}' not found as a definition after decompilation (LLM may have renamed it)" + + # ENHANCED: Hard structural checks run first (before any soft/? checks). + # These detect type-safety violations that produce incorrect runtime behaviour + # and must NOT be masked by a preceding soft-error short-circuit. + + # Helper: given a position in content, return the position of the closing '}' + # that ends the innermost enclosing function body. Returns len(content) if not + # found. Strips string literals and comments before counting braces so that + # '{'/'}' characters inside them don't skew the depth counter. + def _find_function_end(text, decl_pos): + # Replace string/char literals and comments with same-length whitespace + # so that character offsets stay valid after the substitution. + _clean = re.sub(r'"(?:[^"\\]|\\.)*"', + lambda m: ' ' * len(m.group()), text) + _clean = re.sub(r"'(?:[^'\\]|\\.)*'", + lambda m: ' ' * len(m.group()), _clean) + _clean = re.sub(r'//[^\n]*', + lambda m: ' ' * len(m.group()), _clean) + _clean = re.sub(r'/\*.*?\*/', + lambda m: ' ' * len(m.group()), _clean, + flags=re.DOTALL) + depth = 0 + for i in range(decl_pos): + if _clean[i] == '{': depth += 1 + elif _clean[i] == '}': depth -= 1 + target = max(1, depth) + for i in range(decl_pos, len(_clean)): + if _clean[i] == '{': + depth += 1 + elif _clean[i] == '}': + depth -= 1 + if depth < target: + return i + 1 + return len(text) + + # H1. void* LOCAL variables / parameters accessing struct fields via -> + # m2c sometimes fails to infer the actual struct type, leaving variables + # typed as void*. This produces type-unsafe code that compiles under old + # GCC but is semantically wrong — it must be a hard reject. + _VOID_PTR_RE = re.compile(r'\bvoid\s*\*\s*(\w+)\s*[;,=]') + for _vm in _VOID_PTR_RE.finditer(content): + _void_var = _vm.group(1) + _func_end = _find_function_end(content, _vm.start()) + _scope = content[_vm.start():_func_end] + if re.search(rf'\b{re.escape(_void_var)}\s*->', _scope): + return False, f"Local variable '{_void_var}' is void* but used with -> (m2c struct type inference failure)" + + # H2. Primitive pointer types used with ->unk* field access. + # Legitimate struct pointers use named fields; ->unkN means m2c couldn't + # determine the struct type and left the variable as s32*/u8* etc. + _PRIM_PTR_RE = re.compile( + r'\b(?:s8|s16|s32|s64|u8|u16|u32|u64|f32|f64)\s*\*\s*(\w+)\s*[;,=]' + ) + for _m in _PRIM_PTR_RE.finditer(content): + _prim_var = _m.group(1) + _func_end = _find_function_end(content, _m.start()) + _scope = content[_m.start():_func_end] + if re.search(rf'\b{re.escape(_prim_var)}\s*->unk\w*', _scope): + return False, f"Local variable '{_prim_var}' is a primitive pointer but used with ->unk (m2c struct type inference failure)" + + # ENHANCED: Check for m2c incomplete type artifacts in the entire file + # These indicate m2c lacked context to determine proper types + + # 1. Check for ? as return type: "? sprintf(s8*, s8*, s8*);" + if re.search(r'^\s*\?\s+\w+\s*\(', content, re.MULTILINE): + return False, "Contains function declaration with unknown return type '?'" + + # 2. Check for ?* pointer type: "?* var_a2_2;" + if re.search(r'\?\s*\*\s+\w+', content): + return False, "Contains pointer to unknown type '?*'" + + # 3. Check for /*?*/ unknown type comments + # m2c uses /*?*/primitive to annotate guessed primitive types on extern + # declarations (e.g. "extern /*?*/s32 D_800F9F3C;"). These are valid C + # because the comment is stripped by the preprocessor, so we allow them. + # Only flag /*?*/ that is NOT immediately followed by a known primitive. + _PRIMITIVE_PAT = (r'(?:s8|s16|s32|s64|u8|u16|u32|u64|f32|f64' + r'|char|short|int|long|float|double' + r'|unsigned|signed|void)') + _content_stripped = re.sub(r'/\*\?\*/\s*' + _PRIMITIVE_PAT, '', content) + if '/*?*/' in _content_stripped: + return False, "Contains unknown type marker /*?*/" + + # 4. Check for ? in parameter lists or declarations + # Matches: (? argname), (, ? argname), (?), (?,) etc. + # The (?:\w|\s*[,)]) ensures we catch both (? name) and (?) + if re.search(r'[,(]\s*\?\s*(?:[,)]|\w)', content): + return False, "Contains unknown parameter type '?'" + + # 5. Check for M2C_ERROR macro (unset registers, unknown instructions) + # Only match uncommented instances (not //...M2C_ERROR(...) or /* ... M2C_ERROR ... */) + if re.search(r'^(?!\s*//).*M2C_ERROR\(', content, re.MULTILINE): + return False, "Contains M2C_ERROR() macro (m2c could not determine register/instruction)" + + # 5a. Check for negative-offset field names: ->unk-N / .unk-N (m2c arithmetic error) + # These should have been fixed by intellisense_fixer.apply_all_fixes() before + # validation runs. If any remain it means the fixer was skipped or missed an + # occurrence — still reject so the file is reverted cleanly. + if re.search(r'(?:->|\.)unk-[0-9A-Fa-f]+\b', content): + return False, "Contains negative-offset field access unk-N (m2c struct offset error)" + + # 5b. Check for '?' used inside cast expressions: (?**), (?*), (? *) + # This occurs when m2c cannot determine the type in a cast context but the + # outer expression type is valid, so checks 1–4 above miss it. + if re.search(r'\(\s*\?[\s*]+\)', content): + return False, "Contains '?' type in cast expression (m2c type inference failure)" + + # 6. Check for saved_reg_ra (m2c artifact for $ra — never valid in C) + if 'saved_reg_ra' in content: + return False, "Contains saved_reg_ra (m2c return-address artifact)" + + # 7. Check for "Warning: missing \"jr $ra\"" comments injected by m2c + if re.search(r'//\s*Warning: missing "jr \$ra"', content): + return False, "Contains m2c 'missing jr $ra' warning comment" + + # 8. Check for Internal error tracebacks injected by m2c + if re.search(r'/\*\s*Internal error in function', content): + return False, "Contains m2c 'Internal error in function' traceback" + + # Extract the function body (approximately) to check for local issues + # Look for the function definition and the next few lines + func_pattern = rf'{re.escape(function_name)}\s*\([^)]*\)\s*{{[^}}]*}}' + func_match = re.search(func_pattern, content, re.DOTALL) + + if func_match: + func_body = func_match.group(0) + + # Hard checks first (must not be reordered after any soft check) + + # Check for m2c-specific error patterns in the function body + if "Decompilation failure:" in func_body: + return False, "Function contains 'Decompilation failure' marker from m2c" + + # Check for void* parameters being dereferenced — hard check, must precede + # the soft '? variable type' check below so that a function with BOTH a + # void*→struct access AND a '?' type annotation isn't mis-classified soft. + sig_match = re.search(rf'{re.escape(function_name)}\s*\(([^)]*)\)', func_body) + if sig_match: + params = sig_match.group(1) + void_ptr_params = re.findall(r'void\s*\*\s*(\w+)', params) + for param in void_ptr_params: + if re.search(rf'{re.escape(param)}\s*->', func_body): + return False, f"Parameter '{param}' is void* but accessed as struct (m2c couldn't determine type)" + + # Check for incomplete multiline comment that might indicate failure + if func_body.count("/*") != func_body.count("*/"): + return False, "Unclosed comment block (possible m2c error)" + + # Soft checks below (may produce decompiled_needs_refine state) + + # Check for (unaligned type) casts + if re.search(r'\(\s*unaligned\s+', func_body): + return False, "Contains '(unaligned type)' cast (m2c error)" + + # Check for unknown type markers in variable declarations + if re.search(r'\?\s+\w+\s*[;,=]', func_body): + return False, "Contains unknown variable type '?' (m2c cannot determine type)" + + # Check for C99-style mid-block variable declarations (PSY-Q cc1 is C89 only). + # In C89, all declarations must precede any statements in a block. + # Pattern: a type declaration appearing after any statement in the function body. + _c99_decl_re = re.compile( + r'^\s+(?:const\s+)?(?:unsigned\s+|signed\s+)?' + r'(?:u8|u16|u32|u64|s8|s16|s32|s64|f32|f64|char|short|int|long|float|double)\s*\*?\s*\w+\s*=' + ) + _found_stmt = False + for _line in func_body.split('\n'): + _stripped = _line.strip() + if not _stripped or _stripped.startswith('//') or _stripped.startswith('/*'): + continue + if _c99_decl_re.match(_line): + if _found_stmt: + return False, "Contains C99-style mid-block variable declaration (PSY-Q cc1 requires C89)" + elif _stripped.endswith(';') and not _c99_decl_re.match(_line): + _found_stmt = True + + # If we can't find the function body, that's suspicious but not necessarily invalid + # (could be a complex function or macro) + + # --- File-wide structural checks (not limited to function body) --- + + # 9 (now H1) and 10 (now H2) were moved above checks #1-8 — see the + # '_find_function_end / H1 / H2' block near the top of this function. + + # 11. Check for saved_reg_ artifacts (undeclared m2c callee-save register variables) + # saved_reg_ra is already caught above; this catches saved_reg_s0..s7, saved_reg_v0, etc. + if re.search(r'\bsaved_reg_[a-z]\d*\b', content): + return False, "Contains saved_reg_* artifact (m2c callee-save register not resolved)" + + # 12. Check for 'sp' used as dereference base (leaked stack pointer register). + # Valid uses include: &sp (taking address of local struct named 'sp'), + # sp.member (struct member access), sp10/sp14 etc. (suffixed local names). + # Bad use: sp -> field access or *(sp + offset) — sp treated as a pointer. + _content_no_comments = re.sub(r'//[^\n]*', '', content) + _content_no_comments = re.sub(r'/\*.*?\*/', '', _content_no_comments, flags=re.DOTALL) + if re.search(r'\bsp\s*->', _content_no_comments) or \ + re.search(r'\*\s*\(\s*(?:.*?[+\-]\s*)?sp\b(?!\d|\w)', _content_no_comments): + return False, "Contains 'sp' used as a pointer/dereference base (leaked PSX stack pointer register)" + + # 13. Check for func_XXXXXXXX used as an integer/data value (not a call) + # Valid: func_XXXXXXXX(args) — a call + # Bad: func_XXXXXXXX * 4, (func_XXXXXXXX + ...), &D_...[func_XXXXXXXX] + # Pattern: function name followed by arithmetic operator or used as array index, + # but NOT followed by '(' (which would be a call). + if re.search(r'\bfunc_[0-9A-Fa-f]+\s*(?:[+\-\*/%]|\[)', content): + return False, "Function name used as integer value in arithmetic (m2c function pointer / data confusion)" + + return True, None + + except Exception as e: + return False, f"Error reading C file: {e}" + + def extract_missing_types(self, c_file_path: Path, function_name: str, validation_error: str) -> Dict: + """ + Extract detailed information about missing types from the decompiled code. + This creates actionable reports for manual type definition. + + Note: Extracts ALL missing type issues from the file, not just the first validation error. + + Returns dict with: + - function_name: str + - file: str + - primary_error: str (the validation error that triggered the revert) + - missing_items: list of dicts describing what's missing + """ + report = { + 'function_name': function_name, + 'file': str(c_file_path.relative_to(PROJECT_ROOT)), + 'primary_error': validation_error, + 'missing_items': [] + } + + try: + content = c_file_path.read_text() + + # Check for ALL types of missing type issues in the file + # (not just the one that triggered validation failure) + + # 1. External functions with unknown return types (? or /*?*/) + extern_with_unknown = re.findall(r'(?:/\*\?\*/\s+)?(\w+)\s+(\w+)\s*\(([^)]*)\)\s*;?\s*//\s*extern', content) + for return_type, func_name, params in extern_with_unknown: + if '?' in return_type or '?' in params: + report['missing_items'].append({ + 'type': 'extern_function', + 'name': func_name, + 'return_type': return_type if '?' not in return_type else 'unknown', + 'parameters': params, + 'suggestion': f'Define proper signature for {func_name} in header' + }) + + # Also check for inline ? function declarations + inline_unknown = re.findall(r'^\s*\?\s+(\w+)\s*\(([^)]*)\)', content, re.MULTILINE) + for func_name, params in inline_unknown: + if func_name not in [item.get('name') for item in report['missing_items']]: + report['missing_items'].append({ + 'type': 'extern_function', + 'name': func_name, + 'return_type': 'unknown', + 'parameters': params, + 'suggestion': f'Define proper signature for {func_name} in header' + }) + + # 2. void* parameters used as structs + # Find function with void* parameters + void_ptr_params = re.findall(rf'({re.escape(function_name)})\s*\([^)]*\bvoid\s*\*\s*(\w+)[^)]*\)', content) + for func, param_name in void_ptr_params: + # Find all field accesses for this parameter + field_accesses = re.findall(rf'{re.escape(param_name)}\s*->\s*(\w+)', content) + if field_accesses: # Only report if there are actual field accesses + unique_fields = sorted(set(field_accesses)) + report['missing_items'].append({ + 'type': 'void_pointer_struct', + 'parameter_name': param_name, + 'accessed_fields': unique_fields, + 'suggestion': f'Define struct for {param_name} with fields: {", ".join(unique_fields[:10])}{"..." if len(unique_fields) > 10 else ""}' + }) + + # 3. /*?*/ markers (unknown types in comments) + comment_unknown = re.findall(r'/\*\?\*/\s*(\w+)\s+(\w+)', content) + for type_name, var_name in comment_unknown: + # Check if it's extern declaration + if re.search(rf'extern\s+/\*\?\*/\s*{re.escape(type_name)}\s+{re.escape(var_name)}', content): + report['missing_items'].append({ + 'type': 'extern_variable', + 'name': var_name, + 'declared_type': type_name, + 'suggestion': f'Unknown type for extern variable {var_name}' + }) + + # 4. ?* pointers + unknown_pointers = re.findall(r'\?\s*\*\s+(\w+)', content) + for var_name in unknown_pointers: + report['missing_items'].append({ + 'type': 'unknown_pointer', + 'name': var_name, + 'suggestion': f'm2c could not determine type of pointer {var_name}' + }) + + # 5. ? types in variable declarations + unknown_vars = re.findall(r'^\s*\?\s+(\w+)\s*[;,=]', content, re.MULTILINE) + for var_name in unknown_vars: + if var_name not in [item.get('name') for item in report['missing_items']]: + report['missing_items'].append({ + 'type': 'unknown_variable', + 'name': var_name, + 'suggestion': f'm2c could not determine type of variable {var_name}' + }) + + # 6. unaligned casts + unaligned_casts = re.findall(r'\(\s*unaligned\s+(\w+)\s*\)', content) + for type_name in set(unaligned_casts): + report['missing_items'].append({ + 'type': 'unaligned_cast', + 'cast_type': type_name, + 'suggestion': f'Unaligned access to {type_name} - may need struct packing or alignment fix' + }) + + except Exception as e: + if self.verbose: + print(f" Warning: Could not extract missing types: {e}") + + return report + + def parse_decompilation_output(self, stdout: str, stderr: str, returncode: int) -> Dict[str, any]: + """ + Parse mako.sh output to extract useful information. + + Returns dict with keys: + - success: bool + - already_decompiled: bool (if function already in C) + - error_message: str + - error_type: str (infra, compile, link, unknown) + - warnings: list of str + """ + result = { + 'success': False, + 'already_decompiled': False, + 'error_message': None, + 'error_type': 'unknown', + 'warnings': [] + } + + combined_output = stdout + "\n" + stderr + + # First check return code - if non-zero, it's a failure + if returncode != 0: + result['success'] = False + + # tools/decompile.py prints " found in " and exits 1 when the + # function already exists as C code (not as INCLUDE_ASM). This is the + # "already fully decompiled into C" case — treat it as success. + if re.search(r'\bfound in\b', combined_output): + result['already_decompiled'] = True + result['success'] = True + return result + + # Classify the error type + if "not found" in combined_output.lower(): + result['error_message'] = "Function not found" + result['error_type'] = 'infra' + elif "timeout" in combined_output.lower(): + result['error_message'] = "Command timed out" + result['error_type'] = 'infra' + elif "undefined reference" in combined_output.lower(): + # Extract undefined symbols + symbols = re.findall(r"undefined reference to `([^']+)'", combined_output) + result['error_message'] = f"Undefined references: {', '.join(symbols[:3])}" + result['error_type'] = 'link' + elif "error:" in combined_output.lower(): + # Compile error + error_lines = [line for line in combined_output.split('\n') + if 'error:' in line.lower()] + result['error_message'] = error_lines[0].strip() if error_lines else "Compile error" + result['error_type'] = 'compile' + else: + result['error_message'] = "Command failed with non-zero exit code" + result['error_type'] = 'unknown' + else: + # Return code 0 - check for success indicators + if "could not find function" in combined_output.lower(): + result['success'] = False + result['error_message'] = "Function not found in version" + result['error_type'] = 'infra' + elif re.search(r'already\s+(?:been\s+)?decompiled', combined_output, re.IGNORECASE): + result['already_decompiled'] = True + result['success'] = True + elif "decompiled in" in combined_output.lower(): + # mako.sh typically says "func_name decompiled in path/to/file.c" + result['success'] = True + elif stdout.strip() and "error" not in combined_output.lower(): + # Has output and no error mentions + result['success'] = True + else: + # Ambiguous case + result['error_message'] = "Unclear if decompilation succeeded" + result['error_type'] = 'unknown' + + return result + + def decompile_function(self, function_name: str) -> bool: + """ + Decompile a single function and update database. + + Returns: + True if decompilation succeeded, False otherwise + """ + print(f"\n{'='*60}") + print(f"Attempting to decompile: {function_name}") + print(f"{'='*60}") + + # Get function info from database + func = self.db.get_function(function_name) + if not func: + print(f"❌ Function {function_name} not found in database") + return False + + print(f"Module: {func['module']}") + # print(f"File: {func['c_file_path']}") + # print(f"ASM lines: {func['line_count']}") + print(f"Current status: {func['status']}") + + # Save original C file content before decompilation + c_file = PROJECT_ROOT / func['c_file_path'] + original_content = c_file.read_text() if c_file.exists() else None + + # PRE-DECOMPILATION TYPE INFERENCE + # If LLM is available, try to infer types for extern symbols before m2c runs + if self.llm: + try: + from dependency_analyzer import DependencyAnalyzer + analyzer = DependencyAnalyzer(PROJECT_ROOT, self.db.db_path) + + # Extract extern symbols from assembly + extern_symbols = analyzer.get_function_extern_symbols(function_name) + + if extern_symbols: + if self.verbose: + print(f"🔍 Found {len(extern_symbols)} extern symbols, inferring types...") + + # Check if we already have types for these symbols + known_types = self.db.get_all_known_types(min_confidence=0.3) + unknown_symbols = [s for s in extern_symbols if s not in known_types] + + if unknown_symbols: + if self.verbose: + print(f" 🤖 Inferring types for {len(unknown_symbols)} unknown symbols: {', '.join(list(unknown_symbols)[:3])}...") + + # Infer types from assembly + inferred = self.llm.infer_types_from_assembly(function_name, list(unknown_symbols)) + + if inferred: + # Generate header file with inferred types + temp_header = PROJECT_ROOT / "include" / "auto_types.h" + self.llm.generate_type_header(inferred, temp_header) + + # Store learned types in database + for symbol, type_info in inferred.items(): + field_map = { + offset: {'name': field[0], 'type': field[1]} + for offset, field in type_info.get('fields', {}).items() + } + self.db.learn_struct_pattern( + symbol, + likely_type=type_info.get('typedef', '').split('}')[-1].strip().rstrip(';'), + field_map=field_map, + confidence=type_info.get('confidence', 0.5) + ) + self.db.record_struct_usage(function_name, symbol) + + if self.verbose: + print(f" ✅ Generated type definitions in {temp_header}") + else: + if self.verbose: + print(f" ✅ All extern symbols have known types") + except Exception as e: + if self.verbose: + print(f" ⚠️ Type inference failed: {e}") + # Continue with decompilation anyway + + # Mark as in progress + self.db.update_function_status( + function_name, + 'in_progress', + notes="Attempting automatic decompilation" + ) + + # Run decompilation + success, stdout, stderr = self.run_mako_dec(function_name) + + if self.verbose: + print(f"\n--- STDOUT ---\n{stdout}") + print(f"\n--- STDERR ---\n{stderr}") + + # Parse output (pass returncode for better analysis) + returncode = 0 if success else 1 + parse_result = self.parse_decompilation_output(stdout, stderr, returncode) + + # Update database based on result + if parse_result['already_decompiled']: + print(f"✅ Function already decompiled!") + self.db.record_decompilation_attempt( + function_name, + 'decompiled', + notes="Already decompiled (found in C code)" + ) + return True + + elif parse_result['success']: + # Apply deterministic IntelliSense fixes (unk-N field names, typedef hoisting) + # before validation so these artifacts don't cause spurious failures. + try: + from intellisense_fixer import apply_all_fixes + except ImportError: + apply_all_fixes = None + if apply_all_fixes is not None: + raw = c_file.read_text() + fixed, changes = apply_all_fixes(raw) + if changes: + c_file.write_text(fixed) + if self.verbose: + print(f" 🔧 intellisense_fixer: {', '.join(changes)}") + + # Additional validation: check C file for m2c failures + is_valid, validation_error = self.validate_c_file(c_file, function_name, original_content) + + # If text validation passes, run the actual PSY-Q compiler on the changed file. + # This catches type errors, incompatible declarations, and other issues that + # heuristic text checks miss. Failures are treated the same as text-validation + # failures: LLM auto-fix is attempted if available, then the file is reverted. + if is_valid and self.build_verifier is not None: + compile_ok, compile_errors = self.build_verifier.check_file_compiles(c_file) + if not compile_ok: + errors_summary = "; ".join(e['message'] for e in compile_errors[:3]) + is_valid = False + validation_error = f"PSY-Q compilation failed: {errors_summary}" + if self.verbose: + print(f" Compile errors: {errors_summary}") + + if not is_valid: + print(f"⚠️ Decompilation produced invalid output: {validation_error}") + + # Attempt LLM auto-fix if enabled + llm_fixed = False + # Trigger auto-fix for multiple error types + should_try_llm_fix = self.llm and any([ + "unaligned" in validation_error.lower(), + "decompilation failure" in validation_error.lower(), + "syntax error" in validation_error.lower(), + "m2c_error" in validation_error.lower(), + "psy-q compilation failed" in validation_error.lower(), + "void*" in validation_error.lower(), + "unknown parameter type" in validation_error.lower(), + "unknown variable type" in validation_error.lower(), + "primitive pointer" in validation_error.lower(), + "function pointer" in validation_error.lower(), + "saved_reg" in validation_error.lower(), + "unaligned type" in validation_error.lower(), + "unknown type" in validation_error.lower(), + "cast expression" in validation_error.lower(), + ]) + + if should_try_llm_fix: + print(f"🤖 Attempting automatic fix with LLM...") + + # Retrieve pre-analysis from database if available + pre_analysis = None + try: + cursor = self.db.conn.cursor() + cursor.execute("SELECT notes FROM functions WHERE name = ?", (function_name,)) + row = cursor.fetchone() + if row and row['notes']: + # Try parsing as JSON first (new format) + try: + notes_data = json.loads(row['notes']) + if 'llm_analysis' in notes_data: + pre_analysis = notes_data['llm_analysis'] + print(f" 📋 Using pre-analysis: {pre_analysis['complexity']} - {pre_analysis['summary'][:50]}...") + except (json.JSONDecodeError, KeyError): + # Fall back to old string format + if 'LLM Analysis:' in row['notes']: + notes = row['notes'] + analysis_match = re.search(r'LLM Analysis: (\w+) - (.+)', notes) + if analysis_match: + pre_analysis = { + 'complexity': analysis_match.group(1), + 'summary': analysis_match.group(2), + 'c_suggestion': None + } + print(f" 📋 Using pre-analysis: {pre_analysis['complexity']} - {pre_analysis['summary'][:50]}...") + except Exception as e: + if self.verbose: + print(f" Could not retrieve pre-analysis: {e}") + + # Extract function body + try: + content = c_file.read_text() + # Find function start — handle both "type func_name(" and "func_name(" + # Use brace counting to handle nested braces correctly + func_header_pattern = rf'\b{re.escape(function_name)}\s*\(' + header_match = re.search(func_header_pattern, content) + broken_code = None + if header_match: + # Walk backwards to include return type (one line) + start = content.rfind('\n', 0, header_match.start()) + start = 0 if start == -1 else start + 1 + # Find the opening brace + brace_start = content.find('{', header_match.end()) + if brace_start != -1: + depth = 0 + i = brace_start + while i < len(content): + if content[i] == '{': + depth += 1 + elif content[i] == '}': + depth -= 1 + if depth == 0: + broken_code = content[start:i+1] + break + i += 1 + if broken_code is not None: + fix_result = self.llm.fix_m2c_error( + function_name, + broken_code, + validation_error, + pre_analysis=pre_analysis + ) + + if fix_result and fix_result['fixed_code'] and fix_result['confidence'] in ('high', 'medium'): + print(f" Confidence: {fix_result['confidence']}") + print(f" {fix_result['explanation']}") + + # Replace the function in the file + new_content = content.replace(broken_code, fix_result['fixed_code']) + c_file.write_text(new_content) + + # Re-validate + is_valid_again, validation_error_again = self.validate_c_file(c_file, function_name, original_content) + + if is_valid_again: + print(f"\u2705 LLM fix successful!") + if fix_result['confidence'] == 'high': + status = 'decompiled' + print(f" ✅ High confidence - marked as decompiled") + else: + status = 'decompiled_needs_refine' + print(f" ⚠️ Medium confidence - flagged for manual review") + + self.db.record_decompilation_attempt( + function_name, + status, + notes=f"LLM auto-fix ({fix_result['confidence']} confidence): {fix_result['explanation']}" + ) + llm_fixed = True + + # Log to audit file for manual review tracking + try: + audit_log = PROJECT_ROOT / "automation" / "llm_fixes_audit.log" + with open(audit_log, 'a') as f: + timestamp = datetime.now().isoformat() + f.write(f"{timestamp}\t{function_name}\t{c_file}\t{fix_result['confidence']}\t{validation_error}\t{fix_result['explanation']}\n") + except Exception as e: + if self.verbose: + print(f" Warning: Could not write to audit log: {e}") + + return True + else: + print(f" \u274c LLM fix didn't resolve the issue: {validation_error_again}") + else: + confidence = fix_result['confidence'] if fix_result else 'unknown' + print(f" \u274c LLM fix confidence too low ({confidence}), skipping") + except Exception as e: + print(f" \u274c LLM fix failed: {e}") + + # Extract missing types information before reverting + missing_types_report = None + try: + missing_types_report = self.extract_missing_types(c_file, function_name, validation_error) + + # Store report to JSON file + reports_file = PROJECT_ROOT / "automation" / "missing_types_reports.json" + reports = [] + + if reports_file.exists(): + try: + with open(reports_file, 'r') as f: + reports = json.load(f) + except (json.JSONDecodeError, FileNotFoundError): + reports = [] + + # Add timestamp and append + missing_types_report['timestamp'] = datetime.now().isoformat() + reports.append(missing_types_report) + + with open(reports_file, 'w') as f: + json.dump(reports, f, indent=2) + + if self.verbose and missing_types_report['missing_items']: + print(f"📊 Extracted {len(missing_types_report['missing_items'])} missing type requirements") + except Exception as e: + if self.verbose: + print(f" Warning: Could not extract missing types: {e}") + + # Determine if this is a "soft" error: the decompiled code is valid C + # but has m2c artifacts that a human (or future pass) can clean up. + # For soft errors we keep the code in the file instead of reverting. + is_soft_error = not llm_fixed and any( + pattern in validation_error for pattern in self.soft_errors + ) + + if is_soft_error: + # Keep the decompiled code — it compiles and just needs tidying. + # But first strip any extern declarations that contain '?' types: + # those are syntactically invalid and cause IntelliSense errors in + # other editors even though PSY-Q cc1 can compile past them. + _content = c_file.read_text() + _cleaned = re.sub( + r'^[^\n]*//\s*extern[^\n]*\?[^\n]*\n', + '', + _content, + flags=re.MULTILINE, + ) + # Also remove bare extern declarations with ? type markers + _cleaned = re.sub( + r'^\s*/\*\?\*/\s*\w[\w\s\*,]*\([^)]*\?[^)]*\)[^;]*;\s*//\s*extern\n', + '', + _cleaned, + flags=re.MULTILINE, + ) + if _cleaned != _content: + c_file.write_text(_cleaned) + if self.verbose: + print(f" 🧹 Stripped invalid extern declarations with '?' types from soft-error file") + print(f"📋 Soft error — keeping decompiled code, marking as needs_refine") + notes_text = f"m2c soft error (kept for manual fix): {validation_error}" + if missing_types_report and missing_types_report['missing_items']: + notes_text += f"\nMissing types tracked: {len(missing_types_report['missing_items'])} items" + self.db.record_decompilation_attempt( + function_name, + 'decompiled_needs_refine', + notes=notes_text + ) + else: + # Hard error — revert to INCLUDE_ASM and mark blocked. + if original_content and not llm_fixed: + print(f"🔄 Reverting {c_file.name} to INCLUDE_ASM (keeping file clean)") + c_file.write_text(original_content) + + notes_text = f"m2c decompilation error (reverted): {validation_error}" + if missing_types_report and missing_types_report['missing_items']: + notes_text += f"\nMissing types tracked: {len(missing_types_report['missing_items'])} items" + self.db.record_decompilation_attempt( + function_name, + 'blocked', + notes=notes_text + ) + return False + + print(f"\u2705 Decompilation successful!") + self.db.record_decompilation_attempt( + function_name, + 'decompiled', + notes="Successfully decompiled by automation" + ) + + # Mark successful use of struct patterns in learning database + try: + from dependency_analyzer import DependencyAnalyzer + analyzer = DependencyAnalyzer(PROJECT_ROOT, self.db.db_path) + extern_symbols = analyzer.get_function_extern_symbols(function_name) + + for symbol in extern_symbols: + known_type = self.db.get_known_type(symbol) + if known_type: + # This symbol's type helped with successful decompilation + self.db.mark_struct_success(symbol) + if self.verbose: + print(f" 📈 Increased confidence for {symbol} pattern") + except Exception as e: + if self.verbose: + print(f" ⚠️ Could not update struct learning: {e}") + + return True + + else: + error_msg = parse_result['error_message'] or "Unknown error" + error_type = parse_result.get('error_type', 'unknown') + print(f"❌ Decompilation failed: {error_msg}") + + # Revert to original INCLUDE_ASM to keep file clean + if original_content: + print(f"🔄 Reverting {c_file.name} to INCLUDE_ASM (keeping file clean)") + c_file.write_text(original_content) + + # Classify based on error type + if error_type in ('compile', 'link'): + # Blocking errors - likely needs manual intervention + status = 'blocked' + notes = f"Blocked by {error_type} error (reverted): {error_msg}" + else: + # Other failures - can retry + status = 'failed' + notes = f"Decompilation failed ({error_type}, reverted): {error_msg}" + + self.db.record_decompilation_attempt( + function_name, + status, + notes=notes + ) + return False + + def decompile_next_batch(self, batch_size: int = 1, module: Optional[str] = None): + """ + Decompile the next N easiest functions. + + Args: + batch_size: Number of functions to attempt + module: Optional module filter (e.g., 'battle', 'field') + """ + print(f"\n{'='*60}") + print(f"BATCH DECOMPILATION: Processing {batch_size} function(s)") + if module: + print(f"Filtering by module: {module}") + print(f"{'='*60}\n") + + # Get functions to process + functions = self.db.get_functions_by_status( + 'todo', + limit=batch_size, + module=module, + order_by='difficulty_score' # Easiest first (from mako.sh rank scores) + ) + + if not functions: + print("✅ No more functions to decompile!") + return + + print(f"Found {len(functions)} function(s) to process\n") + + success_count = 0 + failed_count = 0 + + for i, func in enumerate(functions, 1): + print(f"\n[{i}/{len(functions)}] Processing: {func['name']}") + + if self.decompile_function(func['name']): + success_count += 1 + else: + failed_count += 1 + + # Summary + print(f"\n{'='*60}") + print(f"BATCH COMPLETE") + print(f"{'='*60}") + print(f"✅ Successful: {success_count}") + print(f"❌ Failed: {failed_count}") + print(f"{'='*60}\n") + + +def show_status(db: DecompDatabase): + """Show overall decompilation progress.""" + stats = db.get_statistics() + + print("\n" + "="*60) + print("DECOMPILATION PROGRESS") + print("="*60) + + total = stats['total'] + by_status = stats['by_status'] + + # Calculate progress + verified = by_status.get('verified', 0) + decompiled = by_status.get('decompiled', 0) + needs_refine = by_status.get('decompiled_needs_refine', 0) + in_progress = by_status.get('in_progress', 0) + failed = by_status.get('failed', 0) + blocked = by_status.get('blocked', 0) + todo = by_status.get('todo', 0) + + if total > 0: + # Progress includes verified + decompiled + needs_refine + completed = verified + decompiled + needs_refine + progress_pct = (completed / total) * 100 + print(f"\nTotal Functions: {total}") + print(f"Progress: {completed}/{total} ({progress_pct:.1f}%)") + print(f"\nStatus Breakdown:") + print(f" ✅ Verified: {verified:>6}") + print(f" 🔄 Decompiled: {decompiled:>6}") + print(f" 🔧 Needs Refine: {needs_refine:>6}") + print(f" ⚙️ In Progress: {in_progress:>6}") + print(f" ⚠️ Blocked: {blocked:>6}") + print(f" ❌ Failed: {failed:>6}") + print(f" ⏳ Todo: {todo:>6}") + + # Show by module + print(f"\nBy Module:") + for module, count in stats['by_module'].items(): + print(f" {module:15s}: {count:>4}") + + print("="*60 + "\n") + + +def main(): + parser = argparse.ArgumentParser(description="Automated decompilation runner") + parser.add_argument('--auto', action='store_true', + help='Process next function(s) automatically') + parser.add_argument('--batch', type=int, default=1, + help='Number of functions to process (default: 1)') + parser.add_argument('--function', type=str, + help='Decompile a specific function by name') + parser.add_argument('--module', type=str, + help='Filter by module (e.g., battle, field)') + parser.add_argument('--status', action='store_true', + help='Show decompilation progress') + parser.add_argument('--verify', action='store_true', + help='Verify decompiled functions after completion') + parser.add_argument('--audit', action='store_true', + help='Audit existing decompiled/verified functions for m2c errors') + parser.add_argument('--llm-auto-fix', action='store_true', + help='Enable automatic LLM fixing of m2c errors (requires Ollama)') + parser.add_argument('--verbose', '-v', action='store_true', + help='Verbose output') + + args = parser.parse_args() + + # Initialize database + db_path = PROJECT_ROOT / "automation" / "functions.db" + db = DecompDatabase(str(db_path)) + runner = DecompilationRunner(db, verbose=args.verbose, enable_llm_fixes=args.llm_auto_fix) + + if args.status: + show_status(db) + + elif args.audit: + # Audit existing decompilations for m2c errors + print("\n" + "="*60) + print("AUDITING DECOMPILED FUNCTIONS") + print("="*60 + "\n") + + # Check both decompiled and verified functions + to_check = [] + to_check.extend(db.get_functions_by_status('decompiled')) + to_check.extend(db.get_functions_by_status('verified')) + + if not to_check: + print("No decompiled/verified functions to audit.") + else: + print(f"Auditing {len(to_check)} function(s)...\n") + + invalid_count = 0 + for i, func in enumerate(to_check, 1): + c_file = PROJECT_ROOT / func['c_file_path'] + is_valid, error = runner.validate_c_file(c_file, func['name'], None) + if not is_valid: + invalid_count += 1 + print(f"[{i}/{len(to_check)}] ❌ {func['name']}: {error}") + # Mark as blocked + db.update_function_status( + func['name'], + 'blocked', + notes=f"Audit found m2c error: {error}" + ) + elif args.verbose: + print(f"[{i}/{len(to_check)}] ✅ {func['name']}") + + print(f"\n{'='*60}") + print(f"Audit complete: {invalid_count} invalid decompilations found") + if invalid_count > 0: + print(f"Marked {invalid_count} function(s) as 'blocked' for manual review") + print(f"{'='*60}\n") + + elif args.function: + # Decompile specific function + success = runner.decompile_function(args.function) + + # Optionally verify + if success and args.verify: + print("\n" + "="*60) + print("Running verification...") + print("="*60) + try: + from build import BuildVerifier + verifier = BuildVerifier(db, verbose=args.verbose) + verifier.verify_decompiled_functions() + except ImportError: + print("⚠️ build.py not found, skipping verification") + + sys.exit(0 if success else 1) + + elif args.auto: + # Batch decompilation + runner.decompile_next_batch( + batch_size=args.batch, + module=args.module + ) + + # Optionally verify + if args.verify: + print("\n" + "="*60) + print("Running verification...") + print("="*60) + try: + from build import BuildVerifier + verifier = BuildVerifier(db, verbose=args.verbose) + verifier.verify_decompiled_functions() + except ImportError: + print("⚠️ build.py not found, skipping verification") + + else: + parser.print_help() + print("\nQuick examples:") + print(" python decompile.py --status") + print(" python decompile.py --auto") + print(" python decompile.py --auto --batch 10") + print(" python decompile.py --auto --verify") + print(" python decompile.py --function AverageSZ4") + + +if __name__ == '__main__': + main() diff --git a/automation/dependency_analyzer.py b/automation/dependency_analyzer.py new file mode 100644 index 0000000..7419615 --- /dev/null +++ b/automation/dependency_analyzer.py @@ -0,0 +1,1073 @@ +""" +Dependency analyzer for function call graphs. + +Analyzes assembly files to determine which functions call which other functions, +enabling dependency-aware scheduling for decompilation. +""" + +import re +import sqlite3 +from pathlib import Path +from typing import Dict, Set, List, Optional +from collections import defaultdict + + +class DependencyAnalyzer: + """Analyzes function dependencies from assembly files.""" + + def __init__(self, project_root: Path, db_path: Optional[Path] = None, + blocker_multiplier: int = 10): + self.project_root = project_root + self.asm_dir = project_root / "asm" + + # Multiplier for the "number of dependents" bonus in scoring. + # Higher values surface high-blocker functions more aggressively. + self._blocker_multiplier = blocker_multiplier + + # Database connection (optional, for sibling completion scoring) + self.db_path = db_path or (project_root / "automation" / "functions.db") + self.db_conn = None + + # Dependency graph: function_name -> set of functions it calls + self.calls: Dict[str, Set[str]] = defaultdict(set) + + # Reverse graph: function_name -> set of functions that call it + self.called_by: Dict[str, Set[str]] = defaultdict(set) + + # All known function names + self.all_functions: Set[str] = set() + + # Cache for C file completion rates + self.c_file_completion: Dict[str, float] = {} + + def analyze_asm_file(self, asm_file: Path) -> Dict[str, Set[str]]: + """ + Analyze a single assembly file to extract function calls. + + Each .s file typically contains one function. We extract: + - Function name from glabel + - All functions it calls via 'jal' instructions + + Returns: + Dict mapping function names to the set of functions they call + """ + if not asm_file.exists() or asm_file.suffix != '.s': + return {} + + try: + content = asm_file.read_text() + except: + return {} + + result = {} + + # Split into function blocks using glabel markers + # Format: glabel func_name + function_pattern = r'^\s*glabel\s+(\w+)\s*$' + + current_function = None + current_calls = set() + + for line in content.split('\n'): + # Check for function label + func_match = re.match(function_pattern, line) + if func_match: + # Save previous function + if current_function: + result[current_function] = current_calls + + # Start new function + current_function = func_match.group(1) + current_calls = set() + continue + + # Look for function calls (jal instruction) + # Format: jal func_name or /* ... */ jal func_name + if current_function: + # Match jal with optional comment before it + call_match = re.search(r'jal\s+(\w+)', line) + if call_match: + called_func = call_match.group(1) + # Filter out register names and common false positives + if not called_func.startswith('$') and not called_func in ('delay', 'nop'): + current_calls.add(called_func) + + # Save last function + if current_function: + result[current_function] = current_calls + + return result + + def build_call_graph(self, module: Optional[str] = None) -> None: + """ + Build the complete call graph from assembly files. + + Args: + module: Optional module filter (e.g., 'battle', 'world') + """ + self.calls.clear() + self.called_by.clear() + self.all_functions.clear() + + # Find all assembly files + # Structure: asm/us/MODULE/nonmatchings/**/*.s + if module: + # Look in specific module directory + search_dirs = [ + self.asm_dir / "us" / module / "nonmatchings", + ] + else: + # Look in all module directories + search_dirs = [ + self.asm_dir / "us", + ] + + asm_files = [] + for search_dir in search_dirs: + if search_dir.exists(): + asm_files.extend(search_dir.rglob("*.s")) + + # Analyze each file + for asm_file in asm_files: + # Skip data and bss files + if '.data.s' in asm_file.name or '.bss.s' in asm_file.name: + continue + + file_calls = self.analyze_asm_file(asm_file) + + for func_name, called_funcs in file_calls.items(): + self.all_functions.add(func_name) + self.calls[func_name].update(called_funcs) + + # Build reverse graph + for called_func in called_funcs: + self.all_functions.add(called_func) + self.called_by[called_func].add(func_name) + + def get_dependencies(self, func_name: str) -> Set[str]: + """Get the set of functions that this function calls.""" + return self.calls.get(func_name, set()) + + def get_dependents(self, func_name: str) -> Set[str]: + """Get the set of functions that call this function.""" + return self.called_by.get(func_name, set()) + + def get_unresolved_dependencies(self, func_name: str, decompiled_funcs: Set[str]) -> Set[str]: + """ + Get dependencies that haven't been decompiled yet. + + Args: + func_name: Function to check + decompiled_funcs: Set of functions already decompiled + + Returns: + Set of function names that are dependencies but not yet decompiled + """ + deps = self.get_dependencies(func_name) + return deps - decompiled_funcs + + def get_c_file_completion_rate(self, c_file_path: str) -> float: + """ + Get the completion rate (% of verified functions) for a C file. + + Args: + c_file_path: Path to C file (e.g., 'src/battle/battle.c') + + Returns: + Completion rate as percentage (0-100) + """ + if c_file_path in self.c_file_completion: + return self.c_file_completion[c_file_path] + + if not self.db_conn: + try: + self.db_conn = sqlite3.connect(self.db_path) + self.db_conn.row_factory = sqlite3.Row + except: + return 0.0 + + try: + cursor = self.db_conn.cursor() + cursor.execute(""" + SELECT + COUNT(*) as total, + SUM(CASE WHEN status = 'verified' THEN 1 ELSE 0 END) as verified + FROM functions + WHERE c_file_path = ? + """, (c_file_path,)) + row = cursor.fetchone() + + if row and row['total'] > 0: + completion = (row['verified'] / row['total']) * 100.0 + else: + completion = 0.0 + + self.c_file_completion[c_file_path] = completion + return completion + except: + return 0.0 + + def compute_dependency_score(self, func_name: str, decompiled_funcs: Set[str], + c_file_path: Optional[str] = None) -> float: + """ + Compute a score for prioritizing decompilation. + + Higher score = better candidate for decompilation. + + Score factors: + - Functions with all dependencies resolved: +100 + - Functions with some dependencies resolved: proportional bonus + - Leaf functions (no dependencies): +50 + - Functions that many others depend on: bonus based on dependents + - Sibling completion: Up to +50 based on how many functions in same C file are done + + Returns: + Score (0-250+) + """ + deps = self.get_dependencies(func_name) + + # Leaf function (calls nothing or only decompiled functions) + if not deps: + score = 150.0 # Very high priority + else: + # Count resolved vs unresolved dependencies + unresolved = deps - decompiled_funcs + resolved_ratio = (len(deps) - len(unresolved)) / len(deps) + + # Base score from dependency resolution + score = resolved_ratio * 100.0 + + # All dependencies resolved - major bonus + if not unresolved: + score += 100.0 + + # Bonus for being a dependency of many functions (unlock more work). + # Uses a higher multiplier and cap so high-blocker functions meaningfully + # outrank leaf functions — blocking 9 callers gives +90, blocking 20 gives +200. + dependents = len(self.get_dependents(func_name)) + blocker_multiplier = getattr(self, '_blocker_multiplier', 10) + score += min(dependents * blocker_multiplier, 200) + + # Sibling completion bonus + if c_file_path: + completion_rate = self.get_c_file_completion_rate(c_file_path) + # Higher completion = fewer sibling placeholder issues + # At 50%+ completion, give full bonus. Below that, scale proportionally. + sibling_bonus = min(completion_rate / 50.0, 1.0) * 50.0 + score += sibling_bonus + + return score + + def get_recommended_functions(self, + candidate_funcs: List[str], + decompiled_funcs: Set[str], + limit: int = 20) -> List[tuple]: + """ + Get recommended functions to decompile based on dependencies. + + Args: + candidate_funcs: List of function names to consider + decompiled_funcs: Set of already decompiled function names + limit: Maximum number of recommendations + + Returns: + List of (func_name, score, unresolved_count) tuples, sorted by score + """ + recommendations = [] + + for func_name in candidate_funcs: + score = self.compute_dependency_score(func_name, decompiled_funcs) + unresolved = len(self.get_unresolved_dependencies(func_name, decompiled_funcs)) + + recommendations.append((func_name, score, unresolved)) + + # Sort by score (descending), then by unresolved count (ascending) + recommendations.sort(key=lambda x: (-x[1], x[2])) + + return recommendations[:limit] + + # ============================================================ + # Type-Aware Decompilation Scoring + # ============================================================ + + def extract_extern_symbols(self, asm_file: Path) -> Set[str]: + """ + Extract extern symbol references from an assembly file. + + Looks for patterns like: + - lui/addiu pairs: lui $v0, %hi(D_800XXXXX) + - lw/sw with symbol: lw $v0, D_800XXXXX + + Returns: + Set of extern symbol names referenced + """ + if not asm_file.exists(): + return set() + + try: + content = asm_file.read_text() + except: + return set() + + symbols = set() + + # Pattern for %hi/%lo symbol references + hi_lo_pattern = r'%(?:hi|lo)\(([A-Za-z_][A-Za-z0-9_]*)\)' + + # Pattern for direct symbol references (not registers) + # Like: lw $v0, D_800F83D0 + direct_pattern = r'\s+(?:lw|lh|lb|sw|sh|sb|lui|addiu|la)\s+\$\w+,\s*(-?\d+\()?\s*([A-Za-z_][A-Za-z0-9_]*)' + + for line in content.split('\n'): + # Check for %hi/%lo references + for match in re.finditer(hi_lo_pattern, line): + symbol = match.group(1) + # Filter out obvious non-data symbols + if symbol.startswith('D_') or symbol.startswith('g_') or symbol.isupper(): + symbols.add(symbol) + + # Check for direct references + match = re.search(direct_pattern, line) + if match: + symbol = match.group(2) + # Filter: must start with D_, g_, or be all caps data symbols + if symbol.startswith('D_') or symbol.startswith('g_') or (symbol.isupper() and '_' in symbol): + symbols.add(symbol) + + return symbols + + def get_function_extern_symbols(self, func_name: str) -> Set[str]: + """ + Get extern symbols referenced by a specific function. + + Args: + func_name: Function name + + Returns: + Set of extern symbol names + """ + # Find the assembly file for this function + # Typical path: asm/us/MODULE/nonmatchings/SUBDIR/func_name.s + asm_files = list(self.asm_dir.rglob(f"**/{func_name}.s")) + + symbols = set() + for asm_file in asm_files: + symbols.update(self.extract_extern_symbols(asm_file)) + + return symbols + + def check_type_availability(self, func_name: str, known_types: Dict[str, Dict]) -> tuple: + """ + Check if types are available for all extern symbols used by a function. + + Args: + func_name: Function to check + known_types: Dict from DB.get_all_known_types() + + Returns: + (known_count, unknown_count, unknown_symbols) + """ + extern_symbols = self.get_function_extern_symbols(func_name) + + if not extern_symbols: + # No extern symbols = no type issues + return (0, 0, set()) + + known = 0 + unknown_symbols = set() + + for symbol in extern_symbols: + if symbol in known_types and known_types[symbol]['confidence'] >= 0.3: + known += 1 + else: + unknown_symbols.add(symbol) + + return (known, len(unknown_symbols), unknown_symbols) + + def compute_type_aware_score(self, func_name: str, decompiled_funcs: Set[str], + known_types: Dict[str, Dict], + c_file_path: Optional[str] = None) -> float: + """ + Enhanced dependency score that considers type availability. + + Score factors: + - All base dependency factors from compute_dependency_score + - Type availability bonus: Functions with all types known get +50 + - Type availability penalty: Functions with many unknown types penalized + + Returns: + Score (0-300+) + """ + # Start with base dependency score + score = self.compute_dependency_score(func_name, decompiled_funcs, c_file_path) + + # Add type awareness + known_count, unknown_count, unknown_symbols = self.check_type_availability( + func_name, known_types + ) + + total_symbols = known_count + unknown_count + + if total_symbols == 0: + # No extern symbols = no type issues = small bonus + score += 25.0 + elif unknown_count == 0: + # All types known = big bonus + score += 50.0 + else: + # Some types unknown = penalty proportional to unknowns + type_ratio = known_count / total_symbols + # Scale penalty: 0% known = -50, 100% known = +50 + type_adjustment = (type_ratio * 100) - 50 + score += type_adjustment + + return score + + def get_type_aware_recommendations(self, + candidate_funcs: List[str], + decompiled_funcs: Set[str], + known_types: Dict[str, Dict], + limit: int = 20) -> List[tuple]: + """ + Get recommendations that consider both dependencies and type availability. + + Args: + candidate_funcs: Functions to consider + decompiled_funcs: Already decompiled functions + known_types: Dict from DB.get_all_known_types() + limit: Max recommendations + + Returns: + List of (func_name, score, unresolved_deps, unknown_types) tuples + """ + recommendations = [] + + for func_name in candidate_funcs: + score = self.compute_type_aware_score( + func_name, decompiled_funcs, known_types + ) + unresolved = len(self.get_unresolved_dependencies(func_name, decompiled_funcs)) + known, unknown, _ = self.check_type_availability(func_name, known_types) + + recommendations.append((func_name, score, unresolved, unknown)) + + # Sort by score (descending) + recommendations.sort(key=lambda x: -x[1]) + + return recommendations[:limit] + + def get_function_status_map(self) -> Dict[str, str]: + """ + Query the DB for the status of every known function. + + Returns: + Dict mapping function_name -> status string (e.g. 'verified', 'todo', …) + Functions not in the DB are mapped to 'unknown'. + """ + if not self.db_conn: + try: + self.db_conn = sqlite3.connect(self.db_path) + self.db_conn.row_factory = sqlite3.Row + except Exception: + return {} + + try: + cursor = self.db_conn.cursor() + cursor.execute("SELECT name, status FROM functions") + return {row['name']: row['status'] for row in cursor.fetchall()} + except Exception: + return {} + + def generate_dependency_report(self, output_path: Optional[Path] = None) -> str: + """ + Generate a report listing all known functions separated into two categories: + + 1. Decompiled – functions whose status is 'verified', 'decompiled', or + 'decompiled_needs_refine', sorted descending by number of dependents. + 2. Not yet decompiled – all remaining functions (todo, blocked, failed, …), + sorted descending by number of dependents. + + Within each category functions are additionally grouped by their exact DB + status so the file is easy to scan. + + Args: + output_path: If supplied, the report is written to this file in addition + to being returned as a string. + + Returns: + The full report as a string. + """ + DECOMPILED_STATUSES = {'verified', 'decompiled', 'decompiled_needs_refine', 'sdk_excluded'} + + status_map = self.get_function_status_map() + + # Functions with no ASM split file are either already matched or are SDK + # stubs in the main binary — exclude them from the "not yet decompiled" list. + funcs_with_asm = {asm_file.stem for asm_file in self.asm_dir.rglob('*.s') if 'nonmatchings' in asm_file.parts} + + decompiled: List[tuple] = [] # (func_name, dependents, status) + not_decompiled: List[tuple] = [] # (func_name, dependents, status) + + for func in self.all_functions: + dep_count = len(self.called_by.get(func, set())) + status = status_map.get(func, 'unknown') + if status in DECOMPILED_STATUSES: + decompiled.append((func, dep_count, status)) + elif func in funcs_with_asm: + not_decompiled.append((func, dep_count, status)) + + # Sort each list by descending dependent count, then name for stable ordering + decompiled.sort(key=lambda x: (-x[1], x[0])) + not_decompiled.sort(key=lambda x: (-x[1], x[0])) + + lines: List[str] = [] + + def _write_section(title: str, entries: List[tuple]) -> None: + lines.append('=' * 72) + lines.append(title) + lines.append(f' Total: {len(entries)} functions') + lines.append('=' * 72) + if not entries: + lines.append(' (none)') + lines.append('') + return + # Sub-group by status + by_status: Dict[str, List[tuple]] = {} + for entry in entries: + by_status.setdefault(entry[2], []).append(entry) + for status_key in sorted(by_status.keys()): + group = by_status[status_key] + lines.append(f' [{status_key}] ({len(group)} functions)') + lines.append(f' {"Function":<40} {"Dependents":>10} {"Calls":>8}') + lines.append(f' {"-" * 40} {"-" * 10} {"-" * 8}') + for fname, dep_count, _ in group: + call_count = len(self.calls.get(fname, set())) + lines.append(f' {fname:<40} {dep_count:>10} {call_count:>8}') + lines.append('') + + lines.append('FF7 Decompilation Dependency Report') + lines.append(f'Generated: {__import__("datetime").datetime.now().strftime("%Y-%m-%d %H:%M:%S")}') + lines.append(f'Total functions in call graph: {len(self.all_functions)}') + lines.append('') + + _write_section( + f'SECTION 1 – DECOMPILED ({len(decompiled)} functions)', + decompiled, + ) + _write_section( + f'SECTION 2 – NOT YET DECOMPILED ({len(not_decompiled)} functions)', + not_decompiled, + ) + + report = '\n'.join(lines) + + if output_path is not None: + output_path = Path(output_path) + output_path.write_text(report) + + return report + + def get_function_status_map(self) -> Dict[str, str]: + """ + Query the DB for the status of every known function. + + Returns: + Dict mapping function_name -> status string (e.g. 'verified', 'todo', …) + Functions not in the DB are mapped to 'unknown'. + """ + if not self.db_conn: + try: + self.db_conn = sqlite3.connect(self.db_path) + self.db_conn.row_factory = sqlite3.Row + except Exception: + return {} + + try: + cursor = self.db_conn.cursor() + cursor.execute("SELECT name, status FROM functions") + return {row['name']: row['status'] for row in cursor.fetchall()} + except Exception: + return {} + + def generate_dependency_report(self, output_path: Optional[Path] = None) -> str: + """ + Generate a report listing all known functions separated into two categories: + + 1. Decompiled – functions whose status is 'verified', 'decompiled', or + 'decompiled_needs_refine', sorted descending by number of dependents. + 2. Not yet decompiled – all remaining functions (todo, blocked, failed, …), + sorted descending by number of dependents. + + Within each category functions are additionally grouped by their exact DB + status so the file is easy to scan. + + Args: + output_path: If supplied, the report is written to this file in addition + to being returned as a string. + + Returns: + The full report as a string. + """ + DECOMPILED_STATUSES = {'verified', 'decompiled', 'decompiled_needs_refine', 'sdk_excluded'} + + status_map = self.get_function_status_map() + + # Functions with no ASM split file are either already matched or are SDK + # stubs in the main binary — exclude them from the "not yet decompiled" list. + funcs_with_asm = {asm_file.stem for asm_file in self.asm_dir.rglob('*.s') if 'nonmatchings' in asm_file.parts} + + decompiled: List[tuple] = [] # (func_name, dependents, status) + not_decompiled: List[tuple] = [] # (func_name, dependents, status) + + for func in self.all_functions: + dep_count = len(self.called_by.get(func, set())) + status = status_map.get(func, 'unknown') + if status in DECOMPILED_STATUSES: + decompiled.append((func, dep_count, status)) + elif func in funcs_with_asm: + not_decompiled.append((func, dep_count, status)) + + # Sort each list by descending dependent count, then name for stable ordering + decompiled.sort(key=lambda x: (-x[1], x[0])) + not_decompiled.sort(key=lambda x: (-x[1], x[0])) + + lines: List[str] = [] + + def _write_section(title: str, entries: List[tuple]) -> None: + lines.append('=' * 72) + lines.append(title) + lines.append(f' Total: {len(entries)} functions') + lines.append('=' * 72) + if not entries: + lines.append(' (none)') + lines.append('') + return + # Sub-group by status + by_status: Dict[str, List[tuple]] = {} + for entry in entries: + by_status.setdefault(entry[2], []).append(entry) + for status_key in sorted(by_status.keys()): + group = by_status[status_key] + lines.append(f' [{status_key}] ({len(group)} functions)') + lines.append(f' {"Function":<40} {"Dependents":>10} {"Calls":>8}') + lines.append(f' {"-" * 40} {"-" * 10} {"-" * 8}') + for fname, dep_count, _ in group: + call_count = len(self.calls.get(fname, set())) + lines.append(f' {fname:<40} {dep_count:>10} {call_count:>8}') + lines.append('') + + lines.append('FF7 Decompilation Dependency Report') + lines.append(f'Generated: {__import__("datetime").datetime.now().strftime("%Y-%m-%d %H:%M:%S")}') + lines.append(f'Total functions in call graph: {len(self.all_functions)}') + lines.append('') + + _write_section( + f'SECTION 1 – DECOMPILED ({len(decompiled)} functions)', + decompiled, + ) + _write_section( + f'SECTION 2 – NOT YET DECOMPILED ({len(not_decompiled)} functions)', + not_decompiled, + ) + + report = '\n'.join(lines) + + if output_path is not None: + output_path = Path(output_path) + output_path.write_text(report) + + return report + + def get_function_status_map(self) -> Dict[str, str]: + """ + Query the DB for the status of every known function. + + Returns: + Dict mapping function_name -> status string (e.g. 'verified', 'todo', …) + Functions not in the DB are mapped to 'unknown'. + """ + if not self.db_conn: + try: + self.db_conn = sqlite3.connect(self.db_path) + self.db_conn.row_factory = sqlite3.Row + except Exception: + return {} + + try: + cursor = self.db_conn.cursor() + cursor.execute("SELECT name, status FROM functions") + return {row['name']: row['status'] for row in cursor.fetchall()} + except Exception: + return {} + + def generate_dependency_report(self, output_path: Optional[Path] = None) -> str: + """ + Generate a report listing all known functions separated into two categories: + + 1. Decompiled – functions whose status is 'verified', 'decompiled', or + 'decompiled_needs_refine', sorted descending by number of dependents. + 2. Not yet decompiled – all remaining functions (todo, blocked, failed, …), + sorted descending by number of dependents. + + Within each category functions are additionally grouped by their exact DB + status so the file is easy to scan. + + Args: + output_path: If supplied, the report is written to this file in addition + to being returned as a string. + + Returns: + The full report as a string. + """ + DECOMPILED_STATUSES = {'verified', 'decompiled', 'decompiled_needs_refine', 'sdk_excluded'} + + status_map = self.get_function_status_map() + + # Functions with no ASM split file are either already matched or are SDK + # stubs in the main binary — exclude them from the "not yet decompiled" list. + funcs_with_asm = {asm_file.stem for asm_file in self.asm_dir.rglob('*.s') if 'nonmatchings' in asm_file.parts} + + decompiled: List[tuple] = [] # (func_name, dependents, status) + not_decompiled: List[tuple] = [] # (func_name, dependents, status) + + for func in self.all_functions: + dep_count = len(self.called_by.get(func, set())) + status = status_map.get(func, 'unknown') + if status in DECOMPILED_STATUSES: + decompiled.append((func, dep_count, status)) + elif func in funcs_with_asm: + not_decompiled.append((func, dep_count, status)) + + # Sort each list by descending dependent count, then name for stable ordering + decompiled.sort(key=lambda x: (-x[1], x[0])) + not_decompiled.sort(key=lambda x: (-x[1], x[0])) + + lines: List[str] = [] + + def _write_section(title: str, entries: List[tuple]) -> None: + lines.append('=' * 72) + lines.append(title) + lines.append(f' Total: {len(entries)} functions') + lines.append('=' * 72) + if not entries: + lines.append(' (none)') + lines.append('') + return + # Sub-group by status + by_status: Dict[str, List[tuple]] = {} + for entry in entries: + by_status.setdefault(entry[2], []).append(entry) + for status_key in sorted(by_status.keys()): + group = by_status[status_key] + lines.append(f' [{status_key}] ({len(group)} functions)') + lines.append(f' {"Function":<40} {"Dependents":>10} {"Calls":>8}') + lines.append(f' {"-" * 40} {"-" * 10} {"-" * 8}') + for fname, dep_count, _ in group: + call_count = len(self.calls.get(fname, set())) + lines.append(f' {fname:<40} {dep_count:>10} {call_count:>8}') + lines.append('') + + lines.append('FF7 Decompilation Dependency Report') + lines.append(f'Generated: {__import__("datetime").datetime.now().strftime("%Y-%m-%d %H:%M:%S")}') + lines.append(f'Total functions in call graph: {len(self.all_functions)}') + lines.append('') + + _write_section( + f'SECTION 1 – DECOMPILED ({len(decompiled)} functions)', + decompiled, + ) + _write_section( + f'SECTION 2 – NOT YET DECOMPILED ({len(not_decompiled)} functions)', + not_decompiled, + ) + + report = '\n'.join(lines) + + if output_path is not None: + output_path = Path(output_path) + output_path.write_text(report) + + return report + + def get_function_status_map(self) -> Dict[str, str]: + """ + Query the DB for the status of every known function. + + Returns: + Dict mapping function_name -> status string (e.g. 'verified', 'todo', …) + Functions not in the DB are mapped to 'unknown'. + """ + if not self.db_conn: + try: + self.db_conn = sqlite3.connect(self.db_path) + self.db_conn.row_factory = sqlite3.Row + except Exception: + return {} + + try: + cursor = self.db_conn.cursor() + cursor.execute("SELECT name, status FROM functions") + return {row['name']: row['status'] for row in cursor.fetchall()} + except Exception: + return {} + + def generate_dependency_report(self, output_path: Optional[Path] = None) -> str: + """ + Generate a report listing all known functions separated into two categories: + + 1. Decompiled – functions whose status is 'verified', 'decompiled', or + 'decompiled_needs_refine', sorted descending by number of dependents. + 2. Not yet decompiled – all remaining functions (todo, blocked, failed, …), + sorted descending by number of dependents. + + Within each category functions are additionally grouped by their exact DB + status so the file is easy to scan. + + Args: + output_path: If supplied, the report is written to this file in addition + to being returned as a string. + + Returns: + The full report as a string. + """ + DECOMPILED_STATUSES = {'verified', 'decompiled', 'decompiled_needs_refine', 'sdk_excluded'} + + status_map = self.get_function_status_map() + + # Functions with no ASM split file are either already matched or are SDK + # stubs in the main binary — exclude them from the "not yet decompiled" list. + funcs_with_asm = {asm_file.stem for asm_file in self.asm_dir.rglob('*.s') if 'nonmatchings' in asm_file.parts} + + decompiled: List[tuple] = [] # (func_name, dependents, status) + not_decompiled: List[tuple] = [] # (func_name, dependents, status) + + for func in self.all_functions: + dep_count = len(self.called_by.get(func, set())) + status = status_map.get(func, 'unknown') + if status in DECOMPILED_STATUSES: + decompiled.append((func, dep_count, status)) + elif func in funcs_with_asm: + not_decompiled.append((func, dep_count, status)) + + # Sort each list by descending dependent count, then name for stable ordering + decompiled.sort(key=lambda x: (-x[1], x[0])) + not_decompiled.sort(key=lambda x: (-x[1], x[0])) + + lines: List[str] = [] + + def _write_section(title: str, entries: List[tuple]) -> None: + lines.append('=' * 72) + lines.append(title) + lines.append(f' Total: {len(entries)} functions') + lines.append('=' * 72) + if not entries: + lines.append(' (none)') + lines.append('') + return + # Sub-group by status + by_status: Dict[str, List[tuple]] = {} + for entry in entries: + by_status.setdefault(entry[2], []).append(entry) + for status_key in sorted(by_status.keys()): + group = by_status[status_key] + lines.append(f' [{status_key}] ({len(group)} functions)') + lines.append(f' {"Function":<40} {"Dependents":>10} {"Calls":>8}') + lines.append(f' {"-" * 40} {"-" * 10} {"-" * 8}') + for fname, dep_count, _ in group: + call_count = len(self.calls.get(fname, set())) + lines.append(f' {fname:<40} {dep_count:>10} {call_count:>8}') + lines.append('') + + lines.append('FF7 Decompilation Dependency Report') + lines.append(f'Generated: {__import__("datetime").datetime.now().strftime("%Y-%m-%d %H:%M:%S")}') + lines.append(f'Total functions in call graph: {len(self.all_functions)}') + lines.append('') + + _write_section( + f'SECTION 1 – DECOMPILED ({len(decompiled)} functions)', + decompiled, + ) + _write_section( + f'SECTION 2 – NOT YET DECOMPILED ({len(not_decompiled)} functions)', + not_decompiled, + ) + + report = '\n'.join(lines) + + if output_path is not None: + output_path = Path(output_path) + output_path.write_text(report) + + return report + + def get_ready_functions( + self, + candidate_names: List[str], + resolved_funcs: Set[str], + db_funcs: Set[str], + func_to_c_file: Optional[Dict[str, str]] = None, + check_cross_file: bool = False, + ) -> List[str]: + """ + Return the subset of *candidate_names* that are "ready" for strict + bottom-up decompilation ordering. + + By default (check_cross_file=False): + A function is ready when every callee that lives in the **same C file** + is already resolved (verified / decompiled / sdk_excluded). + Cross-file callees are excluded — decomp_decls.h provides their + signatures to m2c regardless of decompilation status. + + When check_cross_file=True: + A function is ready only when ALL db-tracked callees (same-file AND + cross-file) are resolved. This ensures m2c never encounters a callee + whose declaration is missing from decomp_decls.h, eliminating the + "/*?*/" unknown-type markers that cause validation failures. + + Callees not tracked in *db_funcs* (SDK / extern symbols) are always + treated as satisfied. + """ + if func_to_c_file is None: + func_to_c_file = {} + + ready = [] + for func_name in candidate_names: + callees = self.get_dependencies(func_name) + + if check_cross_file: + # All db-tracked callees must be resolved + relevant_callees = callees & db_funcs + else: + my_c_file = func_to_c_file.get(func_name) + if my_c_file: + relevant_callees = { + c for c in callees + if c in db_funcs and func_to_c_file.get(c) == my_c_file + } + else: + relevant_callees = callees & db_funcs + + if relevant_callees <= resolved_funcs: + ready.append(func_name) + + return ready + + def get_statistics(self) -> Dict: + """Get statistics about the dependency graph.""" + if not self.all_functions: + return { + 'total_functions': 0, + 'leaf_functions': 0, + 'avg_dependencies': 0.0, + 'max_dependencies': 0, + 'most_depended_on': None + } + + leaf_count = sum(1 for f in self.all_functions if not self.calls.get(f)) + avg_deps = sum(len(deps) for deps in self.calls.values()) / len(self.all_functions) + max_deps = max((len(deps) for deps in self.calls.values()), default=0) + + # Find most depended on function + most_depended = max( + ((f, len(self.called_by[f])) for f in self.all_functions), + key=lambda x: x[1], + default=(None, 0) + ) + + return { + 'total_functions': len(self.all_functions), + 'leaf_functions': leaf_count, + 'avg_dependencies': avg_deps, + 'max_dependencies': max_deps, + 'most_depended_on': most_depended[0], + 'most_depended_count': most_depended[1] + } + + +def main(): + """CLI for dependency analysis.""" + import argparse + from pathlib import Path + + parser = argparse.ArgumentParser(description='FF7 decomp dependency analyzer') + parser.add_argument('--module', '-m', type=str, default=None, + help='Limit analysis to a specific module (e.g. battle, world)') + parser.add_argument('--function', '-f', type=str, default=None, + help='Show detailed info for a specific function') + parser.add_argument('--report', '-r', type=str, default=None, metavar='OUTPUT_FILE', + help='Generate a full dependency report and write it to OUTPUT_FILE') + parser.add_argument('--top', type=int, default=30, + help='Number of top blocking functions to display (default: 30)') + args = parser.parse_args() + + project_root = Path(__file__).parent.parent + analyzer = DependencyAnalyzer(project_root) + + if args.module: + print(f'Analyzing dependencies for module: {args.module}') + analyzer.build_call_graph(args.module) + else: + print('Analyzing dependencies for all modules...') + analyzer.build_call_graph() + + stats = analyzer.get_statistics() + print(f'\nDependency Statistics:') + print(f' Total functions: {stats["total_functions"]}') + if stats['total_functions']: + print(f' Leaf functions: {stats["leaf_functions"]} ({stats["leaf_functions"]/stats["total_functions"]*100:.1f}%)') + print(f' Avg dependencies per function: {stats["avg_dependencies"]:.1f}') + print(f' Max dependencies: {stats["max_dependencies"]}') + print(f' Most depended on: {stats["most_depended_on"]} ({stats.get("most_depended_count", 0)} dependents)') + + # Top blocking (not yet decompiled) functions + try: + status_map = analyzer.get_function_status_map() + DECOMPILED = {'verified', 'decompiled', 'decompiled_needs_refine', 'sdk_excluded'} + decompiled_funcs = {f for f, s in status_map.items() if s in DECOMPILED} + + # Only consider functions that have an actual ASM split file — functions + # with no .s file are either already matched (removed from ASM) or are + # PSX SDK stubs that live in the main binary and can never be decompiled. + funcs_with_asm = { + asm_file.stem + for asm_file in analyzer.asm_dir.rglob('*.s') + if 'nonmatchings' in asm_file.parts + } + + undecompiled_with_dependents = [ + (func, len(analyzer.called_by[func])) + for func in analyzer.all_functions + if func not in decompiled_funcs + and func in funcs_with_asm + and len(analyzer.called_by[func]) > 0 + ] + + if undecompiled_with_dependents: + top_blocking = sorted(undecompiled_with_dependents, key=lambda x: x[1], reverse=True)[:args.top] + print(f' Top {args.top} blocking functions (not decompiled):') + for i, (func, dep_count) in enumerate(top_blocking, 1): + print(f' {i:2}. {func:<40} ({dep_count:3} dependents)') + else: + print(' Top blocking functions (not decompiled): None (all high-value targets done!)') + + except Exception as e: + print(f' Top blocking functions (not decompiled): Unable to determine (DB error: {e})') + + # Optional full report + if args.report: + output_path = Path(args.report) + report = analyzer.generate_dependency_report(output_path) + print(f'\nReport written to: {output_path} ({len(report.splitlines())} lines)') + + # Per-function detail + if args.function: + func_name = args.function + deps = analyzer.get_dependencies(func_name) + dependents = analyzer.get_dependents(func_name) + print(f'\nFunction: {func_name}') + print(f' Calls {len(deps)} functions: {chr(44)+" ".join(sorted(deps)[:5])}{"..." if len(deps) > 5 else ""}') + print(f' Called by {len(dependents)} functions: {", ".join(sorted(dependents)[:5])}{"..." if len(dependents) > 5 else ""}') + + +if __name__ == '__main__': + main() diff --git a/automation/dependency_report.txt b/automation/dependency_report.txt new file mode 100644 index 0000000..4c66d37 --- /dev/null +++ b/automation/dependency_report.txt @@ -0,0 +1,2193 @@ +FF7 Decompilation Dependency Report +Generated: 2026-04-11 14:18:34 +Total functions in call graph: 3382 + +======================================================================== +SECTION 1 – DECOMPILED (1421 functions) + Total: 1421 functions +======================================================================== + [sdk_excluded] (333 functions) + Function Dependents Calls + ---------------------------------------- ---------- -------- + EnterCriticalSection 9 0 + SpuSetIRQ 9 1 + SpuSetIRQCallback 9 1 + puts 9 0 + ExitCriticalSection 8 0 + SpuSetTransferCallback 8 0 + SpuSetTransferStartAddr 8 1 + func_8003DE84 8 0 + DMACallback 7 0 + func_800484A8 7 0 + func_80048540 7 0 + SpuSetIRQAddr 6 1 + SpuSetKey 6 0 + func_80038F04 6 1 + func_8003DE6C 6 0 + func_80041D28 6 6 + func_80041E30 6 3 + CD_flush 5 0 + GetGraphType 5 0 + InterruptCallback 5 0 + SetDefDrawEnv 5 2 + get_alarm 5 3 + set_alarm 5 1 + CD_sync 4 6 + SetIntrMask 4 0 + SetSZfifo3 4 0 + _spu_FsetRXXa 4 0 + _spu_FwaitFs 4 0 + checkRECT 4 0 + func_8003DE2C 4 1 + func_8003EF30 4 7 + getintr 4 2 + DecDCToutCallback 3 1 + DecDCTvlc 3 0 + SetDefDispEnv 3 0 + SpuSetVoiceLoopStartAddr 3 1 + _SpuIsInAllocateArea_ 3 0 + _SpuSetAnyVoice 3 0 + _spu_t 3 2 + func_8003A0E8 3 0 + func_8003DE4C 3 1 + func_80041AFC 3 11 + get_tw 3 0 + CD_memcpy 2 0 + CdReset 2 3 + ColorDpq 2 0 + MDEC_in 2 1 + MDEC_in_sync 2 1 + MDEC_out_sync 2 1 + SpuGetKeyStatus 2 0 + SpuSetCommonAttr 2 0 + SpuSetTransferMode 2 0 + StFreeRing 2 0 + StSetMask 2 0 + StUnSetRing 2 4 + _exeque 2 2 + _patch_card2 2 2 + _spu_FsetDelayR 2 0 + _spu_FsetRXX 2 0 + _spu_gcSPU 2 0 + _spu_writeByIO 2 2 + cd_read 2 4 + func_8003DCD8 2 0 + func_8003DD84 2 1 + func_8003E28C 2 1 + func_80040CA8 2 5 + get_ce 2 0 + get_cs 2 0 + get_mode 2 0 + get_ofs 2 0 + init_ring_status 2 0 + timeout 2 1 + CD_cachefile 1 4 + CD_datasync 1 4 + CD_getsector 1 0 + CD_init 1 6 + CD_initintr 1 2 + CD_initvol 1 0 + CD_newmedia 1 4 + CD_ready 1 6 + CD_searchdir 1 1 + CD_vol 1 0 + DMA_memclr 1 0 + GetRCnt 1 0 + InitGeom 1 1 + Lzc 1 0 + MDEC_out 1 1 + MDEC_reset 1 3 + RotMatrix 1 0 + RotTransPers 1 0 + ScaleMatrix 1 0 + SetGeomOffset 1 0 + SetGeomScreen 1 0 + SetRotMatrix 1 0 + SetTransMatrix 1 0 + SpuClearReverbWorkArea 1 3 + SpuGetReverbModeParam 1 0 + SpuInitMalloc 1 0 + SpuMallocWithStartAddr 1 2 + SpuRead 1 1 + SpuSetNoiseClock 1 0 + SpuSetNoiseVoice 1 1 + SpuSetPitchLFOVoice 1 1 + SpuSetReverb 1 1 + SpuSetReverbDepth 1 0 + SpuSetReverbModeParam 1 4 + SpuSetReverbVoice 1 1 + SpuSetVoiceARAttr 1 0 + SpuSetVoiceDR 1 0 + SpuSetVoicePitch 1 0 + SpuSetVoiceRRAttr 1 0 + SpuSetVoiceSL 1 0 + SpuSetVoiceSRAttr 1 0 + SpuSetVoiceStartAddr 1 1 + SpuSetVoiceVolume 1 0 + SpuSetVoiceVolumeAttr 1 0 + SpuStart 1 5 + StClearRing 1 1 + StGetBackloc 1 2 + StGetNext 1 0 + StRingStatus 1 0 + StSetRing 1 1 + StSetStream 1 1 + StartRCnt 1 0 + StopRCnt 1 0 + VSyncCallback 1 0 + VSync_memclr 1 0 + _ExitCard 1 3 + _SpuCallback 1 1 + _SpuDataCallback 1 1 + _SpuInit 1 4 + _SpuMallocSeparateTo3 1 1 + _addque2 1 5 + _card_write 1 0 + _cmp 1 1 + _cwc 1 0 + _new_card 1 0 + _param 1 0 + _patch_card 1 2 + _patch_gte 1 3 + _reset 1 3 + _spu_FsetDelayW 1 0 + _spu_init 1 3 + _spu_read 1 1 + _spu_setReverbAttr 1 0 + _spu_write 1 2 + _version 1 0 + csqrt_1 1 0 + data_ready_callback 1 0 + exit 1 0 + func_8003DCE8 1 0 + func_8003DDA4 1 0 + func_80041620 1 0 + func_80041654 1 1 + func_80041EFC 1 0 + func_800485A0 1 0 + get_dx 1 0 + get_tim_addr 1 2 + get_tmd_addr 1 2 + memclr 1 0 + setjmp 1 0 + sin_1 1 0 + startIntrDMA 1 2 + startIntrVSync 1 2 + trapIntr 1 2 + unpack_packet 1 3 + v_wait 1 3 + ApplyMatrix 0 0 + ApplyMatrixLV 0 0 + ApplyMatrixSV 0 0 + ApplyRotMatrix 0 0 + AverageSZ3 0 0 + AverageSZ4 0 0 + AverageZ3 0 0 + AverageZ4 0 0 + ColorCol 0 0 + CompMatrix 0 0 + DecDCTGetEnv 0 0 + DecDCTPutEnv 0 0 + DecDCTinCallback 0 1 + DecDCTvlcSize 0 0 + DpqColor 0 0 + DpqColor3 0 0 + DpqColorLight 0 0 + DrawSyncCallback 0 0 + DumpClut 0 0 + DumpDispEnv 0 0 + DumpDrawEnv 0 1 + DumpTPage 0 1 + GetIntrMask 0 0 + GetODE 0 0 + Intpl 0 0 + InvSquareRoot 0 0 + LightColor 0 0 + LoadAverage0 0 0 + LoadAverage12 0 0 + LoadAverageByte 0 0 + LoadAverageCol 0 0 + LoadAverageShort0 0 0 + LoadAverageShort12 0 0 + LocalLight 0 0 + MargePrim 0 0 + MatrixNormal 0 1 + MulMatrix 0 0 + MulMatrix0 0 0 + MulMatrix2 0 0 + MulRotMatrix 0 0 + MulRotMatrix0 0 0 + NormalColor 0 0 + NormalColor3 0 0 + NormalColorCol 0 0 + NormalColorCol3 0 0 + NormalColorDpq 0 0 + NormalColorDpq3 0 0 + OuterProduct0 0 0 + OuterProduct12 0 0 + PadInit 0 3 + PadRead 0 1 + PadStop 0 1 + PopMatrix 0 1 + PushMatrix 0 1 + ReadColorMatrix 0 0 + ReadGeomOffset 0 0 + ReadGeomScreen 0 0 + ReadLZC 0 0 + ReadLightMatrix 0 0 + ReadOTZ 0 0 + ReadRotMatrix 0 0 + ResetRCnt 0 0 + RotAverage3 0 0 + RotAverage4 0 0 + RotAverageNclip3 0 0 + RotAverageNclip4 0 0 + RotMatrixX 0 0 + RotMatrixY 0 0 + RotMatrixYXZ 0 0 + RotMatrixZ 0 0 + RotMatrixZYX 0 0 + RotTrans 0 0 + RotTransPers3 0 0 + RotTransPers4 0 0 + RotTransSV 0 0 + ScaleMatrixL 0 0 + SetBackColor 0 0 + SetBlockFill 0 0 + SetColorMatrix 0 0 + SetDrawMove 0 0 + SetFarColor 0 0 + SetFogNearFar 0 2 + SetGraphQueue 0 1 + SetGraphReverse 0 0 + SetIR123 0 0 + SetLightMatrix 0 0 + SetMAC123 0 0 + SetMulMatrix 0 0 + SetPriority 0 0 + SetRGBfifo 0 0 + SetRii 0 0 + SetSXSYfifo 0 0 + SetSZfifo4 0 0 + SetTexWindow 0 1 + SetVertexTri 0 0 + Square0 0 0 + Square12 0 0 + SquareRoot0 0 0 + SquareRoot12 0 0 + SquareSL0 0 0 + SquareSL12 0 0 + SquareSS0 0 0 + SquareSS12 0 0 + SsInitHot 0 3 + StCdInterrupt2 0 1 + TransMatrix 0 0 + TransposeMatrix 0 0 + VSyncCallbacks 0 0 + VectorNormal 0 1 + VectorNormalS 0 0 + VectorNormalSS 0 1 + _SpuIsInAllocateArea 0 0 + _addque 0 1 + _card_auto 0 0 + _card_clear 0 2 + _card_info 0 0 + _card_load 0 0 + _clr 0 2 + _ctl 0 0 + _cwb 0 0 + _drs 0 2 + _dws 0 2 + _getctl 0 0 + _otc 0 2 + _spu_FgetRXXa 0 0 + _spu_FiDMA 0 2 + _spu_FsetPCR 0 0 + _spu_r_ 0 2 + _status 0 0 + _sync 0 3 + callback 0 1 + close 0 0 + csqrt 0 2 + def_cbread 0 1 + def_cbready 0 1 + def_cbsync 0 1 + delete 0 0 + firstfile 0 0 + format 0 0 + func_8003CE0C 0 0 + func_8003DCF8 0 0 + func_8003DDBC 0 0 + func_8003DDF4 0 0 + func_8003E2B0 0 1 + func_8003FA9C 0 0 + func_800418D8 0 8 + func_80041CD4 0 3 + func_800487F0 0 0 + func_80048BBC 0 0 + func_80048C58 0 0 + gteMIMefunc 0 0 + nextfile 0 0 + open 0 0 + ratan2 0 0 + rcos 0 0 + read 0 0 + restartIntr 0 2 + rsin 0 1 + setIntr 0 2 + setIntrDMA 0 0 + setIntrVSync 0 0 + startIntr 0 8 + stopIntr 0 2 + trapIntrDMA 0 1 + trapIntrVSync 0 0 + write 0 0 + + [verified] (1088 functions) + Function Dependents Calls + ---------------------------------------- ---------- -------- + func_800BEAD4 237 6 + func_800BF908 64 2 + func_800BEE10 63 2 + func_80034B44 47 0 + func_800BECA4 46 7 + func_8003B48C 40 0 + func_8003B51C 38 0 + func_800BF3AC 33 2 + AddPrim 31 0 + VSync 30 1 + func_80026A34 29 2 + func_800C0248 28 2 + func_8001AC9C 26 0 + func_80026F44 26 3 + printf 25 0 + func_80046794 23 0 + func_8002DA7C 22 2 + func_80044A68 21 0 + func_800A0B40 19 0 + func_800AA0E0 19 0 + func_80015248 18 8 + SetShadeTex 16 0 + func_800211C4 16 2 + func_800BC04C 16 4 + GetClut 14 0 + SetSemiTrans 14 0 + func_8001E040 14 6 + func_80028CA0 14 4 + func_8002FF4C 14 2 + func_80030038 14 2 + func_80030148 14 2 + func_800A2108 14 2 + func_800A7254 14 0 + DrawSync 13 0 + CdControl 12 1 + GetTPage 12 1 + func_800A993C 12 0 + func_80028E00 11 3 + func_800A9A44 11 0 + LoadImage 10 1 + func_8002A510 10 0 + func_800A6884 10 0 + func_8001B834 9 0 + func_800264A8 9 1 + func_800AE0BC 9 4 + PutDispEnv 8 3 + PutDrawEnv 8 2 + func_8001C808 8 1 + func_8002A094 8 4 + func_8002A6C4 8 0 + func_80034CAC 8 2 + func_80034D18 8 0 + func_800A91A4 8 0 + func_800ADFC0 8 1 + func_800BB9B8 8 0 + func_800C46A4 8 0 + func_800D9BF4 8 0 + func_800DA334 8 0 + func_800DA368 8 0 + CdControlB 7 2 + CdIntToPos 7 0 + ResetCallback 7 0 + func_8001964C 7 0 + func_8002A748 7 0 + func_800A8640 7 0 + func_800D4848 7 0 + StoreImage 6 1 + func_80025788 6 0 + func_80026A00 6 0 + func_800A90EC 6 0 + func_800A9240 6 0 + func_800AA098 6 0 + func_800ABA18 6 1 + func_800B63F0 6 0 + func_800D29D4 6 5 + func_800E6B94 6 0 + CdControlF 5 1 + ChangeClearPAD 5 0 + MoveImage 5 1 + func_80014A84 5 2 + func_80014B70 5 0 + func_8001C8D4 5 1 + func_800257CC 5 0 + func_80026090 5 3 + func_80026B70 5 0 + func_8002BCCC 5 0 + func_8002BD04 5 0 + func_8002BFCC 5 0 + func_8002C004 5 0 + func_800A1FAC 5 4 + func_800A2088 5 0 + func_800AB988 5 2 + func_800ADC80 5 0 + func_800AE47C 5 1 + func_800B0098 5 2 + func_800B7714 5 0 + func_800B79B8 5 0 + func_800D33FC 5 0 + func_800DA124 5 1 + DeliverEvent 4 0 + DrawOTag 4 0 + FlushCache 4 0 + SetDrawMode 4 2 + SetPolyFT4 4 0 + SetTile 4 0 + func_800155A4 4 0 + func_80017678 4 1 + func_80019608 4 0 + func_8001BD50 4 0 + func_8001C3CC 4 0 + func_8001CB48 4 1 + func_8001FA28 4 1 + func_80023050 4 0 + func_8002603C 4 0 + func_8002708C 4 3 + func_8002FDA0 4 0 + func_80033CB8 4 4 + func_800A1498 4 0 + func_800A19FC 4 2 + func_800A273C 4 0 + func_800A6B8C 4 0 + func_800A8A1C 4 2 + func_800A92F8 4 0 + func_800A98E4 4 0 + func_800A9D5C 4 1 + func_800AA238 4 0 + func_800AA7DC 4 0 + func_800AB6E4 4 1 + func_800B6EFC 4 5 + func_800BB9FC 4 0 + func_800C4C9C 4 0 + memcpy 4 0 + CdPosToInt 3 0 + CheckCallback 3 0 + ClearImage 3 1 + ClearOTag 3 0 + ClearOTagR 3 0 + DecDCTout 3 1 + GPU_memset 3 0 + GetGraphDebug 3 0 + SetDispMask 3 1 + SetDrawEnv 3 5 + SetPolyG4 3 0 + func_80012A8C 3 1 + func_800148A0 3 0 + func_80015AFC 3 0 + func_80015B44 3 0 + func_80015B50 3 0 + func_80015BC0 3 1 + func_800185A8 3 0 + func_8001C980 3 0 + func_800258BC 3 0 + func_80026C5C 3 4 + func_80027354 3 1 + func_800285AC 3 3 + func_80028930 3 3 + func_800294A4 3 0 + func_80029B78 3 0 + func_8002A798 3 0 + func_8002A7E8 3 1 + func_8002B1A8 3 0 + func_8003408C 3 4 + func_800A1D38 3 0 + func_800A1D54 3 0 + func_800A21A4 3 0 + func_800A2504 3 12 + func_800A32F4 3 0 + func_800A3354 3 0 + func_800A358C 3 4 + func_800A4134 3 0 + func_800A5EB0 3 0 + func_800A8DCC 3 0 + func_800A921C 3 0 + func_800A9C64 3 2 + func_800AA170 3 0 + func_800AA1B8 3 0 + func_800AA8F8 3 2 + func_800ABA68 3 1 + func_800ABB24 3 11 + func_800ADD4C 3 0 + func_800AE024 3 0 + func_800AE180 3 0 + func_800AFFBC 3 2 + func_800B11B4 3 0 + func_800B1218 3 0 + func_800B39B4 3 4 + func_800B5AAC 3 0 + func_800B624C 3 2 + func_800BC9E8 3 1 + func_800BCA38 3 0 + func_800C2000 3 3 + func_800CF60C 3 0 + func_800D4B28 3 0 + func_800D4EB4 3 0 + strncmp 3 0 + CdGetSector 2 1 + CdRead2 2 3 + CdSearchFile 2 5 + ChangeClearRCnt 2 0 + DecDCTReset 2 2 + EnableEvent 2 0 + GetVideoMode 2 0 + HookEntryInt 2 0 + OpenEvent 2 0 + ResetGraph 2 5 + SetLineF2 2 0 + func_8001117C 2 1 + func_80012840 2 2 + func_800131B8 2 1 + func_80014980 2 1 + func_800150E4 2 0 + func_80015668 2 0 + func_80015D14 2 1 + func_80015D64 2 2 + func_80016340 2 0 + func_80018834 2 1 + func_8001BB30 2 0 + func_8001BCE8 2 0 + func_8001DE70 2 0 + func_8001DEB0 2 0 + func_8001DEF0 2 0 + func_8001FA68 2 1 + func_8002120C 2 1 + func_8002305C 2 0 + func_800230C4 2 9 + func_80023788 2 0 + func_8002382C 2 0 + func_80024A3C 2 25 + func_80025288 2 0 + func_80025380 2 0 + func_80025A44 2 0 + func_800262D8 2 1 + func_80029114 2 3 + func_8002E428 2 1 + func_80033A90 2 0 + func_800343F0 2 1 + func_80034BB0 2 0 + func_80034D5C 2 0 + func_800A12AC 2 2 + func_800A1370 2 5 + func_800A2894 2 0 + func_800A31C0 2 0 + func_800A31F8 2 0 + func_800A38C8 2 2 + func_800A3908 2 3 + func_800A3DFC 2 3 + func_800A4094 2 0 + func_800A4480 2 0 + func_800A45D4 2 0 + func_800A5208 2 1 + func_800A56B0 2 0 + func_800A5AD8 2 1 + func_800A5C08 2 0 + func_800A5FB0 2 0 + func_800A5FB4 2 2 + func_800A63FC 2 0 + func_800A692C 2 0 + func_800A71E8 2 29 + func_800A7F38 2 2 + func_800A82F0 2 0 + func_800A8ABC 2 0 + func_800A8AF4 2 1 + func_800A8E84 2 0 + func_800A8FA0 2 1 + func_800A9480 2 0 + func_800A94D0 2 0 + func_800A9520 2 0 + func_800A97A8 2 0 + func_800A9910 2 0 + func_800A9A70 2 0 + func_800A9AD0 2 0 + func_800A9B04 2 0 + func_800A9DB4 2 0 + func_800AA32C 2 0 + func_800AA8D8 2 0 + func_800AB8EC 2 0 + func_800ACE14 2 0 + func_800AD0FC 2 3 + func_800ADE30 2 0 + func_800AE42C 2 1 + func_800AE4B8 2 1 + func_800AE954 2 1 + func_800AEB20 2 0 + func_800AF1A8 2 0 + func_800AF874 2 0 + func_800AF96C 2 1 + func_800AF9A0 2 1 + func_800B0240 2 0 + func_800B0794 2 1 + func_800B0E5C 2 0 + func_800B10AC 2 1 + func_800B1304 2 0 + func_800B18A8 2 1 + func_800B2638 2 0 + func_800B2A2C 2 0 + func_800B2FD0 2 0 + func_800B338C 2 0 + func_800B3FFC 2 1 + func_800B4E30 2 3 + func_800B5314 2 4 + func_800B59F4 2 4 + func_800B5DD8 2 0 + func_800B5FE8 2 0 + func_800B6570 2 0 + func_800B6724 2 4 + func_800B7480 2 14 + func_800B86C4 2 0 + func_800B888C 2 0 + func_800B8D4C 2 7 + func_800B90C0 2 8 + func_800B962C 2 2 + func_800B98F0 2 1 + func_800BA938 2 1 + func_800BAA00 2 1 + func_800BAB60 2 0 + func_800BAC70 2 0 + func_800BBA0C 2 0 + func_800BBA84 2 0 + func_800BBC4C 2 8 + func_800BBD20 2 44 + func_800BFA98 2 0 + func_800BFB10 2 0 + func_800C03B8 2 0 + func_800C1304 2 0 + func_800C1490 2 0 + func_800C2FD4 2 0 + func_800C7924 2 1 + func_800C826C 2 0 + func_800CEB20 2 0 + func_800CF368 2 0 + func_800CF5A0 2 0 + func_800D4BFC 2 0 + func_800D4FA8 2 0 + func_800D9F00 2 0 + func_800DA214 2 0 + func_800DA480 2 0 + CdDiskReady 1 2 + CdGetDiskType 1 5 + CdInit 1 5 + CdLastPos 1 0 + CdMix 1 1 + CloseEvent 1 0 + DecDCTin 1 1 + DisableEvent 1 0 + GPU_cw 1 0 + GetDispEnv 1 1 + InitCARD2 1 0 + InitPAD 1 0 + OpenTIM 1 0 + PAD_dr 1 0 + PAD_init 1 0 + ReadTIM 1 1 + ResetEntryInt 1 0 + ReturnFromException 1 0 + SetDQA 1 0 + SetDQB 1 0 + SetGraphDebug 1 0 + SetMem 1 0 + SetRCnt 1 0 + SetTile1 1 0 + StartCARD2 1 0 + StartPAD 1 0 + StopCARD2 1 0 + StopCallback 1 0 + StopPAD 1 0 + UnDeliverEvent 1 0 + WaitEvent 1 0 + _96_remove 1 0 + func_8001146C 1 4 + func_80011784 1 4 + func_80011860 1 5 + func_800119E4 1 0 + func_80011AEC 1 0 + func_80011BB4 1 0 + func_800128B8 1 3 + func_80012DB0 1 1 + func_800134F4 1 0 + func_80013564 1 0 + func_800135C0 1 0 + func_80013624 1 2 + func_80013800 1 2 + func_800138EC 1 7 + func_800146A4 1 3 + func_800148B4 1 5 + func_80014B08 1 0 + func_80014BE4 1 2 + func_80014C44 1 0 + func_80014C80 1 0 + func_80014E0C 1 1 + func_80014E74 1 4 + func_800159B0 1 0 + func_80015B88 1 0 + func_80015C3C 1 1 + func_800166C0 1 0 + func_80016808 1 3 + func_800169B8 1 3 + func_80016F90 1 3 + func_8001708C 1 1 + func_80017E68 1 1 + func_80017F38 1 1 + func_80018028 1 10 + func_80018220 1 0 + func_800182FC 1 0 + func_800184C0 1 4 + func_80018AB0 1 0 + func_80018B14 1 1 + func_80018C94 1 4 + func_80018D4C 1 6 + func_80018E18 1 1 + func_80018E90 1 0 + func_80018ECC 1 1 + func_80018FC0 1 1 + func_80019064 1 1 + func_800190E8 1 2 + func_800191A0 1 4 + func_80019254 1 2 + func_80019338 1 0 + func_8001937C 1 0 + func_800193F4 1 0 + func_80019440 1 2 + func_800194BC 1 1 + func_80019544 1 2 + func_80019690 1 2 + func_800197B8 1 14 + func_80019978 1 0 + func_80019DA0 1 0 + func_80019E4C 1 0 + func_80019E84 1 0 + func_8001A1C8 1 1 + func_8001A280 1 1 + func_8001A384 1 1 + func_8001A3B8 1 2 + func_8001A440 1 1 + func_8001A4A8 1 2 + func_8001A518 1 2 + func_8001A684 1 1 + func_8001A780 1 2 + func_8001A980 1 2 + func_8001A9CC 1 1 + func_8001AB1C 1 1 + func_8001AE08 1 0 + func_8001AEE4 1 0 + func_8001B4A0 1 3 + func_8001B5E4 1 3 + func_8001B704 1 2 + func_8001B8A8 1 0 + func_8001B944 1 3 + func_8001BA54 1 0 + func_8001BC18 1 1 + func_8001C0EC 1 0 + func_8001C484 1 0 + func_8001C498 1 0 + func_8001C4E8 1 2 + func_8001C5BC 1 3 + func_8001C788 1 3 + func_8001D6A8 1 6 + func_8001EC70 1 5 + func_8001FAAC 1 1 + func_8001FBAC 1 0 + func_8001FCDC 1 0 + func_8001FE6C 1 0 + func_8001FF50 1 0 + func_8001FF8C 1 0 + func_8001FFD4 1 0 + func_8002001C 1 0 + func_80020B68 1 6 + func_80021BAC 1 4 + func_80022B5C 1 17 + func_80022FE0 1 3 + func_8002368C 1 1 + func_80023940 1 0 + func_80024A04 1 2 + func_80025040 1 0 + func_80025174 1 7 + func_80025310 1 0 + func_800254E4 1 0 + func_80025514 1 2 + func_80025668 1 0 + func_80025800 1 0 + func_80025988 1 0 + func_80025B10 1 0 + func_80025B48 1 0 + func_80026258 1 4 + func_80026408 1 1 + func_8002988C 1 12 + func_80029998 1 0 + func_8002A958 1 2 + func_8002BDCC 1 1 + func_8002C3A8 1 1 + func_8002C8DC 1 1 + func_8002D1E4 1 1 + func_8002D2D4 1 1 + func_8002DA30 1 0 + func_8002E1A8 1 0 + func_8002FE48 1 2 + func_800318BC 1 0 + func_80031A70 1 0 + func_80032B30 1 1 + func_80032C20 1 1 + func_80032CE8 1 1 + func_80033BE0 1 4 + func_80033C20 1 1 + func_80034444 1 0 + func_80034DB0 1 0 + func_800A0000 1 29 + func_800A04C4 1 20 + func_800A0514 1 0 + func_800A0B48 1 0 + func_800A0C54 1 3 + func_800A0D2C 1 13 + func_800A141C 1 10 + func_800A16E0 1 0 + func_800A1710 1 0 + func_800A1DF0 1 7 + func_800A1ED4 1 0 + func_800A2040 1 2 + func_800A21B4 1 32 + func_800A22C0 1 0 + func_800A283C 1 0 + func_800A2974 1 4 + func_800A2BF4 1 0 + func_800A2DB0 1 0 + func_800A2F78 1 0 + func_800A304C 1 0 + func_800A310C 1 0 + func_800A31E8 1 0 + func_800A3210 1 0 + func_800A3240 1 0 + func_800A32C0 1 0 + func_800A3304 1 8 + func_800A3964 1 17 + func_800A3C74 1 0 + func_800A3E4C 1 3 + func_800A3E9C 1 1 + func_800A3EC8 1 2 + func_800A4008 1 2 + func_800A4080 1 1 + func_800A40B8 1 2 + func_800A4138 1 2 + func_800A41E8 1 3 + func_800A4268 1 3 + func_800A4350 1 3 + func_800A4430 1 0 + func_800A4494 1 0 + func_800A44A4 1 0 + func_800A44B4 1 0 + func_800A44C4 1 0 + func_800A44D8 1 0 + func_800A45C4 1 0 + func_800A45E4 1 0 + func_800A460C 1 82 + func_800A47F8 1 0 + func_800A4860 1 4 + func_800A4954 1 3 + func_800A496C 1 0 + func_800A4DDC 1 0 + func_800A4F08 1 0 + func_800A4F78 1 3 + func_800A52A4 1 0 + func_800A5348 1 1 + func_800A53A8 1 3 + func_800A54F0 1 3 + func_800A5660 1 0 + func_800A5750 1 0 + func_800A57C8 1 3 + func_800A5970 1 0 + func_800A59A0 1 0 + func_800A5A20 1 0 + func_800A5A94 1 0 + func_800A5B88 1 1 + func_800A5D00 1 1 + func_800A5E0C 1 0 + func_800A5E28 1 2 + func_800A60D8 1 0 + func_800A635C 1 0 + func_800A64AC 1 10 + func_800A65A4 1 11 + func_800A65B0 1 0 + func_800A67A8 1 1 + func_800A6C3C 1 6 + func_800A71F4 1 0 + func_800A7EA4 1 3 + func_800A7F18 1 1 + func_800A806C 1 18 + func_800A8300 1 0 + func_800A835C 1 0 + func_800A8600 1 0 + func_800A8620 1 0 + func_800A86C4 1 1 + func_800A886C 1 0 + func_800A8888 1 0 + func_800A8898 1 0 + func_800A891C 1 2 + func_800A8A88 1 0 + func_800A8C70 1 0 + func_800A8CA4 1 0 + func_800A8CE4 1 0 + func_800A8D58 1 1 + func_800A8E50 1 0 + func_800A8F48 1 0 + func_800A9018 1 1 + func_800A9064 1 0 + func_800A9134 1 0 + func_800A9194 1 0 + func_800A929C 1 0 + func_800A94F4 1 0 + func_800A9678 1 1 + func_800A96D0 1 0 + func_800A97E4 1 0 + func_800A9820 1 0 + func_800A984C 1 0 + func_800A9878 1 0 + func_800A9AA4 1 0 + func_800A9D88 1 1 + func_800A9E14 1 2 + func_800AA04C 1 0 + func_800AA128 1 0 + func_800AA2B8 1 0 + func_800AA580 1 2 + func_800AA640 1 2 + func_800AA6A4 1 0 + func_800AA738 1 0 + func_800AAA00 1 1 + func_800AAB18 1 12 + func_800AB2B4 1 0 + func_800AB308 1 0 + func_800AB310 1 0 + func_800AB36C 1 0 + func_800AB398 1 3 + func_800AB480 1 1 + func_800AB48C 1 0 + func_800AB4F4 1 1 + func_800AB570 1 2 + func_800AB5E4 1 0 + func_800AB674 1 0 + func_800AB788 1 2 + func_800AB92C 1 1 + func_800AB9C8 1 0 + func_800ABA34 1 0 + func_800ABA78 1 2 + func_800ABE58 1 1 + func_800ABF0C 1 6 + func_800ABFC0 1 8 + func_800AC3C0 1 1 + func_800AC484 1 4 + func_800AC6B4 1 1 + func_800AC700 1 72 + func_800ACA4C 1 0 + func_800ACB98 1 0 + func_800ACD88 1 0 + func_800ACE88 1 0 + func_800AD088 1 1 + func_800AD420 1 0 + func_800AD480 1 0 + func_800AD5E8 1 0 + func_800AD63C 1 8 + func_800AD788 1 1 + func_800AD804 1 4 + func_800AD928 1 0 + func_800ADA08 1 1 + func_800ADA64 1 0 + func_800ADB30 1 0 + func_800ADC3C 1 0 + func_800ADC70 1 0 + func_800AE5B8 1 1 + func_800AE5F0 1 1 + func_800AE628 1 0 + func_800AE638 1 8 + func_800AE82C 1 1 + func_800AE8AC 1 1 + func_800AEA48 1 8 + func_800AEB80 1 2 + func_800AF0A0 1 0 + func_800AF0B0 1 1 + func_800AF0C4 1 0 + func_800AF1E8 1 0 + func_800AF24C 1 0 + func_800AF2A4 1 0 + func_800AF324 1 0 + func_800AF364 1 0 + func_800AF3A4 1 5 + func_800AF65C 1 0 + func_800AF834 1 0 + func_800AF9C8 1 3 + func_800AFCC8 1 5 + func_800AFDE4 1 0 + func_800AFECC 1 0 + func_800B0170 1 0 + func_800B017C 1 0 + func_800B01C4 1 0 + func_800B0200 1 1 + func_800B0234 1 0 + func_800B0250 1 3 + func_800B0334 1 4 + func_800B04AC 1 1 + func_800B0670 1 1 + func_800B075C 1 1 + func_800B0810 1 6 + func_800B0B94 1 0 + func_800B0BF4 1 5 + func_800B0C14 1 0 + func_800B0D98 1 3 + func_800B0E84 1 9 + func_800B0F04 1 1 + func_800B104C 1 0 + func_800B10B4 1 0 + func_800B10F0 1 3 + func_800B1368 1 0 + func_800B13B0 1 0 + func_800B141C 1 0 + func_800B1624 1 0 + func_800B16D0 1 1 + func_800B17F0 1 0 + func_800B1A5C 1 1 + func_800B1AA0 1 0 + func_800B1B64 1 0 + func_800B1C1C 1 0 + func_800B1C80 1 3 + func_800B1C94 1 0 + func_800B21E4 1 2 + func_800B28CC 1 8 + func_800B29CC 1 11 + func_800B2CFC 1 2 + func_800B2E90 1 8 + func_800B2F70 1 0 + func_800B2FA4 1 0 + func_800B3030 1 0 + func_800B3044 1 0 + func_800B307C 1 13 + func_800B3300 1 0 + func_800B3350 1 0 + func_800B3418 1 12 + func_800B37E0 1 0 + func_800B3828 1 6 + func_800B392C 1 0 + func_800B3C40 1 4 + func_800B3FAC 1 0 + func_800B40B4 1 9 + func_800B4244 1 1 + func_800B45DC 1 14 + func_800B579C 1 0 + func_800B57C0 1 0 + func_800B57DC 1 5 + func_800B58F8 1 1 + func_800B5E28 1 9 + func_800B60E0 1 0 + func_800B6348 1 0 + func_800B64A0 1 1 + func_800B64D8 1 1 + func_800B650C 1 0 + func_800B65A4 1 1 + func_800B667C 1 0 + func_800B69A4 1 3 + func_800B69C0 1 1 + func_800B6B28 1 2 + func_800B6D10 1 1 + func_800B6E08 1 0 + func_800B6E78 1 4 + func_800B7104 1 1 + func_800B717C 1 0 + func_800B7228 1 14 + func_800B7620 1 1 + func_800B76A8 1 4 + func_800B77A8 1 1 + func_800B77F4 1 0 + func_800B7820 1 0 + func_800B7838 1 0 + func_800B785C 1 0 + func_800B786C 1 0 + func_800B7A40 1 4 + func_800B7AC0 1 0 + func_800B7B1C 1 0 + func_800B7B3C 1 0 + func_800B7B54 1 0 + func_800B7B78 1 0 + func_800B7BA0 1 0 + func_800B7BC0 1 0 + func_800B7BD8 1 0 + func_800B7C1C 1 1 + func_800B7C7C 1 17 + func_800B832C 1 11 + func_800B8488 1 1 + func_800B84D8 1 1 + func_800B851C 1 1 + func_800B858C 1 1 + func_800B86E8 1 1 + func_800B8720 1 1 + func_800B8760 1 1 + func_800B87D8 1 1 + func_800B8944 1 2 + func_800B89C4 1 0 + func_800B8A34 1 0 + func_800B8A5C 1 0 + func_800B8B00 1 0 + func_800B95E8 1 0 + func_800BA11C 1 0 + func_800BA24C 1 0 + func_800BA2BC 1 0 + func_800BA360 1 0 + func_800BAE60 1 0 + func_800BB1B4 1 0 + func_800BB350 1 0 + func_800BB430 1 0 + func_800BB450 1 0 + func_800BB4F8 1 0 + func_800BB568 1 0 + func_800BB8B0 1 0 + func_800BB8E8 1 7 + func_800BB9D0 1 0 + func_800BBA44 1 0 + func_800BBBB0 1 3 + func_800BC1CC 1 2 + func_800BC338 1 1 + func_800BC420 1 13 + func_800BC438 1 0 + func_800BC630 1 0 + func_800BCA48 1 0 + func_800BCA78 1 0 + func_800BCB2C 1 0 + func_800BCBE8 1 0 + func_800BCECC 1 0 + func_800BFCAC 1 1 + func_800C0254 1 3 + func_800C0314 1 0 + func_800C1394 1 3 + func_800C1D58 1 2 + func_800C1FD8 1 0 + func_800C2130 1 0 + func_800C2150 1 0 + func_800C2864 1 0 + func_800C2C1C 1 0 + func_800C31F0 1 1 + func_800C3948 1 0 + func_800C3AA0 1 0 + func_800C45EC 1 0 + func_800C5864 1 0 + func_800C6104 1 0 + func_800C76C8 1 1 + func_800CD860 1 3 + func_800D0958 1 0 + func_800D32B4 1 0 + func_800D3354 1 0 + func_800D3418 1 0 + func_800D3474 1 0 + func_800D348C 1 0 + func_800D3548 1 2 + func_800D3A6C 1 2 + func_800D415C 1 1 + func_800D41FC 1 3 + func_800D4284 1 4 + func_800D48C0 1 0 + func_800D4BC0 1 0 + func_800D4E24 1 0 + func_800D4E88 1 0 + func_800D4FF0 1 0 + func_800D5228 1 0 + func_800D61AC 1 2 + func_800D6260 1 0 + func_800D6394 1 4 + func_800D726C 1 0 + func_800D7A58 1 0 + func_800D7B1C 1 0 + func_800D7BA4 1 0 + func_800D7C98 1 0 + func_800D828C 1 0 + func_800D8304 1 0 + func_800D83A4 1 0 + func_800D85C0 1 0 + func_800D8B60 1 0 + func_800DA194 1 0 + func_800DA1D4 1 0 + func_800DA2CC 1 0 + func_800DBF8C 1 0 + func_800DC0CC 1 12 + func_800DDFEC 1 0 + func_800E08C4 1 0 + func_800E0BE0 1 0 + func_800E0E34 1 9 + func_800E1A2C 1 0 + func_800E1AC0 1 0 + func_800E60F8 1 0 + func_800E68B4 1 0 + func_800E7170 1 4 + func_801D027C 1 0 + memchr 1 0 + memmove 1 0 + memset 1 0 + strcmp 1 0 + strlen 1 0 + AddPrims 0 0 + CatPrim 0 0 + ChangeClearSIO 0 0 + DecDCTBufSize 0 0 + DecDCTinSync 0 1 + DecDCToutSync 0 1 + DrawPrim 0 0 + GetDrawEnv 0 1 + InitCARD 0 6 + InitHeap 0 0 + IsEndPrim 0 0 + LoadClut 0 2 + LoadTPage 0 2 + NextPrim 0 0 + OpenTMD 0 1 + ReadTMD 0 1 + RestartCallback 0 0 + SetData32 0 0 + SetDrawArea 0 2 + SetDrawOffset 0 1 + SetIR0 0 0 + SetLineF3 0 0 + SetLineF4 0 0 + SetLineG2 0 0 + SetLineG3 0 0 + SetLineG4 0 0 + SetPolyF3 0 0 + SetPolyF4 0 0 + SetPolyFT3 0 0 + SetPolyG3 0 0 + SetPolyGT3 0 0 + SetPolyGT4 0 0 + SetSp 0 0 + SetSprt 0 0 + SetSprt16 0 0 + SetSprt8 0 0 + SetTile16 0 0 + SetTile8 0 0 + SetVertex0 0 0 + SetVertex1 0 0 + SetVertex2 0 0 + SetVideoMode 0 0 + StartCARD 0 4 + SystemError 0 0 + TermPrim 0 0 + TestEvent 0 0 + __SN_ENTRY_POINT 0 0 + _bu_init 0 0 + bcopy 0 0 + func_8001155C 0 4 + func_800129D0 0 2 + func_80014804 0 5 + func_800155B0 0 2 + func_8001FAF8 0 0 + func_800211B8 0 0 + func_80023AC4 0 0 + func_800256DC 0 0 + func_80025ED4 0 3 + func_800269D0 0 0 + func_800269E8 0 0 + func_80026A0C 0 0 + func_80026A20 0 0 + func_80026B64 0 0 + func_80027990 0 1 + func_800293D0 0 1 + func_8002BB20 0 1 + func_8002BE2C 0 1 + func_8002C0CC 0 1 + func_8002C12C 0 1 + func_8002C408 0 1 + func_8002C7E8 0 2 + func_8002C81C 0 2 + func_8002C850 0 2 + func_8002CA84 0 1 + func_8002CEC0 0 2 + func_8002CF1C 0 2 + func_8002CF78 0 1 + func_8002DF88 0 0 + func_80031BE4 0 0 + func_80032718 0 0 + func_8003345C 0 0 + func_80034410 0 0 + func_80034430 0 0 + func_8003447C 0 1 + func_800345BC 0 1 + func_800347B4 0 1 + func_800347F8 0 5 + func_80035D64 0 2 + func_80036038 0 3 + func_80036190 0 2 + func_800425F8 0 0 + func_800A0E68 0 4 + func_800A0F90 0 2 + func_800A1F48 0 1 + func_800A22E4 0 0 + func_800A2420 0 0 + func_800A2E80 0 6 + func_800A40F0 0 0 + func_800A5924 0 1 + func_800A6C00 0 2 + func_800A6C04 0 2 + func_800A76CC 0 1 + func_800A8424 0 3 + func_800A8A6C 0 4 + func_800A91E0 0 0 + func_800A96A4 0 1 + func_800A9988 0 0 + func_800AA468 0 2 + func_800AA684 0 0 + func_800AA688 0 0 + func_800ADD2C 0 0 + func_800ADF38 0 1 + func_800AE080 0 2 + func_800AEF68 0 3 + func_800AF3AC 0 2 + func_800B062C 0 2 + func_800B089C 0 0 + func_800B0910 0 2 + func_800B11C4 0 0 + func_800B1650 0 1 + func_800B2304 0 2 + func_800B2EBC 0 0 + func_800B4794 0 5 + func_800B6A4C 0 3 + func_800B6C84 0 5 + func_800B6DCC 0 2 + func_800B7134 0 1 + func_800B7DB4 0 0 + func_800B8A98 0 0 + func_800B8CBC 0 0 + func_800B8D20 0 0 + func_800B8E48 0 0 + func_800BB650 0 2 + func_800BB7DC 0 2 + func_800BFB88 0 2 + func_800C02F4 0 1 + func_800C0DE0 0 3 + func_800C3068 0 1 + func_800C32CC 0 2 + func_800C36B4 0 1 + func_800C3CA8 0 3 + func_800C3DE4 0 1 + func_800C43C4 0 1 + func_800C4814 0 3 + func_800C4AE8 0 4 + func_800C4CE8 0 3 + func_800C5740 0 1 + func_800C64D4 0 0 + func_800C6628 0 0 + func_800C7340 0 4 + func_800C7C4C 0 49 + func_800CB450 0 2 + func_800CB660 0 2 + func_800CC284 0 3 + func_800CC404 0 3 + func_800CC70C 0 3 + func_800CC944 0 2 + func_800CCA68 0 2 + func_800CD0C4 0 1 + func_800CD16C 0 2 + func_800CD214 0 2 + func_800CD6B0 0 2 + func_800CEB94 0 1 + func_800CF874 0 2 + func_800CFC1C 0 1 + func_800D09D0 0 0 + func_800D298C 0 3 + func_800D3BF0 0 4 + func_800D3E64 0 2 + func_800D4160 0 1 + func_800D4378 0 1 + func_800D4420 0 1 + func_800D44E8 0 3 + func_800D491C 0 1 + func_800D51D4 0 0 + func_800D5230 0 0 + func_800D5774 0 1 + func_800D5B6C 0 4 + func_800D6998 0 3 + func_800D6ACC 0 2 + func_800D6D8C 0 6 + func_800D70C0 0 1 + func_800D7368 0 7 + func_800D7724 0 7 + func_800D7888 0 6 + func_800D8468 0 0 + func_800D84F8 0 1 + func_800D87EC 0 1 + func_800DCFD4 0 3 + func_800DDCE8 0 8 + func_800DEC10 0 6 + func_800E1C40 0 0 + func_800E2098 0 11 + func_800E5530 0 5 + func_801D1F40 0 4 + main 0 59 + rand 0 0 + sprintf 0 3 + srand 0 0 + +======================================================================== +SECTION 2 – NOT YET DECOMPILED (737 functions) + Total: 737 functions +======================================================================== + [blocked] (640 functions) + Function Dependents Calls + ---------------------------------------- ---------- -------- + func_800A4F60 9 2 + func_800BBEAC 7 4 + func_8002E23C 6 9 + func_800C33B4 6 3 + func_800D3994 6 2 + func_80029A50 5 7 + func_8002C2CC 5 0 + func_8002C300 5 0 + func_80034104 5 2 + func_800D9E0C 5 0 + func_80017108 4 1 + func_80020058 4 8 + func_80028484 4 3 + func_80031820 4 0 + func_800A2FD0 4 1 + func_800A8E34 4 0 + func_800A9334 4 4 + func_800A9CE8 4 0 + func_800BC11C 4 4 + func_800C4BCC 4 3 + func_800CDC14 4 0 + func_800DA444 4 0 + func_80027408 3 2 + func_80029424 3 2 + func_80029C48 3 4 + func_80029E98 3 0 + func_80034350 3 5 + func_80035658 3 5 + func_800A3178 3 0 + func_800A343C 3 0 + func_800A34C4 3 1 + func_800A6994 3 2 + func_800A72C8 3 1 + func_800A8DF4 3 0 + func_800AE4DC 3 0 + func_800AF110 3 5 + func_800B1C7C 3 1 + func_800B5C1C 3 2 + func_800BB538 3 2 + func_800BFBF0 3 2 + func_800C2E00 3 1 + func_800D0B4C 3 2 + func_800DA424 3 0 + func_800E368C 3 5 + func_80013C9C 2 9 + func_80018630 2 2 + func_80018934 2 1 + func_8001F1BC 2 11 + func_80026A94 2 3 + func_80027B84 2 2 + func_80028030 2 1 + func_800293F4 2 1 + func_80029BAC 2 1 + func_80029F44 2 0 + func_8002A43C 2 0 + func_8002AABC 2 3 + func_8002AFB8 2 0 + func_8002CFC0 2 11 + func_80033894 2 3 + func_80034D2C 2 0 + func_80034F5C 2 4 + func_80035DC8 2 1 + func_80036244 2 0 + func_80036298 2 1 + func_800A2888 2 5 + func_800A3D4C 2 0 + func_800A3F4C 2 3 + func_800A41CC 2 6 + func_800A4BA4 2 0 + func_800A6168 2 6 + func_800A61D4 2 3 + func_800A8B30 2 2 + func_800AA514 2 0 + func_800AE6C0 2 1 + func_800AEE24 2 0 + func_800B0EDC 2 1 + func_800B271C 2 4 + func_800B2B5C 2 2 + func_800B2DD4 2 1 + func_800B5CD4 2 1 + func_800B5D38 2 2 + func_800B787C 2 1 + func_800B9B2C 2 6 + func_800BBF7C 2 4 + func_800C0808 2 1 + func_800C2450 2 1 + func_800C24A8 2 2 + func_800C2970 2 2 + func_800C5B38 2 0 + func_800C614C 2 2 + func_800C7D5C 2 0 + func_800C8634 2 1 + func_800D1200 2 1 + func_800D1350 2 1 + func_800D152C 2 1 + func_800D3F0C 2 1 + func_800D4D90 2 0 + func_800D6840 2 4 + func_800112E8 1 4 + func_80018390 1 2 + func_8001840C 1 3 + func_80018A04 1 1 + func_80018BB8 1 2 + func_80019D1C 1 2 + func_80019F90 1 3 + func_8001A174 1 2 + func_8001A5B4 1 5 + func_8001A874 1 1 + func_8001B570 1 0 + func_8001BDB0 1 2 + func_8001F710 1 9 + func_800212A8 1 13 + func_80021C4C 1 7 + func_80021D5C 1 8 + func_80021E70 1 5 + func_800294BC 1 2 + func_800297A4 1 3 + func_80029818 1 3 + func_800299C8 1 8 + func_8002A28C 1 4 + func_8002B2F8 1 5 + func_8002E478 1 2 + func_8002E954 1 2 + func_8002ED34 1 0 + func_8002F24C 1 0 + func_8002F738 1 1 + func_80030E7C 1 1 + func_80032ABC 1 1 + func_80032BB4 1 1 + func_80032E6C 1 0 + func_80032ED0 1 0 + func_80034F3C 1 1 + func_80034FC8 1 8 + func_800354CC 1 4 + func_80035CF0 1 3 + func_80035F14 1 3 + func_80036100 1 0 + func_800A0030 1 19 + func_800A0534 1 1 + func_800A05D4 1 1 + func_800A0C58 1 25 + func_800A1368 1 3 + func_800A14D8 1 2 + func_800A2934 1 0 + func_800A2A2C 1 1 + func_800A2D5C 1 3 + func_800A2F1C 1 6 + func_800A3020 1 5 + func_800A311C 1 0 + func_800A3208 1 0 + func_800A3368 1 1 + func_800A3488 1 0 + func_800A34CC 1 0 + func_800A35F8 1 9 + func_800A364C 1 0 + func_800A36AC 1 8 + func_800A379C 1 1 + func_800A424C 1 1 + func_800A50E0 1 0 + func_800A5250 1 1 + func_800A5AC8 1 0 + func_800A6418 1 0 + func_800A6FC0 1 3 + func_800A82A0 1 0 + func_800A8304 1 1 + func_800A8858 1 1 + func_800A9B64 1 0 + func_800A9EEC 1 2 + func_800AA180 1 1 + func_800AA304 1 0 + func_800AA6D0 1 5 + func_800AA870 1 1 + func_800AA950 1 3 + func_800AB4AC 1 4 + func_800AB5E8 1 6 + func_800AB728 1 0 + func_800AB830 1 4 + func_800ABA70 1 4 + func_800ABFE8 1 6 + func_800AC73C 1 4 + func_800ACBA0 1 2 + func_800ACC5C 1 1 + func_800AD7B8 1 1 + func_800AD858 1 2 + func_800AD970 1 0 + func_800ADAA4 1 0 + func_800ADC90 1 3 + func_800ADD70 1 2 + func_800ADEA8 1 1 + func_800AE23C 1 1 + func_800AE764 1 1 + func_800AF6EC 1 2 + func_800AF9DC 1 2 + func_800AFAC4 1 0 + func_800AFE1C 1 1 + func_800B0618 1 1 + func_800B0A48 1 0 + func_800B0FB0 1 0 + func_800B153C 1 1 + func_800B1E40 1 1 + func_800B2598 1 0 + func_800B2F40 1 0 + func_800B38E0 1 2 + func_800B5138 1 1 + func_800B5260 1 1 + func_800B5504 1 2 + func_800B5C7C 1 3 + func_800B85D4 1 5 + func_800B8CF0 1 0 + func_800BA7C4 1 0 + func_800BACEC 1 0 + func_800BAF54 1 4 + func_800BBBCC 1 0 + func_800BBF74 1 3 + func_800BE69C 1 3 + func_800BE86C 1 3 + func_800C08A8 1 1 + func_800C0B48 1 0 + func_800C14C0 1 4 + func_800C1D8C 1 6 + func_800C2524 1 0 + func_800C3DB0 1 0 + func_800C4FB4 1 0 + func_800C5CD4 1 1 + func_800C6598 1 0 + func_800CB354 1 2 + func_800D34C8 1 0 + func_800D4368 1 4 + func_800D493C 1 1 + func_800D4C08 1 1 + func_800D4C68 1 1 + func_800D775C 1 0 + func_800D785C 1 0 + func_800D7970 1 0 + func_800D7D6C 1 2 + func_800D7F9C 1 7 + func_800D8710 1 1 + func_800D91DC 1 9 + func_800D9C04 1 0 + func_800E6DCC 1 0 + func_8001726C 0 4 + func_800206E4 0 6 + func_80022DE4 0 4 + func_80029464 0 2 + func_8002B5A8 0 2 + func_8002B608 0 2 + func_8002B668 0 2 + func_8002B6AC 0 3 + func_8002B730 0 4 + func_8002B7E0 0 4 + func_8002B8B4 0 3 + func_8002B904 0 3 + func_8002B958 0 3 + func_8002B9AC 0 4 + func_8002BA08 0 3 + func_8002BA5C 0 1 + func_8002BA98 0 1 + func_8002BBB4 0 1 + func_8002BBEC 0 0 + func_8002BC58 0 0 + func_8002C5C8 0 0 + func_8002C634 0 0 + func_8002C6C8 0 0 + func_8002C734 0 0 + func_8002C884 0 0 + func_8002C8C4 0 0 + func_8002C9E4 0 3 + func_8002CB78 0 3 + func_8002CC18 0 0 + func_8002CC44 0 1 + func_8002CCDC 0 4 + func_8002CDD0 0 3 + func_8002D410 0 5 + func_8002D4A0 0 5 + func_8002D530 0 5 + func_8002D668 0 5 + func_8002D7A0 0 6 + func_8002D8E8 0 6 + func_80030234 0 3 + func_80031AB0 0 0 + func_80031AFC 0 0 + func_80031BA0 0 0 + func_80031CB0 0 0 + func_80031CE0 0 0 + func_80031D6C 0 1 + func_80031E98 0 0 + func_80031EEC 0 0 + func_80031F30 0 0 + func_80031FF0 0 0 + func_800320C4 0 1 + func_80032274 0 0 + func_800323CC 0 0 + func_8003252C 0 0 + func_8003257C 0 0 + func_80032614 0 0 + func_80032770 0 0 + func_80032804 0 0 + func_800328F8 0 0 + func_8003298C 0 0 + func_80032A28 0 0 + func_80032C8C 0 1 + func_80032D6C 0 0 + func_80032E08 0 0 + func_80032F34 0 0 + func_80032F98 0 0 + func_80032FFC 0 0 + func_80033060 0 0 + func_800330C4 0 0 + func_80033128 0 0 + func_800331CC 0 0 + func_80033224 0 0 + func_80033264 0 0 + func_800332EC 0 0 + func_8003337C 0 0 + func_80033420 0 0 + func_800344C0 0 5 + func_80034600 0 5 + func_800346F8 0 2 + func_80034754 0 2 + func_800348F4 0 2 + func_80034974 0 4 + func_80034E00 0 1 + func_80035430 0 1 + func_800A09DC 0 3 + func_800A0AB8 0 1 + func_800A0BA8 0 1 + func_800A0CAC 0 0 + func_800A11B4 0 1 + func_800A139C 0 1 + func_800A14BC 0 1 + func_800A16E4 0 0 + func_800A1FC8 0 2 + func_800A2014 0 4 + func_800A208C 0 1 + func_800A20F8 0 2 + func_800A2328 0 2 + func_800A2458 0 7 + func_800A24A8 0 3 + func_800A2C68 0 1 + func_800A2FB8 0 1 + func_800A32D8 0 0 + func_800A555C 0 0 + func_800A66A4 0 3 + func_800A6BCC 0 1 + func_800A784C 0 0 + func_800A79CC 0 8 + func_800A80DC 0 3 + func_800A81B8 0 2 + func_800A853C 0 1 + func_800AEC10 0 7 + func_800AF1D4 0 2 + func_800B0378 0 7 + func_800B2A00 0 0 + func_800B37A0 0 1 + func_800B383C 0 5 + func_800B480C 0 1 + func_800B4B04 0 1 + func_800B4EAC 0 1 + func_800B5274 0 2 + func_800B62C4 0 2 + func_800B6AE4 0 0 + func_800B6B4C 0 4 + func_800B6B98 0 0 + func_800B8360 0 2 + func_800B86D8 0 1 + func_800B91CC 0 5 + func_800B9568 0 8 + func_800BB2A8 0 2 + func_800BC81C 0 3 + func_800C0480 0 2 + func_800C0630 0 1 + func_800C0970 0 2 + func_800C0B20 0 1 + func_800C0B54 0 5 + func_800C0C18 0 2 + func_800C0E5C 0 3 + func_800C0EDC 0 3 + func_800C0F58 0 3 + func_800C0FD8 0 3 + func_800C107C 0 3 + func_800C1214 0 3 + func_800C13B0 0 4 + func_800C1674 0 3 + func_800C1714 0 3 + func_800C17B8 0 3 + func_800C1858 0 2 + func_800C1AB4 0 2 + func_800C1BF4 0 1 + func_800C1D24 0 1 + func_800C1DE4 0 3 + func_800C1EEC 0 3 + func_800C223C 0 6 + func_800C228C 0 3 + func_800C2394 0 3 + func_800C2704 0 3 + func_800C2754 0 3 + func_800C285C 0 3 + func_800C2928 0 5 + func_800C2BFC 0 2 + func_800C2CA8 0 2 + func_800C2D54 0 2 + func_800C2F7C 0 2 + func_800C2FFC 0 2 + func_800C307C 0 2 + func_800C30FC 0 2 + func_800C31E4 0 2 + func_800C3A20 0 2 + func_800C3C34 0 2 + func_800C3EA0 0 1 + func_800C3F1C 0 1 + func_800C3FA0 0 1 + func_800C401C 0 1 + func_800C40A4 0 2 + func_800C42B0 0 1 + func_800C4350 0 1 + func_800C45AC 0 3 + func_800C46D0 0 5 + func_800C4804 0 4 + func_800C493C 0 5 + func_800C494C 0 2 + func_800C49EC 0 3 + func_800C4A40 0 3 + func_800C4A94 0 3 + func_800C4DC8 0 3 + func_800C4DE8 0 3 + func_800C4EE8 0 3 + func_800C506C 0 1 + func_800C50EC 0 1 + func_800C5194 0 1 + func_800C523C 0 1 + func_800C532C 0 1 + func_800C5414 0 1 + func_800C54BC 0 1 + func_800C5564 0 1 + func_800C560C 0 1 + func_800C5668 0 1 + func_800C57B0 0 1 + func_800C5898 0 1 + func_800C59B8 0 3 + func_800C5A2C 0 1 + func_800C5ADC 0 2 + func_800C5CE8 0 2 + func_800C5E80 0 2 + func_800C5FF4 0 1 + func_800C62F4 0 1 + func_800C63CC 0 1 + func_800C6748 0 1 + func_800C684C 0 1 + func_800C6924 0 2 + func_800C6D64 0 2 + func_800C6FD8 0 2 + func_800C728C 0 1 + func_800C7354 0 2 + func_800C75F0 0 2 + func_800C7C3C 0 2 + func_800C7CE8 0 2 + func_800C814C 0 2 + func_800C81C0 0 2 + func_800C8514 0 2 + func_800C8588 0 2 + func_800C8B98 0 2 + func_800C8F64 0 1 + func_800C9080 0 1 + func_800C91D8 0 2 + func_800C955C 0 2 + func_800C9A20 0 2 + func_800C9B88 0 2 + func_800C9C84 0 2 + func_800C9D80 0 2 + func_800C9E7C 0 2 + func_800C9F78 0 2 + func_800CA074 0 2 + func_800CA158 0 2 + func_800CA254 0 2 + func_800CA394 0 2 + func_800CA490 0 2 + func_800CA5D4 0 2 + func_800CA77C 0 2 + func_800CA95C 0 1 + func_800CAA24 0 1 + func_800CAAEC 0 2 + func_800CAC98 0 2 + func_800CADFC 0 2 + func_800CAF60 0 2 + func_800CB01C 0 2 + func_800CB0B8 0 4 + func_800CB1CC 0 3 + func_800CB28C 0 4 + func_800CB4F8 0 2 + func_800CB5C0 0 2 + func_800CB718 0 2 + func_800CB7C0 0 3 + func_800CB858 0 3 + func_800CB8F4 0 3 + func_800CB98C 0 3 + func_800CBA28 0 3 + func_800CBAC0 0 3 + func_800CBB5C 0 3 + func_800CBBF4 0 3 + func_800CBCA4 0 3 + func_800CBD40 0 3 + func_800CBDFC 0 3 + func_800CBE94 0 3 + func_800CBF40 0 3 + func_800CBFDC 0 3 + func_800CC098 0 3 + func_800CC134 0 3 + func_800CC1D4 0 3 + func_800CC358 0 3 + func_800CC4D8 0 3 + func_800CC558 0 3 + func_800CC5EC 0 3 + func_800CC670 0 3 + func_800CC78C 0 3 + func_800CC824 0 3 + func_800CC8A8 0 3 + func_800CC9EC 0 2 + func_800CCB10 0 2 + func_800CCBBC 0 2 + func_800CCC3C 0 2 + func_800CCCC8 0 2 + func_800CCD54 0 1 + func_800CCE94 0 1 + func_800CCFE8 0 2 + func_800CD2E8 0 2 + func_800CD3F0 0 2 + func_800CD554 0 1 + func_800CD5F0 0 2 + func_800CD770 0 1 + func_800CD834 0 4 + func_800CD91C 0 3 + func_800CDA24 0 4 + func_800CDB0C 0 3 + func_800CDC28 0 2 + func_800CDD40 0 2 + func_800CDE8C 0 2 + func_800CE054 0 2 + func_800CE214 0 2 + func_800CE480 0 2 + func_800CE6F4 0 2 + func_800CE904 0 2 + func_800CEE44 0 4 + func_800CF028 0 3 + func_800CF140 0 2 + func_800CF200 0 3 + func_800CF2BC 0 2 + func_800CF718 0 2 + func_800CF9B8 0 1 + func_800CFAF0 0 1 + func_800CFB84 0 1 + func_800CFCE4 0 2 + func_800CFE78 0 2 + func_800D0180 0 4 + func_800D08B8 0 0 + func_800D1654 0 2 + func_800D184C 0 3 + func_800D195C 0 1 + func_800D1A80 0 1 + func_800D1B94 0 3 + func_800D1C68 0 2 + func_800D1D3C 0 2 + func_800D1DB8 0 2 + func_800D1F20 0 5 + func_800D1FDC 0 5 + func_800D2098 0 5 + func_800D2164 0 9 + func_800D2794 0 2 + func_800D28A8 0 2 + func_800D2A70 0 3 + func_800D2B60 0 4 + func_800D2C60 0 4 + func_800D2E94 0 1 + func_800D2F3C 0 2 + func_800D3004 0 2 + func_800D3124 0 2 + func_800D3264 0 4 + func_800D3330 0 4 + func_800D368C 0 4 + func_800D3728 0 4 + func_800D3840 0 4 + func_800D3958 0 4 + func_800D3A70 0 4 + func_800D3B88 0 3 + func_800D3C18 0 3 + func_800D3CA8 0 3 + func_800D3D40 0 3 + func_800D3DCC 0 2 + func_800D3F30 0 1 + func_800D4038 0 2 + func_800D4214 0 1 + func_800D4300 0 2 + func_800D461C 0 2 + func_800D4780 0 1 + func_800D4CBC 0 2 + func_800D56A8 0 3 + func_800D579C 0 2 + func_800D5938 0 1 + func_800D5A60 0 1 + func_800D5D28 0 5 + func_800D6D44 0 1 + func_800D6E0C 0 1 + func_800D6F6C 0 1 + func_800D6F78 0 4 + func_800D707C 0 1 + func_800D7178 0 2 + func_800D751C 0 7 + func_800D76B8 0 1 + func_800D7D3C 0 2 + func_800D85B0 0 1 + func_800D85FC 0 3 + func_800D93E4 0 7 + func_800D9FA4 0 3 + func_800DA380 0 5 + func_800DA4FC 0 0 + func_800DB818 0 5 + func_800DD85C 0 3 + func_800DDAD8 0 5 + func_800DE46C 0 3 + func_800DEB18 0 1 + func_800DF24C 0 0 + func_800DF530 0 1 + func_800DF9F8 0 1 + func_800DFA94 0 5 + func_800DFC40 0 1 + func_800DFE34 0 5 + func_800DFFE4 0 0 + func_800E2C6C 0 7 + func_800E3088 0 9 + func_800E33A0 0 8 + func_800E3FB4 0 6 + func_800E4180 0 7 + func_800E4394 0 5 + func_800E4A64 0 5 + func_800E4C08 0 8 + func_800E53C8 0 0 + func_800E5978 0 12 + func_801D080C 0 25 + func_801D1C2C 0 3 + func_801D1D40 0 4 + func_801D2DA8 0 1 + + [failed] (26 functions) + Function Dependents Calls + ---------------------------------------- ---------- -------- + func_801B11BC 2 0 + func_801B1598 2 0 + func_800D3658 1 1 + func_800D58D0 1 1 + func_800D7A88 1 1 + func_801B0668 1 1 + func_801B08C0 1 9 + func_801B1120 1 1 + func_801B1734 1 1 + func_801B19AC 1 1 + func_801B1CB0 1 0 + func_801B1E0C 1 0 + func_800A015C 0 3 + func_800A01A0 0 17 + func_800A32F0 0 0 + func_800A32FC 0 0 + func_800A3308 0 0 + func_800D376C 0 3 + func_800D508C 0 1 + func_800D5138 0 1 + func_800D52A0 0 1 + func_800D5350 0 0 + func_800D5444 0 1 + func_800D6734 0 1 + func_801B0050 0 28 + func_801B0F08 0 6 + + [todo] (66 functions) + Function Dependents Calls + ---------------------------------------- ---------- -------- + func_800A6000 5 5 + func_8001786C 4 12 + func_80034150 4 8 + func_800260DC 3 13 + func_800A5BC8 3 3 + func_800B5E64 3 3 + func_800B1D48 2 21 + func_800B54B8 2 3 + func_800140F4 1 17 + func_80021F58 1 18 + func_8002B1F8 1 6 + func_8002F848 1 7 + func_80030380 1 4 + func_800308D4 1 8 + func_800A16CC 1 21 + func_800A2314 1 33 + func_800A23E0 1 10 + func_800A38FC 1 10 + func_800A4BEC 1 7 + func_800A6278 1 4 + func_800A8968 1 2 + func_800A8F88 1 10 + func_800AA348 1 2 + func_800AA5E4 1 4 + func_800AA930 1 7 + func_800AAB24 1 5 + func_800AB9C4 1 3 + func_800ABB0C 1 23 + func_800AC35C 1 11 + func_800BA534 1 6 + func_800BA598 1 8 + func_800BA65C 1 8 + func_800BB3A8 1 4 + func_800BC9FC 1 9 + func_800BCB1C 1 9 + func_800BEA38 1 4 + func_800C4148 1 4 + func_800D0518 1 6 + func_800D0938 1 5 + func_800D8D78 1 21 + func_80023AD4 0 27 + func_8002B3B4 0 6 + func_80035744 0 15 + func_800A1158 0 17 + func_800A12F0 0 4 + func_800A17C0 0 6 + func_800A19A4 0 8 + func_800A3ED0 0 7 + func_800A866C 0 4 + func_800AABBC 0 16 + func_800B33A4 0 8 + func_800B3968 0 4 + func_800B3A04 0 4 + func_800B3AB8 0 4 + func_800B3B84 0 4 + func_800B8B48 0 8 + func_800B9B0C 0 2 + func_800C74E4 0 2 + func_800D4710 0 5 + func_800D5C9C 0 6 + func_800D650C 0 9 + func_800DF2CC 0 6 + func_800DF5C8 0 7 + func_800E3B64 0 7 + func_800E3E10 0 7 + func_801D2408 0 9 + + [unknown] (5 functions) + Function Dependents Calls + ---------------------------------------- ---------- -------- + func_800D4840 4 0 + func_800A1798 1 14 + func_800A3828 1 1 + func_80034A90 0 4 + func_800D4838 0 0 diff --git a/automation/discover.py b/automation/discover.py new file mode 100644 index 0000000..125001a --- /dev/null +++ b/automation/discover.py @@ -0,0 +1,358 @@ +#!/usr/bin/env python3 +""" +Function Discovery Scanner + +Scans the FF7 decompilation codebase to find all INCLUDE_ASM macros +and populates the tracking database. + +Usage: + python discover.py --scan # Scan codebase and update database + python discover.py --stats # Show statistics + python discover.py --list battle # List functions in battle module + python discover.py --list-todo # Show next functions to decompile +""" + +import re +import os +import argparse +import subprocess +from pathlib import Path +from typing import List, Tuple, Optional, Dict +from database import DecompDatabase + + +# Project root is one level up from automation/ +PROJECT_ROOT = Path(__file__).parent.parent +SRC_DIR = PROJECT_ROOT / "src" +ASM_DIR = PROJECT_ROOT / "asm" / "us" + + +def find_include_asm_functions(c_file_path: Path) -> List[Tuple[str, str]]: + """ + Parse a C file and find all INCLUDE_ASM macros. + + Returns: + List of (function_name, asm_path_hint) tuples + """ + functions = [] + + try: + content = c_file_path.read_text(encoding='utf-8', errors='ignore') + except Exception as e: + print(f"Warning: Could not read {c_file_path}: {e}") + return functions + + # Honour the "do not decompile" sentinel comment: stop scanning at that point. + # This is checked by content rather than line number so it survives edits above it. + SENTINEL = "// NOTE: please do not decompile any of these functions." + sentinel_pos = content.find(SENTINEL) + if sentinel_pos != -1: + content = content[:sentinel_pos] + + # Match patterns like: + # INCLUDE_ASM("asm/us/battle/nonmatchings/battle", func_800A1158); + # INCLUDE_ASM(const s32, "asm/us/main/nonmatchings/1050", D_8002AA14); + pattern = r'INCLUDE_ASM\s*\([^,]*,\s*"([^"]+)"\s*,\s*([^);\s]+)' + matches = re.finditer(pattern, content) + + for match in matches: + asm_path_hint = match.group(1) + func_name = match.group(2) + functions.append((func_name, asm_path_hint)) + + # Also match simpler pattern without type: + # INCLUDE_ASM("asm/us/battle/nonmatchings/battle", func_800A1158); + pattern2 = r'INCLUDE_ASM\s*\(\s*"([^"]+)"\s*,\s*([^);\s]+)' + matches2 = re.finditer(pattern2, content) + + for match in matches2: + asm_path_hint = match.group(1) + func_name = match.group(2) + # Avoid duplicates + if (func_name, asm_path_hint) not in functions: + functions.append((func_name, asm_path_hint)) + + return functions + + +def infer_module_from_path(c_file_path: Path) -> str: + """Infer the module name from the source file path.""" + rel_path = c_file_path.relative_to(SRC_DIR) + parts = rel_path.parts + if len(parts) > 0: + return parts[0] # First directory is usually the module + return "unknown" + + +def count_asm_lines(asm_path: Path) -> int: + """Count the number of assembly instruction lines (rough difficulty metric).""" + if not asm_path.exists(): + return 0 + + try: + content = asm_path.read_text(encoding='utf-8', errors='ignore') + # Count lines that look like instructions (start with whitespace + instruction) + lines = [l for l in content.split('\n') if l.strip() and not l.strip().startswith('#')] + return len(lines) + except Exception: + return 0 + + +def resolve_asm_path(asm_path_hint: str) -> Optional[Path]: + """ + Try to find the actual .s file from the hint in INCLUDE_ASM. + + The hint is usually like "asm/us/battle/nonmatchings/battle" + and we need to find the .s file in that directory. + """ + # Remove "asm/us/" prefix if present + hint = asm_path_hint.replace("asm/us/", "").replace("asm/", "") + + # This is typically a directory; function .s files are inside + asm_dir_path = ASM_DIR / hint + + return asm_dir_path if asm_dir_path.exists() else None + + +def scan_codebase(db: DecompDatabase): + """Scan the entire src/ directory for INCLUDE_ASM functions.""" + print(f"Scanning {SRC_DIR} for INCLUDE_ASM functions...") + + total_found = 0 + + # Find all .c files + c_files = list(SRC_DIR.rglob("*.c")) + print(f"Found {len(c_files)} C files to scan") + + for c_file in c_files: + functions = find_include_asm_functions(c_file) + + if not functions: + continue + + module = infer_module_from_path(c_file) + rel_c_path = str(c_file.relative_to(PROJECT_ROOT)) + + for func_name, asm_hint in functions: + # Try to resolve the actual asm path + asm_dir = resolve_asm_path(asm_hint) + asm_path_str = str(Path(asm_hint) / f"{func_name}.s") if asm_dir else asm_hint + + # Try to count lines for difficulty estimate + if asm_dir: + asm_file = asm_dir / f"{func_name}.s" + line_count = count_asm_lines(asm_file) + else: + line_count = 0 + + # Add to database + db.add_function( + name=func_name, + c_file_path=rel_c_path, + asm_file_path=asm_path_str, + module=module, + line_count=line_count + ) + + total_found += 1 + print(f" Found: {func_name} in {module} ({line_count} asm lines)") + + # Remove any previously-scanned entries from this file that are now beyond + # the sentinel comment (i.e. not in the set we just collected). + valid_names = {fn for fn, _ in functions} + removed = db.remove_functions_not_in_set(rel_c_path, valid_names) + for name in removed: + print(f" Removed (below sentinel): {name}") + + print(f"\n✓ Scan complete! Found {total_found} functions") + + +def show_statistics(db: DecompDatabase): + """Display statistics about the decompilation progress.""" + stats = db.get_statistics() + + print("\n" + "="*60) + print("DECOMPILATION STATISTICS") + print("="*60) + + print(f"\nTotal functions: {stats['total_functions']}") + + print("\nBy Status:") + for status, count in sorted(stats['by_status'].items()): + percentage = (count / stats['total_functions'] * 100) if stats['total_functions'] > 0 else 0 + print(f" {status:15s}: {count:4d} ({percentage:5.1f}%)") + + print("\nBy Module:") + for module, count in sorted(stats['by_module'].items()): + print(f" {module:15s}: {count:4d}") + + print("\n" + "="*60 + "\n") + + +def list_functions_by_module(db: DecompDatabase, module: str): + """List all functions in a specific module.""" + functions = db.get_functions_by_module(module) + + if not functions: + print(f"No functions found in module '{module}'") + return + + print(f"\nFunctions in {module} module ({len(functions)} total):") + print("-" * 80) + + for func in functions: + status_emoji = { + 'todo': '⏳', + 'in_progress': '🔄', + 'decompiled': '✓', + 'verified': '✓✓', + 'failed': '✗' + }.get(func['status'], '?') + + print(f"{status_emoji} {func['name']:30s} | {func['status']:12s} | " + f"{func['line_count']:3d} lines | {func['c_file_path']}") + + +def populate_rank_scores(db: DecompDatabase) -> int: + """Run `mako.sh rank` for every module and store scores in the database. + + The rank score (0.0 easiest → 1.0 hardest) comes from the asm-differ + similarity metric embedded in mako.sh rank. Lower scores mean the + function is structurally closer to its original assembly, making it a + better candidate for automated decompilation. + + Returns: + Total number of database rows updated. + """ + mako = PROJECT_ROOT / "mako.sh" + asm_base = PROJECT_ROOT / "asm" / "us" + + modules = sorted(p.name for p in asm_base.iterdir() if p.is_dir()) + scores: Dict[str, float] = {} + + for module in modules: + try: + result = subprocess.run( + [str(mako), "rank", module], + capture_output=True, + text=True, + cwd=PROJECT_ROOT, + ) + if result.returncode != 0: + print(f" rank: skipping {module} ({result.stderr.strip()[:80]})") + continue + for line in result.stdout.splitlines(): + line = line.strip() + if not line: + continue + parts = line.split(": ", 1) + if len(parts) != 2: + continue + try: + score = float(parts[0]) + except ValueError: + continue + func_name = parts[1].removesuffix(".s") + scores[func_name] = score + except Exception as e: + print(f" rank: error for {module}: {e}") + + updated = db.update_rank_scores(scores) + print(f"✓ Rank scores updated for {updated} functions ({len(scores)} from mako.sh rank)") + return updated + + +def list_todo_functions(db: DecompDatabase, limit: int = 20): + """List the next functions to work on.""" + functions = db.get_next_todo(limit) + + if not functions: + print("No TODO functions found! 🎉") + return + + print(f"\nNext {limit} functions to decompile (sorted by difficulty):") + print("-" * 80) + + for i, func in enumerate(functions, 1): + print(f"{i:2d}. {func['name']:30s} | {func['module']:10s} | " + f"{func['line_count']:3d} asm lines | {func['c_file_path']}") + + print("\nTo decompile a function manually:") + print(f" ./mako.sh dec {functions[0]['name']}") + + +def list_by_status(db: DecompDatabase, status: str, limit: int = 50): + """List functions with a specific status.""" + functions = db.get_functions_by_status(status, limit=limit) + + if not functions: + print(f"No functions with status '{status}' found.") + return + + print(f"\nFunctions with status '{status}' ({len(functions)} shown):") + print("-" * 80) + + for i, func in enumerate(functions, 1): + attempts = func.get('attempt_count', 0) + notes = func.get('notes', '') + note_preview = (notes[:50] + '...') if notes and len(notes) > 50 else (notes or '') + + print(f"{i:3d}. {func['name']:30s} | {func['module']:10s} | " + f"{func['line_count']:3d} lines | attempts: {attempts}") + if note_preview: + print(f" Note: {note_preview}") + + print(f"\nTotal {status}: {len(functions)}") + if len(functions) >= limit: + print(f"(Limited to {limit}, use --limit to see more)") + + +def main(): + parser = argparse.ArgumentParser( + description="Discover and track INCLUDE_ASM functions in FF7 decompilation" + ) + parser.add_argument('--scan', action='store_true', + help='Scan the codebase and update database') + parser.add_argument('--stats', action='store_true', + help='Show decompilation statistics') + parser.add_argument('--list', type=str, metavar='MODULE', + help='List functions in a specific module') + parser.add_argument('--list-todo', action='store_true', + help='List next functions to decompile') + parser.add_argument('--list-status', type=str, metavar='STATUS', + help='List functions with specific status (blocked, failed, decompiled_needs_refine, etc.)') + parser.add_argument('--update-ranks', action='store_true', + help='Run mako.sh rank for all modules and update difficulty scores in DB') + parser.add_argument('--limit', type=int, default=50, + help='Limit number of results (default: 50)') + parser.add_argument('--db', type=str, default='functions.db', + help='Database file path (default: functions.db)') + + args = parser.parse_args() + + # Initialize database + db = DecompDatabase(args.db) + + try: + if args.scan: + scan_codebase(db) + populate_rank_scores(db) + show_statistics(db) + elif args.update_ranks: + populate_rank_scores(db) + elif args.stats: + show_statistics(db) + elif args.list: + list_functions_by_module(db, args.list) + elif args.list_todo: + list_todo_functions(db, args.limit if args.limit != 50 else 20) + elif args.list_status: + list_by_status(db, args.list_status, args.limit) + else: + parser.print_help() + finally: + db.close() + + +if __name__ == "__main__": + main() diff --git a/automation/expand_strings.py b/automation/expand_strings.py new file mode 100644 index 0000000..9118ff6 --- /dev/null +++ b/automation/expand_strings.py @@ -0,0 +1,147 @@ +#!/usr/bin/env python3 +"""expand_strings.py + +Finds FF7-encoded byte arrays in .c source files and converts them back to +human-readable _S() / _SL() string macros. + +A byte array is treated as an FF7 string when: + - It contains a 0xFF terminator byte + - Every byte before 0xFF is in the range 0x00-0x5E (maps to ASCII 0x20-0x7E) + - Every byte after 0xFF is 0x00 (padding) + +Encoding: byte + 0x20 = ASCII character (e.g. 0x28 -> 'H', 0x00 -> ' ') + +Usage: + python3 expand_strings.py # all src/**/*.c files + python3 expand_strings.py src/menu # specific directory or file + python3 expand_strings.py --in-place # overwrite files instead of printing +""" + +import argparse +import re +import sys +from pathlib import Path + +REPO_ROOT = Path(__file__).resolve().parent.parent + +# Matches a braced list of hex bytes (0xNN) and/or bare zeros, possibly multiline. +# Captures the interior so we can extract individual values. +_ARRAY_RE = re.compile( + r'\{((?:\s*(?:0x[0-9A-Fa-f]{1,2}|0)\s*,?\s*)+)\}', + re.DOTALL, +) + +# Pulls every numeric token out of the interior matched above. +_TOKEN_RE = re.compile(r'0x([0-9A-Fa-f]{1,2})|(? list[int] | None: + """Return list of byte values from the array interior, or None on parse error.""" + values = [] + for m in _TOKEN_RE.finditer(interior): + if m.group(1) is not None: + values.append(int(m.group(1), 16)) + else: + values.append(0) + return values if values else None + + +def _decode_ff7(byte_list: list[int]) -> tuple[str, int] | None: + """ + Try to decode a byte list as an FF7 ASCII string. + + Returns (decoded_text, num_padding_zeros) if valid, else None. + Valid means: + - contains 0xFF + - all bytes before 0xFF are in 0x00-0x5E (printable ASCII when + 0x20) + - all bytes after 0xFF are 0x00 (padding) + """ + try: + ff_idx = byte_list.index(0xFF) + except ValueError: + return None + + content = byte_list[:ff_idx] + padding = byte_list[ff_idx + 1:] + + if any(b > 0x5E for b in content): + return None # contains non-ASCII FF7 special bytes + if any(b != 0x00 for b in padding): + return None # non-zero bytes after terminator + + text = ''.join(chr(b + 0x20) for b in content) + return (text, len(padding)) + + +def _encode_c_string(text: str) -> str: + """Escape a string for inclusion inside a C double-quoted literal.""" + return text.replace('\\', '\\\\').replace('"', '\\"') + + +def collect_file(content: str) -> str: + """ + Scan *content* for byte-array initializers that look like FF7 strings and + replace them with _S() / _SL() macros. Returns the rewritten content. + """ + def replace(m: re.Match) -> str: + interior = m.group(1) + byte_list = _parse_bytes(interior) + if byte_list is None: + return m.group(0) + + result = _decode_ff7(byte_list) + if result is None: + return m.group(0) + + text, num_padding = result + escaped = _encode_c_string(text) + + if num_padding == 0: + return f'_S("{escaped}")' + else: + # _SL(N, "text") produces N-1 bytes total, so N = len(byte_list) + 1 + return f'_SL({len(byte_list) + 1}, "{escaped}")' + + return _ARRAY_RE.sub(replace, content) + + +def main() -> None: + parser = argparse.ArgumentParser( + description="Convert FF7-encoded hex byte arrays in C source files back to _S()/_SL() macros" + ) + parser.add_argument( + "target", + nargs="?", + default=str(REPO_ROOT / "src"), + help="path to a .c file or directory to search recursively (default: src/)", + ) + parser.add_argument( + "--in-place", + action="store_true", + help="overwrite source files with converted output instead of printing to stdout", + ) + args = parser.parse_args() + + target = Path(args.target) + if target.is_file(): + files = [target] + elif target.is_dir(): + files = sorted(target.rglob("*.c")) + else: + print(f"error: not a file or directory: {target}", file=sys.stderr) + sys.exit(1) + + for path in files: + original = path.read_text(errors="replace") + converted = collect_file(original) + if args.in_place: + if converted != original: + path.write_text(converted) + print(f"converted: {path}") + else: + print(f"/* === {path} === */") + print(converted) + + +if __name__ == "__main__": + main() diff --git a/automation/fix_existing_errors.py b/automation/fix_existing_errors.py new file mode 100755 index 0000000..021a28b --- /dev/null +++ b/automation/fix_existing_errors.py @@ -0,0 +1,1477 @@ +#!/usr/bin/env python3 +""" +Standalone script to fix type errors in existing decompiled functions. + +This scans files with compilation errors and uses LLM to fix void* type issues. +""" + +import os +import sys +import re +import subprocess +from pathlib import Path +from datetime import datetime +from typing import List, Tuple, Dict, Optional +from database import DecompDatabase + +# Add parent directory to path for imports +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) + +try: + from llm_helper import LLMHelper + HAS_LLM = True +except ImportError: + HAS_LLM = False + LLMHelper = None + + +class TypeErrorFixer: + """Fix type errors in decompiled functions using LLM.""" + + def __init__(self, model: str = "qwen2.5-coder:7b", verbose: bool = False): + """Initialize the fixer with Ollama.""" + if not HAS_LLM: + print("[ERROR] llm_helper not available") + sys.exit(1) + + self.llm = LLMHelper(model=model, verbose=verbose) + if not self.llm.available: + print("[ERROR] Ollama not available. Please install and start Ollama:") + print(" https://ollama.ai/") + sys.exit(1) + + self.db = DecompDatabase() + self.workspace_root = Path(__file__).parent.parent.absolute() + self.file_context = {} # Cache for file-level context + # Track functions that already caused validation failures so we skip them + # in subsequent passes. Key: func_name, Value: number of validation failures. + self._validation_failures: Dict[str, int] = {} + + def extract_file_context(self, file_path: str) -> Dict: + """ + Extract file-level context (typedefs, externs, includes). + Returns dict with 'typedefs', 'externs', 'includes'. + """ + if file_path in self.file_context: + return self.file_context[file_path] + + with open(file_path, 'r') as f: + content = f.read() + + context = { + 'typedefs': [], + 'externs': [], + 'includes': [], + 'header_typedef_names': [] + } + + # Extract typedef declarations + typedef_pattern = re.compile(r'typedef\s+(?:struct|enum|union)?\s*\w*\s*\{[^}]+\}\s*\w+;', re.MULTILINE | re.DOTALL) + for match in typedef_pattern.finditer(content): + typedef_text = match.group(0) + # Extract the name + name_match = re.search(r'\}\s*(\w+);', typedef_text) + if name_match: + context['typedefs'].append({ + 'name': name_match.group(1), + 'text': typedef_text + }) + + # Extract extern declarations + extern_pattern = re.compile(r'extern\s+[^;]+;') + for match in extern_pattern.finditer(content): + context['externs'].append(match.group(0)) + + # Extract includes and follow them (up to 3 levels deep) to collect all visible typedef names + include_pattern = re.compile(r'#include\s+[<"]([^>"]+)[>"]') + header_typedef_names = set() + + def _collect_from_header(hpath: Path, depth: int): + if depth <= 0 or not hpath.exists(): + return + names = self._extract_typedef_names_from_header(hpath) + header_typedef_names.update(names) + try: + hcontent = hpath.read_text(errors='replace') + except Exception: + return + for m in include_pattern.finditer(hcontent): + sub_name = m.group(1) + sub_path = self._resolve_include(sub_name, str(hpath)) + if sub_path: + _collect_from_header(sub_path, depth - 1) + + for match in include_pattern.finditer(content): + include_name = match.group(1) + context['includes'].append(f'#include "{include_name}"') + header_path = self._resolve_include(include_name, file_path) + if header_path: + _collect_from_header(header_path, depth=5) + context['header_typedef_names'] = sorted(header_typedef_names) + + self.file_context[file_path] = context + return context + + def _resolve_include(self, include_name: str, source_file: str) -> Optional[Path]: + """Resolve an #include filename to an actual path, searching standard dirs.""" + candidates = [ + Path(source_file).parent / include_name, + self.workspace_root / 'include' / include_name, + self.workspace_root / 'include' / 'psxsdk' / include_name, + self.workspace_root / include_name, + ] + for candidate in candidates: + if candidate.exists(): + return candidate + return None + + def _extract_typedef_names_from_header(self, header_path: Path) -> List[str]: + """ + Extract all typedef names from a header file. + Returns a flat list of type name strings. + """ + try: + content = header_path.read_text(errors='replace') + except Exception: + return [] + names = [] + # Struct/union/enum typedef: '} TypeName;' + names += re.findall(r'\}\s*(\w+)\s*;', content) + # Simple typedef: 'typedef TypeName;' + for m in re.finditer(r'^typedef\s+\S.*?\s+(\w+)\s*;', content, re.MULTILINE): + names.append(m.group(1)) + return [n for n in names if n and not n[0].isdigit()] + + def _extract_struct_field_maps(self, header_path: Path) -> Dict[str, Dict[int, tuple]]: + """ + Parse struct definitions from a header file. + Returns {struct_name: {byte_offset: (field_name, c_type)}} using the + '/* 0xNN */' offset comments common in this codebase. If a field has + no offset comment the offset is derived from sequential layout. + """ + TYPE_SIZES = { + 'u8': 1, 's8': 1, 'char': 1, + 'u16': 2, 's16': 2, + 'u32': 4, 's32': 4, 'int': 4, 'float': 4, + 'u64': 8, 's64': 8, 'double': 8, + } + try: + content = header_path.read_text(errors='replace') + except Exception: + return {} + + result: Dict[str, Dict[int, tuple]] = {} + # Match: typedef struct [OptName] { body } TypeName; + struct_re = re.compile( + r'typedef\s+struct\s*\w*\s*\{([^}]+)\}\s*(\w+)\s*;', re.DOTALL + ) + field_re = re.compile( + r'(?:/\*\s*(0x[0-9a-fA-F]+|\d+)\s*\*/\s*)?' # optional /* 0xNN */ + r'([\w\s\*]+?)\s+(\w+)\s*(?:\[[\w\s\+\-\*]*\])?\s*;' # type name[array]; + ) + for sm in struct_re.finditer(content): + body = sm.group(1) + struct_name = sm.group(2) + fields: Dict[int, tuple] = {} + current_offset = 0 + for fm in field_re.finditer(body): + offset_str, ftype, fname = fm.group(1), fm.group(2).strip(), fm.group(3) + if offset_str: + try: + current_offset = int(offset_str, 16) if '0x' in offset_str else int(offset_str) + except ValueError: + pass + fields[current_offset] = (fname, ftype) + # Advance for next field + base = ftype.rstrip('* ').split()[-1] if ftype.split() else ftype + size = 4 if '*' in ftype else TYPE_SIZES.get(base, 4) + current_offset += size + if fields: + result[struct_name] = fields + return result + + def _collect_struct_field_maps(self, file_path: str) -> Dict[str, Dict[int, tuple]]: + """ + Walk the transitive include chain for file_path and return the merged + struct field map (see _extract_struct_field_maps). + """ + include_pattern = re.compile(r'#include\s+[<"]([^>"]+)[>"]') + all_maps: Dict[str, Dict[int, tuple]] = {} + visited: set = set() + + def _walk(path: Path, depth: int): + key = str(path) + if key in visited or depth <= 0 or not path.exists(): + return + visited.add(key) + maps = self._extract_struct_field_maps(path) + for k, v in maps.items(): + if k not in all_maps: + all_maps[k] = v + try: + content = path.read_text(errors='replace') + except Exception: + return + for m in include_pattern.finditer(content): + sub = self._resolve_include(m.group(1), str(path)) + if sub: + _walk(sub, depth - 1) + + try: + with open(file_path) as f: + src = f.read() + except Exception: + return all_maps + for m in include_pattern.finditer(src): + hp = self._resolve_include(m.group(1), file_path) + if hp: + _walk(hp, depth=5) + return all_maps + + def _get_psyq_params(self, rel_path: str): + """ + Parse build.ninja to find PSY-Q compiler parameters for a source file. + Returns (cc1_binary, cc_flags) or None if the file has no psx-cc rule. + """ + ninja_file = self.workspace_root / 'build.ninja' + if not ninja_file.exists(): + return None + + lines = ninja_file.read_text().splitlines() + + # Find: "build .o: psx-cc " (possibly with a trailing " | $") + build_line_idx = None + for i, line in enumerate(lines): + if re.match(r'build\s+\S+\.o\s*:\s*psx-cc\s+' + re.escape(rel_path) + r'\b', line): + build_line_idx = i + break + + if build_line_idx is None: + return None + + # Skip the build rule and any continuation lines (ending with "$") + idx = build_line_idx + 1 + while idx < len(lines) and lines[idx - 1].endswith('$'): + idx += 1 + + # Read the indented variable block that follows + cc1 = 'cc1-psx-26' + cc_flags = '-O2 -G0' + while idx < len(lines) and lines[idx].startswith(' '): + m = re.match(r'\s+cc1\s*=\s*(\S+)', lines[idx]) + if m: + cc1 = m.group(1) + m = re.match(r'\s+cc_flags\s*=\s*(.+)', lines[idx]) + if m: + cc_flags = m.group(1).strip() + idx += 1 + + return cc1, cc_flags + + def get_compilation_errors(self, file_path: str) -> List[Dict]: + """ + Get compilation errors for a file by running the PSY-Q compiler directly. + Parses build.ninja to find the correct cc1 binary and flags for this file, + then invokes the cpp | str | iconv | cc1 pipeline directly — bypassing the + full `make` chain that fails at the linker step before overlay files compile. + Falls back to `make` if no PSY-Q rule is found in build.ninja. + """ + try: + rel_path = str(Path(file_path).relative_to(self.workspace_root)) + file_name = Path(file_path).name + + params = self._get_psyq_params(rel_path) + + if params: + cc1, cc_flags = params + # Run the PSY-Q pipeline up to cc1; redirect cc1 stdout (assembly) + # to /dev/null — errors go to stderr which we capture. + cmd = ( + f'mipsel-linux-gnu-cpp -Iinclude -Iinclude/psxsdk -DUSE_INCLUDE_ASM -DFF7_STR' + f' -lang-c -Iinclude -Iinclude/psxsdk -undef -Wall -fno-builtin {rel_path}' + f' | bin/str' + f' | iconv --from-code=UTF-8 --to-code=Shift-JIS' + f' | bin/{cc1} -quiet -mcpu=3000 -g -mgas -gcoff {cc_flags} > /dev/null' + ) + result = subprocess.run( + cmd, shell=True, + cwd=str(self.workspace_root), + stderr=subprocess.PIPE, + text=True, + timeout=60 + ) + output = result.stderr + else: + # Fallback for files that go through make directly (e.g. main overlay) + Path(file_path).touch() + result = subprocess.run( + ['make'], + cwd=str(self.workspace_root), + capture_output=True, + text=True, + timeout=60 + ) + output = result.stdout + '\n' + result.stderr + + errors = [] + error_pattern = re.compile( + rf'{re.escape(file_name)}:(\d+):\s*(?:warning:\s*)?(.+)' + ) + + for line in output.split('\n'): + match = error_pattern.search(line) + if match: + line_num = int(match.group(1)) + message = match.group(2).strip() + + # Skip pure warnings unless they're relevant + if 'warning:' in line.lower() and not any(x in message.lower() + for x in ['incompatible', 'pointer', 'cast', 'type']): + continue + + category = self._categorize_error(message) + errors.append({ + 'line': line_num, + 'type': category, + 'message': message, + 'raw_type': 'error' if 'error' in line.lower() else 'warning' + }) + + return errors + + except subprocess.TimeoutExpired: + print(f"[WARN] Compilation timed out for {file_path}") + return [] + except Exception as e: + print(f"[WARN] Could not compile {file_path}: {e}") + return [] + + def _categorize_error(self, message: str) -> str: + """Categorize error message into error type.""" + msg_lower = message.lower() + + # PSY-Q compiler specific error messages + if 'undeclared' in msg_lower or 'not declared' in msg_lower: + return 'undefined_identifier' + elif 'parse error' in msg_lower: + return 'syntax_error' + elif 'incompatible types' in msg_lower or 'incompatible pointer' in msg_lower: + return 'type_mismatch' + elif 'invalid type argument' in msg_lower: + return 'invalid_operation' + elif 'redefinition' in msg_lower or 'previously declared' in msg_lower: + return 'redefinition' + elif 'duplicate label' in msg_lower: + return 'duplicate_label' + elif 'struct' in msg_lower and ('member' in msg_lower or 'field' in msg_lower): + return 'missing_struct_field' + elif 'void' in msg_lower and ('dereference' in msg_lower or 'incomplete type' in msg_lower): + return 'void_pointer_dereference' + elif 'pointer' in msg_lower and ('integer' in msg_lower or 'cast' in msg_lower): + return 'pointer_cast' + elif 'assignment' in msg_lower and 'incompatible' in msg_lower: + return 'type_mismatch' + else: + return 'unknown' + + def detect_type_errors_in_function(self, code: str, start_line: int, + compiler_errors: List[Dict]) -> List[Dict]: + """ + Detect type errors in function code using compiler errors. + Returns list of error dictionaries filtered to this function's line range. + """ + code_lines = code.count('\n') + 1 + end_line = start_line + code_lines - 1 + + # Filter compiler errors to this function + func_errors = [] + for err in compiler_errors: + err_line = err['line'] + if start_line <= err_line <= end_line: + # Add relative line number within function + err_copy = err.copy() + err_copy['func_line'] = err_line - start_line + 1 + func_errors.append(err_copy) + + # Also detect potential issues from code patterns + # Pattern 1: void* pointer dereference with -> + if 'void*' in code or 'void *' in code: + code_lower = code.lower() + if '->' in code and ('void*' in code_lower or 'void *' in code_lower): + # Check if not already in compiler errors + has_void_error = any(e['type'] == 'void_pointer_dereference' for e in func_errors) + if not has_void_error: + func_errors.append({ + 'line': start_line, + 'func_line': 1, + 'type': 'void_pointer_dereference', + 'message': 'void* pointer used with -> operator', + 'raw_type': 'potential' + }) + + # Pattern 2: Struct field access on void* variables + void_ptr_pattern = re.compile(r'\b(\w+)\s*\*\s*(\w+)\s*=.*?void\s*\*', re.DOTALL) + struct_access_pattern = re.compile(r'\b(\w+)->unk\w*') + + void_pointers = set() + for match in void_ptr_pattern.finditer(code): + var_name = match.group(2) + void_pointers.add(var_name) + + for match in struct_access_pattern.finditer(code): + var_name = match.group(1) + if var_name in void_pointers: + has_struct_error = any( + var_name in e.get('message', '') for e in func_errors + ) + if not has_struct_error: + func_errors.append({ + 'line': start_line, + 'func_line': 1, + 'type': 'void_pointer_dereference', + 'message': f'Struct field access on void* variable: {var_name}', + 'raw_type': 'potential' + }) + + return func_errors + + def infer_struct_type_from_fields(self, code: str) -> Optional[str]: + """ + Infer struct type from field access patterns. + Returns struct typedef or None. + """ + # Find all field accesses (->unk0, ->unk4, etc.) + field_accesses = re.findall(r'->unk([0-9A-Fa-fxX]+)', code) + if not field_accesses: + return None + + # Convert hex to decimal and get unique fields + fields = set() + for f in field_accesses: + try: + # Remove 0x prefix if present and convert + f_clean = f.replace('0x', '').replace('0X', '') + fields.add(int(f_clean, 16) if any(c in f_clean.upper() for c in 'ABCDEF') else int(f_clean)) + except ValueError: + continue + + if not fields: + return None + + fields = sorted(fields) + max_field = max(fields) + + # Build struct based on fields (4-byte aligned for PS1) + struct_def = "typedef struct SpuMallocBlock {\n" + for offset in range(0, max_field + 4, 4): + hex_offset = f"{offset:X}" + if offset in fields: + struct_def += f" s32 unk{hex_offset}; /* offset 0x{hex_offset} */\n" + struct_def += "} SpuMallocBlock;" + + return struct_def + + def discover_functions_in_file(self, file_path: str) -> List[Tuple[str, int, int]]: + """ + Discover all actual decompiled functions in a file by parsing the code. + Returns list of (func_name, start_line, end_line). + """ + with open(file_path, 'r') as f: + lines = f.readlines() + + functions = [] + i = 0 + while i < len(lines): + line = lines[i] + + # Skip INCLUDE_ASM lines + if 'INCLUDE_ASM' in line: + i += 1 + continue + + # Strip inline // comments before checking whether the line is a + # declaration (ends with ';') vs. a definition (has a body). + # Lines like "void func_800D5350(); // extern" must be skipped; + # rstrip() alone keeps the comment, so the ';' check fails. + stripped_no_comment = re.sub(r'//.*$', '', line).rstrip() + if '(' not in line or stripped_no_comment.endswith(';'): + i += 1 + continue + + # Check if this looks like a function definition + match = re.search(r'\b([a-zA-Z_][a-zA-Z0-9_]*)\s*\(', line) + if match and not line.strip().startswith('//') and not line.strip().startswith('/*'): + func_name = match.group(1) + + # Skip common non-function keywords + if func_name in ['if', 'while', 'for', 'switch', 'return', 'sizeof', + 'typedef', 'struct', 'union', 'enum', 'INCLUDE_ASM']: + i += 1 + continue + + # Find opening brace + brace_line = None + for j in range(i, min(i + 15, len(lines))): + if '{' in lines[j]: + brace_line = j + break + + if brace_line is not None: + # Find closing brace + brace_count = 0 + end_line = None + for j in range(brace_line, len(lines)): + brace_count += lines[j].count('{') + brace_count -= lines[j].count('}') + if brace_count == 0: + end_line = j + break + + if end_line is not None and end_line > brace_line: + functions.append((func_name, i, end_line)) + i = end_line + 1 + continue + + i += 1 + + return functions + + # ------------------------------------------------------------------ + # Deterministic pre-pass fixes (no LLM required) + # ------------------------------------------------------------------ + + def _offset_from_unk_name(self, field_name: str) -> Optional[int]: + """ + Convert a decompiler unk-field name to a byte offset integer. + e.g. 'unk4' -> 4, 'unk1C' -> 28, 'unk16' -> 22. + Returns None if the name doesn't look like an unk-offset field. + """ + m = re.match(r'^unk([0-9A-Fa-f]+)$', field_name) + if not m: + return None + hex_part = m.group(1) + # Treat as hex if it contains A-F or starts with 0, else try decimal first + if any(c in hex_part.upper() for c in 'ABCDEF') or (len(hex_part) > 1 and hex_part[0] == '0'): + return int(hex_part, 16) + # Ambiguous (e.g. "unk8", "unk4") — in this codebase these are hex offsets + return int(hex_part, 16) + + def apply_deterministic_fixes(self, file_path: str, compiler_errors: List[Dict], + struct_maps: Dict[str, Dict[int, tuple]]) -> int: + """ + Apply mechanical fixes for errors that don't need LLM reasoning: + - missing_struct_field: look up the correct field name by byte offset + - pointer_cast (integer↔pointer): insert explicit u32/intptr cast + Modifies file_path in-place. Returns number of lines changed. + """ + # Process errors from last line to first so edits don't invalidate indices + fixable = sorted( + [e for e in compiler_errors if e['type'] in ('missing_struct_field', 'pointer_cast')], + key=lambda e: e['line'], reverse=True + ) + if not fixable: + return 0 + + with open(file_path, 'r') as fh: + lines = fh.readlines() + + changed = 0 + for err in fixable: + idx = err['line'] - 1 + if idx < 0 or idx >= len(lines): + continue + original = lines[idx] + fixed = self._fix_one_line(original, err, struct_maps) + if fixed is not None and fixed != original: + lines[idx] = fixed + changed += 1 + + if changed: + with open(file_path, 'w') as fh: + fh.writelines(lines) + return changed + + def _fix_one_line(self, line: str, err: Dict, + struct_maps: Dict[str, Dict[int, tuple]]) -> Optional[str]: + """Attempt a deterministic single-line fix for one compiler error.""" + msg = err['message'] + err_type = err['type'] + + if err_type == 'missing_struct_field': + return self._fix_missing_field(line, msg, struct_maps) + if err_type == 'pointer_cast': + return self._fix_pointer_cast(line, msg) + return None + + def _fix_missing_field(self, line: str, msg: str, + struct_maps: Dict[str, Dict[int, tuple]]) -> Optional[str]: + """ + Fix 'structure has no member named unkXX' by replacing the access with a + byte-offset cast. This is always type-safe without needing to infer + the pointer's declared struct type. + + Handles both LHS (assignment target) and RHS (value read) positions. + The cast type defaults to s16 for small offsets (< 0x10) and s32 otherwise, + which is a reasonable guess for PS1 struct fields. + """ + bad_field_m = re.search(r"no member named [`'\"]?(\w+)[`'\"]?", msg) + if not bad_field_m: + return None + bad_field = bad_field_m.group(1) # e.g. 'unk4' + offset = self._offset_from_unk_name(bad_field) + if offset is None: + return None # Not an unkXX name — can't determine offset safely + + # Access pattern: ptr->unkX or ptr.unkX + access_re = re.compile(r'(\w+)(->|\.)(' + re.escape(bad_field) + r')\b') + if not access_re.search(line): + return None # Pattern not found on this line — nothing to do + + # Choose a sensible cast type based on field size hint from any known struct + cast_type = 's16' if offset < 0x10 else 's32' + for _sname, field_map in struct_maps.items(): + if offset in field_map: + _, ftype = field_map[offset] + # Clean up noise from multi-line comments in the header + base = ftype.strip().split('\n')[0].strip() + if base in ('u8', 's8', 'u16', 's16', 'u32', 's32', 'u64', 's64'): + cast_type = base + break + + def byte_cast_sub(m: re.Match) -> str: + ptr = m.group(1) + op = m.group(2) + ref = ptr if op == '->' else f'&{ptr}' + return f'(*({cast_type}*)((u8*){ref} + {offset}))' + + result = access_re.sub(byte_cast_sub, line) + if result == line: + return None + return result + + def _fix_pointer_cast(self, line: str, msg: str) -> Optional[str]: + """ + Add explicit casts to silence integer↔pointer warnings on a single line. + Only applies safe, well-understood transformations. + """ + if 'makes integer from pointer without a cast' in msg: + # lhs = ptr_expr; → lhs = (u32)ptr_expr; + # Only handle simple `var = rhs;` assignments — avoid touching calls with + # multiple = in the same statement. + m = re.match(r'^(\s*[\w.\[\]\->]+\s*=\s*)([^=;][^;]*)(;.*)$', line) + if m and not re.search(r'\(u(32|64)\s*\)', m.group(2)): + return f'{m.group(1)}(u32){m.group(2)}{m.group(3)}\n' + + elif 'makes pointer from integer without a cast' in msg: + # lhs = int_expr; → lhs = (void*)int_expr; + # (The correct pointer type would need type inference; void* is safe.) + m = re.match(r'^(\s*[\w.\[\]\->]+\s*=\s*)([^=;][^;]*)(;.*)$', line) + if m and not re.search(r'^\s*\(', m.group(2)): + return f'{m.group(1)}(void*){m.group(2)}{m.group(3)}\n' + + elif 'cast to pointer from integer of different size' in msg: + # (SomeType*)intval → (SomeType*)(u32)intval + result = re.sub( + r'\((\w[\w\s]*\s*\*+)\)\s*(\w[\w.\[\]\->]*)', + r'(\1)(u32)\2', line + ) + if result != line: + return result + + return None + + def fix_function_with_llm(self, func_name: str, file_path: str, code: str, + start_line: int, compiler_errors: List[Dict]) -> Optional[str]: + """ + Use LLM to fix type errors in a function. + Returns fixed code or None if fixing failed. + """ + errors = self.detect_type_errors_in_function(code, start_line, compiler_errors) + if not errors: + return None # No errors detected + + code_size = len(code) + error_count = len(errors) + + # Adjust timeout based on size and error count + if code_size > 5000 or error_count > 20: + timeout = 360 # 6 minutes for very large/complex functions + elif code_size > 3000 or error_count > 10: + timeout = 240 # 4 minutes for large functions + else: + timeout = 120 # 2 minutes for normal functions + + print(f"[INFO] 🔍 {func_name}: Found {error_count} error(s) ({code_size} chars, {timeout}s timeout)") + + # Get file-level context + file_ctx = self.extract_file_context(file_path) + + # Build struct field maps (byte_offset → field_name) for all known structs + struct_maps = self._collect_struct_field_maps(file_path) + + # Build context string + context_str = "" + + # Collect ALL known type names from both the .c file and its included headers + all_known_types = set(t['name'] for t in file_ctx['typedefs']) + all_known_types.update(file_ctx.get('header_typedef_names', [])) + if all_known_types: + context_str += f"\n**ALL Defined Types (from file and headers) — DO NOT redefine any of these:**\n" + context_str += ', '.join(sorted(all_known_types)) + '\n' + context_str += ("CRITICAL: These types are already defined in included headers. " + "Adding a new typedef or struct definition for any of these names " + "will cause cascading redefinition errors across the entire file. " + "If a struct is missing a field, you CANNOT add that field here — " + "only fix the code within the function body using casts or type changes.\n") + + # Inject struct field maps so the LLM knows the EXACT correct field names + if struct_maps and 'missing_struct_field' in {e['type'] for e in errors}: + context_str += "\n**Struct Field Reference (byte offset → field name, type):**\n" + context_str += "Use these to replace accesses to non-existent unkXX fields.\n" + for sname, field_map in sorted(struct_maps.items()): + if not field_map: + continue + # Only include structs that appear in the function's code or its errors + if sname not in code and not any(sname in e['message'] for e in errors): + continue + fields_repr = ', '.join( + f'0x{off:02X}: {fname} ({ftype})' + for off, (fname, ftype) in sorted(field_map.items()) + ) + context_str += f" {sname}: {{ {fields_repr} }}\n" + + if file_ctx['externs']: + extern_samples = file_ctx['externs'][:10] + context_str += f"\n**Existing Extern Declarations:** (showing first 10)\n" + for ext in extern_samples: + context_str += f" {ext}\n" + + # Group errors by type + error_types = {} + for err in errors: + err_type = err['type'] + if err_type not in error_types: + error_types[err_type] = [] + error_types[err_type].append(err) + + # Build error summary for prompt + error_summary = [] + for err_type, err_list in error_types.items(): + error_summary.append(f"**{err_type.replace('_', ' ').title()}** ({len(err_list)} occurrences):") + for err in err_list[:5]: # Limit to first 5 of each type + line_info = f"Line {err.get('func_line', '?')}" if 'func_line' in err else f"Line {err['line']}" + error_summary.append(f" - {line_info}: {err['message']}") + if len(err_list) > 5: + error_summary.append(f" ... and {len(err_list) - 5} more") + + error_list = '\n'.join(error_summary) + + # Generate specialized instructions based on dominant error type + dominant_type = max(error_types.keys(), key=lambda k: len(error_types[k])) + instructions = self._generate_fix_instructions(dominant_type, error_types, struct_maps) + + # For large functions, infer struct type first to help LLM - but only + # suggest new types that are NOT already defined anywhere + struct_hint = "" + if code_size > 2000 or 'void_pointer_dereference' in error_types: + inferred_struct = self.infer_struct_type_from_fields(code) + if inferred_struct: + # Check if this struct already exists in file or headers + struct_name_match = re.search(r'typedef struct \w+ \{', inferred_struct) + if struct_name_match: + struct_name = struct_name_match.group(0).split()[-2] + if struct_name not in all_known_types: + struct_hint = f"\n**Suggested New Struct Type (safe to add — not already defined):**\n```c\n{inferred_struct}\n```\n" + + # Build prompt for LLM + prompt = f"""## Project: Final Fantasy VII (PS1 USA) Decompilation +Goal: byte-accurate recompilation — the output C must compile to IDENTICAL machine code as the original PSX binary. + +### PSX SDK Types — use ONLY these, never int/short/char/long +s8/u8 (signed/unsigned char, lb/lbu) | s16/u16 (signed/unsigned short, lh/lhu) | s32/u32 (signed/unsigned int, lw/sw) + +### Decompilation Rules (MUST follow) +- No `/*?*/` unknown types — infer from register/context +- No `void*` for struct pointer params — use concrete struct types +- Struct fields via `->` / `.` only — no manual pointer arithmetic `*(ptr + offset)` +- Arrays via `arr[i]` — not `*(arr + i * n)` +- `goto loop_XX` → rewrite as `while` / `do-while` +- `goto block_XX` in switch → inline the branch target body +- Type must match load instruction: s8→`lb`, u8→`lbu`, s16→`lh`, u16→`lhu` + +### Common Matching Pitfalls +- Merged calls: duplicate common calls inside each if/else branch (don't hoist them out) +- Struct vs isolated locals: use `RECT`/struct for groups of related stack vars +- Unknown struct fields: use `unkXX` (offset hex) or cast `*(s16*)((u8*)ptr + 0x10)` + +**Function:** {func_name} +**File:** {file_path} +{context_str} +**Compilation Errors:** +{error_list} +{struct_hint} +**Current Code:** +```c +{code} +``` + +**Fix Instructions:** +{instructions} + +**Output Format:** +Return ONLY the fixed C function code (no markdown, no explanation, no comments about what you changed). + +CRITICAL RULES: +1. NEVER add or redefine any typedef, struct, union, or enum that appears in the "ALL Defined Types" list above +2. NEVER add a new struct/typedef definition to fix "structure has no member" errors — those require header changes and cannot be fixed here +3. For "structure has no member named X" errors: fix by casting the pointer to a compatible type (e.g., change the variable's declared type or add an explicit cast like `(StructType*)ptr`) +4. Do NOT include code fences (```) or explanatory text +5. Only add NEW extern declarations if the variable is truly undeclared and not in the headers +6. Start directly with the function's return type (no preamble) +7. Add `/* LLM: Fixed [error_type] */` comment only on lines you modify within the function body + +Start your response with the function's return type (e.g., 'void', 's32', etc.).""" + + try: + # Call Ollama via LLMHelper with extended timeout + response = self.llm._call_ollama(prompt, temperature=0.1, max_tokens=8192, timeout=timeout) + + if not response: + print(f"[WARN] ❌ {func_name}: No response from LLM (timed out after {timeout}s or error)") + return None + + fixed_code = response.strip() + + # Remove markdown code fences more aggressively + lines = fixed_code.split('\n') + cleaned_lines = [] + in_code_block = False + skip_explanation = False + + for line in lines: + # Detect code fence markers + if line.strip().startswith('```'): + in_code_block = not in_code_block + continue + + # Skip explanation text (starts with -, *, or numbered lists outside code) + if not in_code_block and (line.strip().startswith('-') or + line.strip().startswith('*') or + re.match(r'^\d+\.', line.strip())): + skip_explanation = True + continue + + # Skip common explanation phrases + if any(phrase in line.lower() for phrase in [ + 'explanation:', 'note:', 'changes made:', 'output:', + 'i have', 'i\'ve', 'the fix', 'this fix' + ]): + skip_explanation = True + continue + + # Reset skip if we see code-like content + if line.strip() and ('{' in line or '}' in line or ';' in line or '#include' in line): + skip_explanation = False + + # Only add actual code lines + if not skip_explanation or in_code_block: + cleaned_lines.append(line) + + fixed_code = '\n'.join(cleaned_lines).strip() + + # Reject fixes that add new struct/typedef definitions for types that + # already exist — that's the main cause of error count exploding. + for known_type in all_known_types: + if re.search(r'\btypedef\b.*\b' + re.escape(known_type) + r'\b', fixed_code): + print(f"[WARN] ❌ {func_name}: LLM tried to redefine '{known_type}' which already exists, skipping") + return None + + # Final validation - ensure it starts with a function signature + if not (fixed_code.startswith('/*') or + fixed_code.startswith('//') or + func_name in fixed_code[:200]): + print(f"[WARN] ❌ {func_name}: Fixed code doesn't look valid (missing function)") + return None + + # Validate the fix + if len(fixed_code) < len(code) * 0.5: + print(f"[WARN] ❌ {func_name}: Fixed code too short, skipping") + return None + + # Brace balance check — unbalanced braces mean the LLM truncated or + # duplicated part of the function, which causes cascading errors. + open_braces = fixed_code.count('{') + close_braces = fixed_code.count('}') + if open_braces != close_braces: + print(f"[WARN] ❌ {func_name}: LLM output has unbalanced braces " + f"({open_braces} open vs {close_braces} close), skipping") + return None + + # Also reject if line count changed dramatically (truncated/appended output) + orig_lines = code.count('\n') + fixed_lines = fixed_code.count('\n') + if fixed_lines < orig_lines * 0.7 or fixed_lines > orig_lines * 1.5: + print(f"[WARN] ❌ {func_name}: LLM output line count changed drastically " + f"({orig_lines} → {fixed_lines}), skipping") + return None + + # Check if meaningful changes were made + if fixed_code.strip() == code.strip(): + print(f"[WARN] ❌ {func_name}: No changes made, skipping") + return None + + has_llm_comment = '/* LLM:' in fixed_code + if not has_llm_comment: + print(f"[WARN] ⚠️ {func_name}: No LLM markers found, but applying anyway") + + print(f"[INFO] ✅ {func_name}: Successfully fixed") + return fixed_code + + except Exception as e: + print(f"[ERROR] ❌ {func_name}: LLM fix failed: {e}") + return None + + def _generate_fix_instructions(self, dominant_type: str, all_error_types: Dict, + struct_maps: Optional[Dict] = None) -> str: + """Generate specialized fixing instructions based on error types.""" + + instructions = [] + + if dominant_type == 'void_pointer_dereference' or 'void_pointer_dereference' in all_error_types: + instructions.append(""" +1. **Void Pointer Fixes:** + - Find all variables declared as `void*` that are used with struct field access (`->`) + - Replace `void*` with the appropriate struct pointer type (use inferred type if provided) + - For `extern void*` declarations, replace with `extern StructType*` +""") + + if 'missing_struct_field' in all_error_types: + # Build a lookup hint from the struct maps if available + field_hint = "" + if struct_maps: + lines = [] + for sname, field_map in sorted(struct_maps.items()): + if field_map: + entries = ', '.join( + f'0x{off:02X}→{fname}({ftype})' + for off, (fname, ftype) in sorted(field_map.items()) + ) + lines.append(f" {sname}: {entries}") + if lines: + field_hint = ( + "\n Use these offset maps to find the CORRECT field name:\n" + + '\n'.join(lines) + '\n' + ) + instructions.append(f""" +2. **Missing Struct Field Fixes:** + The struct is defined in an included header — you CANNOT add new fields to it. + Fix only the code INSIDE this function using one of these strategies: + + **Strategy A (preferred) — rename to the correct field:**{field_hint} + - Look up which field is at that byte offset in the struct reference above. + - Replace `ptr->unkX` with `ptr->correct_field_name` from the table. + - Example: if unk4 is at offset 0x04 and the table shows `0x04→D_8016297C(s16)`, + change `ptr->unk4` to `ptr->D_8016297C`. + + **Strategy B — byte-offset cast (when no field exists at that offset):** + - For a READ: `var = *(s16*)((u8*)ptr + offset);` + - For a WRITE: `*(s16*)((u8*)ptr + offset) = value;` + - CRITICAL: replace the ENTIRE `ptr->unkX` — do NOT leave `ptr->unkX` on the LHS + of an assignment. Wrong: `ptr->unk4 = ...`. Right: `*(s16*)((u8*)ptr+4) = ...`. + - Pick the cast type (s16/u16/s32/u32/u8) by the field's size in the struct. +""") + + if 'undefined_identifier' in all_error_types: + instructions.append(""" +3. **Undefined Identifier Fixes:** + - Find undefined variables (often global vars like `D_8004A698`, or locals like `sp1C`) + - For D_XXXXXXXX globals: add extern declaration at top of file + - For spXX stack variables: declare them properly at function start + - Infer the type from usage context (how it's assigned/used) +""") + + if 'type_mismatch' in all_error_types: + instructions.append(""" +4. **Type Mismatch Fixes:** + - Fix incompatible type assignments (e.g., assigning struct to u8) + - Use proper pointer dereferencing: if assigning struct to scalar, use `&variable` or cast + - Ensure pointer arithmetic uses correct types + - Add necessary type casts where appropriate (e.g., `(u8*)` for byte access) +""") + + if 'pointer_cast' in all_error_types: + instructions.append(""" +5. **Pointer Cast Fixes:** + - "assignment makes integer from pointer without cast": + Change `var = ptr;` to `var = (u32)ptr;` + - "assignment makes pointer from integer without cast": + Change `ptr = int_val;` to `ptr = (TYPE*)(u32)int_val;` (use the correct pointer type) + - "cast to pointer from integer of different size": + Change `(TYPE*)val` to `(TYPE*)(u32)val` to avoid size mismatch + - "passing arg N ... makes pointer from integer": + Wrap the argument: `(TYPE*)(u32)arg` +""") + + if 'invalid_operation' in all_error_types: + instructions.append(""" +6. **Invalid Operation Fixes:** + - Fix "invalid type argument of unary *" - trying to dereference non-pointer + - Change variable to pointer type, or remove dereference operator + - Check if variable should be a pointer based on context +""") + + if 'syntax_error' in all_error_types or 'parse_error' in all_error_types: + instructions.append(""" +7. **Parse/Syntax Error Fixes:** + - Fix "parse error before *" - usually missing semicolon or typedef + - Check for missing struct/typedef declarations + - Ensure proper syntax for pointer declarations +""") + + if 'redefinition' in all_error_types: + instructions.append(""" +8. **Redefinition Fixes:** + - Remove duplicate struct/typedef declarations + - If same struct defined twice, keep only one definition + - Ensure typedefs are not redeclared +""") + + if 'duplicate_label' in all_error_types: + instructions.append(""" +9. **Duplicate Label Fixes:** + - Rename duplicate labels to unique names (e.g., block_25 -> block_25_alt) + - Ensure goto targets use the correct renamed label +""") + + instructions.append(""" +**General Rules (PSX / FF7 decompilation standards):** +- Preserve all existing logic, calculations, and control flow exactly +- Keep all variable names unchanged (except renaming duplicate labels) +- Only fix type declarations and type-related errors +- Do NOT refactor or optimize code +- Ensure PS1/PSX SDK compatibility (32-bit, 4-byte aligned structs) +- Use only PSX SDK types: s8/u8/s16/u16/s32/u32 — never int/short/char/long +- Type determines the load instruction: s8→lb, u8→lbu, s16→lh, u16→lhu — change the type if the wrong instruction is generated +- `goto loop_XX` patterns MUST be rewritten as `while` or `do-while` loops +- `goto block_XX` inside switch statements: inline the branch target, do not leave dangling gotos +- Array access must use `arr[i]`, never `*(arr + i * sizeof(...))` +- Struct field access must use `->` or `.`, never pointer arithmetic offsets +- Add `/* LLM: Fixed [issue] */` comment on lines you modify within the function body +""") + + return '\n'.join(instructions) + + def extract_function_code(self, file_path: str, func_name: str) -> Optional[Tuple[str, int, int]]: + """ + Extract function code from file. + Returns (code, start_line, end_line) or None if not found. + """ + try: + with open(file_path, 'r') as f: + lines = f.readlines() + + # Find function start - look for function name followed by ( on same or next line + start_line = None + for i, line in enumerate(lines): + # Match function definition: func_name followed by ( + # Handle cases where function spans multiple lines + if func_name + '(' in line.replace(' ', ''): + start_line = i + break + # Also try with space + if func_name + ' (' in line or func_name + ' (' in line: + start_line = i + break + + if start_line is None: + return None + + # Find the opening brace + brace_line = None + for i in range(start_line, min(start_line + 10, len(lines))): # Look within 10 lines + if '{' in lines[i]: + brace_line = i + break + + if brace_line is None: + return None + + # Find function end (matching braces) + brace_count = 0 + end_line = None + for i in range(brace_line, len(lines)): + line = lines[i] + brace_count += line.count('{') + brace_count -= line.count('}') + if brace_count == 0: + end_line = i + break + + if end_line is None: + return None + + code = ''.join(lines[start_line:end_line+1]) + return (code, start_line, end_line) + + except Exception as e: + print(f"[ERROR] Could not extract {func_name} from {file_path}: {e}") + return None + + def apply_fix_to_file(self, file_path: str, func_name: str, fixed_code: str, + start_line: int, end_line: int) -> bool: + """ + Apply fixed code to file, replacing the original function. + Returns True if successful. + """ + try: + with open(file_path, 'r') as f: + lines = f.readlines() + + # Don't add header comment - it was already added by LLM or not needed + # Just ensure the code ends with newline + if not fixed_code.endswith('\n'): + fixed_code = fixed_code + '\n' + + # Replace function - build as a single string to avoid mixing + # \n-terminated strings (from readlines) with non-terminated strings + # (from split('\n')), which would cause writelines to merge lines. + new_content = ''.join(lines[:start_line]) + fixed_code + ''.join(lines[end_line+1:]) + + # Write to temp file first + temp_path = file_path + '.tmp' + with open(temp_path, 'w') as f: + f.write(new_content) + + # Move temp to actual file + import shutil + shutil.move(temp_path, file_path) + + return True + + except Exception as e: + print(f"[ERROR] Could not apply fix to {file_path}: {e}") + return False + + def validate_fix(self, file_path: str, func_name: str, + original_error_count: int, + func_error_count_before: int = 0, + func_start_line: int = 0, + func_end_line: int = 0) -> bool: + """ + Validate a fix by recompiling and checking if errors decreased. + When function line bounds are provided, uses function-level error + counting as the primary signal — this avoids false-positive "inconclusive" + results where the LLM moves an error without actually fixing it. + Returns True if fix is valid. + """ + print(f"[INFO] Validating fix for {func_name}...") + + # Force recompile + Path(file_path).touch() + + # Get new error count + new_errors = self.get_compilation_errors(file_path) + new_error_count = len(new_errors) + + # --- Function-level check (preferred when bounds are known) --- + if func_start_line > 0 and func_end_line > 0 and func_error_count_before > 0: + # Re-discover the function's new position (line numbers may have shifted) + discovered = self.discover_functions_in_file(file_path) + new_start, new_end = func_start_line, func_end_line # fallback + for fname, s, e in discovered: + if fname == func_name: + new_start, new_end = s, e + break + + func_errors_after = sum( + 1 for e in new_errors if new_start <= e['line'] <= new_end + 5 + ) + + if func_errors_after > func_error_count_before: + print(f"[WARN] ❌ Validation failed: function errors increased " + f"{func_error_count_before} → {func_errors_after}") + return False + elif func_errors_after == func_error_count_before: + # No change in the function itself — only allow if global count decreased + if new_error_count < original_error_count: + print(f"[INFO] ✅ Validation passed: global errors decreased " + f"{original_error_count} → {new_error_count}") + return True + print(f"[WARN] ⚠️ Validation inconclusive: function errors unchanged " + f"({func_errors_after}), global {original_error_count} → {new_error_count}") + # Allow only if at least the file didn't get worse + return new_error_count <= original_error_count + else: + print(f"[INFO] ✅ Validation passed: function errors decreased " + f"{func_error_count_before} → {func_errors_after}") + return True + + # --- Fallback: file-level check only --- + if new_error_count > original_error_count: + print(f"[WARN] ❌ Validation failed: errors increased from {original_error_count} to {new_error_count}") + return False + elif new_error_count == original_error_count: + print(f"[WARN] ⚠️ Validation inconclusive: error count unchanged ({new_error_count})") + return True + else: + print(f"[INFO] ✅ Validation passed: errors decreased from {original_error_count} to {new_error_count}") + return True + + def backup_file(self, file_path: str) -> str: + """Create a backup of the file. Returns backup path.""" + import shutil + backup_path = file_path + '.backup' + shutil.copy2(file_path, backup_path) + return backup_path + + def restore_backup(self, file_path: str, backup_path: str): + """Restore file from backup.""" + import shutil + shutil.move(backup_path, file_path) + print(f"[INFO] Restored from backup") + + def fix_file(self, file_path: str, max_functions: int = 20, max_passes: int = 3, + target_function: str = None) -> int: + """ + Fix type errors in a file, looping until no more progress can be made + or max_passes is reached. + If target_function is given, only that function is fixed (all others are skipped). + Returns total number of functions fixed across all passes. + """ + print(f"[INFO] Processing {file_path}...") + + # Create a single backup before any passes + backup_path = self.backup_file(file_path) + print(f"[INFO] Created backup at {backup_path}") + + # Reset per-file failure tracker + self._validation_failures = {} + + total_fixed = 0 + total_failed = 0 + + for pass_num in range(1, max_passes + 1): + if pass_num > 1: + print(f"[INFO] --- Pass {pass_num}/{max_passes} ---") + + # Get compilation errors for this pass + print(f"[INFO] Compiling to detect errors...") + compiler_errors = self.get_compilation_errors(file_path) + print(f"[INFO] Found {len(compiler_errors)} compilation error(s)") + + if not compiler_errors: + print(f"[INFO] No compilation errors found, done!") + break + + # Group errors by type + error_types = {} + for err in compiler_errors: + err_type = err['type'] + error_types[err_type] = error_types.get(err_type, 0) + 1 + + print(f"[INFO] Error breakdown: {', '.join(f'{k}: {v}' for k, v in error_types.items())}") + + # Discover all actual decompiled functions in the file + print(f"[INFO] Discovering decompiled functions...") + discovered_functions = self.discover_functions_in_file(file_path) + print(f"[INFO] Found {len(discovered_functions)} decompiled function(s) in file") + + if not discovered_functions: + print(f"[INFO] No decompiled functions found") + break + + # Debug: show some discovered functions and error lines + print(f"[DEBUG] Sample functions: {discovered_functions[:3]}") + print(f"[DEBUG] Sample error lines: {[e['line'] for e in compiler_errors[:5]]}") + + # ── Deterministic pre-pass ────────────────────────────────────── + # Handle pointer_cast and missing_struct_field errors mechanically + # before spending LLM time on them. + struct_maps = self._collect_struct_field_maps(file_path) + det_changed = self.apply_deterministic_fixes(file_path, compiler_errors, struct_maps) + if det_changed: + print(f"[INFO] 🔧 Deterministic pre-pass: fixed {det_changed} line(s)") + # Re-read errors after deterministic edits + compiler_errors = self.get_compilation_errors(file_path) + print(f"[INFO] Errors after deterministic pass: {len(compiler_errors)}") + if not compiler_errors: + print(f"[INFO] All errors resolved by deterministic pass!") + total_fixed += det_changed + break + # ──────────────────────────────────────────────────────────────── + + # Map functions to their errors + functions_with_errors = [] + for func_name, start_line, end_line in discovered_functions: + func_errors = [e for e in compiler_errors + if start_line <= e['line'] <= end_line] + + if func_errors: + # Skip functions that have already had N validation failures + prior_failures = self._validation_failures.get(func_name, 0) + if prior_failures >= 2: + print(f"[DEBUG] {func_name}: skipping (failed validation {prior_failures} times already)") + continue + + result = self.extract_function_code(file_path, func_name) + if not result: + print(f"[WARN] ⚠️ {func_name}: Could not extract function code") + continue + + code, extracted_start, extracted_end = result + + functions_with_errors.append({ + 'func_name': func_name, + 'code': code, + 'start_line': extracted_start, + 'end_line': extracted_end, + 'errors': func_errors, + 'func_error_count': len(func_errors), + }) + print(f"[DEBUG] {func_name}: {len(func_errors)} error(s), lines {extracted_start}-{extracted_end}") + + # Limit to max_functions *with errors*, not overall discovered + if len(functions_with_errors) >= max_functions: + break + + # If a specific function was requested, restrict to it + if target_function: + functions_with_errors = [f for f in functions_with_errors + if f['func_name'] == target_function] + + if not functions_with_errors: + print(f"[INFO] No decompiled functions have errors") + break + + print(f"[INFO] {len(functions_with_errors)} function(s) with errors to fix") + + original_error_count = len(compiler_errors) + pass_fixed = 0 + pass_failed = 0 + + for func_info in functions_with_errors: + func_name = func_info['func_name'] + code = func_info['code'] + start_line = func_info['start_line'] + end_line = func_info['end_line'] + func_error_count_before = func_info['func_error_count'] + + # Create a function-specific backup + func_backup = None + try: + import shutil + func_backup = file_path + f'.func_{func_name}.bak' + shutil.copy2(file_path, func_backup) + except: + pass + + # Fix with LLM (pass compiler errors) + fixed_code = self.fix_function_with_llm( + func_name, file_path, code, start_line, compiler_errors + ) + if not fixed_code: + print(f"[INFO] ℹ️ {func_name}: No fixes applied or fixing skipped") + if func_backup: + Path(func_backup).unlink(missing_ok=True) + continue + + # Apply fix + if not self.apply_fix_to_file(file_path, func_name, fixed_code, start_line, end_line): + print(f"[ERROR] ❌ {func_name}: Failed to apply fix to file") + if func_backup: + Path(func_backup).unlink(missing_ok=True) + pass_failed += 1 + continue + + # Validate using function-level error counts where possible + if not self.validate_fix(file_path, func_name, original_error_count, + func_error_count_before, start_line, end_line): + print(f"[ERROR] ❌ {func_name}: Fix validation failed, rolling back") + self._validation_failures[func_name] = self._validation_failures.get(func_name, 0) + 1 + if func_backup: + import shutil + shutil.move(func_backup, file_path) + print(f"[INFO] Rolled back changes for {func_name}") + pass_failed += 1 + continue + + # Success — reset failure counter for this function + self._validation_failures.pop(func_name, None) + # Success - clean up function backup + if func_backup: + Path(func_backup).unlink(missing_ok=True) + + # Try to update database if function exists + try: + self.db.update_status(func_name, 'decompiled_needs_refine', + notes='LLM fixed type errors, needs re-verification') + except: + pass # Function might not be in database + + pass_fixed += 1 + # Update original error count for next validation + original_error_count = len(self.get_compilation_errors(file_path)) + + total_fixed += pass_fixed + total_failed += pass_failed + + if pass_fixed == 0: + print(f"[INFO] No progress in pass {pass_num}, stopping") + break + + print(f"[INFO] Pass {pass_num} fixed {pass_fixed} function(s), {pass_failed} failed") + + # Clean up master backup + if total_failed == 0: + Path(backup_path).unlink(missing_ok=True) + print(f"[INFO] All fixes successful, removed backup") + else: + print(f"[INFO] Backup kept at {backup_path} due to {total_failed} failed fix(es)") + + return total_fixed + + +def main(): + """Main entry point.""" + import argparse + + parser = argparse.ArgumentParser(description='Fix type errors in existing decompiled functions') + parser.add_argument('--file', type=str, help='Specific file to fix (relative to workspace)') + parser.add_argument('--all', action='store_true', help='Fix all files with errors') + parser.add_argument('--max-functions', type=int, default=20, + help='Maximum functions to fix per file (default: 20)') + parser.add_argument('--max-passes', type=int, default=3, + help='Maximum LLM fix passes per file (default: 3)') + parser.add_argument('--model', type=str, default='qwen2.5-coder:7b', + help='Ollama model to use (default: qwen2.5-coder:7b)') + parser.add_argument('--verbose', action='store_true', help='Verbose output') + + args = parser.parse_args() + + fixer = TypeErrorFixer(model=args.model, verbose=args.verbose) + + if args.file: + # Fix specific file + file_path = fixer.workspace_root / args.file + if not file_path.exists(): + print(f"[ERROR] File not found: {file_path}") + sys.exit(1) + + fixed = fixer.fix_file(str(file_path), max_functions=args.max_functions, max_passes=args.max_passes) + print(f"\n✅ Fixed {fixed} function(s) in {args.file}") + + elif args.all: + print("[ERROR] --all mode not yet implemented") + print("[INFO] Use --file to fix a specific file, e.g.:") + print(" python3 fix_existing_errors.py --file src/main/psxsdk.c") + sys.exit(1) + + else: + # Default: show help + parser.print_help() + print("\nExample usage:") + print(" python3 fix_existing_errors.py --file src/main/psxsdk.c") + + +if __name__ == '__main__': + main() diff --git a/automation/functions.db b/automation/functions.db new file mode 100644 index 0000000000000000000000000000000000000000..d6672f5462a33a1de499cf974b928c3ed2281523 GIT binary patch literal 1052672 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 Dict[str, str]: + """ + Parse a C source file and return {func_name: declaration_line} for every + non-static function that has a concrete C body (not INCLUDE_ASM). + + Returns a dict like: + {"func_800BEAD4": "void func_800BEAD4(u8* arg0, s32 arg1);"} + """ + try: + text = c_file.read_text(errors='replace') + except OSError: + return {} + + result: Dict[str, str] = {} + + for m in _FUNC_DEF_RE.finditer(text): + ret_type = m.group(1).strip() + func_name = m.group(2).strip() + params = m.group(3).strip() + + # Skip if the match is preceded by 'static' on the same "line" + line_start = text.rfind('\n', 0, m.start()) + 1 + prefix = text[line_start:m.start()] + if 'static' in prefix: + continue + + # Skip declarations that reference struct/typedef names (identifiers starting + # with an uppercase letter, e.g. RECT, GzHeader, AKAO_TRACK) or PSX SDK + # platform types like u_long that are not defined in common.h. + # Including these would cause parse errors in modules that don't have + # their headers. + if re.search(r'\b[A-Z][A-Za-z0-9_]*\b|\bu_long\b', ret_type + ' ' + params): + continue + + # Normalise param list (collapse whitespace, remove comments) + params_clean = re.sub(r'\s+', ' ', params).strip() + if not params_clean: + params_clean = 'void' + + decl = f"{ret_type} {func_name}({params_clean});" + result[func_name] = decl + + return result + + +def _get_module_types(module_dir: Path, project_root: Path) -> Set[str]: + """ + Run cpp on the module's C files to collect all typedef names that are + defined after preprocessing. These are the types it's safe to reference + in a per-module declaration file. + + Returns an empty set on failure (caller should then skip struct-typed + declarations for that module). + """ + # Try the canonical private header first, fall back to any .h in the module dir + candidates = [ + module_dir / f"{module_dir.name}_private.h", + module_dir / f"{module_dir.name}.h", + ] + header = next((h for h in candidates if h.exists()), None) + if header is None: + return set() + + cpp_flags = [ + "-Iinclude", "-Isrc", "-Iinclude/psxsdk", + "-D_LANGUAGE_C", "-DM2CTX", "-D_MIPS_SZLONG=32", + "-DSCRIPT(...)={}", "-D__attribute__(...)=", "-D__asm__(...)=", + "-ffreestanding", + ] + try: + result = subprocess.check_output( + ["gcc", "-E", "-P"] + cpp_flags + [str(header.relative_to(project_root))], + cwd=str(project_root), + encoding="utf-8", + stderr=subprocess.DEVNULL, + ) + except (subprocess.CalledProcessError, FileNotFoundError): + return set() + + types: Set[str] = set() + # typedef { ... } TypeName; or typedef ExistingType TypeName; + for m in re.finditer(r'}\s*(\w+)\s*;', result): + types.add(m.group(1)) + for m in re.finditer(r'^typedef\s+\S+\s+(\w+)\s*;', result, re.MULTILINE): + types.add(m.group(1)) + return types + + +# Primitive types that are always safe regardless of module +_PRIMITIVE_TYPES = frozenset({ + 'void', 'char', 'short', 'int', 'long', 'float', 'double', + 'u8', 's8', 'u16', 's16', 'u32', 's32', 'u64', 's64', + 'f32', 'f64', 'unk_data', 'unk_ptr', 'ff7s', +}) + + +def _extract_signatures_all(c_file: Path, allowed_types: Set[str]) -> Dict[str, str]: + """ + Like _extract_signatures but includes struct-typed signatures whose types are + all in `allowed_types` (the set of types defined by the module's own headers). + """ + try: + text = c_file.read_text(errors='replace') + except OSError: + return {} + + result: Dict[str, str] = {} + + for m in _FUNC_DEF_RE_ALL.finditer(text): + ret_type = m.group(1).strip() + func_name = m.group(2).strip() + params = m.group(3).strip() + + # Skip static functions — check both the prefix text before the regex + # match start AND the ret_type itself (since \w[\w\s]*? can consume 'static') + line_start = text.rfind('\n', 0, m.start()) + 1 + prefix = text[line_start:m.start()] + if 'static' in prefix or 'static' in ret_type.split(): + continue + + # Strip any leading qualifiers that slipped into ret_type (e.g. 'static') + ret_type = ret_type.lstrip() + + # Skip multi-word return types spanning lines (bogus match) + if '\n' in ret_type: + continue + + # Skip control-flow keywords + if func_name in ('if', 'else', 'while', 'for', 'do', 'switch', 'return', 'goto'): + continue + + # Collect all identifier tokens in return type and params + combined = ret_type + ' ' + params + identifiers = set(re.findall(r'\b([A-Z]\w*)\b', combined)) # uppercase-start = type names + + # All non-primitive uppercase type names must be in allowed_types. + # Also reject u_long (lowercase but not a primitive — requires psxsdk/types.h). + unknown = identifiers - allowed_types + if unknown or re.search(r'\bu_long\b', combined): + continue + + params_clean = re.sub(r'\s+', ' ', params).strip() + if not params_clean: + params_clean = 'void' + + decl = f"{ret_type} {func_name}({params_clean});" + # Keep the FIRST definition found — #ifndef NON_MATCHINGS blocks come before + # the #else alternatives, and the #ifndef version is what actually compiles. + result.setdefault(func_name, decl) + + return result + + +def generate_module_decls(project_root: Optional[Path] = None, verbose: bool = False) -> int: + """ + For each module under src/, scan all *.c files and write + include/decomp_decls_{module}.h with ALL decompiled function signatures + (including struct-typed ones). + + These per-module files are appended to the m2c context only when decompiling + a function from that same module, ensuring the struct types referenced in the + declarations are already defined (via the module's own preprocessed headers). + + Returns the total number of declarations written across all modules. + """ + if project_root is None: + here = Path(__file__).resolve().parent + project_root = here.parent if here.name == 'automation' else here + + src_dir = project_root / 'src' + include_dir = project_root / 'include' + + if not src_dir.is_dir(): + return 0 + + total = 0 + + # Each subdirectory of src/ is a module + for module_dir in sorted(src_dir.iterdir()): + if not module_dir.is_dir(): + continue + module_name = module_dir.name + + # Collect the types defined by this module's headers so we only emit + # declarations whose parameter types are actually available. + allowed_types = _get_module_types(module_dir, project_root) + + all_decls: Dict[str, str] = {} + for c_file in sorted(module_dir.rglob('*.c')): + sigs = _extract_signatures_all(c_file, allowed_types) + all_decls.update(sigs) + + if not all_decls: + continue + + out_path = include_dir / f"decomp_decls_{module_name}.h" + lines = [ + f"/* AUTO-GENERATED by automation/generate_decls.py — do not edit manually */", + f"/* Per-module declarations for '{module_name}' — only valid in {module_name} m2c context */", + f"/* struct types referenced here are defined by the module's own preprocessed headers */", + "", + ] + # Always emit #include "_private.h" if the file exists — it defines + # the struct types referenced by the declarations below, and must not be + # removed even though tools/decompile.py strips '#'-prefixed lines before + # feeding this file to m2c (the include is kept for editor tooling / clangd). + private_header = module_dir / f"{module_name}_private.h" + if private_header.exists(): + lines.append(f'#include "../src/{module_name}/{module_name}_private.h"') + lines.append("") + for func_name in sorted(all_decls): + lines.append(all_decls[func_name]) + lines.append("") + + out_path.write_text('\n'.join(lines)) + total += len(all_decls) + + if verbose: + print( + f"[generate_decls] {module_name}: {len(all_decls)} declarations → " + f"{out_path.relative_to(project_root)}" + ) + + return total + + +def generate(project_root: Optional[Path] = None, verbose: bool = False) -> int: + """ + Scan all src/**/*.c files and write include/decomp_decls.h. + + Returns the number of declarations written. + """ + if project_root is None: + # Running from automation/ or from project root + here = Path(__file__).resolve().parent + project_root = here.parent if here.name == 'automation' else here + + src_dir = project_root / 'src' + out_path = project_root / 'include' / 'decomp_decls.h' + + if not src_dir.is_dir(): + if verbose: + print(f"[generate_decls] src dir not found: {src_dir}", file=sys.stderr) + return 0 + + all_decls: Dict[str, str] = {} + files_scanned = 0 + + for c_file in sorted(src_dir.rglob('*.c')): + sigs = _extract_signatures(c_file) + all_decls.update(sigs) + files_scanned += 1 + + if not all_decls: + # Nothing to write — don't create an empty file that would clobber a good one + if verbose: + print("[generate_decls] No signatures extracted", file=sys.stderr) + return 0 + + lines = [ + "/* AUTO-GENERATED by automation/generate_decls.py — do not edit manually */", + "/* Forward declarations for all decompiled functions, used as m2c context. */", + "#ifndef DECOMP_DECLS_H", + "#define DECOMP_DECLS_H", + "", + '#include "common.h"', + "", + ] + for func_name in sorted(all_decls): + lines.append(all_decls[func_name]) + lines += ["", "#endif /* DECOMP_DECLS_H */", ""] + + out_path.write_text('\n'.join(lines)) + + if verbose: + print( + f"[generate_decls] Wrote {len(all_decls)} declarations from " + f"{files_scanned} files → {out_path.relative_to(project_root)}" + ) + + # Also regenerate per-module declaration files + generate_module_decls(project_root=project_root, verbose=verbose) + + return len(all_decls) + + +if __name__ == '__main__': + import argparse + + parser = argparse.ArgumentParser(description="Generate m2c supplementary context declarations") + parser.add_argument('--root', type=Path, default=None, + help='Project root (default: auto-detect)') + parser.add_argument('--verbose', '-v', action='store_true') + args = parser.parse_args() + + count = generate(project_root=args.root, verbose=True) + print(f"Generated {count} declarations.") diff --git a/automation/initial run log.txt b/automation/initial run log.txt new file mode 100644 index 0000000..3dd515f --- /dev/null +++ b/automation/initial run log.txt @@ -0,0 +1,1646 @@ +calvin@Begemot:~/GitHub/ff7-decomp-armstrca/automation$ python3 agent.py --run --target 100 --batch 10 --module battle --llm --llm-threshold 25 +[2026-03-01 22:20:24] [INFO] ============================================================ +[2026-03-01 22:20:24] [INFO] STARTING DECOMPILATION AGENT +[2026-03-01 22:20:24] [INFO] ============================================================ +[2026-03-01 22:20:24] [INFO] Batch size: 10 +[2026-03-01 22:20:24] [INFO] Verify interval: 20 +[2026-03-01 22:20:24] [INFO] Module filter: battle +[2026-03-01 22:20:24] [INFO] Target count: 100 +[2026-03-01 22:20:24] [INFO] Initial state: 59/2362 verified +[2026-03-01 22:20:24] [INFO] Processing batch of 10 functions +[2026-03-01 22:20:24] [INFO] [1/10] Decompiling func_800A3208 (19 lines) + +============================================================ +Attempting to decompile: func_800A3208 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 19 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:20:26] [INFO] [2/10] Decompiling func_800A3240 (19 lines) + +============================================================ +Attempting to decompile: func_800A3240 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 19 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:20:26] [INFO] [3/10] Decompiling func_800A55BC (19 lines) + +============================================================ +Attempting to decompile: func_800A55BC +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 19 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:20:27] [INFO] [4/10] Decompiling func_800A8CC8 (19 lines) + +============================================================ +Attempting to decompile: func_800A8CC8 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 19 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:20:28] [INFO] [5/10] Decompiling func_800B10B4 (19 lines) + +============================================================ +Attempting to decompile: func_800B10B4 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 19 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:20:29] [INFO] [6/10] Decompiling func_800BB4F8 (20 lines) + +============================================================ +Attempting to decompile: func_800BB4F8 +============================================================ +Module: battle +File: src/battle/battle1.c +ASM lines: 20 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:20:29] [INFO] [7/10] Decompiling func_800BB978 (20 lines) + +============================================================ +Attempting to decompile: func_800BB978 +============================================================ +Module: battle +File: src/battle/battle1.c +ASM lines: 20 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:20:30] [INFO] [8/10] Decompiling func_800A4E00 (21 lines) + +============================================================ +Attempting to decompile: func_800A4E00 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 21 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:20:30] [INFO] [9/10] Decompiling func_800AE25C (21 lines) + +============================================================ +Attempting to decompile: func_800AE25C +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 21 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:20:31] [INFO] [10/10] Decompiling func_800B1A5C (21 lines) + +============================================================ +Attempting to decompile: func_800B1A5C +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 21 +Current status: todo +✅ Decompilation successful! + +============================================================ +AGENT PROGRESS - 22:20:32 +============================================================ +Processed: 10 functions +Verified: 59/2362 (2.9%) +Failed: 1 +Todo: 2292 +Batches: 1 +Builds: 0 +LLM analyzed: 0 +Rate: 1.41 functions/second +Elapsed: 0:00:07 +============================================================ + +[2026-03-01 22:20:34] [INFO] Processing batch of 10 functions +[2026-03-01 22:20:34] [INFO] [1/10] Decompiling func_800BB9B8 (21 lines) + +============================================================ +Attempting to decompile: func_800BB9B8 +============================================================ +Module: battle +File: src/battle/battle1.c +ASM lines: 21 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:20:34] [INFO] [2/10] Decompiling func_800BB9FC (21 lines) + +============================================================ +Attempting to decompile: func_800BB9FC +============================================================ +Module: battle +File: src/battle/battle1.c +ASM lines: 21 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:20:35] [INFO] [3/10] Decompiling func_800BBA40 (21 lines) + +============================================================ +Attempting to decompile: func_800BBA40 +============================================================ +Module: battle +File: src/battle/battle1.c +ASM lines: 21 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:20:36] [INFO] [4/10] Decompiling func_800C03B8 (21 lines) + +============================================================ +Attempting to decompile: func_800C03B8 +============================================================ +Module: battle +File: src/battle/battle1.c +ASM lines: 21 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:20:36] [INFO] [5/10] Decompiling func_800A8D18 (22 lines) + +============================================================ +Attempting to decompile: func_800A8D18 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 22 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:20:37] [INFO] [6/10] Decompiling func_800AF834 (22 lines) + +============================================================ +Attempting to decompile: func_800AF834 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 22 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:20:37] [INFO] [7/10] Decompiling func_800B1368 (22 lines) + +============================================================ +Attempting to decompile: func_800B1368 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 22 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:20:38] [INFO] [8/10] Decompiling func_800D4FA8 (22 lines) + +============================================================ +Attempting to decompile: func_800D4FA8 +============================================================ +Module: battle +File: src/battle/battle2.c +ASM lines: 22 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:20:39] [INFO] [9/10] Decompiling func_800A3488 (23 lines) + +============================================================ +Attempting to decompile: func_800A3488 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 23 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:20:39] [INFO] [10/10] Decompiling func_800A4F14 (23 lines) + +============================================================ +Attempting to decompile: func_800A4F14 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 23 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:20:40] [INFO] Running verification... + +============================================================ +VERIFYING DECOMPILED FUNCTIONS +============================================================ + +Found 20 decompiled function(s) to verify + +[1/20] Checking func_800A3208... + ✅ Matches +[2/20] Checking func_800A3240... + ✅ Matches +[3/20] Checking func_800A3488... + ✅ Matches +[4/20] Checking func_800A4E00... + ✅ Matches +[5/20] Checking func_800A4F14... + ✅ Matches +[6/20] Checking func_800A55BC... + ✅ Matches +[7/20] Checking func_800A8CC8... + ✅ Matches +[8/20] Checking func_800A8D18... + ✅ Matches +[9/20] Checking func_800AE25C... + ✅ Matches +[10/20] Checking func_800AF834... + ✅ Matches +[11/20] Checking func_800B10B4... + ✅ Matches +[12/20] Checking func_800B1368... + ✅ Matches +[13/20] Checking func_800B1A5C... + ✅ Matches +[14/20] Checking func_800BB4F8... + ✅ Matches +[15/20] Checking func_800BB978... + ✅ Matches +[16/20] Checking func_800BB9B8... + ✅ Matches +[17/20] Checking func_800BB9FC... + ✅ Matches +[18/20] Checking func_800BBA40... + ✅ Matches +[19/20] Checking func_800C03B8... + ✅ Matches +[20/20] Checking func_800D4FA8... + ✅ Matches + +============================================================ +VERIFICATION COMPLETE +============================================================ +✅ Verified: 20 +❌ Not matching: 0 +============================================================ + +[2026-03-01 22:20:40] [INFO] Verified 20 functions + +============================================================ +AGENT PROGRESS - 22:20:40 +============================================================ +Processed: 20 functions +Verified: 79/2362 (3.3%) +Failed: 1 +Todo: 2282 +Batches: 2 +Builds: 0 +LLM analyzed: 0 +Rate: 1.29 functions/second +Elapsed: 0:00:15 +============================================================ + +[2026-03-01 22:20:42] [INFO] Processing batch of 10 functions +[2026-03-01 22:20:42] [INFO] [1/10] Decompiling func_800AD8DC (23 lines) + +============================================================ +Attempting to decompile: func_800AD8DC +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 23 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:20:43] [INFO] [2/10] Decompiling func_800B37A0 (23 lines) + +============================================================ +Attempting to decompile: func_800B37A0 +============================================================ +Module: battle +File: src/battle/battle1.c +ASM lines: 23 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:20:43] [INFO] [3/10] Decompiling func_800B888C (23 lines) + +============================================================ +Attempting to decompile: func_800B888C +============================================================ +Module: battle +File: src/battle/battle1.c +ASM lines: 23 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:20:44] [INFO] [4/10] Decompiling func_800A6CC0 (24 lines) + +============================================================ +Attempting to decompile: func_800A6CC0 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 24 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:20:44] [INFO] [5/10] Decompiling func_800A6D3C (24 lines) + +============================================================ +Attempting to decompile: func_800A6D3C +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 24 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:20:45] [INFO] [6/10] Decompiling func_800AD890 (24 lines) + +============================================================ +Attempting to decompile: func_800AD890 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 24 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:20:45] [INFO] [7/10] Decompiling func_800B1218 (24 lines) + +============================================================ +Attempting to decompile: func_800B1218 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 24 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:20:46] [INFO] [8/10] Decompiling func_800D55A4 (24 lines) + +============================================================ +Attempting to decompile: func_800D55A4 +============================================================ +Module: battle +File: src/battle/battle2.c +ASM lines: 24 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:20:47] [INFO] [9/10] Decompiling func_800D5774 (24 lines) + +============================================================ +Attempting to decompile: func_800D5774 +============================================================ +Module: battle +File: src/battle/battle2.c +ASM lines: 24 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:20:47] [INFO] [10/10] Decompiling func_800A5FB0 (25 lines) +[2026-03-01 22:20:47] [INFO] ⚙️ Analyzing with LLM (25 lines)... +[2026-03-01 22:21:02] [INFO] 📊 Complexity: medium, Summary: ** The function appears to check if certain conditions are met related to memory... + +============================================================ +Attempting to decompile: func_800A5FB0 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 25 +Current status: todo +✅ Decompilation successful! + +============================================================ +AGENT PROGRESS - 22:21:03 +============================================================ +Processed: 30 functions +Verified: 79/2362 (3.8%) +Failed: 1 +Todo: 2272 +Batches: 3 +Builds: 0 +LLM analyzed: 1 +Rate: 0.79 functions/second +Elapsed: 0:00:38 +============================================================ + +[2026-03-01 22:21:05] [INFO] Processing batch of 10 functions +[2026-03-01 22:21:05] [INFO] [1/10] Decompiling func_800A6A70 (25 lines) +[2026-03-01 22:21:05] [INFO] ⚙️ Analyzing with LLM (25 lines)... +[2026-03-01 22:21:12] [INFO] 📊 Complexity: easy, Summary: ** The function `func_800A6A70` appears to be modifying a byte at a specific mem... + +============================================================ +Attempting to decompile: func_800A6A70 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 25 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:21:12] [INFO] [2/10] Decompiling func_800B2F70 (25 lines) +[2026-03-01 22:21:12] [INFO] ⚙️ Analyzing with LLM (25 lines)... +[2026-03-01 22:21:19] [WARN] ⚠️ LLM analysis failed: 'NoneType' object is not subscriptable + +============================================================ +Attempting to decompile: func_800B2F70 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 25 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:21:19] [INFO] [3/10] Decompiling func_800B38E0 (25 lines) +[2026-03-01 22:21:19] [INFO] ⚙️ Analyzing with LLM (25 lines)... +[2026-03-01 22:21:28] [INFO] 📊 Complexity: medium, Summary: This function appears to be a subroutine that reads data from a memory location ... + +============================================================ +Attempting to decompile: func_800B38E0 +============================================================ +Module: battle +File: src/battle/battle1.c +ASM lines: 25 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:21:28] [INFO] [4/10] Decompiling func_800A6AC4 (26 lines) +[2026-03-01 22:21:28] [INFO] ⚙️ Analyzing with LLM (26 lines)... +[2026-03-01 22:21:39] [INFO] 📊 Complexity: medium, Summary: ** This function appears to be manipulating specific data stored in memory locat... + +============================================================ +Attempting to decompile: func_800A6AC4 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 26 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:21:40] [INFO] [5/10] Decompiling func_800A6C04 (26 lines) +[2026-03-01 22:21:40] [INFO] ⚙️ Analyzing with LLM (26 lines)... +[2026-03-01 22:21:49] [INFO] 📊 Complexity: medium, Summary: This function appears to perform some data manipulation, likely related to loadi... + +============================================================ +Attempting to decompile: func_800A6C04 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 26 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:21:50] [INFO] [6/10] Decompiling func_800ADE84 (26 lines) +[2026-03-01 22:21:50] [INFO] ⚙️ Analyzing with LLM (26 lines)... +[2026-03-01 22:21:56] [INFO] 📊 Complexity: medium, Summary: ** This function performs a calculation involving subtraction, multiplication, a... + +============================================================ +Attempting to decompile: func_800ADE84 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 26 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:21:57] [INFO] [7/10] Decompiling func_800B0EB4 (26 lines) +[2026-03-01 22:21:57] [INFO] ⚙️ Analyzing with LLM (26 lines)... +[2026-03-01 22:22:04] [INFO] 📊 Complexity: medium, Summary: ** This function appears to calculate an index based on the input parameter, fet... + +============================================================ +Attempting to decompile: func_800B0EB4 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 26 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:22:05] [INFO] [8/10] Decompiling func_800A4480 (27 lines) +[2026-03-01 22:22:05] [INFO] ⚙️ Analyzing with LLM (27 lines)... +[2026-03-01 22:22:17] [INFO] 📊 Complexity: medium, Summary: ** The function `func_800A4480` appears to be iterating over a range of values, ... + +============================================================ +Attempting to decompile: func_800A4480 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 27 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:22:18] [INFO] [9/10] Decompiling func_800A5660 (27 lines) +[2026-03-01 22:22:18] [INFO] ⚙️ Analyzing with LLM (27 lines)... +[2026-03-01 22:22:26] [INFO] 📊 Complexity: medium, Summary: ** The function `func_800A5660` iterates through a memory range, checking for sp... + +============================================================ +Attempting to decompile: func_800A5660 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 27 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:22:27] [INFO] [10/10] Decompiling func_800ADFF4 (27 lines) +[2026-03-01 22:22:27] [INFO] ⚙️ Analyzing with LLM (27 lines)... +[2026-03-01 22:22:38] [INFO] 📊 Complexity: medium, Summary: ** This function appears to calculate some values based on the contents of memor... + +============================================================ +Attempting to decompile: func_800ADFF4 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 27 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:22:39] [INFO] Running verification... + +============================================================ +VERIFYING DECOMPILED FUNCTIONS +============================================================ + +Found 20 decompiled function(s) to verify + +[1/20] Checking func_800A4480... + ✅ Matches +[2/20] Checking func_800A5660... + ✅ Matches +[3/20] Checking func_800A5FB0... + ✅ Matches +[4/20] Checking func_800A6A70... + ✅ Matches +[5/20] Checking func_800A6AC4... + ✅ Matches +[6/20] Checking func_800A6C04... + ✅ Matches +[7/20] Checking func_800A6CC0... + ✅ Matches +[8/20] Checking func_800A6D3C... + ✅ Matches +[9/20] Checking func_800AD890... + ✅ Matches +[10/20] Checking func_800AD8DC... + ✅ Matches +[11/20] Checking func_800ADE84... + ✅ Matches +[12/20] Checking func_800ADFF4... + ✅ Matches +[13/20] Checking func_800B0EB4... + ✅ Matches +[14/20] Checking func_800B1218... + ✅ Matches +[15/20] Checking func_800B2F70... + ✅ Matches +[16/20] Checking func_800B37A0... + ✅ Matches +[17/20] Checking func_800B38E0... + ✅ Matches +[18/20] Checking func_800B888C... + ✅ Matches +[19/20] Checking func_800D55A4... + ✅ Matches +[20/20] Checking func_800D5774... + ✅ Matches + +============================================================ +VERIFICATION COMPLETE +============================================================ +✅ Verified: 20 +❌ Not matching: 0 +============================================================ + +[2026-03-01 22:22:39] [INFO] Verified 20 functions + +============================================================ +AGENT PROGRESS - 22:22:39 +============================================================ +Processed: 40 functions +Verified: 99/2362 (4.2%) +Failed: 1 +Todo: 2262 +Batches: 4 +Builds: 0 +LLM analyzed: 11 +Rate: 0.30 functions/second +Elapsed: 0:02:14 +============================================================ + +[2026-03-01 22:22:41] [INFO] Processing batch of 10 functions +[2026-03-01 22:22:41] [INFO] [1/10] Decompiling func_800B0E5C (27 lines) +[2026-03-01 22:22:41] [INFO] ⚙️ Analyzing with LLM (27 lines)... +[2026-03-01 22:22:49] [INFO] 📊 Complexity: medium, Summary: ** The function checks if the input value is negative. If it is, it calculates a... + +============================================================ +Attempting to decompile: func_800B0E5C +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 27 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:22:49] [INFO] [2/10] Decompiling func_800B3FAC (27 lines) +[2026-03-01 22:22:49] [INFO] ⚙️ Analyzing with LLM (27 lines)... +[2026-03-01 22:22:58] [INFO] 📊 Complexity: medium, Summary: ** The function appears to be searching for a specific value in a memory buffer,... + +============================================================ +Attempting to decompile: func_800B3FAC +============================================================ +Module: battle +File: src/battle/battle1.c +ASM lines: 27 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:22:59] [INFO] [3/10] Decompiling func_800BC2F0 (27 lines) +[2026-03-01 22:22:59] [INFO] ⚙️ Analyzing with LLM (27 lines)... +[2026-03-01 22:23:08] [INFO] 📊 Complexity: medium, Summary: ** The function `func_800BC2F0` appears to be initializing memory blocks at spec... + +============================================================ +Attempting to decompile: func_800BC2F0 +============================================================ +Module: battle +File: src/battle/battle1.c +ASM lines: 27 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:23:09] [INFO] [4/10] Decompiling func_800D3474 (27 lines) +[2026-03-01 22:23:09] [INFO] ⚙️ Analyzing with LLM (27 lines)... +[2026-03-01 22:23:22] [INFO] 📊 Complexity: medium, Summary: ** This function appears to be manipulating registers related to coprocessor 2 (... + +============================================================ +Attempting to decompile: func_800D3474 +============================================================ +Module: battle +File: src/battle/battle2.c +ASM lines: 27 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:23:23] [INFO] [5/10] Decompiling func_800A311C (28 lines) +[2026-03-01 22:23:23] [INFO] ⚙️ Analyzing with LLM (28 lines)... +[2026-03-01 22:23:34] [WARN] ⚠️ LLM analysis failed: 'NoneType' object is not subscriptable + +============================================================ +Attempting to decompile: func_800A311C +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 28 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:23:35] [INFO] [6/10] Decompiling func_800A555C (28 lines) +[2026-03-01 22:23:35] [INFO] ⚙️ Analyzing with LLM (28 lines)... +[2026-03-01 22:23:54] [INFO] 📊 Complexity: medium, Summary: ** This function appears to modify a memory block by performing several operatio... + +============================================================ +Attempting to decompile: func_800A555C +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 28 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:23:54] [INFO] [7/10] Decompiling func_800B950C (28 lines) +[2026-03-01 22:23:54] [INFO] ⚙️ Analyzing with LLM (28 lines)... +[2026-03-01 22:24:07] [INFO] 📊 Complexity: medium, Summary: ** The function appears to be a loop that reads two 16-bit unsigned integers fro... + +============================================================ +Attempting to decompile: func_800B950C +============================================================ +Module: battle +File: src/battle/battle1.c +ASM lines: 28 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:24:08] [INFO] [8/10] Decompiling func_800E68B4 (28 lines) +[2026-03-01 22:24:08] [INFO] ⚙️ Analyzing with LLM (28 lines)... +[2026-03-01 22:24:21] [WARN] ⚠️ LLM analysis failed: 'NoneType' object is not subscriptable + +============================================================ +Attempting to decompile: func_800E68B4 +============================================================ +Module: battle +File: src/battle/battle3.c +ASM lines: 28 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:24:22] [INFO] [9/10] Decompiling func_800A283C (29 lines) +[2026-03-01 22:24:22] [INFO] ⚙️ Analyzing with LLM (29 lines)... +[2026-03-01 22:24:33] [INFO] 📊 Complexity: medium, Summary: ** The function `func_800A283C` appears to increment a counter stored in memory ... + +============================================================ +Attempting to decompile: func_800A283C +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 29 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:24:34] [INFO] [10/10] Decompiling func_800A6C5C (29 lines) +[2026-03-01 22:24:34] [INFO] ⚙️ Analyzing with LLM (29 lines)... +[2026-03-01 22:24:41] [INFO] 📊 Complexity: medium, Summary: The function appears to be processing some data by calling another function and ... + +============================================================ +Attempting to decompile: func_800A6C5C +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 29 +Current status: todo +✅ Decompilation successful! + +============================================================ +AGENT PROGRESS - 22:24:42 +============================================================ +Processed: 50 functions +Verified: 99/2362 (4.6%) +Failed: 1 +Todo: 2252 +Batches: 5 +Builds: 0 +LLM analyzed: 21 +Rate: 0.19 functions/second +Elapsed: 0:04:17 +============================================================ + +[2026-03-01 22:24:44] [INFO] Processing batch of 10 functions +[2026-03-01 22:24:44] [INFO] [1/10] Decompiling func_800A6E0C (29 lines) +[2026-03-01 22:24:44] [INFO] ⚙️ Analyzing with LLM (29 lines)... +[2026-03-01 22:24:52] [INFO] 📊 Complexity: medium, Summary: This function appears to set up memory addresses based on the input parameter, p... + +============================================================ +Attempting to decompile: func_800A6E0C +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 29 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:24:53] [INFO] [2/10] Decompiling func_800A73F8 (29 lines) +[2026-03-01 22:24:53] [INFO] ⚙️ Analyzing with LLM (29 lines)... +[2026-03-01 22:25:07] [INFO] 📊 Complexity: medium, Summary: ** This function appears to be handling a data structure, possibly for managing ... + +============================================================ +Attempting to decompile: func_800A73F8 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 29 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:25:08] [INFO] [3/10] Decompiling func_800AD420 (29 lines) +[2026-03-01 22:25:08] [INFO] ⚙️ Analyzing with LLM (29 lines)... +[2026-03-01 22:25:23] [WARN] ⚠️ LLM analysis failed: 'NoneType' object is not subscriptable + +============================================================ +Attempting to decompile: func_800AD420 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 29 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:25:24] [INFO] [4/10] Decompiling func_800AE318 (29 lines) +[2026-03-01 22:25:24] [INFO] ⚙️ Analyzing with LLM (29 lines)... +[2026-03-01 22:25:35] [INFO] 📊 Complexity: medium, Summary: ** The function `func_800AE318` appears to be part of a larger system that proce... + +============================================================ +Attempting to decompile: func_800AE318 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 29 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:25:35] [INFO] [5/10] Decompiling func_800AEB20 (29 lines) +[2026-03-01 22:25:35] [INFO] ⚙️ Analyzing with LLM (29 lines)... +[2026-03-01 22:25:46] [INFO] 📊 Complexity: medium, Summary: ** This function appears to be handling memory access and manipulation based on ... + +============================================================ +Attempting to decompile: func_800AEB20 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 29 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:25:47] [INFO] [6/10] Decompiling func_800B5CD4 (29 lines) +[2026-03-01 22:25:47] [INFO] ⚙️ Analyzing with LLM (29 lines)... +[2026-03-01 22:25:56] [INFO] 📊 Complexity: medium, Summary: This function appears to be performing a series of calculations and memory acces... + +============================================================ +Attempting to decompile: func_800B5CD4 +============================================================ +Module: battle +File: src/battle/battle1.c +ASM lines: 29 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:25:57] [INFO] [7/10] Decompiling func_800B8360 (29 lines) +[2026-03-01 22:25:57] [INFO] ⚙️ Analyzing with LLM (29 lines)... +[2026-03-01 22:26:10] [INFO] 📊 Complexity: medium, Summary: ** The function `func_800B8360` appears to initialize graphics drawing parameter... + +============================================================ +Attempting to decompile: func_800B8360 +============================================================ +Module: battle +File: src/battle/battle1.c +ASM lines: 29 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:26:11] [INFO] [8/10] Decompiling func_800D34C8 (29 lines) +[2026-03-01 22:26:11] [INFO] ⚙️ Analyzing with LLM (29 lines)... +[2026-03-01 22:26:27] [WARN] ⚠️ LLM analysis failed: 'NoneType' object is not subscriptable + +============================================================ +Attempting to decompile: func_800D34C8 +============================================================ +Module: battle +File: src/battle/battle2.c +ASM lines: 29 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:26:28] [INFO] [9/10] Decompiling func_800A4CC8 (30 lines) +[2026-03-01 22:26:28] [INFO] ⚙️ Analyzing with LLM (30 lines)... +[2026-03-01 22:26:39] [WARN] ⚠️ LLM analysis failed: 'NoneType' object is not subscriptable + +============================================================ +Attempting to decompile: func_800A4CC8 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 30 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:26:40] [INFO] [10/10] Decompiling func_800A71F4 (30 lines) +[2026-03-01 22:26:40] [INFO] ⚙️ Analyzing with LLM (30 lines)... +[2026-03-01 22:26:54] [INFO] 📊 Complexity: medium, Summary: ** The function appears to perform a specific operation involving memory manipul... + +============================================================ +Attempting to decompile: func_800A71F4 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 30 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:26:55] [INFO] Running verification... + +============================================================ +VERIFYING DECOMPILED FUNCTIONS +============================================================ + +Found 20 decompiled function(s) to verify + +[1/20] Checking func_800A283C... + ✅ Matches +[2/20] Checking func_800A311C... + ✅ Matches +[3/20] Checking func_800A4CC8... + ✅ Matches +[4/20] Checking func_800A555C... + ✅ Matches +[5/20] Checking func_800A6C5C... + ✅ Matches +[6/20] Checking func_800A6E0C... + ✅ Matches +[7/20] Checking func_800A71F4... + ✅ Matches +[8/20] Checking func_800A73F8... + ✅ Matches +[9/20] Checking func_800AD420... + ✅ Matches +[10/20] Checking func_800AE318... + ✅ Matches +[11/20] Checking func_800AEB20... + ✅ Matches +[12/20] Checking func_800B0E5C... + ✅ Matches +[13/20] Checking func_800B3FAC... + ✅ Matches +[14/20] Checking func_800B5CD4... + ✅ Matches +[15/20] Checking func_800B8360... + ✅ Matches +[16/20] Checking func_800B950C... + ✅ Matches +[17/20] Checking func_800BC2F0... + ✅ Matches +[18/20] Checking func_800D3474... + ✅ Matches +[19/20] Checking func_800D34C8... + ✅ Matches +[20/20] Checking func_800E68B4... + ✅ Matches + +============================================================ +VERIFICATION COMPLETE +============================================================ +✅ Verified: 20 +❌ Not matching: 0 +============================================================ + +[2026-03-01 22:26:55] [INFO] Verified 20 functions + +============================================================ +AGENT PROGRESS - 22:26:55 +============================================================ +Processed: 60 functions +Verified: 119/2362 (5.0%) +Failed: 1 +Todo: 2242 +Batches: 6 +Builds: 0 +LLM analyzed: 31 +Rate: 0.15 functions/second +Elapsed: 0:06:30 +============================================================ + +[2026-03-01 22:26:57] [INFO] Processing batch of 10 functions +[2026-03-01 22:26:57] [INFO] [1/10] Decompiling func_800AA688 (30 lines) +[2026-03-01 22:26:57] [INFO] ⚙️ Analyzing with LLM (30 lines)... +[2026-03-01 22:27:08] [INFO] 📊 Complexity: medium, Summary: ** The function `func_800AA688` iterates over a series of values, checking each ... + +============================================================ +Attempting to decompile: func_800AA688 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 30 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:27:09] [INFO] [2/10] Decompiling func_800B798C (30 lines) +[2026-03-01 22:27:09] [INFO] ⚙️ Analyzing with LLM (30 lines)... +[2026-03-01 22:27:17] [INFO] 📊 Complexity: easy, Summary: The function iterates up to 74 times, writing values to specific memory addresse... + +============================================================ +Attempting to decompile: func_800B798C +============================================================ +Module: battle +File: src/battle/battle1.c +ASM lines: 30 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:27:18] [INFO] [3/10] Decompiling func_800D3418 (30 lines) +[2026-03-01 22:27:18] [INFO] ⚙️ Analyzing with LLM (30 lines)... +[2026-03-01 22:27:33] [INFO] 📊 Complexity: easy, Summary: ** This function appears to manipulate certain control registers in the MIPS R30... + +============================================================ +Attempting to decompile: func_800D3418 +============================================================ +Module: battle +File: src/battle/battle2.c +ASM lines: 30 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:27:34] [INFO] [4/10] Decompiling func_800D51D4 (30 lines) +[2026-03-01 22:27:34] [INFO] ⚙️ Analyzing with LLM (30 lines)... +[2026-03-01 22:27:46] [INFO] 📊 Complexity: medium, Summary: ** This function reads an integer from a memory address stored in `$a1`, negates... + +============================================================ +Attempting to decompile: func_800D51D4 +============================================================ +Module: battle +File: src/battle/battle2.c +ASM lines: 30 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:27:47] [INFO] [5/10] Decompiling func_800D58D0 (30 lines) +[2026-03-01 22:27:47] [INFO] ⚙️ Analyzing with LLM (30 lines)... +[2026-03-01 22:28:03] [INFO] 📊 Complexity: medium, Summary: ** This function appears to call another function (`func_800BBEAC`), performs so... + +============================================================ +Attempting to decompile: func_800D58D0 +============================================================ +Module: battle +File: src/battle/battle2.c +ASM lines: 30 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:28:03] [INFO] [6/10] Decompiling func_800A70C4 (31 lines) +[2026-03-01 22:28:03] [INFO] ⚙️ Analyzing with LLM (31 lines)... +[2026-03-01 22:28:13] [INFO] 📊 Complexity: medium, Summary: ** The function appears to be loading a configuration value from memory, perform... + +============================================================ +Attempting to decompile: func_800A70C4 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 31 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:28:13] [INFO] [7/10] Decompiling func_800A853C (31 lines) +[2026-03-01 22:28:13] [INFO] ⚙️ Analyzing with LLM (31 lines)... +[2026-03-01 22:28:23] [INFO] 📊 Complexity: medium, Summary: ** The function appears to be a loop that iterates 10 times, performs some bitwi... + +============================================================ +Attempting to decompile: func_800A853C +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 31 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:28:24] [INFO] [8/10] Decompiling func_800B1304 (31 lines) +[2026-03-01 22:28:24] [INFO] ⚙️ Analyzing with LLM (31 lines)... +[2026-03-01 22:28:36] [INFO] 📊 Complexity: medium, Summary: ** The function appears to be searching for a specific value in a memory region,... + +============================================================ +Attempting to decompile: func_800B1304 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 31 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:28:36] [INFO] [9/10] Decompiling func_800C20E8 (31 lines) +[2026-03-01 22:28:36] [INFO] ⚙️ Analyzing with LLM (31 lines)... +[2026-03-01 22:28:44] [INFO] 📊 Complexity: medium, Summary: ** The function appears to perform some kind of computation involving multiplica... + +============================================================ +Attempting to decompile: func_800C20E8 +============================================================ +Module: battle +File: src/battle/battle1.c +ASM lines: 31 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:28:45] [INFO] [10/10] Decompiling func_800D76B8 (31 lines) +[2026-03-01 22:28:45] [INFO] ⚙️ Analyzing with LLM (31 lines)... +[2026-03-01 22:28:59] [INFO] 📊 Complexity: medium, Summary: ** The function appears to perform some operations on a data structure located a... + +============================================================ +Attempting to decompile: func_800D76B8 +============================================================ +Module: battle +File: src/battle/battle2.c +ASM lines: 31 +Current status: todo +✅ Decompilation successful! + +============================================================ +AGENT PROGRESS - 22:29:00 +============================================================ +Processed: 70 functions +Verified: 119/2362 (5.5%) +Failed: 1 +Todo: 2232 +Batches: 7 +Builds: 0 +LLM analyzed: 41 +Rate: 0.14 functions/second +Elapsed: 0:08:35 +============================================================ + +[2026-03-01 22:29:02] [INFO] Processing batch of 10 functions +[2026-03-01 22:29:02] [INFO] [1/10] Decompiling func_800D8A88 (31 lines) +[2026-03-01 22:29:02] [INFO] ⚙️ Analyzing with LLM (31 lines)... +[2026-03-01 22:29:15] [INFO] 📊 Complexity: medium, Summary: ** This function appears to synchronize a drawing process with vertical synchron... + +============================================================ +Attempting to decompile: func_800D8A88 +============================================================ +Module: battle +File: src/battle/battle3.c +ASM lines: 31 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:29:16] [INFO] [2/10] Decompiling func_800A65B0 (32 lines) +[2026-03-01 22:29:16] [INFO] ⚙️ Analyzing with LLM (32 lines)... +[2026-03-01 22:29:25] [WARN] ⚠️ LLM analysis failed: 'NoneType' object is not subscriptable + +============================================================ +Attempting to decompile: func_800A65B0 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 32 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:29:26] [INFO] [3/10] Decompiling func_800A8DCC (32 lines) +[2026-03-01 22:29:26] [INFO] ⚙️ Analyzing with LLM (32 lines)... +[2026-03-01 22:29:39] [INFO] 📊 Complexity: medium, Summary: ** This function appears to update memory addresses based on the input parameter... + +============================================================ +Attempting to decompile: func_800A8DCC +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 32 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:29:39] [INFO] [4/10] Decompiling func_800B11B4 (32 lines) +[2026-03-01 22:29:39] [INFO] ⚙️ Analyzing with LLM (32 lines)... +[2026-03-01 22:29:51] [INFO] 📊 Complexity: medium, Summary: ** This function appears to be searching for a specific value in an array, possi... + +============================================================ +Attempting to decompile: func_800B11B4 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 32 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:29:52] [INFO] [5/10] Decompiling func_800A34CC (33 lines) +[2026-03-01 22:29:52] [INFO] ⚙️ Analyzing with LLM (33 lines)... +[2026-03-01 22:30:01] [INFO] 📊 Complexity: medium, Summary: ** The function appears to be a loop that processes data at memory locations poi... + +============================================================ +Attempting to decompile: func_800A34CC +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 33 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:30:02] [INFO] [6/10] Decompiling func_800A44D8 (33 lines) +[2026-03-01 22:30:02] [INFO] ⚙️ Analyzing with LLM (33 lines)... +[2026-03-01 22:30:13] [INFO] 📊 Complexity: medium, Summary: ** The function appears to check if a given input is within a specific range and... + +============================================================ +Attempting to decompile: func_800A44D8 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 33 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:30:14] [INFO] [7/10] Decompiling func_800A6B1C (33 lines) +[2026-03-01 22:30:14] [INFO] ⚙️ Analyzing with LLM (33 lines)... +[2026-03-01 22:30:29] [INFO] 📊 Complexity: easy, Summary: ** The function `func_800A6B1C` appears to be a bit manipulation routine that pr... + +============================================================ +Attempting to decompile: func_800A6B1C +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 33 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:30:30] [INFO] [8/10] Decompiling func_800A85FC (33 lines) +[2026-03-01 22:30:30] [INFO] ⚙️ Analyzing with LLM (33 lines)... +[2026-03-01 22:30:40] [INFO] 📊 Complexity: medium, Summary: ** This function appears to check a condition, perform some calculations, and ca... + +============================================================ +Attempting to decompile: func_800A85FC +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 33 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:30:41] [INFO] [9/10] Decompiling func_800ADDE8 (33 lines) +[2026-03-01 22:30:41] [INFO] ⚙️ Analyzing with LLM (33 lines)... +[2026-03-01 22:30:58] [INFO] 📊 Complexity: medium, Summary: ** The function appears to perform calculations and manipulate data structures, ... + +============================================================ +Attempting to decompile: func_800ADDE8 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 33 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:30:58] [INFO] [10/10] Decompiling func_800AEB80 (33 lines) +[2026-03-01 22:30:58] [INFO] ⚙️ Analyzing with LLM (33 lines)... +[2026-03-01 22:31:19] [INFO] 📊 Complexity: medium, Summary: ** The function appears to be managing memory allocation and performing some bit... + +============================================================ +Attempting to decompile: func_800AEB80 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 33 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:31:19] [INFO] Running verification... + +============================================================ +VERIFYING DECOMPILED FUNCTIONS +============================================================ + +Found 20 decompiled function(s) to verify + +[1/20] Checking func_800A34CC... + ✅ Matches +[2/20] Checking func_800A44D8... + ✅ Matches +[3/20] Checking func_800A65B0... + ✅ Matches +[4/20] Checking func_800A6B1C... + ✅ Matches +[5/20] Checking func_800A70C4... + ✅ Matches +[6/20] Checking func_800A853C... + ✅ Matches +[7/20] Checking func_800A85FC... + ✅ Matches +[8/20] Checking func_800A8DCC... + ✅ Matches +[9/20] Checking func_800AA688... + ✅ Matches +[10/20] Checking func_800ADDE8... + ✅ Matches +[11/20] Checking func_800AEB80... + ✅ Matches +[12/20] Checking func_800B11B4... + ✅ Matches +[13/20] Checking func_800B1304... + ✅ Matches +[14/20] Checking func_800B798C... + ✅ Matches +[15/20] Checking func_800C20E8... + ✅ Matches +[16/20] Checking func_800D3418... + ✅ Matches +[17/20] Checking func_800D51D4... + ✅ Matches +[18/20] Checking func_800D58D0... + ✅ Matches +[19/20] Checking func_800D76B8... + ✅ Matches +[20/20] Checking func_800D8A88... + ✅ Matches + +============================================================ +VERIFICATION COMPLETE +============================================================ +✅ Verified: 20 +❌ Not matching: 0 +============================================================ + +[2026-03-01 22:31:20] [INFO] Verified 20 functions + +============================================================ +AGENT PROGRESS - 22:31:20 +============================================================ +Processed: 80 functions +Verified: 139/2362 (5.9%) +Failed: 1 +Todo: 2222 +Batches: 8 +Builds: 0 +LLM analyzed: 51 +Rate: 0.12 functions/second +Elapsed: 0:10:55 +============================================================ + +[2026-03-01 22:31:22] [INFO] Processing batch of 10 functions +[2026-03-01 22:31:22] [INFO] [1/10] Decompiling func_800D5230 (33 lines) +[2026-03-01 22:31:22] [INFO] ⚙️ Analyzing with LLM (33 lines)... +[2026-03-01 22:31:41] [INFO] 📊 Complexity: medium, Summary: ** This function appears to perform a series of calculations and memory operatio... + +============================================================ +Attempting to decompile: func_800D5230 +============================================================ +Module: battle +File: src/battle/battle2.c +ASM lines: 33 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:31:41] [INFO] [2/10] Decompiling func_800E58CC (33 lines) +[2026-03-01 22:31:41] [INFO] ⚙️ Analyzing with LLM (33 lines)... +[2026-03-01 22:31:56] [INFO] 📊 Complexity: medium, Summary: ** The function appears to be a loop that iterates up to 3 times, performing cal... + +============================================================ +Attempting to decompile: func_800E58CC +============================================================ +Module: battle +File: src/battle/battle3.c +ASM lines: 33 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:31:57] [INFO] [3/10] Decompiling func_800A55F4 (34 lines) +[2026-03-01 22:31:57] [INFO] ⚙️ Analyzing with LLM (34 lines)... +[2026-03-01 22:32:06] [INFO] 📊 Complexity: medium, Summary: ** This function appears to search through a table of 16-bit values, looking for... + +============================================================ +Attempting to decompile: func_800A55F4 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 34 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:32:07] [INFO] [4/10] Decompiling func_800A6D88 (34 lines) +[2026-03-01 22:32:07] [INFO] ⚙️ Analyzing with LLM (34 lines)... +[2026-03-01 22:32:20] [INFO] 📊 Complexity: medium, Summary: ** This function calculates an offset based on the input argument, reads a value... + +============================================================ +Attempting to decompile: func_800A6D88 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 34 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:32:21] [INFO] [5/10] Decompiling func_800A7254 (34 lines) +[2026-03-01 22:32:21] [INFO] ⚙️ Analyzing with LLM (34 lines)... +[2026-03-01 22:32:34] [INFO] 📊 Complexity: medium, Summary: ** This function appears to be involved in modifying a data structure based on s... + +============================================================ +Attempting to decompile: func_800A7254 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 34 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:32:35] [INFO] [6/10] Decompiling func_800AD088 (34 lines) +[2026-03-01 22:32:35] [INFO] ⚙️ Analyzing with LLM (34 lines)... +[2026-03-01 22:32:46] [INFO] 📊 Complexity: medium, Summary: ** This function appears to check a condition based on memory values and calls a... + +============================================================ +Attempting to decompile: func_800AD088 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 34 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:32:46] [INFO] [7/10] Decompiling func_800AD480 (34 lines) +[2026-03-01 22:32:46] [INFO] ⚙️ Analyzing with LLM (34 lines)... +[2026-03-01 22:32:58] [INFO] 📊 Complexity: medium, Summary: ** This function appears to be a loop that processes data based on certain condi... + +============================================================ +Attempting to decompile: func_800AD480 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 34 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:32:59] [INFO] [8/10] Decompiling func_800AE2A0 (34 lines) +[2026-03-01 22:32:59] [INFO] ⚙️ Analyzing with LLM (34 lines)... +[2026-03-01 22:33:13] [INFO] 📊 Complexity: medium, Summary: ** This function performs a series of arithmetic and logical operations on its i... + +============================================================ +Attempting to decompile: func_800AE2A0 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 34 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:33:13] [INFO] [9/10] Decompiling func_800B13B0 (34 lines) +[2026-03-01 22:33:13] [INFO] ⚙️ Analyzing with LLM (34 lines)... +[2026-03-01 22:33:27] [INFO] 📊 Complexity: medium, Summary: ** The function `func_800B13B0` appears to be a conditional write function that ... + +============================================================ +Attempting to decompile: func_800B13B0 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 34 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:33:28] [INFO] [10/10] Decompiling func_800B88CC (34 lines) +[2026-03-01 22:33:28] [INFO] ⚙️ Analyzing with LLM (34 lines)... +[2026-03-01 22:33:44] [INFO] 📊 Complexity: medium, Summary: ** This function appears to be performing a series of operations on the input pa... + +============================================================ +Attempting to decompile: func_800B88CC +============================================================ +Module: battle +File: src/battle/battle1.c +ASM lines: 34 +Current status: todo +✅ Decompilation successful! + +============================================================ +AGENT PROGRESS - 22:33:45 +============================================================ +Processed: 90 functions +Verified: 139/2362 (6.3%) +Failed: 1 +Todo: 2212 +Batches: 9 +Builds: 0 +LLM analyzed: 61 +Rate: 0.11 functions/second +Elapsed: 0:13:20 +============================================================ + +[2026-03-01 22:33:47] [INFO] Processing batch of 10 functions +[2026-03-01 22:33:47] [INFO] [1/10] Decompiling func_800BA24C (34 lines) +[2026-03-01 22:33:47] [INFO] ⚙️ Analyzing with LLM (34 lines)... +[2026-03-01 22:34:02] [INFO] 📊 Complexity: easy, Summary: ** This function appears to be managing some form of status flags and updating m... + +============================================================ +Attempting to decompile: func_800BA24C +============================================================ +Module: battle +File: src/battle/battle1.c +ASM lines: 34 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:34:03] [INFO] [2/10] Decompiling func_800BFA98 (34 lines) +[2026-03-01 22:34:03] [INFO] ⚙️ Analyzing with LLM (34 lines)... +[2026-03-01 22:34:19] [INFO] 📊 Complexity: medium, Summary: ** This function appears to be processing input values stored in specific memory... + +============================================================ +Attempting to decompile: func_800BFA98 +============================================================ +Module: battle +File: src/battle/battle1.c +ASM lines: 34 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:34:20] [INFO] [3/10] Decompiling func_800BFB10 (34 lines) +[2026-03-01 22:34:20] [INFO] ⚙️ Analyzing with LLM (34 lines)... +[2026-03-01 22:34:37] [INFO] 📊 Complexity: medium, Summary: ** This function appears to be manipulating memory addresses and performing bitw... + +============================================================ +Attempting to decompile: func_800BFB10 +============================================================ +Module: battle +File: src/battle/battle1.c +ASM lines: 34 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:34:38] [INFO] [4/10] Decompiling func_800C614C (34 lines) +[2026-03-01 22:34:38] [INFO] ⚙️ Analyzing with LLM (34 lines)... +[2026-03-01 22:34:54] [INFO] 📊 Complexity: medium, Summary: ** This function appears to process a TIM file, which is typically used for stor... + +============================================================ +Attempting to decompile: func_800C614C +============================================================ +Module: battle +File: src/battle/battle1.c +ASM lines: 34 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:34:54] [INFO] [5/10] Decompiling func_800D09D0 (34 lines) +[2026-03-01 22:34:54] [INFO] ⚙️ Analyzing with LLM (34 lines)... +[2026-03-01 22:35:11] [INFO] 📊 Complexity: medium, Summary: ** The function appears to perform a series of memory operations based on an inp... + +============================================================ +Attempting to decompile: func_800D09D0 +============================================================ +Module: battle +File: src/battle/battle2.c +ASM lines: 34 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:35:12] [INFO] [6/10] Decompiling func_800D5444 (34 lines) +[2026-03-01 22:35:12] [INFO] ⚙️ Analyzing with LLM (34 lines)... +[2026-03-01 22:35:29] [WARN] ⚠️ LLM analysis failed: 'NoneType' object is not subscriptable + +============================================================ +Attempting to decompile: func_800D5444 +============================================================ +Module: battle +File: src/battle/battle2.c +ASM lines: 34 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:35:30] [INFO] [7/10] Decompiling func_800A66A4 (35 lines) +[2026-03-01 22:35:30] [INFO] ⚙️ Analyzing with LLM (35 lines)... +[2026-03-01 22:35:52] [INFO] 📊 Complexity: medium, Summary: ** This function appears to perform some form of data manipulation or processing... + +============================================================ +Attempting to decompile: func_800A66A4 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 35 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:35:53] [INFO] [8/10] Decompiling func_800ACE14 (35 lines) +[2026-03-01 22:35:53] [INFO] ⚙️ Analyzing with LLM (35 lines)... +[2026-03-01 22:36:03] [INFO] 📊 Complexity: medium, Summary: ** This function appears to be responsible for checking a condition based on the... + +============================================================ +Attempting to decompile: func_800ACE14 +============================================================ +Module: battle +File: src/battle/battle.c +ASM lines: 35 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:36:04] [INFO] [9/10] Decompiling func_800C0410 (35 lines) +[2026-03-01 22:36:04] [INFO] ⚙️ Analyzing with LLM (35 lines)... +[2026-03-01 22:36:18] [INFO] 📊 Complexity: medium, Summary: ** This function performs a series of calculations and conditional checks using ... + +============================================================ +Attempting to decompile: func_800C0410 +============================================================ +Module: battle +File: src/battle/battle1.c +ASM lines: 35 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:36:19] [INFO] [10/10] Decompiling func_800C0900 (35 lines) +[2026-03-01 22:36:19] [INFO] ⚙️ Analyzing with LLM (35 lines)... +[2026-03-01 22:36:33] [INFO] 📊 Complexity: medium, Summary: ** The function `func_800C0900` appears to perform a series of operations involv... + +============================================================ +Attempting to decompile: func_800C0900 +============================================================ +Module: battle +File: src/battle/battle1.c +ASM lines: 35 +Current status: todo +✅ Decompilation successful! +[2026-03-01 22:36:33] [INFO] Running verification... + +============================================================ +VERIFYING DECOMPILED FUNCTIONS +============================================================ + +Found 20 decompiled function(s) to verify + +[1/20] Checking func_800A55F4... + ✅ Matches +[2/20] Checking func_800A66A4... + ✅ Matches +[3/20] Checking func_800A6D88... + ✅ Matches +[4/20] Checking func_800A7254... + ✅ Matches +[5/20] Checking func_800ACE14... + ✅ Matches +[6/20] Checking func_800AD088... + ✅ Matches +[7/20] Checking func_800AD480... + ✅ Matches +[8/20] Checking func_800AE2A0... + ✅ Matches +[9/20] Checking func_800B13B0... + ✅ Matches +[10/20] Checking func_800B88CC... + ✅ Matches +[11/20] Checking func_800BA24C... + ✅ Matches +[12/20] Checking func_800BFA98... + ✅ Matches +[13/20] Checking func_800BFB10... + ✅ Matches +[14/20] Checking func_800C0410... + ✅ Matches +[15/20] Checking func_800C0900... + ✅ Matches +[16/20] Checking func_800C614C... + ✅ Matches +[17/20] Checking func_800D09D0... + ✅ Matches +[18/20] Checking func_800D5230... + ✅ Matches +[19/20] Checking func_800D5444... + ✅ Matches +[20/20] Checking func_800E58CC... + ✅ Matches + +============================================================ +VERIFICATION COMPLETE +============================================================ +✅ Verified: 20 +❌ Not matching: 0 +============================================================ + +[2026-03-01 22:36:34] [INFO] Verified 20 functions +[2026-03-01 22:36:34] [INFO] Running full build check... + +============================================================ +RUNNING BUILD +============================================================ + +❌ Build failed! + +Errors: 72 + +Compile Errors: + src/main/psxsdk.c +src/main/psxsdk.c: + Line 555: parse error before `:' + +Undefined References (71): + - SetMem + - StartPAD + - InitPAD + - GetGraphType + - GetGraphType + - OpenTIM + - OpenEvent + - EnableEvent + - UnDeliverEvent + - DisableEvent + ... and 61 more + +============================================================ + +[2026-03-01 22:36:35] [WARN] Build failed, check output for errors + +============================================================ +AGENT PROGRESS - 22:36:35 +============================================================ +Processed: 100 functions +Verified: 159/2362 (6.7%) +Failed: 1 +Todo: 2202 +Batches: 10 +Builds: 1 +LLM analyzed: 71 +Rate: 0.10 functions/second +Elapsed: 0:16:10 +============================================================ + +[2026-03-01 22:36:35] [INFO] Target count reached (100) +[2026-03-01 22:36:35] [INFO] Target count reached (100) + +============================================================ +AGENT EXECUTION COMPLETE +============================================================ +Total time: 0:16:10 +Functions processed: 100 +Functions verified: 100 +Functions failed: 0 +Batches completed: 10 +Builds run: 1 +LLM analyzed: 71 +Average rate: 0.10 functions/second + +Final Progress: 159/2362 (6.7%) +============================================================ + +Summary saved to agent_summary.json \ No newline at end of file diff --git a/automation/intellisense_errors.json b/automation/intellisense_errors.json new file mode 100644 index 0000000..e69de29 diff --git a/automation/intellisense_fixer.py b/automation/intellisense_fixer.py new file mode 100644 index 0000000..5cc623d --- /dev/null +++ b/automation/intellisense_fixer.py @@ -0,0 +1,448 @@ +#!/usr/bin/env python3 +""" +Deterministic IntelliSense / clangd error fixer for m2c-generated C code. + +These passes run after m2c writes a decompiled function and BEFORE validation, +so they reduce spurious validation failures caused by known m2c artifacts rather +than genuine type-inference problems. + +Passes (all text-based, no LLM required): + 1. fix_unk_negative_fields — ->unk-C → ->unkC (m2c hex-suffix bug) + 2. hoist_early_typedefs — move typedefs that appear after their first use + 3. remove_duplicate_typedefs — deduplicate identical typedef blocks + 4. hoist_extern_declarations — collect all top-level extern / forward-decl lines + and place them in a single block before the first + INCLUDE_ASM / function definition +""" + +import re +from typing import List, Tuple, Optional + + +# --------------------------------------------------------------------------- +# Pass 1: fix ->unk-N / .unk-N → ->unkN / .unkN +# --------------------------------------------------------------------------- + +def fix_unk_negative_fields(content: str) -> Tuple[str, int]: + """ + Fix m2c artifact where struct field names get a spurious '-' before their + hex offset suffix. + + Before: D_800AF3D4.unk-C = 0; + After: D_800AF3D4.unkC = 0; + + Before: temp->unk-4 + After: temp->unk4 + + Returns (fixed_content, num_fixes). + """ + # Match ->unk-HEX or .unk-HEX (hex digits follow the minus) + pattern = re.compile(r'(->|\.)unk-([0-9A-Fa-f]+)\b') + count = [0] + + def _replace(m: re.Match) -> str: + count[0] += 1 + sep = m.group(1) + hex_part = m.group(2) + return f'{sep}unk{hex_part}' + + fixed = pattern.sub(_replace, content) + return fixed, count[0] + + +# --------------------------------------------------------------------------- +# Pass 2 & 3: typedef hoisting and deduplication +# --------------------------------------------------------------------------- + +def _find_typedef_blocks(lines: List[str]) -> List[Tuple[int, int, str, str]]: + """ + Scan lines for typedef blocks, including multi-line struct typedefs. + + Returns list of (start_idx, end_idx, typedef_name, full_text). + Indices are 0-based into `lines`. + """ + blocks: List[Tuple[int, int, str, str]] = [] + i = 0 + while i < len(lines): + line = lines[i] + stripped = line.strip() + if not re.match(r'typedef\b', stripped): + i += 1 + continue + + start = i + + if '{' in line: + # Multi-line struct/union typedef — scan until braces balance + depth = line.count('{') - line.count('}') + j = i + 1 + while j < len(lines) and depth > 0: + depth += lines[j].count('{') - lines[j].count('}') + j += 1 + end = j - 1 + # typedef name is on the closing line: } TypeName; + m = re.search(r'\}\s*(\w+)\s*;', lines[end]) + if m: + name = m.group(1) + text = '\n'.join(lines[start:end + 1]) + blocks.append((start, end, name, text)) + i = end + 1 + else: + # Single-line typedef. Try several name-extraction patterns: + # 1. Standard: typedef Name; + # 2. Function pointer: typedef RetType (*Name)(Params); + # 3. Array: typedef Type Name[N]; + name = None + + # Pattern 1: function pointer — typedef ... (*Name)(...) + m = re.search(r'typedef\s+.+?\(\s*\*\s*(\w+)\s*\)\s*\(', line) + if m: + name = m.group(1) + + # Pattern 2: standard — last \w+ before the final ; + if name is None: + m = re.search(r'typedef\s+.+?\s+(\w+)\s*(?:\[\w*\])?\s*;', line) + if m: + name = m.group(1) + + if name: + blocks.append((i, i, name, line)) + i += 1 + + return blocks + + +def _first_use_line(lines: List[str], typedef_name: str, + exclude_start: int, exclude_end: int) -> Optional[int]: + """ + Return the index of the first line that uses `typedef_name` as a type name, + excluding the definition lines [exclude_start, exclude_end]. + + We look for the name at a word boundary that looks like a type position: + - extern TypeName ... + - TypeName* var + - TypeName var + - function parameter of that type + We also explicitly ignore lines that are only inside the typedef definition + itself and comment lines. + """ + # Build a pattern that matches the name used as a type (not as part of a larger word) + pat = re.compile(rf'\b{re.escape(typedef_name)}\b') + for idx, line in enumerate(lines): + if exclude_start <= idx <= exclude_end: + continue + stripped = line.strip() + if stripped.startswith('//') or stripped.startswith('*'): + continue + if pat.search(line): + return idx + return None + + +def hoist_early_typedefs(content: str) -> Tuple[str, int]: + """ + For any typedef whose first use appears *before* its definition, move the + typedef to just before that first use. + + Also removes exact duplicate typedef blocks (same name, keeps first). + + Returns (fixed_content, num_typedefs_moved). + """ + lines = content.split('\n') + blocks = _find_typedef_blocks(lines) + + if not blocks: + return content, 0 + + # --- Deduplicate: keep first occurrence of each name --- + seen_names: set = set() + unique_blocks: List[Tuple[int, int, str, str]] = [] + dup_ranges: set = set() # line ranges to delete (duplicates) + + for start, end, name, text in blocks: + if name in seen_names: + for ln in range(start, end + 1): + dup_ranges.add(ln) + else: + seen_names.add(name) + unique_blocks.append((start, end, name, text)) + + # Remove duplicate lines first (in a copy we'll work with) + if dup_ranges: + lines = [line for i, line in enumerate(lines) if i not in dup_ranges] + # Re-scan after removal + blocks = _find_typedef_blocks(lines) + unique_blocks_new = [] + seen2: set = set() + for start, end, name, text in blocks: + if name not in seen2: + seen2.add(name) + unique_blocks_new.append((start, end, name, text)) + unique_blocks = unique_blocks_new + + moved = 0 + # Process typedefs in reverse order so that removing/inserting lines doesn't + # invalidate earlier indices. + for start, end, name, text in reversed(unique_blocks): + first_use = _first_use_line(lines, name, start, end) + if first_use is None or first_use >= start: + # No earlier use — leave in place + continue + + # Extract the typedef block + typedef_lines = lines[start:end + 1] + + # Remove it from current position (may leave a blank line) + del lines[start:end + 1] + + # Recalculate insertion point (indices shifted after delete) + insert_at = first_use # first_use < start, so not affected by the delete + + # Insert before first use, preceded by a blank line if not already present + insertion = typedef_lines + [''] + lines[insert_at:insert_at] = insertion + moved += 1 + + return '\n'.join(lines), moved + len(dup_ranges) + + +# --------------------------------------------------------------------------- +# Pass 4: hoist extern declarations to the file header +# --------------------------------------------------------------------------- + +# Patterns for extern declarations (both forms produced by m2c / mako.sh dec) +_EXTERN_KW_PAT = re.compile(r'^\s*extern\b') # extern TYPE NAME; +_EXTERN_FWD_PAT = re.compile(r'//\s*extern\s*$') # TYPE FUNC(...); // extern + + +def _is_extern_decl(line: str) -> bool: + """Return True if the line is a top-level extern declaration (either style).""" + stripped = line.strip() + if _EXTERN_KW_PAT.match(stripped): + return True + # Forward-decl comment style: must also look like a prototype (has parens) + if _EXTERN_FWD_PAT.search(stripped) and '(' in stripped and ')' in stripped: + return True + return False + + +def _extern_type_name(line: str) -> Optional[str]: + """ + Extract the primary type name used in an extern declaration, so we can + check whether that type is defined later in the file. + + Returns the first identifier after 'extern' (or at the start of a + forward-decl line), stripping qualifiers like 'const', '/*?*/', etc. + Returns None if extraction fails. + """ + stripped = line.strip() + # Remove leading /*?*/ comment if present + stripped = re.sub(r'^/\*\??\*/\s*', '', stripped) + # Remove 'extern' keyword + stripped = re.sub(r'^extern\s+', '', stripped) + # Remove const / volatile / static + stripped = re.sub(r'^(const|volatile|static)\s+', '', stripped) + # First word is the type name (may have trailing * or [) + m = re.match(r'^([A-Za-z_]\w*)', stripped) + if m: + return m.group(1) + return None + + +def _typedef_name_to_last_line(lines: List[str]) -> dict: + """ + Return a dict mapping typedef name -> last line index of its definition. + Only covers typedefs that are locally defined in the file (not in headers). + """ + result: dict = {} + blocks = _find_typedef_blocks(lines) + for start, end, name, _ in blocks: + result[name] = end + return result + + +def _is_function_boundary(line: str) -> bool: + """Return True if the line starts a function definition or INCLUDE_ASM stub.""" + stripped = line.strip() + if stripped.startswith('INCLUDE_ASM('): + return True + # Function definition: contains ( and ends with { (no = before the brace, + # so we don't accidentally match const array initialisers) + if '{' not in stripped or ';' in stripped: + return False + if stripped.startswith(('//', '/*', 'typedef', 'extern', '#', 'const ')): + return False + brace_pos = stripped.rfind('{') + before_brace = stripped[:brace_pos] + if '(' not in before_brace or '=' in before_brace: + return False + return True + + +def hoist_extern_declarations(content: str) -> Tuple[str, int]: + """ + Collect every top-level extern declaration that appears *after* the first + INCLUDE_ASM / function definition and move them to a single block just + before that first function boundary. + + Handles both declaration styles: + - ``extern TYPE NAME;`` (standard extern variable/function) + - ``/*?*/ TYPE FUNCNAME(PARAMS); // extern`` (m2c forward declaration) + - ``TYPE FUNCNAME(PARAMS); // extern`` (forward declaration) + + Deduplicates against externs already present in the header section so + the pass is idempotent. + + Returns (fixed_content, num_externs_moved). + """ + lines = content.split('\n') + + # ---------------------------------------------------------------- + # 1. Find the first function boundary at brace-depth 0 + # ---------------------------------------------------------------- + depth = 0 + func_boundary: Optional[int] = None + for i, line in enumerate(lines): + stripped = line.strip() + if depth == 0 and _is_function_boundary(line): + func_boundary = i + break + depth += stripped.count('{') - stripped.count('}') + if depth < 0: + depth = 0 + + if func_boundary is None: + return content, 0 # No functions/INCLUDE_ASM found — nothing to do + + # ---------------------------------------------------------------- + # 2. Build set of externs already in the header section (before boundary) + # ---------------------------------------------------------------- + existing: set = set() + depth = 0 + for i in range(func_boundary): + stripped = lines[i].strip() + if depth == 0 and _is_extern_decl(lines[i]): + existing.add(stripped) + depth += stripped.count('{') - stripped.count('}') + if depth < 0: + depth = 0 + + # ---------------------------------------------------------------- + # 3. Collect top-level externs that appear AT or AFTER the boundary + # ---------------------------------------------------------------- + lines_to_remove: set = set() + new_externs: List[str] = [] + seen: set = set(existing) + + # Build a map of typedef name -> last line of its definition so we can + # skip hoisting any extern whose type is defined *after* the function + # boundary (i.e., in the body section of the file, not the header). + # Using `> func_boundary` instead of `> i` because hoisting moves the + # extern to *before* func_boundary — so any typedef that lives anywhere + # after func_boundary would end up after the extern post-hoist. + typedef_last_line = _typedef_name_to_last_line(lines) + + depth = 0 # depth AT func_boundary (reset; recompute from scratch) + for i in range(func_boundary): + stripped = lines[i].strip() + depth += stripped.count('{') - stripped.count('}') + if depth < 0: + depth = 0 + + for i in range(func_boundary, len(lines)): + stripped = lines[i].strip() + if depth == 0 and _is_extern_decl(lines[i]): + # Don't hoist if the extern's type is defined in the body section + # (i.e., after the function boundary) — hoisting would place the + # extern before its typedef. + type_name = _extern_type_name(lines[i]) + if type_name and type_name in typedef_last_line and typedef_last_line[type_name] > func_boundary: + pass # skip — type defined after this extern, leave in place + else: + if stripped not in seen: + new_externs.append(lines[i].rstrip()) + seen.add(stripped) + lines_to_remove.add(i) + depth += stripped.count('{') - stripped.count('}') + if depth < 0: + depth = 0 + + if not new_externs: + return content, 0 + + # ---------------------------------------------------------------- + # 4. Rebuild lines without removed externs; collapse extra blank lines + # ---------------------------------------------------------------- + result: List[str] = [] + prev_blank = False + for i, line in enumerate(lines): + if i in lines_to_remove: + continue + blank = line.strip() == '' + if blank and prev_blank: + continue # collapse consecutive blanks + prev_blank = blank + result.append(line) + + # ---------------------------------------------------------------- + # 5. Find new function boundary in the rebuilt list and insert block + # ---------------------------------------------------------------- + new_boundary: Optional[int] = None + depth = 0 + for i, line in enumerate(result): + if depth == 0 and _is_function_boundary(line): + new_boundary = i + break + stripped = line.strip() + depth += stripped.count('{') - stripped.count('}') + if depth < 0: + depth = 0 + + if new_boundary is None: + # Shouldn't happen; fall back to appending + result += [''] + new_externs + return '\n'.join(result), len(new_externs) + + # Build insertion block: blank separator + externs + blank separator + insert: List[str] = [] + if new_boundary > 0 and result[new_boundary - 1].strip() != '': + insert.append('') + insert.extend(new_externs) + insert.append('') + + result[new_boundary:new_boundary] = insert + return '\n'.join(result), len(new_externs) + + +# --------------------------------------------------------------------------- +# Combined entry point +# --------------------------------------------------------------------------- + +def apply_all_fixes(content: str, verbose: bool = False) -> Tuple[str, List[str]]: + """ + Apply all deterministic IntelliSense fixes to `content`. + + Returns (fixed_content, list_of_change_descriptions). + + Order matters: + 1. fix_unk_negative_fields — clean up field-name artifacts first + 2. hoist_extern_declarations — move all externs to the header section so + their type references become the "first use" of those types + 3. hoist_early_typedefs — now move typedefs to before those first uses + (which are the extern declarations in the header) + """ + changes: List[str] = [] + + content, n = fix_unk_negative_fields(content) + if n: + changes.append(f"fixed {n} unk-N field name(s)") + + content, n = hoist_extern_declarations(content) + if n: + changes.append(f"hoisted {n} extern declaration(s) to file header") + + content, n = hoist_early_typedefs(content) + if n: + changes.append(f"hoisted/deduped {n} typedef(s)") + + return content, changes diff --git a/automation/llm_fixes_audit.log b/automation/llm_fixes_audit.log new file mode 100644 index 0000000..5c69adf --- /dev/null +++ b/automation/llm_fixes_audit.log @@ -0,0 +1,137 @@ +2026-03-28T18:38:18.346553 func_800A9910 /home/calvin/GitHub/ff7-decomp-armstrca/src/world/world.c medium PSY-Q compilation failed: `D_8010AD40' undeclared (first use this function); (Each undeclared identifier is reported only once; for each function it appears in.) The error indicates that the decompiler is unable to recognize the symbol `D_8010AD40`. This could be due to the variable not being declared in the current scope or being part of a different compilation unit. Since m2c cannot handle this, we need to manually add the declaration for `D_8010AD40` assuming it is a pointer type. +2026-03-28T18:39:54.627875 func_800C4C9C /home/calvin/GitHub/ff7-decomp-armstrca/src/field/field.c high PSY-Q compilation failed: warning: dereferencing `void *' pointer; request for member `unk2' in something not a structure or union; warning: dereferencing `void *' pointer The decompilation error is due to dereferencing a `void *` pointer and attempting to access structure members without proper casting. The original assembly code accesses specific bytes in memory, which need to be correctly mapped back into the structure. +2026-03-28T18:41:27.484682 func_800B10B4 /home/calvin/GitHub/ff7-decomp-armstrca/src/battle/battle.c high PSY-Q compilation failed: warning: assignment from incompatible pointer type; warning: large integer implicitly truncated to unsigned type; warning: assignment from incompatible pointer type The decompilation error is due to incompatible pointer types and implicit type conversions. The MIPS assembly code accesses memory at specific offsets and performs bitwise operations, but the m2c output is not correctly handling these pointers and types. +2026-03-28T18:41:58.797545 func_800D55A4 /home/calvin/GitHub/ff7-decomp-armstrca/src/battle/battle2.c medium PSY-Q compilation failed: warning: passing arg 3 of `func_800C7B60' makes pointer from integer without a cast; warning: passing arg 3 of `func_800C7BE8' makes pointer from integer without a cast; warning: assignment makes pointer from integer without a cast The decompilation error indicates that the integer values are being cast to pointers without proper casting. This typically happens when dereferencing a pointer that is not properly aligned or initialized. +2026-03-28T18:42:31.617697 func_800DA310 /home/calvin/GitHub/ff7-decomp-armstrca/src/field/field.c high PSY-Q compilation failed: warning: dereferencing `void *' pointer; request for member `unk2' in something not a structure or union; parse error before `result' The error is caused by an attempt to dereference a `void*` pointer and access a member `unk2`, which is not valid in C. Since the type of `D_800E4210` is unknown, we need to infer it from the assembly code. The assembly code suggests that `D_800E4210` is a pointer to some structure or union. We will assume it points to a struct with at least three members (since we are adding 1 and masking with 3). For simplicity, we will use a dummy struct type. +2026-03-28T18:52:23.725391 func_800B8E48 /home/calvin/GitHub/ff7-decomp-armstrca/src/battle/battle1.c high PSY-Q compilation failed: warning: passing arg 2 of `func_800D29D4' from incompatible pointer type The error in the decompiled code is due to the fact that m2c was unable to infer the correct type for the second argument of `func_800D29D4`. The assembly shows that this parameter is accessed using a base pointer and an offset, indicating it should be a struct pointer. + +### FIXED_CODE: +```c +struct SomeStruct { + u8 unk10; + u8 unk11; + u8 unk12; + u8 unk13; +}; + +void func_800B8E48(s32 arg0) { + s32 temp_a0; + s32 temp_v0; + struct SomeStruct* ptr1; + struct SomeStruct* ptr2; + + temp_a0 = arg0 & 0xFF; + temp_v0 = temp_a0 * 0xB9C; + ptr1 = (struct SomeStruct*)((u8*)D_801518E4 + temp_v0); + ptr1->unk10 = 1; + ptr1->unk11 &= 0x7F; + + temp_v0 = temp_a0 * 0x74; + ptr2 = (struct SomeStruct*)((u8*)D_80151200 + temp_v0); + ptr2->unk12 &= 0xFFDF; +} +``` + +### Explanation: +- The unknown struct type is assumed to be `SomeStruct` based on the field offsets. +- The second parameter of `func_800D29D4` is correctly typed as a pointer to this struct. +- The assembly instructions are translated into access to the struct fields using the correct PSX SDK types (`u8`). +2026-03-28T18:53:27.399060 func_801D01C4 /home/calvin/GitHub/ff7-decomp-armstrca/src/menu/bginmenu.c high PSY-Q compilation failed: warning: assignment from incompatible pointer type; warning: assignment from incompatible pointer type The error in the decompiled code is due to incorrect pointer arithmetic and type casting. Specifically, the `var_v1` variable is being used incorrectly in the loop. The original assembly code uses `lw` instructions to load 32-bit values from memory, but the decompiled code attempts to access the elements of an array using pointer arithmetic without proper type casting. + +### FIXED_CODE: +```c +func_801D01C4(s32 arg0) +{ + s32 var_a1; + s32 var_a2; + u8* var_v1; + + var_a1 = 0; + var_a2 = 0; + var_v1 = ((u8*)Savemap.party[0].unk40) + (arg0 * 0x84); + do { + if (*(s32*)var_v1 != -1) { + var_a2 += 1; + } + var_a1 += 1; + if (var_a1 >= 8) { + break; + } + var_v1 += 4; + } while (true); + + var_a1 = 0; + var_a2 = 0; + var_v1 = ((u8*)Savemap.party[0].unk64) + (arg0 * 0x84); + do { + if (*(s32*)var_v1 != -1) { + var_a2 += 1; + } + var_a1 += 1; + if (var_a1 >= 8) { + break; + } + var_v1 += 4; + } while (true); +} +``` + +### Explanation of Fixes: +1. **Pointer Arithmetic**: The original assembly code uses `lw` instructions to load 32-bit values from memory, so we need to use pointer arithmetic correctly by casting the pointer to a type that points to a 32-bit value (`s32*`). +2. **Base Pointer Calculation**: The base pointers for the two loops are correctly calculated using the `Savemap.party[0].unk40` and `Savemap.party[0].unk64` fields, which are likely arrays or structs. +3. **Loop Conditions**: The loop conditions are fixed to ensure that the loops run exactly 8 times (as indicated by the `slti $v0, $a1, 0x8` instructions in the assembly). +2026-03-28T19:02:39.261970 func_800D491C /home/calvin/GitHub/ff7-decomp-armstrca/src/battle/battle2.c high Contains '(unaligned type)' cast (m2c error) ** The code had a syntax error due to the incorrect use of pointer arithmetic and type casting. The assembly code was trying to access unaligned memory, which is not allowed in many systems, especially for 32-bit integers on a 64-bit architecture. + +**FIXED_CODE:** +```c +void func(void* ptr1, void* ptr2) { + u32* src = (u32*)ptr1; + u16* dst = (u16*)ptr2; + + memcpy(dst, src, sizeof(u32)); +} +``` + +This fix ensures that the code correctly casts the pointers to the appropriate types and uses `memcpy` to copy the unaligned data safely. +2026-03-28T19:03:47.051806 func_800C1FD8 /home/calvin/GitHub/ff7-decomp-armstrca/src/world/world2.c high Contains M2C_ERROR() macro (m2c could not determine register/instruction) ** The assembly code provided appears to be a decompiled function that handles some kind of data structure manipulation. The code includes several issues such as unaligned memory access, unknown type markers, missing struct members, and syntax errors in parsing the C context. These issues were addressed by inferring types from register usage, correcting offsets, using proper PSX SDK types, and rewriting certain parts of the code to be more readable. + +**FIXED_CODE:** +```c +void func_800C1FD8(u32 *ptr) { + u32 var_a1; + u32 var_v0; + u32 var_v1; + + memcpy(&var_a1, ptr, sizeof(u32)); + + if (*(u16*)((u8*)ptr + 0x10)) { + var_v0 = *(u32*)((u8*)ptr + 0x14); + while (var_a1 < var_v0) { + *(u32*)((u8*)ptr + 0x1C) = var_v0; + *(u32*)((u8*)ptr + 0x20) = var_v0; + *(u32*)((u8*)ptr + 0x24) = var_v0; + *(u32*)((u8*)ptr + 0x28) = var_v0; + *(u32*)((u8*)ptr + 0x2C) = var_v0; + *(u32*)((u8*)ptr + 0x30) = var_v0; + *(u32*)((u8*)ptr + 0x34) = var_v0; + *(u32*)((u8*)ptr + 0x38) = var_v0; + var_a1 += 1; + } + } else { + *(u32*)((u8*)ptr + 0x10) = 1; + } + + return; +} +``` + +This corrected version of the function should now be more readable and correctly handles the operations based on the assembly code. +2026-04-07T23:27:55.497887 func_800D8B60 /home/calvin/GitHub/ff7-decomp-armstrca/src/battle/battle3.c high Contains pointer to unknown type '?*' The original code uses unaligned memory access which can lead to undefined behavior on many systems. This is fixed by using memcpy to copy the aligned data into a properly aligned buffer. +// FIXED_CODE: +void func_800D8B60(void* arg) { + s32 dst; + memcpy(&dst, arg, sizeof(s32)); + // Rest of the function logic remains unchanged +} +``` +2026-04-11T15:59:22.273846 func_800B153C /home/calvin/GitHub/ff7-decomp-armstrca/src/battle/battle.c high Contains saved_reg_* artifact (m2c callee-save register not resolved) The original code had several issues related to pointer handling and type inference. Specifically, the `void*` parameter was not correctly identified as a pointer to a specific structure, leading to incorrect field access. Additionally, there were syntax errors and missing struct members that needed to be addressed. diff --git a/automation/llm_helper.py b/automation/llm_helper.py new file mode 100755 index 0000000..7c734e2 --- /dev/null +++ b/automation/llm_helper.py @@ -0,0 +1,827 @@ +#!/usr/bin/env python3 +""" +LLM Integration for Decompilation Assistance + +Interfaces with Ollama/Qwen to provide AI-assisted decompilation: +1. Analyze MIPS assembly before decompilation +2. Suggest C code improvements +3. Help refine non-matching functions +4. Provide context and explanations + +Usage: + python llm_helper.py --analyze-asm function_name + python llm_helper.py --suggest-c function_name + python llm_helper.py --explain asm/us/battle/file.s +""" + +import subprocess +import argparse +import json +import re +from pathlib import Path +from typing import Optional, Dict, List, Tuple +from database import DecompDatabase + +# Project root +PROJECT_ROOT = Path(__file__).parent.parent +ASM_DIR = PROJECT_ROOT / "asm" / "us" + +# Ollama configuration +OLLAMA_MODEL = "qwen2.5-coder:7b" +OLLAMA_ENDPOINT = "http://localhost:11434" + +# Shared FF7 project context injected into all LLM prompts +FF7_CONTEXT = """ +## Project: Final Fantasy VII (PS1 USA) Decompilation +Goal: byte-accurate recompilation — the output C must compile to identical machine code as the original binary. + +### PSX SDK Types (always use these — never int/short/char/long) +```c +typedef signed char s8; typedef unsigned char u8; +typedef signed short s16; typedef unsigned short u16; +typedef signed int s32; typedef unsigned int u32; +typedef u8 unk_data; typedef unsigned int* unk_ptr; +``` + +### Naming Conventions +- Unknown functions: `func_800XXXXX` (address-based, do not rename) +- Decompiled functions: verb-first (e.g., `InitBattle`, `LoadScene`, `DrawSprite`), prefer PSX SDK names +- Unknown globals: `D_800XXXXX` +- Known game state globals: `g_` prefix (e.g., `g_BattleState`) +- Unknown struct fields: `unkXX` (offset in hex, e.g., `unk10` for offset 0x10) + +### String Encoding +FF7 uses custom encoding — strings must use the `_S()` macro: `const char* msg = _S("Save game?");` + +### Decompilation Checklist — output MUST satisfy ALL of these +- No `/*?*/` unknown types — infer from register usage and context +- No `void*` parameters that should be typed struct pointers +- No pointer arithmetic for struct field access — use `->` or `.` operators +- Array elements accessed with `arr[i]`, not `*(arr + i * sizeof(...))` +- `goto loop_XX` patterns converted to `while` / `do-while` loops +- `goto block_XX` inside switch statements inlined (reverse compiler optimization) +- Struct sizes and field alignments match assembly access patterns (4-byte aligned) + +### Compiler Notes (PSYQ 3.3 / cc1-psx) +- GP (global pointer) = `0x80062D44` in main overlay — variables near this use gp-relative addressing +- Two compilers: `cc1-psx-26` (PSYQ 2.6) and `cc1-psx-272` (PSYQ 2.72); check `config/us.yaml` +- Calling convention: `$a0`–`$a3` args, `$v0`–`$v1` return values +- Type affects load instruction: `s8` → `lb`, `u8` → `lbu`, `s16` → `lh`, `u16` → `lhu` + +### Common Matching Pitfalls +- Merged calls: compiler merges common code after if/else branches; duplicate the call inside each branch to match +- Struct vs variables: use proper structs for stack-allocated data — compiler may optimize away isolated local vars +- Sign extension: `sll`/`sra` pairs appear in both branches of original — do not merge them +""" + + +class LLMHelper: + """Helper for LLM-assisted decompilation.""" + + def __init__(self, model: str = OLLAMA_MODEL, verbose: bool = False): + self.model = model + self.verbose = verbose + self.available = self._check_ollama() + + def _check_ollama(self) -> bool: + """Check if Ollama is available.""" + try: + result = subprocess.run( + ["ollama", "list"], + capture_output=True, + text=True, + timeout=5 + ) + return result.returncode == 0 and self.model.split(':')[0] in result.stdout + except Exception as e: + if self.verbose: + print(f"Warning: Ollama not available: {e}") + return False + + def _call_ollama(self, prompt: str, temperature: float = 0.2, max_tokens: int = 2048, timeout: int = 60) -> Optional[str]: + """Call Ollama with a prompt.""" + if not self.available: + return None + + try: + # Use ollama run command + result = subprocess.run( + ["ollama", "run", self.model, prompt], + capture_output=True, + text=True, + timeout=timeout + ) + + if result.returncode == 0: + return result.stdout.strip() + else: + if self.verbose: + print(f"Ollama error: {result.stderr}") + return None + + except subprocess.TimeoutExpired: + if self.verbose: + print(f"Ollama request timed out after {timeout}s") + return None + except Exception as e: + if self.verbose: + print(f"Error calling Ollama: {e}") + return None + + def get_assembly_code(self, function_name: str) -> Optional[str]: + """Get assembly code for a function from the ASM directory.""" + db = DecompDatabase() + func = db.get_function(function_name) + + if not func or not func['asm_file_path']: + return None + + asm_path = PROJECT_ROOT / func['asm_file_path'] + + if not asm_path.exists(): + return None + + try: + content = asm_path.read_text() + + # Extract just this function's assembly + # Look for function label and get code until next label or end + pattern = rf'^glabel\s+{re.escape(function_name)}\s*$(.+?)(?=^glabel|\Z)' + match = re.search(pattern, content, re.MULTILINE | re.DOTALL) + + if match: + return match.group(1).strip() + else: + # Fallback: just return a reasonable chunk + lines = content.split('\n') + for i, line in enumerate(lines): + if function_name in line: + # Get next 50 lines as approximation + return '\n'.join(lines[i:i+50]) + return None + + except Exception as e: + if self.verbose: + print(f"Error reading assembly: {e}") + return None + + def analyze_assembly(self, function_name: str) -> Optional[Dict]: + """ + Analyze MIPS assembly and provide insights. + + Returns dict with: + - summary: Brief description of what function does + - complexity: Estimated difficulty (easy/medium/hard) + - patterns: Detected patterns (loops, conditionals, etc.) + - suggestions: C code suggestions + """ + if not self.available: + return None + + asm_code = self.get_assembly_code(function_name) + if not asm_code: + return None + + prompt = f"""{FF7_CONTEXT} +Analyze this MIPS R3000 assembly function. + +Function: {function_name} + +Assembly: +{asm_code} + +Provide a concise analysis: +1. What does this function do? (1-2 sentences) +2. Complexity: easy/medium/hard +3. Key patterns: (loops, conditionals, function calls, memory access, struct usage) +4. Suggested C equivalent — use PSX SDK types (s32/u32/s16/u16/s8/u8), apply decompilation checklist rules (goto→while, array indices, struct `->` access) + +Format your response as: +SUMMARY: +COMPLEXITY: +PATTERNS: +C_SUGGESTION: + +""" + + if self.verbose: + print(f"Analyzing {function_name} with LLM...") + + response = self._call_ollama(prompt, temperature=0.2) + + if not response: + return None + + # Parse response + result = { + 'function': function_name, + 'raw_response': response, + 'summary': None, + 'complexity': 'medium', + 'patterns': [], + 'c_suggestion': None + } + + # Extract structured data + if 'SUMMARY:' in response: + summary_match = re.search(r'SUMMARY:\s*(.+?)(?=\n[A-Z]+:|$)', response, re.DOTALL) + if summary_match: + result['summary'] = summary_match.group(1).strip() + + if 'COMPLEXITY:' in response: + complexity_match = re.search(r'COMPLEXITY:\s*(\w+)', response, re.IGNORECASE) + if complexity_match: + result['complexity'] = complexity_match.group(1).lower() + + if 'PATTERNS:' in response: + patterns_match = re.search(r'PATTERNS:\s*(.+?)(?=\n[A-Z]+:|$)', response, re.DOTALL) + if patterns_match: + result['patterns'] = [p.strip() for p in patterns_match.group(1).strip().split(',')] + + if 'C_SUGGESTION:' in response: + c_match = re.search(r'C_SUGGESTION:\s*(.+?)$', response, re.DOTALL) + if c_match: + result['c_suggestion'] = c_match.group(1).strip() + + return result + + def suggest_c_code(self, function_name: str, context: Optional[str] = None) -> Optional[str]: + """ + Suggest C code for a function based on its assembly. + + Args: + function_name: Name of function + context: Optional additional context (nearby functions, structs, etc.) + """ + if not self.available: + return None + + asm_code = self.get_assembly_code(function_name) + if not asm_code: + return None + + prompt = f"""{FF7_CONTEXT} +Decompile this MIPS R3000 function to C code that will compile to identical assembly. + +Function: {function_name} + +Assembly: +{asm_code} +""" + + if context: + prompt += f"\nAdditional Context:\n{context}\n" + + prompt += """ +Generate C code following these rules: +- Use PSX SDK types exclusively: s8/u8/s16/u16/s32/u32 +- Apply decompilation checklist: no /*?*/, no void* for struct args, use ->/. for struct fields, array[i] not pointer arithmetic, goto loop_XX → while loops, goto block_XX in switch → inline the branch +- $a0–$a3 = arguments, $v0–$v1 = return values +- Type determines load instruction: s8→lb, u8→lbu, s16→lh, u16→lhu — pick types to match +- Duplicate common calls inside each branch of if/else to avoid compiler merging +- Use proper struct types for stack vars — not isolated s16 locals + +Provide ONLY the C function code, no explanation: +""" + + if self.verbose: + print(f"Generating C suggestion for {function_name}...") + + response = self._call_ollama(prompt, temperature=0.3, max_tokens=1024) + + if response: + # Clean up response - extract just code if wrapped in markdown + code_match = re.search(r'```c?\n(.*?)\n```', response, re.DOTALL) + if code_match: + return code_match.group(1).strip() + return response.strip() + + return None + + def infer_types_from_assembly(self, function_name: str, extern_symbols: List[str]) -> Optional[Dict]: + """ + Infer struct types for extern symbols before decompilation. + + Analyzes assembly to determine: + - Field offsets accessed for each symbol + - Field sizes (byte/half/word) + - Likely struct definitions + + Args: + function_name: Function to analyze + extern_symbols: List of extern symbols (D_800XXXXX, etc.) used + + Returns: + Dict mapping symbol_name -> { + 'typedef': suggested typedef string, + 'fields': {offset: (name, type)}, + 'confidence': 0.0-1.0 + } + """ + if not self.available or not extern_symbols: + return None + + asm_code = self.get_assembly_code(function_name) + if not asm_code: + return None + + symbols_str = ', '.join(extern_symbols) + + prompt = f"""{FF7_CONTEXT} +Analyze this MIPS R3000 assembly to infer struct types for extern symbols. + +Function: {function_name} +Extern Symbols to Analyze: {symbols_str} + +Assembly: +{asm_code} + +For each symbol, identify: +1. All memory offset accesses (from lw/lh/lb/sw/sh/sb instructions) +2. Access size determines field type: + - lb/sb (signed byte) → s8 + - lbu (unsigned byte) → u8 + - lh/sh (signed half) → s16 + - lhu (unsigned half) → u16 + - lw/sw (word) → s32/u32/pointer + +3. Generate typedef with fields at detected offsets + +Example: If you see: + lui $v0, %hi(D_800F83D0) + lhu $v1, %lo(D_800F83D0)($v0) # offset 0x0, unsigned half + lhu $a0, 0x2($v0) # offset 0x2, unsigned half + +Generate: + typedef struct {{ + u16 unk0; // offset 0x0 + u16 unk2; // offset 0x2 + }} Unk800F83D0; + +Format response as JSON: +{{ + "symbol_name": {{ + "typedef": "typedef struct {{ ... }} TypeName;", + "fields": {{ + "0x0": ["unk0", "u16"], + "0x2": ["unk2", "u16"] + }}, + "confidence": 0.8, + "notes": "brief reason for confidence level" + }} +}} + +Provide ONLY valid JSON, no markdown or explanation. +""" + + if self.verbose: + print(f"Inferring types for {function_name} ({len(extern_symbols)} symbols)...") + + response = self._call_ollama(prompt, temperature=0.1, max_tokens=2048, timeout=90) + + if not response: + return None + + try: + # Try to extract JSON from response (may have markdown wrapping) + json_match = re.search(r'```json\s*(\{.+?\})\s*```', response, re.DOTALL) + if json_match: + response = json_match.group(1) + elif '```' in response: + # Try without json tag + json_match = re.search(r'```\s*(\{.+?\})\s*```', response, re.DOTALL) + if json_match: + response = json_match.group(1) + + # Parse JSON + inferred = json.loads(response) + + if self.verbose: + for symbol, info in inferred.items(): + print(f" {symbol}: confidence={info.get('confidence', 0.0):.2f}, fields={len(info.get('fields', {}))}") + + return inferred + + except json.JSONDecodeError as e: + if self.verbose: + print(f"Failed to parse LLM response as JSON: {e}") + print(f"Response was: {response[:200]}...") + return None + + def generate_type_header(self, inferred_types: Dict, output_path: Optional[Path] = None) -> str: + """ + Generate a C header file from inferred types. + + Args: + inferred_types: Dict from infer_types_from_assembly + output_path: Optional path to write header file + + Returns: + Header file content as string + """ + header = """/* Auto-generated type definitions */ +#ifndef AUTO_TYPES_H +#define AUTO_TYPES_H + +#include "common.h" + +""" + + for symbol, type_info in inferred_types.items(): + typedef = type_info.get('typedef', '') + confidence = type_info.get('confidence', 0.0) + notes = type_info.get('notes', '') + + header += f"/* {symbol} - confidence: {confidence:.2f} */\n" + if notes: + header += f"/* {notes} */\n" + header += f"{typedef}\n\n" + + # Also add extern declaration + # Extract type name from typedef + type_match = re.search(r'\}\s*(\w+);', typedef) + if type_match: + type_name = type_match.group(1) + header += f"extern {type_name} {symbol};\n\n" + + header += "#endif /* AUTO_TYPES_H */\n" + + if output_path: + output_path.write_text(header) + if self.verbose: + print(f"Wrote type header to {output_path}") + + return header + + def explain_assembly_section(self, asm_code: str) -> Optional[str]: + """Explain what a section of assembly does.""" + if not self.available: + return None + + prompt = f"""Explain this MIPS R3000 assembly code in plain English: + +{asm_code} + +Provide a clear, concise explanation of what this code does. +""" + + return self._call_ollama(prompt, temperature=0.2) + + def suggest_refinement(self, function_name: str, current_c_code: str, error_message: Optional[str] = None) -> Optional[Dict]: + """ + Suggest refinements for C code that doesn't match. + + Args: + function_name: Function name + current_c_code: Current C implementation + error_message: Optional error/mismatch message + + Returns dict with: + - suggestions: List of suggested changes + - revised_code: Optional revised C code + """ + if not self.available: + return None + + asm_code = self.get_assembly_code(function_name) + if not asm_code: + return None + + prompt = f"""{FF7_CONTEXT} +Fix this decompiled function to match the original binary exactly. + +Function: {function_name} + +Original Assembly: +{asm_code} + +Current C Code (does not match): +{current_c_code} +""" + + if error_message: + prompt += f"\nError/Mismatch info:\n{error_message}\n" + + prompt += """ +Matching workflow — work through these in order: +1. **Size**: Count instructions in assembly vs compiled output. If size is wrong, fix structure first. +2. **Types**: `s8`→`lb`, `u8`→`lbu`, `s16`→`lh`, `u16`→`lhu` — change types to match load/store instructions. +3. **Merged calls**: If a call appears once after if/else in the C but twice in asm, duplicate it inside each branch. +4. **Struct vs locals**: Replace isolated `s16 a, b;` stack vars with a proper `RECT` or similar struct so the compiler stores all fields. +5. **goto patterns**: `goto loop_XX` → `while` loop; `goto block_XX` in switch → inline branch. +6. **Redundant instructions**: Original may have duplicate `sll`/`sra` pairs in both branches — reproduce the duplication. + +Provide: +SUGGESTIONS: +- + +REVISED_CODE: + +""" + + if self.verbose: + print(f"Getting refinement suggestions for {function_name}...") + + response = self._call_ollama(prompt, temperature=0.3) + + if not response: + return None + + result = { + 'function': function_name, + 'raw_response': response, + 'suggestions': [], + 'revised_code': None + } + + # Extract suggestions + if 'SUGGESTIONS:' in response: + sugg_match = re.search(r'SUGGESTIONS:\s*(.+?)(?=\nREVISED_CODE:|$)', response, re.DOTALL) + if sugg_match: + suggestions_text = sugg_match.group(1).strip() + result['suggestions'] = [s.strip('- ').strip() for s in suggestions_text.split('\n') if s.strip().startswith('-')] + + # Extract revised code + if 'REVISED_CODE:' in response: + code_match = re.search(r'REVISED_CODE:\s*(.+?)$', response, re.DOTALL) + if code_match: + code = code_match.group(1).strip() + # Clean markdown if present + code_clean = re.search(r'```c?\n(.*?)\n```', code, re.DOTALL) + if code_clean: + result['revised_code'] = code_clean.group(1).strip() + else: + result['revised_code'] = code + + return result + + def fix_m2c_error(self, function_name: str, broken_c_code: str, error_type: str, + pre_analysis: Optional[Dict] = None) -> Optional[Dict]: + """ + Attempt to automatically fix common m2c decompilation errors. + + Args: + function_name: Function name + broken_c_code: The function body with m2c errors + error_type: Type of error detected (e.g., "unaligned cast", "incomplete type") + pre_analysis: Optional pre-decompilation analysis with c_suggestion + + Returns dict with: + - fixed_code: Corrected C code + - explanation: What was fixed + - confidence: "high", "medium", or "low" + """ + if not self.available: + return None + + # Get assembly for reference + asm_code = self.get_assembly_code(function_name) + + prompt = f"""{FF7_CONTEXT} +Fix a decompilation error from m2c (MIPS → C decompiler) in a Final Fantasy VII function. + +Function: {function_name} +Error Type: {error_type} + +Broken C Code (from m2c): +{broken_c_code} +""" + + if asm_code: + prompt += f""" +Original Assembly (authoritative — your fix must match this): +{asm_code} +""" + + if pre_analysis and pre_analysis.get('c_suggestion'): + prompt += f""" +Pre-analysis C suggestion (use as structural guide): +{pre_analysis['c_suggestion']} +""" + + prompt += """ +Common m2c errors and how to fix them: + +1. `(unaligned s32)` / `(unaligned TYPE)` casts — unaligned memory access: + Fix: `memcpy(&dst, &src, sizeof(s32));` + +2. `/*?*/` unknown type markers — m2c couldn't infer the type: + Fix: Infer from register use ($a0=first arg→likely pointer), struct offset, or context. + Apply decompilation checklist: no `void*` for struct args, use proper PSX SDK types. + +3. `void*` variable or parameter used with `->` (struct type inference failure): + This is the most common battle-module error. m2c left a variable as `void*` because it + couldn't determine which struct it points to. + Fix: Look at which fields are accessed via `->` (e.g., `->unk4`, `->unk10`, `->unkC`) and + define a local anonymous struct or use explicit byte-offset casts: + Option A (struct): `typedef struct { s32 unk0; s32 unk4; s16 unkC; } SomeStruct;` + then change `void* var` → `SomeStruct* var` + Option B (cast): Replace `var->unk4` with `*(s32*)((u8*)var + 4)` + Replace `var->unkC` with `*(s16*)((u8*)var + 0xC)` + Check the assembly: the register holding the pointer is usually $a0/$a1 for args, + or $s0/$v0 for locals. The `lw/lh/lb` offset in the LW instruction = the field offset. + +4. `Contains unknown parameter type '?'` — function call with `?` in signature: + The extern declaration uses `?` as a placeholder because m2c saw an opaque argument. + Fix: Look at the call in the assembly. The register(s) passed to the call determine + the type. `$a0`=s32/ptr, `$a1`=s32, `$a2`=s32, `$a3`=s32. Change `/*?*/ void func(?)` + to `void func(s32 arg0)` (or appropriate type). If truly unknown, use `s32`. + +5. `primitive pointer used with ->unk` — e.g. `s32*` accessed as struct: + Same as case 3 — m2c guessed `s32*` instead of `void*`. Use explicit offset casts. + +6. Missing struct member / bad offset access: + Fix: Derive field name from byte offset (e.g., offset 0x10 → `unk10`), or cast: `*(s16*)((u8*)ptr + 0x10)` + +7. `Syntax error when parsing C context` / bad extern declarations: + Fix: Use `void*` for truly unknown pointer params, or add proper forward declarations with known types. + +8. `M2C_ERROR(...)` or decompilation failure comments — m2c gave up: + Fix: Hand-write C from the assembly. For stale/unset registers (`$a1` never set before call), use `0`. + E.g.: `func(ptr, 0 /* $a1 stale */);` + +9. `goto loop_XX` patterns: + Fix: Convert to `while` loop — `goto loop_4:` with label at top → `while (cond) { ... }` + +10. `goto block_XX` in switch statements: + Fix: Inline the branch body — reverse the compiler's jump-table optimization. + +Output format: +CONFIDENCE: high/medium/low +EXPLANATION: +FIXED_CODE: + +""" + + if self.verbose: + print(f"Attempting to fix m2c error in {function_name}...") + + response = self._call_ollama(prompt, temperature=0.2, max_tokens=1024) + + if not response: + return None + + result = { + 'function': function_name, + 'error_type': error_type, + 'raw_response': response, + 'fixed_code': None, + 'explanation': None, + 'confidence': 'low' + } + + # Extract confidence + conf_match = re.search(r'CONFIDENCE:\s*(high|medium|low)', response, re.IGNORECASE) + if conf_match: + result['confidence'] = conf_match.group(1).lower() + + # Extract explanation + exp_match = re.search(r'EXPLANATION:\s*(.+?)(?=\nFIXED_CODE:|$)', response, re.DOTALL) + if exp_match: + result['explanation'] = exp_match.group(1).strip() + + # Extract fixed code + if 'FIXED_CODE:' in response: + code_match = re.search(r'FIXED_CODE:\s*(.+?)$', response, re.DOTALL) + if code_match: + code = code_match.group(1).strip() + # Clean markdown if present + code_clean = re.search(r'```c?\n(.*?)\n```', code, re.DOTALL) + if code_clean: + result['fixed_code'] = code_clean.group(1).strip() + else: + result['fixed_code'] = code.strip() + + return result + + def batch_analyze(self, function_names: List[str]) -> Dict[str, Dict]: + """Analyze multiple functions in batch.""" + results = {} + + for func_name in function_names: + if self.verbose: + print(f"Analyzing {func_name}...") + + analysis = self.analyze_assembly(func_name) + if analysis: + results[func_name] = analysis + + return results + + +def main(): + parser = argparse.ArgumentParser(description="LLM-assisted decompilation helper") + + parser.add_argument('--analyze-asm', type=str, metavar='FUNCTION', + help='Analyze assembly for a function') + parser.add_argument('--suggest-c', type=str, metavar='FUNCTION', + help='Suggest C code for a function') + parser.add_argument('--explain', type=str, metavar='ASM_FILE', + help='Explain assembly in a file') + parser.add_argument('--refine', type=str, metavar='FUNCTION', + help='Suggest refinements for a function') + parser.add_argument('--batch', nargs='+', metavar='FUNCTION', + help='Analyze multiple functions') + parser.add_argument('--model', type=str, default=OLLAMA_MODEL, + help=f'Ollama model to use (default: {OLLAMA_MODEL})') + parser.add_argument('--check', action='store_true', + help='Check if LLM is available') + parser.add_argument('--verbose', '-v', action='store_true', + help='Verbose output') + + args = parser.parse_args() + + helper = LLMHelper(model=args.model, verbose=args.verbose) + + if args.check: + if helper.available: + print(f"✅ LLM available: {args.model}") + print(f"Endpoint: {OLLAMA_ENDPOINT}") + else: + print(f"❌ LLM not available") + print("Make sure Ollama is running: ollama serve") + print(f"And model is installed: ollama pull {args.model}") + return + + if not helper.available: + print("❌ LLM not available. Run with --check for details.") + return + + if args.analyze_asm: + print(f"\n{'='*60}") + print(f"ANALYZING: {args.analyze_asm}") + print(f"{'='*60}\n") + + result = helper.analyze_assembly(args.analyze_asm) + + if result: + print(f"Summary: {result['summary']}") + print(f"Complexity: {result['complexity']}") + if result['patterns']: + print(f"Patterns: {', '.join(result['patterns'])}") + if result['c_suggestion']: + print(f"\nSuggested C Structure:\n{result['c_suggestion']}") + else: + print("Could not analyze function") + + elif args.suggest_c: + print(f"\n{'='*60}") + print(f"C CODE SUGGESTION: {args.suggest_c}") + print(f"{'='*60}\n") + + suggestion = helper.suggest_c_code(args.suggest_c) + + if suggestion: + print(suggestion) + else: + print("Could not generate suggestion") + + elif args.explain: + asm_path = Path(args.explain) + if asm_path.exists(): + asm_code = asm_path.read_text()[:2000] # Limit size + + print(f"\n{'='*60}") + print(f"EXPLAINING: {args.explain}") + print(f"{'='*60}\n") + + explanation = helper.explain_assembly_section(asm_code) + if explanation: + print(explanation) + else: + print("Could not explain assembly") + else: + print(f"File not found: {args.explain}") + + elif args.refine: + print(f"\n{'='*60}") + print(f"REFINEMENT SUGGESTIONS: {args.refine}") + print(f"{'='*60}\n") + + # Would need to get current C code from the source file + print("Note: Refinement mode requires current C code as input") + print("This feature is best used programmatically from other scripts") + + elif args.batch: + print(f"\n{'='*60}") + print(f"BATCH ANALYSIS: {len(args.batch)} functions") + print(f"{'='*60}\n") + + results = helper.batch_analyze(args.batch) + + for func_name, result in results.items(): + print(f"\n{func_name}:") + print(f" Complexity: {result['complexity']}") + print(f" Summary: {result['summary']}") + + else: + parser.print_help() + print("\nQuick examples:") + print(" python llm_helper.py --check") + print(" python llm_helper.py --analyze-asm func_800A1234") + print(" python llm_helper.py --suggest-c AverageSZ4") + print(" python llm_helper.py --batch func_800A1234 func_800A5678") + + +if __name__ == '__main__': + main() diff --git a/automation/make build log.txt b/automation/make build log.txt new file mode 100644 index 0000000..b90952f --- /dev/null +++ b/automation/make build log.txt @@ -0,0 +1,35 @@ +calvin@Begemot:~/GitHub/ff7-decomp-armstrca$ make rebuild +[11/83] psx cc src/main/18B8.c +src/main/18B8.c: In function `func_800159B0': +src/main/18B8.c:1528: warning: comparison is always 1 due to limited range of data type +[64/83] psx cc src/field/field.c +src/field/field.c: In function `func_800C5CE8': +src/field/field.c:2512: warning: comparison is always 1 due to limited range of data type +src/field/field.c: In function `func_800C5E80': +src/field/field.c:2558: warning: comparison is always 1 due to limited range of data type +[83/83] check +FAILED: build/check.dummy +sha1sum -c build/us/check.sha1 +build/us/main.exe: FAILED +build/us/batini.exe: FAILED +build/us/battle.exe: FAILED +build/us/brom.exe: FAILED +build/us/dschange.exe: FAILED +build/us/ending.exe: FAILED +build/us/field.exe: FAILED +build/us/bginmenu.exe: FAILED +build/us/cnfgmenu.exe: FAILED +build/us/savemenu.exe: FAILED +build/us/world.exe: FAILED +build/us/barrier.exe: FAILED +sha1sum: WARNING: 12 computed checksums did NOT match +ninja: build stopped: subcommand failed. +Usage: + build [version] [flags] + +Flags: + -h, --help help for build + +exit status 1 +exit status 1 +make: *** [Makefile:43: rebuild] Error 1 \ No newline at end of file diff --git a/automation/missing_types_reports.json b/automation/missing_types_reports.json new file mode 100644 index 0000000..966963b --- /dev/null +++ b/automation/missing_types_reports.json @@ -0,0 +1,30258 @@ +[ + { + "function_name": "func_8002B9AC", + "file": "src/main/akao.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "SpuSetVoiceARAttr", + "return_type": "unknown", + "parameters": "s32, u16, s32", + "suggestion": "Define proper signature for SpuSetVoiceARAttr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceDR", + "return_type": "unknown", + "parameters": "s32, u16", + "suggestion": "Define proper signature for SpuSetVoiceDR in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceLoopStartAddr", + "return_type": "unknown", + "parameters": "s32, s32", + "suggestion": "Define proper signature for SpuSetVoiceLoopStartAddr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoicePitch", + "return_type": "unknown", + "parameters": "u16", + "suggestion": "Define proper signature for SpuSetVoicePitch in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceRRAttr", + "return_type": "unknown", + "parameters": "s32, u16, s32", + "suggestion": "Define proper signature for SpuSetVoiceRRAttr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceSL", + "return_type": "unknown", + "parameters": "s32, u16", + "suggestion": "Define proper signature for SpuSetVoiceSL in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceSRAttr", + "return_type": "unknown", + "parameters": "s32, u16, s32", + "suggestion": "Define proper signature for SpuSetVoiceSRAttr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceStartAddr", + "return_type": "unknown", + "parameters": "s32, s32", + "suggestion": "Define proper signature for SpuSetVoiceStartAddr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceVolume", + "return_type": "unknown", + "parameters": "s32, s16, s16", + "suggestion": "Define proper signature for SpuSetVoiceVolume in header" + }, + { + "type": "extern_variable", + "name": "D_80049C40", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049C40" + }, + { + "type": "extern_variable", + "name": "func_8002BD04", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002BD04" + }, + { + "type": "extern_variable", + "name": "func_8002BFCC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002BFCC" + }, + { + "type": "extern_variable", + "name": "func_8002C004", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002C004" + }, + { + "type": "extern_variable", + "name": "func_8002C2CC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002C2CC" + }, + { + "type": "extern_variable", + "name": "func_8002C300", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002C300" + }, + { + "type": "extern_variable", + "name": "D_8007EBE4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007EBE4" + }, + { + "type": "extern_variable", + "name": "func_80030038", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80030038" + }, + { + "type": "extern_variable", + "name": "D_80081DC8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80081DC8" + }, + { + "type": "extern_variable", + "name": "D_800499A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800499A8" + }, + { + "type": "extern_variable", + "name": "D_80096704", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80096704" + }, + { + "type": "extern_variable", + "name": "func_800293D0", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800293D0" + } + ], + "timestamp": "2026-04-18T12:35:20.792488" + }, + { + "function_name": "func_800BA534", + "file": "src/field/field.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80074EB0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB0" + }, + { + "type": "extern_variable", + "name": "D_80074EB4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB4" + }, + { + "type": "extern_variable", + "name": "D_80074EB8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB8" + }, + { + "type": "extern_variable", + "name": "func_800A48B8", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800A48B8" + }, + { + "type": "extern_variable", + "name": "D_80074ED9", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074ED9" + }, + { + "type": "extern_variable", + "name": "D_800DF120", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DF120" + }, + { + "type": "extern_variable", + "name": "D_800DF122", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DF122" + }, + { + "type": "extern_variable", + "name": "D_800DEF88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DEF88" + }, + { + "type": "extern_variable", + "name": "func_800354CC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800354CC" + }, + { + "type": "extern_variable", + "name": "func_80035658", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80035658" + }, + { + "type": "extern_variable", + "name": "D_800E0638", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0638" + }, + { + "type": "extern_variable", + "name": "D_800E48F4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48F4" + }, + { + "type": "extern_variable", + "name": "D_800E48FC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48FC" + }, + { + "type": "extern_variable", + "name": "D_800E48FE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48FE" + }, + { + "type": "extern_variable", + "name": "D_800E4900", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4900" + }, + { + "type": "extern_variable", + "name": "D_800E4901", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4901" + }, + { + "type": "extern_variable", + "name": "D_800E4904", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4904" + }, + { + "type": "extern_variable", + "name": "D_800E4906", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4906" + }, + { + "type": "extern_variable", + "name": "D_800E4908", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4908" + }, + { + "type": "extern_variable", + "name": "D_800E4909", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4909" + }, + { + "type": "extern_variable", + "name": "D_800E490C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E490C" + }, + { + "type": "extern_variable", + "name": "D_800E490E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E490E" + }, + { + "type": "extern_variable", + "name": "D_800E4910", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4910" + }, + { + "type": "extern_variable", + "name": "D_800E4911", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4911" + }, + { + "type": "extern_variable", + "name": "D_800E4914", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4914" + }, + { + "type": "extern_variable", + "name": "D_800E4916", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4916" + }, + { + "type": "extern_variable", + "name": "D_800E4918", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4918" + }, + { + "type": "extern_variable", + "name": "D_800E4919", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4919" + }, + { + "type": "extern_variable", + "name": "D_8007EB98", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007EB98" + }, + { + "type": "extern_variable", + "name": "func_8001786C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001786C" + }, + { + "type": "extern_variable", + "name": "func_80020058", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80020058" + }, + { + "type": "extern_variable", + "name": "D_800491D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800491D0" + }, + { + "type": "extern_variable", + "name": "D_8008328D", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328D" + }, + { + "type": "extern_variable", + "name": "D_800832A2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800832A2" + }, + { + "type": "extern_variable", + "name": "D_8008326C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008326C" + }, + { + "type": "extern_variable", + "name": "D_80083286", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083286" + }, + { + "type": "extern_variable", + "name": "D_80083278", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083278" + }, + { + "type": "extern_variable", + "name": "D_8008327A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327A" + }, + { + "type": "extern_variable", + "name": "D_8008327E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327E" + }, + { + "type": "extern_variable", + "name": "D_80075E24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075E24" + }, + { + "type": "extern_variable", + "name": "D_80075E25", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075E25" + }, + { + "type": "extern_variable", + "name": "D_800E4214", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4214" + }, + { + "type": "extern_variable", + "name": "D_800E4280", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4280" + }, + { + "type": "extern_variable", + "name": "D_800E4D48", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4D48" + }, + { + "type": "extern_variable", + "name": "D_800E0748", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0748" + }, + { + "type": "extern_variable", + "name": "D_800E074A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074A" + }, + { + "type": "extern_variable", + "name": "D_800E074C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074C" + }, + { + "type": "extern_variable", + "name": "D_800E08C0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08C0" + }, + { + "type": "extern_variable", + "name": "D_800E074E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074E" + }, + { + "type": "extern_variable", + "name": "D_800E0754", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0754" + }, + { + "type": "extern_variable", + "name": "D_800E0758", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0758" + }, + { + "type": "extern_variable", + "name": "D_800E08A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08A8" + }, + { + "type": "extern_variable", + "name": "D_800E0756", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0756" + }, + { + "type": "extern_variable", + "name": "D_800E0750", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0750" + }, + { + "type": "extern_variable", + "name": "D_800E0751", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0751" + }, + { + "type": "extern_variable", + "name": "D_800E0752", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0752" + }, + { + "type": "extern_variable", + "name": "func_800D5A60", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D5A60" + }, + { + "type": "extern_variable", + "name": "func_800D5C9C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D5C9C" + }, + { + "type": "extern_variable", + "name": "func_800D6D44", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6D44" + }, + { + "type": "extern_variable", + "name": "func_800D6E0C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6E0C" + }, + { + "type": "extern_variable", + "name": "func_800D6F6C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6F6C" + }, + { + "type": "extern_variable", + "name": "D_80083284", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083284" + }, + { + "type": "extern_variable", + "name": "D_8008328A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328A" + }, + { + "type": "extern_variable", + "name": "D_8008328E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328E" + }, + { + "type": "extern_variable", + "name": "D_80083298", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083298" + }, + { + "type": "extern_variable", + "name": "D_8008329A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329A" + }, + { + "type": "extern_variable", + "name": "D_800E424C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E424C" + }, + { + "type": "extern_variable", + "name": "D_801142CC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801142CC" + }, + { + "type": "extern_variable", + "name": "D_8009AD30", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009AD30" + }, + { + "type": "extern_variable", + "name": "func_800C2E00", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C2E00" + }, + { + "type": "extern_variable", + "name": "func_800DA444", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800DA444" + }, + { + "type": "extern_variable", + "name": "func_800C8634", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C8634" + }, + { + "type": "extern_variable", + "name": "func_800CDC14", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800CDC14" + }, + { + "type": "extern_variable", + "name": "D_80095DE0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80095DE0" + }, + { + "type": "extern_variable", + "name": "func_80025B10", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80025B10" + }, + { + "type": "extern_variable", + "name": "func_800BEAD4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800BEAD4" + }, + { + "type": "extern_variable", + "name": "D_800E0208", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0208" + }, + { + "type": "extern_variable", + "name": "D_800756E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800756E8" + }, + { + "type": "extern_variable", + "name": "D_80083291", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083291" + }, + { + "type": "extern_variable", + "name": "D_80083294", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083294" + }, + { + "type": "extern_variable", + "name": "D_8007078C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007078C" + }, + { + "type": "extern_variable", + "name": "D_8007E7B8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B8" + }, + { + "type": "extern_variable", + "name": "D_8007E7BA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7BA" + }, + { + "type": "extern_variable", + "name": "D_8007E7AC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7AC" + }, + { + "type": "extern_variable", + "name": "D_8007E7AE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7AE" + }, + { + "type": "extern_variable", + "name": "D_8007E7B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B0" + }, + { + "type": "extern_variable", + "name": "D_8007E7B2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B2" + }, + { + "type": "extern_variable", + "name": "D_8007E7B4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B4" + }, + { + "type": "extern_variable", + "name": "D_8007E7B6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B6" + }, + { + "type": "extern_variable", + "name": "D_80082248", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082248" + }, + { + "type": "extern_variable", + "name": "D_8008325C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008325C" + }, + { + "type": "extern_variable", + "name": "D_8009D828", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D828" + }, + { + "type": "extern_variable", + "name": "D_800A0854", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A0854" + }, + { + "type": "extern_variable", + "name": "D_800A0F38", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A0F38" + }, + { + "type": "extern_variable", + "name": "D_8007E7C2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7C2" + }, + { + "type": "extern_variable", + "name": "D_80049209", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049209" + }, + { + "type": "extern_variable", + "name": "D_8004920A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8004920A" + }, + { + "type": "extern_variable", + "name": "func_80044064", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80044064" + }, + { + "type": "extern_variable", + "name": "func_800C5B38", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C5B38" + }, + { + "type": "extern_variable", + "name": "D_80081D90", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80081D90" + }, + { + "type": "extern_variable", + "name": "D_80083288", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083288" + }, + { + "type": "extern_variable", + "name": "D_800E4944", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4944" + }, + { + "type": "extern_variable", + "name": "D_80114480", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80114480" + }, + { + "type": "extern_variable", + "name": "D_800E42A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42A8" + }, + { + "type": "extern_variable", + "name": "D_8008327C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327C" + }, + { + "type": "extern_variable", + "name": "D_80083280", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083280" + }, + { + "type": "extern_variable", + "name": "D_80083282", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083282" + }, + { + "type": "extern_variable", + "name": "D_8008328F", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328F" + }, + { + "type": "extern_variable", + "name": "D_80083290", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083290" + }, + { + "type": "extern_variable", + "name": "D_8008329C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329C" + }, + { + "type": "extern_variable", + "name": "D_8008329E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329E" + }, + { + "type": "extern_variable", + "name": "D_80071748", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071748" + }, + { + "type": "extern_variable", + "name": "D_800833F8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800833F8" + }, + { + "type": "extern_variable", + "name": "D_8009A1C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009A1C4" + }, + { + "type": "extern_variable", + "name": "D_800A06B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A06B0" + }, + { + "type": "extern_variable", + "name": "D_80071A88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071A88" + }, + { + "type": "extern_variable", + "name": "D_801142D4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801142D4" + }, + { + "type": "extern_variable", + "name": "D_800E42D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42D8" + }, + { + "type": "extern_variable", + "name": "D_800E42DA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DA" + }, + { + "type": "extern_variable", + "name": "D_800E42DC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DC" + }, + { + "type": "extern_variable", + "name": "D_800E42E0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E0" + }, + { + "type": "extern_variable", + "name": "D_800E42E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E4" + }, + { + "type": "extern_variable", + "name": "D_800E42E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E8" + }, + { + "type": "extern_variable", + "name": "D_800E42EA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EA" + }, + { + "type": "extern_variable", + "name": "D_800E42EE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EE" + }, + { + "type": "extern_variable", + "name": "D_800E48E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48E8" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-18T12:35:21.136530" + }, + { + "function_name": "func_80028484", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_8007E7A0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7A0" + }, + { + "type": "extern_variable", + "name": "D_8007EB6A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007EB6A" + }, + { + "type": "extern_variable", + "name": "D_8009A078", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009A078" + }, + { + "type": "extern_variable", + "name": "D_8009A079", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009A079" + }, + { + "type": "extern_variable", + "name": "D_8009A07A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009A07A" + }, + { + "type": "extern_variable", + "name": "D_80063048", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80063048" + }, + { + "type": "extern_variable", + "name": "D_80010118", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80010118" + }, + { + "type": "extern_variable", + "name": "D_80010120", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80010120" + }, + { + "type": "extern_variable", + "name": "D_80010124", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80010124" + }, + { + "type": "extern_variable", + "name": "D_800F5BC7", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5BC7" + }, + { + "type": "extern_variable", + "name": "D_800F5BE1", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5BE1" + }, + { + "type": "extern_variable", + "name": "D_800F5BF4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5BF4" + }, + { + "type": "extern_variable", + "name": "D_800F5F44", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5F44" + }, + { + "type": "extern_variable", + "name": "D_800F652C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F652C" + }, + { + "type": "extern_variable", + "name": "D_800F83E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F83E4" + }, + { + "type": "extern_variable", + "name": "D_800F8410", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F8410" + }, + { + "type": "extern_variable", + "name": "D_80163658", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163658" + }, + { + "type": "extern_variable", + "name": "D_8009D808", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D808" + }, + { + "type": "extern_variable", + "name": "D_8009D80A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D80A" + }, + { + "type": "extern_variable", + "name": "D_8009D80C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D80C" + }, + { + "type": "extern_variable", + "name": "func_80018028", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80018028" + }, + { + "type": "extern_variable", + "name": "D_800491B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800491B0" + }, + { + "type": "extern_variable", + "name": "D_800730D9", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730D9" + }, + { + "type": "extern_variable", + "name": "D_800730DA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730DA" + }, + { + "type": "extern_variable", + "name": "D_800730DB", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730DB" + }, + { + "type": "extern_variable", + "name": "D_80062E53", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80062E53" + }, + { + "type": "extern_variable", + "name": "D_8006950A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8006950A" + }, + { + "type": "extern_variable", + "name": "func_80019254", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80019254" + }, + { + "type": "extern_variable", + "name": "func_8001937C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001937C" + }, + { + "type": "extern_variable", + "name": "func_800193F4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800193F4" + }, + { + "type": "extern_variable", + "name": "func_80019544", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80019544" + }, + { + "type": "extern_variable", + "name": "D_80049060", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049060" + }, + { + "type": "extern_variable", + "name": "D_80049062", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049062" + }, + { + "type": "extern_variable", + "name": "D_80049064", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049064" + }, + { + "type": "extern_variable", + "name": "D_80049066", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049066" + }, + { + "type": "extern_variable", + "name": "D_80049068", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049068" + }, + { + "type": "extern_variable", + "name": "D_8004906A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8004906A" + }, + { + "type": "extern_variable", + "name": "D_8004906C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8004906C" + }, + { + "type": "extern_variable", + "name": "D_8004906E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8004906E" + }, + { + "type": "extern_variable", + "name": "D_800730D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730D8" + }, + { + "type": "extern_variable", + "name": "D_800694E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800694E4" + }, + { + "type": "extern_variable", + "name": "D_8006947C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8006947C" + }, + { + "type": "extern_variable", + "name": "D_800730DE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730DE" + }, + { + "type": "extern_variable", + "name": "D_80069508", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069508" + }, + { + "type": "extern_variable", + "name": "func_8001BB30", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001BB30" + }, + { + "type": "extern_variable", + "name": "D_80069538", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069538" + }, + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069555", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069555" + }, + { + "type": "extern_variable", + "name": "D_80069556", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069556" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_800708C8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C8" + }, + { + "type": "extern_variable", + "name": "D_800708D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708D0" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80071E46", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071E46" + }, + { + "type": "extern_variable", + "name": "D_800738A4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738A4" + }, + { + "type": "extern_variable", + "name": "D_8009D888", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D888" + }, + { + "type": "extern_variable", + "name": "D_80069844", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069844" + }, + { + "type": "extern_variable", + "name": "D_800494A4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800494A4" + }, + { + "type": "extern_variable", + "name": "D_80071E4D", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071E4D" + }, + { + "type": "extern_variable", + "name": "D_800738BC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738BC" + }, + { + "type": "extern_variable", + "name": "D_800491D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800491D0" + }, + { + "type": "extern_variable", + "name": "D_8009D85C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85C" + }, + { + "type": "extern_variable", + "name": "D_8009D85E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85E" + }, + { + "type": "extern_variable", + "name": "D_8009D860", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D860" + }, + { + "type": "extern_variable", + "name": "D_8009D862", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D862" + }, + { + "type": "extern_variable", + "name": "func_80026090", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80026090" + }, + { + "type": "extern_variable", + "name": "func_800260DC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800260DC" + }, + { + "type": "extern_variable", + "name": "D_80083084", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083084" + }, + { + "type": "extern_variable", + "name": "D_80074EB0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB0" + }, + { + "type": "extern_variable", + "name": "D_80074EB4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB4" + }, + { + "type": "extern_variable", + "name": "D_80074EDA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EDA" + }, + { + "type": "extern_variable", + "name": "D_80074F16", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074F16" + }, + { + "type": "extern_variable", + "name": "D_80071C32", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071C32" + }, + { + "type": "extern_variable", + "name": "D_80071E64", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071E64" + }, + { + "type": "extern_variable", + "name": "D_800722D6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800722D6" + }, + { + "type": "extern_variable", + "name": "D_800738CA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738CA" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + }, + { + "type": "extern_variable", + "name": "D_8009D88A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D88A" + }, + { + "type": "extern_variable", + "name": "D_8009D88C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D88C" + }, + { + "type": "extern_variable", + "name": "D_8009D88E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D88E" + }, + { + "type": "extern_variable", + "name": "func_80018630", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80018630" + }, + { + "type": "extern_variable", + "name": "func_80018934", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80018934" + }, + { + "type": "extern_variable", + "name": "D_800730DF", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730DF" + } + ], + "timestamp": "2026-04-18T12:35:21.467747" + }, + { + "function_name": "func_8002B3B4", + "file": "src/main/akao.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "SpuSetVoiceARAttr", + "return_type": "unknown", + "parameters": "s32, u16, s32", + "suggestion": "Define proper signature for SpuSetVoiceARAttr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceDR", + "return_type": "unknown", + "parameters": "s32, u16", + "suggestion": "Define proper signature for SpuSetVoiceDR in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceLoopStartAddr", + "return_type": "unknown", + "parameters": "s32, s32", + "suggestion": "Define proper signature for SpuSetVoiceLoopStartAddr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoicePitch", + "return_type": "unknown", + "parameters": "u16", + "suggestion": "Define proper signature for SpuSetVoicePitch in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceRRAttr", + "return_type": "unknown", + "parameters": "s32, u16, s32", + "suggestion": "Define proper signature for SpuSetVoiceRRAttr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceSL", + "return_type": "unknown", + "parameters": "s32, u16", + "suggestion": "Define proper signature for SpuSetVoiceSL in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceSRAttr", + "return_type": "unknown", + "parameters": "s32, u16, s32", + "suggestion": "Define proper signature for SpuSetVoiceSRAttr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceStartAddr", + "return_type": "unknown", + "parameters": "s32, s32", + "suggestion": "Define proper signature for SpuSetVoiceStartAddr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceVolume", + "return_type": "unknown", + "parameters": "s32, s16, s16", + "suggestion": "Define proper signature for SpuSetVoiceVolume in header" + }, + { + "type": "extern_variable", + "name": "D_80049C40", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049C40" + }, + { + "type": "extern_variable", + "name": "func_8002BD04", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002BD04" + }, + { + "type": "extern_variable", + "name": "func_8002BFCC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002BFCC" + }, + { + "type": "extern_variable", + "name": "func_8002C004", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002C004" + }, + { + "type": "extern_variable", + "name": "func_8002C2CC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002C2CC" + }, + { + "type": "extern_variable", + "name": "func_8002C300", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002C300" + }, + { + "type": "extern_variable", + "name": "D_8007EBE4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007EBE4" + }, + { + "type": "extern_variable", + "name": "func_80030038", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80030038" + }, + { + "type": "extern_variable", + "name": "D_80081DC8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80081DC8" + }, + { + "type": "extern_variable", + "name": "D_800499A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800499A8" + }, + { + "type": "extern_variable", + "name": "D_80096704", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80096704" + }, + { + "type": "extern_variable", + "name": "func_800293D0", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800293D0" + } + ], + "timestamp": "2026-04-18T12:35:21.795852" + }, + { + "function_name": "func_800AA5E4", + "file": "src/field/field.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80074EB0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB0" + }, + { + "type": "extern_variable", + "name": "D_80074EB4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB4" + }, + { + "type": "extern_variable", + "name": "D_80074EB8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB8" + }, + { + "type": "extern_variable", + "name": "func_800A48B8", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800A48B8" + }, + { + "type": "extern_variable", + "name": "D_80074ED9", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074ED9" + }, + { + "type": "extern_variable", + "name": "D_800DF120", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DF120" + }, + { + "type": "extern_variable", + "name": "D_800DF122", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DF122" + }, + { + "type": "extern_variable", + "name": "D_800DEF88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DEF88" + }, + { + "type": "extern_variable", + "name": "func_800354CC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800354CC" + }, + { + "type": "extern_variable", + "name": "func_80035658", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80035658" + }, + { + "type": "extern_variable", + "name": "D_800E0638", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0638" + }, + { + "type": "extern_variable", + "name": "D_800E48F4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48F4" + }, + { + "type": "extern_variable", + "name": "D_800E48FC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48FC" + }, + { + "type": "extern_variable", + "name": "D_800E48FE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48FE" + }, + { + "type": "extern_variable", + "name": "D_800E4900", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4900" + }, + { + "type": "extern_variable", + "name": "D_800E4901", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4901" + }, + { + "type": "extern_variable", + "name": "D_800E4904", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4904" + }, + { + "type": "extern_variable", + "name": "D_800E4906", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4906" + }, + { + "type": "extern_variable", + "name": "D_800E4908", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4908" + }, + { + "type": "extern_variable", + "name": "D_800E4909", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4909" + }, + { + "type": "extern_variable", + "name": "D_800E490C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E490C" + }, + { + "type": "extern_variable", + "name": "D_800E490E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E490E" + }, + { + "type": "extern_variable", + "name": "D_800E4910", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4910" + }, + { + "type": "extern_variable", + "name": "D_800E4911", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4911" + }, + { + "type": "extern_variable", + "name": "D_800E4914", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4914" + }, + { + "type": "extern_variable", + "name": "D_800E4916", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4916" + }, + { + "type": "extern_variable", + "name": "D_800E4918", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4918" + }, + { + "type": "extern_variable", + "name": "D_800E4919", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4919" + }, + { + "type": "extern_variable", + "name": "D_8007EB98", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007EB98" + }, + { + "type": "extern_variable", + "name": "func_8001786C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001786C" + }, + { + "type": "extern_variable", + "name": "func_80020058", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80020058" + }, + { + "type": "extern_variable", + "name": "D_800491D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800491D0" + }, + { + "type": "extern_variable", + "name": "D_8008328D", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328D" + }, + { + "type": "extern_variable", + "name": "D_800832A2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800832A2" + }, + { + "type": "extern_variable", + "name": "D_8008326C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008326C" + }, + { + "type": "extern_variable", + "name": "D_80083286", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083286" + }, + { + "type": "extern_variable", + "name": "D_80083278", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083278" + }, + { + "type": "extern_variable", + "name": "D_8008327A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327A" + }, + { + "type": "extern_variable", + "name": "D_8008327E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327E" + }, + { + "type": "extern_variable", + "name": "D_80075E24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075E24" + }, + { + "type": "extern_variable", + "name": "D_80075E25", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075E25" + }, + { + "type": "extern_variable", + "name": "D_800E4214", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4214" + }, + { + "type": "extern_variable", + "name": "D_800E4280", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4280" + }, + { + "type": "extern_variable", + "name": "D_800E4D48", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4D48" + }, + { + "type": "extern_variable", + "name": "D_800E0748", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0748" + }, + { + "type": "extern_variable", + "name": "D_800E074A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074A" + }, + { + "type": "extern_variable", + "name": "D_800E074C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074C" + }, + { + "type": "extern_variable", + "name": "D_800E08C0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08C0" + }, + { + "type": "extern_variable", + "name": "D_800E074E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074E" + }, + { + "type": "extern_variable", + "name": "D_800E0754", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0754" + }, + { + "type": "extern_variable", + "name": "D_800E0758", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0758" + }, + { + "type": "extern_variable", + "name": "D_800E08A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08A8" + }, + { + "type": "extern_variable", + "name": "D_800E0756", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0756" + }, + { + "type": "extern_variable", + "name": "D_800E0750", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0750" + }, + { + "type": "extern_variable", + "name": "D_800E0751", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0751" + }, + { + "type": "extern_variable", + "name": "D_800E0752", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0752" + }, + { + "type": "extern_variable", + "name": "func_800D5A60", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D5A60" + }, + { + "type": "extern_variable", + "name": "func_800D5C9C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D5C9C" + }, + { + "type": "extern_variable", + "name": "func_800D6D44", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6D44" + }, + { + "type": "extern_variable", + "name": "func_800D6E0C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6E0C" + }, + { + "type": "extern_variable", + "name": "func_800D6F6C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6F6C" + }, + { + "type": "extern_variable", + "name": "D_80083284", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083284" + }, + { + "type": "extern_variable", + "name": "D_8008328A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328A" + }, + { + "type": "extern_variable", + "name": "D_8008328E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328E" + }, + { + "type": "extern_variable", + "name": "D_80083298", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083298" + }, + { + "type": "extern_variable", + "name": "D_8008329A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329A" + }, + { + "type": "extern_variable", + "name": "D_800E424C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E424C" + }, + { + "type": "extern_variable", + "name": "D_801142CC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801142CC" + }, + { + "type": "extern_variable", + "name": "D_8009AD30", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009AD30" + }, + { + "type": "extern_variable", + "name": "func_800C2E00", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C2E00" + }, + { + "type": "extern_variable", + "name": "func_800DA444", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800DA444" + }, + { + "type": "extern_variable", + "name": "func_800C8634", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C8634" + }, + { + "type": "extern_variable", + "name": "func_800CDC14", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800CDC14" + }, + { + "type": "extern_variable", + "name": "D_80095DE0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80095DE0" + }, + { + "type": "extern_variable", + "name": "func_80025B10", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80025B10" + }, + { + "type": "extern_variable", + "name": "func_800BEAD4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800BEAD4" + }, + { + "type": "extern_variable", + "name": "D_800E0208", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0208" + }, + { + "type": "extern_variable", + "name": "D_800756E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800756E8" + }, + { + "type": "extern_variable", + "name": "D_80083291", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083291" + }, + { + "type": "extern_variable", + "name": "D_80083294", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083294" + }, + { + "type": "extern_variable", + "name": "D_8007078C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007078C" + }, + { + "type": "extern_variable", + "name": "D_8007E7B8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B8" + }, + { + "type": "extern_variable", + "name": "D_8007E7BA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7BA" + }, + { + "type": "extern_variable", + "name": "D_8007E7AC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7AC" + }, + { + "type": "extern_variable", + "name": "D_8007E7AE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7AE" + }, + { + "type": "extern_variable", + "name": "D_8007E7B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B0" + }, + { + "type": "extern_variable", + "name": "D_8007E7B2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B2" + }, + { + "type": "extern_variable", + "name": "D_8007E7B4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B4" + }, + { + "type": "extern_variable", + "name": "D_8007E7B6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B6" + }, + { + "type": "extern_variable", + "name": "D_80082248", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082248" + }, + { + "type": "extern_variable", + "name": "D_8008325C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008325C" + }, + { + "type": "extern_variable", + "name": "D_8009D828", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D828" + }, + { + "type": "extern_variable", + "name": "D_800A0854", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A0854" + }, + { + "type": "extern_variable", + "name": "D_800A0F38", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A0F38" + }, + { + "type": "extern_variable", + "name": "D_8007E7C2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7C2" + }, + { + "type": "extern_variable", + "name": "D_80049209", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049209" + }, + { + "type": "extern_variable", + "name": "D_8004920A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8004920A" + }, + { + "type": "extern_variable", + "name": "func_80044064", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80044064" + }, + { + "type": "extern_variable", + "name": "func_800C5B38", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C5B38" + }, + { + "type": "extern_variable", + "name": "D_80081D90", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80081D90" + }, + { + "type": "extern_variable", + "name": "D_80083288", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083288" + }, + { + "type": "extern_variable", + "name": "D_800E4944", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4944" + }, + { + "type": "extern_variable", + "name": "D_80114480", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80114480" + }, + { + "type": "extern_variable", + "name": "D_800E42A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42A8" + }, + { + "type": "extern_variable", + "name": "D_8008327C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327C" + }, + { + "type": "extern_variable", + "name": "D_80083280", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083280" + }, + { + "type": "extern_variable", + "name": "D_80083282", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083282" + }, + { + "type": "extern_variable", + "name": "D_8008328F", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328F" + }, + { + "type": "extern_variable", + "name": "D_80083290", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083290" + }, + { + "type": "extern_variable", + "name": "D_8008329C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329C" + }, + { + "type": "extern_variable", + "name": "D_8008329E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329E" + }, + { + "type": "extern_variable", + "name": "D_80071748", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071748" + }, + { + "type": "extern_variable", + "name": "D_800833F8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800833F8" + }, + { + "type": "extern_variable", + "name": "D_8009A1C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009A1C4" + }, + { + "type": "extern_variable", + "name": "D_800A06B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A06B0" + }, + { + "type": "extern_variable", + "name": "D_80071A88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071A88" + }, + { + "type": "extern_variable", + "name": "D_801142D4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801142D4" + }, + { + "type": "extern_variable", + "name": "D_800E42D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42D8" + }, + { + "type": "extern_variable", + "name": "D_800E42DA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DA" + }, + { + "type": "extern_variable", + "name": "D_800E42DC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DC" + }, + { + "type": "extern_variable", + "name": "D_800E42E0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E0" + }, + { + "type": "extern_variable", + "name": "D_800E42E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E4" + }, + { + "type": "extern_variable", + "name": "D_800E42E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E8" + }, + { + "type": "extern_variable", + "name": "D_800E42EA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EA" + }, + { + "type": "extern_variable", + "name": "D_800E42EE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EE" + }, + { + "type": "extern_variable", + "name": "D_800E48E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48E8" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-18T12:35:22.692092" + }, + { + "function_name": "func_8002B7E0", + "file": "src/main/akao.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "SpuSetVoiceARAttr", + "return_type": "unknown", + "parameters": "s32, u16, s32", + "suggestion": "Define proper signature for SpuSetVoiceARAttr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceDR", + "return_type": "unknown", + "parameters": "s32, u16", + "suggestion": "Define proper signature for SpuSetVoiceDR in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceLoopStartAddr", + "return_type": "unknown", + "parameters": "s32, s32", + "suggestion": "Define proper signature for SpuSetVoiceLoopStartAddr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoicePitch", + "return_type": "unknown", + "parameters": "u16", + "suggestion": "Define proper signature for SpuSetVoicePitch in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceRRAttr", + "return_type": "unknown", + "parameters": "s32, u16, s32", + "suggestion": "Define proper signature for SpuSetVoiceRRAttr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceSL", + "return_type": "unknown", + "parameters": "s32, u16", + "suggestion": "Define proper signature for SpuSetVoiceSL in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceSRAttr", + "return_type": "unknown", + "parameters": "s32, u16, s32", + "suggestion": "Define proper signature for SpuSetVoiceSRAttr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceStartAddr", + "return_type": "unknown", + "parameters": "s32, s32", + "suggestion": "Define proper signature for SpuSetVoiceStartAddr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceVolume", + "return_type": "unknown", + "parameters": "s32, s16, s16", + "suggestion": "Define proper signature for SpuSetVoiceVolume in header" + }, + { + "type": "extern_variable", + "name": "D_80049C40", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049C40" + }, + { + "type": "extern_variable", + "name": "func_8002BD04", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002BD04" + }, + { + "type": "extern_variable", + "name": "func_8002BFCC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002BFCC" + }, + { + "type": "extern_variable", + "name": "func_8002C004", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002C004" + }, + { + "type": "extern_variable", + "name": "func_8002C2CC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002C2CC" + }, + { + "type": "extern_variable", + "name": "func_8002C300", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002C300" + }, + { + "type": "extern_variable", + "name": "D_8007EBE4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007EBE4" + }, + { + "type": "extern_variable", + "name": "func_80030038", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80030038" + }, + { + "type": "extern_variable", + "name": "D_80081DC8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80081DC8" + }, + { + "type": "extern_variable", + "name": "D_800499A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800499A8" + }, + { + "type": "extern_variable", + "name": "D_80096704", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80096704" + }, + { + "type": "extern_variable", + "name": "func_800293D0", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800293D0" + } + ], + "timestamp": "2026-04-18T12:35:22.926140" + }, + { + "function_name": "func_800B5E64", + "file": "src/battle/battle1.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "func_800B5E64", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800B5E64" + }, + { + "type": "extern_variable", + "name": "D_800F8384", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F8384" + }, + { + "type": "extern_variable", + "name": "D_80103200", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80103200" + }, + { + "type": "extern_variable", + "name": "D_800F7E10", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7E10" + }, + { + "type": "extern_variable", + "name": "D_800F8180", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F8180" + }, + { + "type": "extern_variable", + "name": "D_800E8E88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E8E88" + }, + { + "type": "extern_variable", + "name": "D_800E8F94", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E8F94" + }, + { + "type": "extern_variable", + "name": "func_800B7DB4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800B7DB4" + }, + { + "type": "extern_variable", + "name": "D_800FA9D1", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FA9D1" + }, + { + "type": "extern_variable", + "name": "D_80163CC0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163CC0" + }, + { + "type": "extern_variable", + "name": "D_80163CC2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163CC2" + }, + { + "type": "extern_variable", + "name": "D_80163CC4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163CC4" + }, + { + "type": "extern_variable", + "name": "D_800F99EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F99EC" + }, + { + "type": "extern_variable", + "name": "D_800F99EE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F99EE" + }, + { + "type": "extern_variable", + "name": "D_800F99F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F99F0" + }, + { + "type": "extern_variable", + "name": "D_800F99F2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F99F2" + }, + { + "type": "extern_variable", + "name": "D_800F99F4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F99F4" + }, + { + "type": "extern_variable", + "name": "D_800F99F6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F99F6" + }, + { + "type": "extern_variable", + "name": "D_800FA9D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FA9D8" + }, + { + "type": "extern_variable", + "name": "D_801517F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801517F0" + }, + { + "type": "extern_variable", + "name": "D_800F7E08", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7E08" + }, + { + "type": "extern_variable", + "name": "D_801516FE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801516FE" + }, + { + "type": "extern_variable", + "name": "D_80151700", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151700" + }, + { + "type": "extern_variable", + "name": "D_80151702", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151702" + }, + { + "type": "extern_variable", + "name": "D_800F8178", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F8178" + }, + { + "type": "extern_variable", + "name": "D_800F8184", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F8184" + }, + { + "type": "extern_variable", + "name": "D_80163B44", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163B44" + }, + { + "type": "extern_variable", + "name": "D_801590E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801590E4" + }, + { + "type": "extern_variable", + "name": "D_801590E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801590E8" + }, + { + "type": "extern_variable", + "name": "D_800F7ED8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7ED8" + }, + { + "type": "extern_variable", + "name": "D_800F7EDA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EDA" + }, + { + "type": "extern_variable", + "name": "D_80151844", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151844" + }, + { + "type": "extern_variable", + "name": "D_80151846", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151846" + }, + { + "type": "extern_variable", + "name": "D_80151848", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151848" + }, + { + "type": "extern_variable", + "name": "D_801518A4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801518A4" + }, + { + "type": "extern_variable", + "name": "D_801518A6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801518A6" + }, + { + "type": "extern_variable", + "name": "D_801518A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801518A8" + }, + { + "type": "extern_variable", + "name": "D_800F7EF0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EF0" + }, + { + "type": "extern_variable", + "name": "D_800F7EDC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EDC" + }, + { + "type": "extern_variable", + "name": "D_800F7EDE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EDE" + }, + { + "type": "extern_variable", + "name": "D_800F7EE0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EE0" + }, + { + "type": "extern_variable", + "name": "D_800F7EE2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EE2" + }, + { + "type": "extern_variable", + "name": "D_800F7EE4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EE4" + }, + { + "type": "extern_variable", + "name": "D_800F7EE6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EE6" + }, + { + "type": "extern_variable", + "name": "D_800F7EE8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EE8" + }, + { + "type": "extern_variable", + "name": "func_800C0480", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C0480" + }, + { + "type": "extern_variable", + "name": "func_800C0630", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C0630" + }, + { + "type": "extern_variable", + "name": "func_800C0970", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C0970" + }, + { + "type": "extern_variable", + "name": "func_800C0B20", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C0B20" + }, + { + "type": "extern_variable", + "name": "D_80151850", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151850" + }, + { + "type": "extern_variable", + "name": "func_800B5AAC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800B5AAC" + }, + { + "type": "extern_variable", + "name": "func_800C36B4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C36B4" + }, + { + "type": "extern_variable", + "name": "func_800B4E30", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800B4E30" + }, + { + "type": "extern_variable", + "name": "func_800B54B8", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800B54B8" + }, + { + "type": "extern_variable", + "name": "func_800D09D0", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D09D0" + }, + { + "type": "extern_variable", + "name": "D_800F9DAA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9DAA" + }, + { + "type": "extern_variable", + "name": "D_800F9DAC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9DAC" + }, + { + "type": "extern_variable", + "name": "D_800FA9C6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FA9C6" + }, + { + "type": "extern_variable", + "name": "D_800F8CF4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F8CF4" + }, + { + "type": "extern_variable", + "name": "func_801B0050", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_801B0050" + }, + { + "type": "extern_variable", + "name": "func_800C74E4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C74E4" + }, + { + "type": "extern_variable", + "name": "D_800F4B0C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4B0C" + }, + { + "type": "extern_variable", + "name": "D_801AFFC0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801AFFC0" + }, + { + "type": "extern_variable", + "name": "func_8003CEBC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8003CEBC" + }, + { + "type": "extern_variable", + "name": "func_8003D1B4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8003D1B4" + }, + { + "type": "extern_variable", + "name": "func_80043938", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80043938" + }, + { + "type": "extern_variable", + "name": "func_80046960", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80046960" + }, + { + "type": "extern_variable", + "name": "func_8003BC9C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8003BC9C" + }, + { + "type": "extern_variable", + "name": "func_800468FC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800468FC" + }, + { + "type": "extern_variable", + "name": "D_800EA264", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800EA264" + } + ], + "timestamp": "2026-04-18T12:35:23.978022" + }, + { + "function_name": "func_8002CCDC", + "file": "src/main/akao.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "SpuSetVoiceARAttr", + "return_type": "unknown", + "parameters": "s32, u16, s32", + "suggestion": "Define proper signature for SpuSetVoiceARAttr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceDR", + "return_type": "unknown", + "parameters": "s32, u16", + "suggestion": "Define proper signature for SpuSetVoiceDR in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceLoopStartAddr", + "return_type": "unknown", + "parameters": "s32, s32", + "suggestion": "Define proper signature for SpuSetVoiceLoopStartAddr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoicePitch", + "return_type": "unknown", + "parameters": "u16", + "suggestion": "Define proper signature for SpuSetVoicePitch in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceRRAttr", + "return_type": "unknown", + "parameters": "s32, u16, s32", + "suggestion": "Define proper signature for SpuSetVoiceRRAttr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceSL", + "return_type": "unknown", + "parameters": "s32, u16", + "suggestion": "Define proper signature for SpuSetVoiceSL in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceSRAttr", + "return_type": "unknown", + "parameters": "s32, u16, s32", + "suggestion": "Define proper signature for SpuSetVoiceSRAttr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceStartAddr", + "return_type": "unknown", + "parameters": "s32, s32", + "suggestion": "Define proper signature for SpuSetVoiceStartAddr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceVolume", + "return_type": "unknown", + "parameters": "s32, s16, s16", + "suggestion": "Define proper signature for SpuSetVoiceVolume in header" + }, + { + "type": "extern_variable", + "name": "D_80049C40", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049C40" + }, + { + "type": "extern_variable", + "name": "func_8002BD04", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002BD04" + }, + { + "type": "extern_variable", + "name": "func_8002BFCC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002BFCC" + }, + { + "type": "extern_variable", + "name": "func_8002C004", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002C004" + }, + { + "type": "extern_variable", + "name": "func_8002C2CC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002C2CC" + }, + { + "type": "extern_variable", + "name": "func_8002C300", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002C300" + }, + { + "type": "extern_variable", + "name": "D_8007EBE4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007EBE4" + }, + { + "type": "extern_variable", + "name": "func_80030038", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80030038" + }, + { + "type": "extern_variable", + "name": "D_80081DC8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80081DC8" + }, + { + "type": "extern_variable", + "name": "D_800499A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800499A8" + }, + { + "type": "extern_variable", + "name": "D_80096704", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80096704" + }, + { + "type": "extern_variable", + "name": "func_800293D0", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800293D0" + } + ], + "timestamp": "2026-04-18T12:35:24.736873" + }, + { + "function_name": "func_800A8968", + "file": "src/field/field.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80074EB0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB0" + }, + { + "type": "extern_variable", + "name": "D_80074EB4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB4" + }, + { + "type": "extern_variable", + "name": "D_80074EB8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB8" + }, + { + "type": "extern_variable", + "name": "func_800A48B8", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800A48B8" + }, + { + "type": "extern_variable", + "name": "D_80074ED9", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074ED9" + }, + { + "type": "extern_variable", + "name": "D_800DF120", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DF120" + }, + { + "type": "extern_variable", + "name": "D_800DF122", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DF122" + }, + { + "type": "extern_variable", + "name": "D_800DEF88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DEF88" + }, + { + "type": "extern_variable", + "name": "func_800354CC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800354CC" + }, + { + "type": "extern_variable", + "name": "func_80035658", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80035658" + }, + { + "type": "extern_variable", + "name": "D_800E0638", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0638" + }, + { + "type": "extern_variable", + "name": "D_800E48F4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48F4" + }, + { + "type": "extern_variable", + "name": "D_800E48FC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48FC" + }, + { + "type": "extern_variable", + "name": "D_800E48FE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48FE" + }, + { + "type": "extern_variable", + "name": "D_800E4900", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4900" + }, + { + "type": "extern_variable", + "name": "D_800E4901", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4901" + }, + { + "type": "extern_variable", + "name": "D_800E4904", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4904" + }, + { + "type": "extern_variable", + "name": "D_800E4906", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4906" + }, + { + "type": "extern_variable", + "name": "D_800E4908", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4908" + }, + { + "type": "extern_variable", + "name": "D_800E4909", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4909" + }, + { + "type": "extern_variable", + "name": "D_800E490C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E490C" + }, + { + "type": "extern_variable", + "name": "D_800E490E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E490E" + }, + { + "type": "extern_variable", + "name": "D_800E4910", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4910" + }, + { + "type": "extern_variable", + "name": "D_800E4911", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4911" + }, + { + "type": "extern_variable", + "name": "D_800E4914", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4914" + }, + { + "type": "extern_variable", + "name": "D_800E4916", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4916" + }, + { + "type": "extern_variable", + "name": "D_800E4918", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4918" + }, + { + "type": "extern_variable", + "name": "D_800E4919", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4919" + }, + { + "type": "extern_variable", + "name": "D_8007EB98", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007EB98" + }, + { + "type": "extern_variable", + "name": "func_8001786C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001786C" + }, + { + "type": "extern_variable", + "name": "func_80020058", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80020058" + }, + { + "type": "extern_variable", + "name": "D_800491D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800491D0" + }, + { + "type": "extern_variable", + "name": "D_8008328D", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328D" + }, + { + "type": "extern_variable", + "name": "D_800832A2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800832A2" + }, + { + "type": "extern_variable", + "name": "D_8008326C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008326C" + }, + { + "type": "extern_variable", + "name": "D_80083286", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083286" + }, + { + "type": "extern_variable", + "name": "D_80083278", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083278" + }, + { + "type": "extern_variable", + "name": "D_8008327A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327A" + }, + { + "type": "extern_variable", + "name": "D_8008327E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327E" + }, + { + "type": "extern_variable", + "name": "D_80075E24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075E24" + }, + { + "type": "extern_variable", + "name": "D_80075E25", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075E25" + }, + { + "type": "extern_variable", + "name": "D_800E4214", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4214" + }, + { + "type": "extern_variable", + "name": "D_800E4280", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4280" + }, + { + "type": "extern_variable", + "name": "D_800E4D48", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4D48" + }, + { + "type": "extern_variable", + "name": "D_800E0748", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0748" + }, + { + "type": "extern_variable", + "name": "D_800E074A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074A" + }, + { + "type": "extern_variable", + "name": "D_800E074C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074C" + }, + { + "type": "extern_variable", + "name": "D_800E08C0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08C0" + }, + { + "type": "extern_variable", + "name": "D_800E074E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074E" + }, + { + "type": "extern_variable", + "name": "D_800E0754", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0754" + }, + { + "type": "extern_variable", + "name": "D_800E0758", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0758" + }, + { + "type": "extern_variable", + "name": "D_800E08A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08A8" + }, + { + "type": "extern_variable", + "name": "D_800E0756", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0756" + }, + { + "type": "extern_variable", + "name": "D_800E0750", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0750" + }, + { + "type": "extern_variable", + "name": "D_800E0751", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0751" + }, + { + "type": "extern_variable", + "name": "D_800E0752", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0752" + }, + { + "type": "extern_variable", + "name": "func_800D5A60", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D5A60" + }, + { + "type": "extern_variable", + "name": "func_800D5C9C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D5C9C" + }, + { + "type": "extern_variable", + "name": "func_800D6D44", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6D44" + }, + { + "type": "extern_variable", + "name": "func_800D6E0C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6E0C" + }, + { + "type": "extern_variable", + "name": "func_800D6F6C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6F6C" + }, + { + "type": "extern_variable", + "name": "D_80083284", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083284" + }, + { + "type": "extern_variable", + "name": "D_8008328A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328A" + }, + { + "type": "extern_variable", + "name": "D_8008328E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328E" + }, + { + "type": "extern_variable", + "name": "D_80083298", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083298" + }, + { + "type": "extern_variable", + "name": "D_8008329A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329A" + }, + { + "type": "extern_variable", + "name": "D_800E424C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E424C" + }, + { + "type": "extern_variable", + "name": "D_801142CC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801142CC" + }, + { + "type": "extern_variable", + "name": "D_8009AD30", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009AD30" + }, + { + "type": "extern_variable", + "name": "func_800C2E00", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C2E00" + }, + { + "type": "extern_variable", + "name": "func_800DA444", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800DA444" + }, + { + "type": "extern_variable", + "name": "func_800C8634", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C8634" + }, + { + "type": "extern_variable", + "name": "func_800CDC14", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800CDC14" + }, + { + "type": "extern_variable", + "name": "D_80095DE0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80095DE0" + }, + { + "type": "extern_variable", + "name": "func_80025B10", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80025B10" + }, + { + "type": "extern_variable", + "name": "func_800BEAD4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800BEAD4" + }, + { + "type": "extern_variable", + "name": "D_800E0208", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0208" + }, + { + "type": "extern_variable", + "name": "D_800756E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800756E8" + }, + { + "type": "extern_variable", + "name": "D_80083291", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083291" + }, + { + "type": "extern_variable", + "name": "D_80083294", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083294" + }, + { + "type": "extern_variable", + "name": "D_8007078C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007078C" + }, + { + "type": "extern_variable", + "name": "D_8007E7B8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B8" + }, + { + "type": "extern_variable", + "name": "D_8007E7BA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7BA" + }, + { + "type": "extern_variable", + "name": "D_8007E7AC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7AC" + }, + { + "type": "extern_variable", + "name": "D_8007E7AE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7AE" + }, + { + "type": "extern_variable", + "name": "D_8007E7B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B0" + }, + { + "type": "extern_variable", + "name": "D_8007E7B2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B2" + }, + { + "type": "extern_variable", + "name": "D_8007E7B4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B4" + }, + { + "type": "extern_variable", + "name": "D_8007E7B6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B6" + }, + { + "type": "extern_variable", + "name": "D_80082248", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082248" + }, + { + "type": "extern_variable", + "name": "D_8008325C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008325C" + }, + { + "type": "extern_variable", + "name": "D_8009D828", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D828" + }, + { + "type": "extern_variable", + "name": "D_800A0854", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A0854" + }, + { + "type": "extern_variable", + "name": "D_800A0F38", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A0F38" + }, + { + "type": "extern_variable", + "name": "D_8007E7C2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7C2" + }, + { + "type": "extern_variable", + "name": "D_80049209", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049209" + }, + { + "type": "extern_variable", + "name": "D_8004920A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8004920A" + }, + { + "type": "extern_variable", + "name": "func_80044064", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80044064" + }, + { + "type": "extern_variable", + "name": "func_800C5B38", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C5B38" + }, + { + "type": "extern_variable", + "name": "D_80081D90", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80081D90" + }, + { + "type": "extern_variable", + "name": "D_80083288", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083288" + }, + { + "type": "extern_variable", + "name": "D_800E4944", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4944" + }, + { + "type": "extern_variable", + "name": "D_80114480", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80114480" + }, + { + "type": "extern_variable", + "name": "D_800E42A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42A8" + }, + { + "type": "extern_variable", + "name": "D_8008327C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327C" + }, + { + "type": "extern_variable", + "name": "D_80083280", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083280" + }, + { + "type": "extern_variable", + "name": "D_80083282", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083282" + }, + { + "type": "extern_variable", + "name": "D_8008328F", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328F" + }, + { + "type": "extern_variable", + "name": "D_80083290", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083290" + }, + { + "type": "extern_variable", + "name": "D_8008329C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329C" + }, + { + "type": "extern_variable", + "name": "D_8008329E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329E" + }, + { + "type": "extern_variable", + "name": "D_80071748", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071748" + }, + { + "type": "extern_variable", + "name": "D_800833F8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800833F8" + }, + { + "type": "extern_variable", + "name": "D_8009A1C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009A1C4" + }, + { + "type": "extern_variable", + "name": "D_800A06B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A06B0" + }, + { + "type": "extern_variable", + "name": "D_80071A88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071A88" + }, + { + "type": "extern_variable", + "name": "D_801142D4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801142D4" + }, + { + "type": "extern_variable", + "name": "D_800E42D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42D8" + }, + { + "type": "extern_variable", + "name": "D_800E42DA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DA" + }, + { + "type": "extern_variable", + "name": "D_800E42DC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DC" + }, + { + "type": "extern_variable", + "name": "D_800E42E0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E0" + }, + { + "type": "extern_variable", + "name": "D_800E42E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E4" + }, + { + "type": "extern_variable", + "name": "D_800E42E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E8" + }, + { + "type": "extern_variable", + "name": "D_800E42EA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EA" + }, + { + "type": "extern_variable", + "name": "D_800E42EE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EE" + }, + { + "type": "extern_variable", + "name": "D_800E48E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48E8" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-18T12:35:24.899176" + }, + { + "function_name": "func_800A866C", + "file": "src/battle/battle.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_8009D954", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D954" + }, + { + "type": "extern_variable", + "name": "D_800FA9D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FA9D0" + }, + { + "type": "extern_variable", + "name": "D_800FA9D4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FA9D4" + }, + { + "type": "extern_variable", + "name": "D_800F9F3C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9F3C" + }, + { + "type": "extern_variable", + "name": "D_800F9F42", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9F42" + }, + { + "type": "extern_variable", + "name": "D_800F9F44", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9F44" + }, + { + "type": "extern_variable", + "name": "D_800F87F4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F87F4" + }, + { + "type": "extern_variable", + "name": "D_800F5E65", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E65" + }, + { + "type": "extern_variable", + "name": "D_800F3A40", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F3A40" + }, + { + "type": "extern_variable", + "name": "D_80071C32", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071C32" + }, + { + "type": "extern_variable", + "name": "D_80071E64", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071E64" + }, + { + "type": "extern_variable", + "name": "D_800722D6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800722D6" + }, + { + "type": "extern_variable", + "name": "D_800722D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800722D8" + }, + { + "type": "extern_variable", + "name": "D_800738A0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738A0" + }, + { + "type": "extern_variable", + "name": "D_800738CA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738CA" + }, + { + "type": "extern_variable", + "name": "D_801671B8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801671B8" + }, + { + "type": "extern_variable", + "name": "D_801671BA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801671BA" + }, + { + "type": "extern_variable", + "name": "D_801671BC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801671BC" + }, + { + "type": "extern_variable", + "name": "D_8009D866", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D866" + }, + { + "type": "extern_variable", + "name": "D_800F5E68", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E68" + }, + { + "type": "extern_variable", + "name": "D_800F5E6A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E6A" + }, + { + "type": "extern_variable", + "name": "D_800708D1", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708D1" + }, + { + "type": "extern_variable", + "name": "D_8009D85E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85E" + }, + { + "type": "extern_variable", + "name": "D_8009D862", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D862" + }, + { + "type": "extern_variable", + "name": "D_800F5E70", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E70" + }, + { + "type": "extern_variable", + "name": "D_800F5E72", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E72" + }, + { + "type": "extern_variable", + "name": "D_800738A4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738A4" + }, + { + "type": "extern_variable", + "name": "D_800738C7", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738C7" + }, + { + "type": "extern_variable", + "name": "D_8009D84E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D84E" + }, + { + "type": "extern_variable", + "name": "D_800F5E64", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E64" + }, + { + "type": "extern_variable", + "name": "D_800F5EFC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5EFC" + }, + { + "type": "extern_variable", + "name": "func_800AA574", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AA574" + }, + { + "type": "extern_variable", + "name": "func_800AA688", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AA688" + }, + { + "type": "extern_variable", + "name": "D_80163778", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163778" + }, + { + "type": "extern_variable", + "name": "D_800E7BA4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BA4" + }, + { + "type": "extern_variable", + "name": "D_800E7BA5", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BA5" + }, + { + "type": "extern_variable", + "name": "D_800E7BA6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BA6" + }, + { + "type": "extern_variable", + "name": "D_800F5E74", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E74" + }, + { + "type": "extern_variable", + "name": "D_800F5E76", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E76" + }, + { + "type": "extern_variable", + "name": "D_800730D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730D0" + }, + { + "type": "extern_variable", + "name": "D_800E7BBC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BBC" + }, + { + "type": "extern_variable", + "name": "D_800E7BBD", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BBD" + }, + { + "type": "extern_variable", + "name": "D_8009D86F", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D86F" + }, + { + "type": "extern_variable", + "name": "D_800E7BCC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BCC" + }, + { + "type": "extern_variable", + "name": "D_800E7BFC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BFC" + }, + { + "type": "extern_variable", + "name": "D_800E7BEC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BEC" + }, + { + "type": "extern_variable", + "name": "func_800AF264", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AF264" + }, + { + "type": "extern_variable", + "name": "func_800AF3AC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AF3AC" + }, + { + "type": "extern_variable", + "name": "D_800E7C7C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7C7C" + }, + { + "type": "extern_variable", + "name": "D_800E7CBC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7CBC" + }, + { + "type": "extern_variable", + "name": "D_800E7CDC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7CDC" + }, + { + "type": "extern_variable", + "name": "D_800F4A48", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4A48" + }, + { + "type": "extern_variable", + "name": "D_800F4A70", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4A70" + }, + { + "type": "extern_variable", + "name": "D_800F4A98", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4A98" + }, + { + "type": "extern_variable", + "name": "D_800F49A0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F49A0" + }, + { + "type": "extern_variable", + "name": "D_800F49A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F49A8" + }, + { + "type": "extern_variable", + "name": "D_8009D85C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85C" + }, + { + "type": "extern_variable", + "name": "D_8009D860", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D860" + }, + { + "type": "extern_variable", + "name": "D_8009D868", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D868" + }, + { + "type": "extern_variable", + "name": "D_8009D86A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D86A" + }, + { + "type": "extern_variable", + "name": "D_800F5F01", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5F01" + }, + { + "type": "extern_variable", + "name": "D_800F87F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F87F0" + }, + { + "type": "extern_variable", + "name": "func_800A5250", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800A5250" + } + ], + "timestamp": "2026-04-18T12:35:25.347403" + }, + { + "function_name": "func_8002A28C", + "file": "src/main/akao.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "SpuSetVoiceARAttr", + "return_type": "unknown", + "parameters": "s32, u16, s32", + "suggestion": "Define proper signature for SpuSetVoiceARAttr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceDR", + "return_type": "unknown", + "parameters": "s32, u16", + "suggestion": "Define proper signature for SpuSetVoiceDR in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceLoopStartAddr", + "return_type": "unknown", + "parameters": "s32, s32", + "suggestion": "Define proper signature for SpuSetVoiceLoopStartAddr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoicePitch", + "return_type": "unknown", + "parameters": "u16", + "suggestion": "Define proper signature for SpuSetVoicePitch in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceRRAttr", + "return_type": "unknown", + "parameters": "s32, u16, s32", + "suggestion": "Define proper signature for SpuSetVoiceRRAttr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceSL", + "return_type": "unknown", + "parameters": "s32, u16", + "suggestion": "Define proper signature for SpuSetVoiceSL in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceSRAttr", + "return_type": "unknown", + "parameters": "s32, u16, s32", + "suggestion": "Define proper signature for SpuSetVoiceSRAttr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceStartAddr", + "return_type": "unknown", + "parameters": "s32, s32", + "suggestion": "Define proper signature for SpuSetVoiceStartAddr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceVolume", + "return_type": "unknown", + "parameters": "s32, s16, s16", + "suggestion": "Define proper signature for SpuSetVoiceVolume in header" + }, + { + "type": "extern_variable", + "name": "D_80049C40", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049C40" + }, + { + "type": "extern_variable", + "name": "func_8002BD04", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002BD04" + }, + { + "type": "extern_variable", + "name": "func_8002BFCC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002BFCC" + }, + { + "type": "extern_variable", + "name": "func_8002C004", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002C004" + }, + { + "type": "extern_variable", + "name": "func_8002C2CC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002C2CC" + }, + { + "type": "extern_variable", + "name": "func_8002C300", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002C300" + }, + { + "type": "extern_variable", + "name": "D_8007EBE4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007EBE4" + }, + { + "type": "extern_variable", + "name": "func_80030038", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80030038" + }, + { + "type": "extern_variable", + "name": "D_80081DC8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80081DC8" + }, + { + "type": "extern_variable", + "name": "D_800499A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800499A8" + }, + { + "type": "extern_variable", + "name": "D_80096704", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80096704" + }, + { + "type": "extern_variable", + "name": "func_800293D0", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800293D0" + } + ], + "timestamp": "2026-04-18T12:35:25.858422" + }, + { + "function_name": "func_800B8B48", + "file": "src/battle/battle1.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "func_800B5E64", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800B5E64" + }, + { + "type": "extern_variable", + "name": "D_800F8384", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F8384" + }, + { + "type": "extern_variable", + "name": "D_80103200", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80103200" + }, + { + "type": "extern_variable", + "name": "D_800F7E10", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7E10" + }, + { + "type": "extern_variable", + "name": "D_800F8180", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F8180" + }, + { + "type": "extern_variable", + "name": "D_800E8E88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E8E88" + }, + { + "type": "extern_variable", + "name": "D_800E8F94", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E8F94" + }, + { + "type": "extern_variable", + "name": "func_800B7DB4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800B7DB4" + }, + { + "type": "extern_variable", + "name": "D_800FA9D1", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FA9D1" + }, + { + "type": "extern_variable", + "name": "D_80163CC0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163CC0" + }, + { + "type": "extern_variable", + "name": "D_80163CC2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163CC2" + }, + { + "type": "extern_variable", + "name": "D_80163CC4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163CC4" + }, + { + "type": "extern_variable", + "name": "D_800F99EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F99EC" + }, + { + "type": "extern_variable", + "name": "D_800F99EE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F99EE" + }, + { + "type": "extern_variable", + "name": "D_800F99F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F99F0" + }, + { + "type": "extern_variable", + "name": "D_800F99F2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F99F2" + }, + { + "type": "extern_variable", + "name": "D_800F99F4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F99F4" + }, + { + "type": "extern_variable", + "name": "D_800F99F6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F99F6" + }, + { + "type": "extern_variable", + "name": "D_800FA9D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FA9D8" + }, + { + "type": "extern_variable", + "name": "D_801517F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801517F0" + }, + { + "type": "extern_variable", + "name": "D_800F7E08", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7E08" + }, + { + "type": "extern_variable", + "name": "D_801516FE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801516FE" + }, + { + "type": "extern_variable", + "name": "D_80151700", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151700" + }, + { + "type": "extern_variable", + "name": "D_80151702", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151702" + }, + { + "type": "extern_variable", + "name": "D_800F8178", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F8178" + }, + { + "type": "extern_variable", + "name": "D_800F8184", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F8184" + }, + { + "type": "extern_variable", + "name": "D_80163B44", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163B44" + }, + { + "type": "extern_variable", + "name": "D_801590E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801590E4" + }, + { + "type": "extern_variable", + "name": "D_801590E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801590E8" + }, + { + "type": "extern_variable", + "name": "D_800F7ED8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7ED8" + }, + { + "type": "extern_variable", + "name": "D_800F7EDA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EDA" + }, + { + "type": "extern_variable", + "name": "D_80151844", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151844" + }, + { + "type": "extern_variable", + "name": "D_80151846", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151846" + }, + { + "type": "extern_variable", + "name": "D_80151848", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151848" + }, + { + "type": "extern_variable", + "name": "D_801518A4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801518A4" + }, + { + "type": "extern_variable", + "name": "D_801518A6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801518A6" + }, + { + "type": "extern_variable", + "name": "D_801518A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801518A8" + }, + { + "type": "extern_variable", + "name": "D_800F7EF0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EF0" + }, + { + "type": "extern_variable", + "name": "D_800F7EDC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EDC" + }, + { + "type": "extern_variable", + "name": "D_800F7EDE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EDE" + }, + { + "type": "extern_variable", + "name": "D_800F7EE0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EE0" + }, + { + "type": "extern_variable", + "name": "D_800F7EE2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EE2" + }, + { + "type": "extern_variable", + "name": "D_800F7EE4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EE4" + }, + { + "type": "extern_variable", + "name": "D_800F7EE6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EE6" + }, + { + "type": "extern_variable", + "name": "D_800F7EE8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EE8" + }, + { + "type": "extern_variable", + "name": "func_800C0480", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C0480" + }, + { + "type": "extern_variable", + "name": "func_800C0630", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C0630" + }, + { + "type": "extern_variable", + "name": "func_800C0970", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C0970" + }, + { + "type": "extern_variable", + "name": "func_800C0B20", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C0B20" + }, + { + "type": "extern_variable", + "name": "D_80151850", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151850" + }, + { + "type": "extern_variable", + "name": "func_800B5AAC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800B5AAC" + }, + { + "type": "extern_variable", + "name": "func_800C36B4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C36B4" + }, + { + "type": "extern_variable", + "name": "func_800B4E30", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800B4E30" + }, + { + "type": "extern_variable", + "name": "func_800B54B8", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800B54B8" + }, + { + "type": "extern_variable", + "name": "func_800D09D0", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D09D0" + }, + { + "type": "extern_variable", + "name": "D_800F9DAA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9DAA" + }, + { + "type": "extern_variable", + "name": "D_800F9DAC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9DAC" + }, + { + "type": "extern_variable", + "name": "D_800FA9C6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FA9C6" + }, + { + "type": "extern_variable", + "name": "D_800F8CF4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F8CF4" + }, + { + "type": "extern_variable", + "name": "func_801B0050", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_801B0050" + }, + { + "type": "extern_variable", + "name": "func_800C74E4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C74E4" + }, + { + "type": "extern_variable", + "name": "D_800F4B0C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4B0C" + }, + { + "type": "extern_variable", + "name": "D_801AFFC0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801AFFC0" + }, + { + "type": "extern_variable", + "name": "func_8003CEBC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8003CEBC" + }, + { + "type": "extern_variable", + "name": "func_8003D1B4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8003D1B4" + }, + { + "type": "extern_variable", + "name": "func_80043938", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80043938" + }, + { + "type": "extern_variable", + "name": "func_80046960", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80046960" + }, + { + "type": "extern_variable", + "name": "func_8003BC9C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8003BC9C" + }, + { + "type": "extern_variable", + "name": "func_800468FC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800468FC" + }, + { + "type": "extern_variable", + "name": "D_800EA264", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800EA264" + } + ], + "timestamp": "2026-04-18T12:35:26.205847" + }, + { + "function_name": "func_800E3FB4", + "file": "src/battle/battle3.c", + "primary_error": "Local variable 'temp_s0' is void* but used with -> (m2c struct type inference failure)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_80026A34", + "return_type": "void", + "parameters": "?, ?, ?, ?", + "suggestion": "Define proper signature for func_80026A34 in header" + }, + { + "type": "extern_function", + "name": "func_80028484", + "return_type": "void", + "parameters": "s16*, u16, ?", + "suggestion": "Define proper signature for func_80028484 in header" + }, + { + "type": "extern_function", + "name": "func_800E368C", + "return_type": "void", + "parameters": "?, ?, ?", + "suggestion": "Define proper signature for func_800E368C in header" + }, + { + "type": "extern_variable", + "name": "D_800FB064", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FB064" + }, + { + "type": "extern_variable", + "name": "D_800FF060", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF060" + }, + { + "type": "extern_variable", + "name": "D_800FF064", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF064" + }, + { + "type": "extern_variable", + "name": "D_800FF068", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF068" + }, + { + "type": "extern_variable", + "name": "D_800FF06C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF06C" + }, + { + "type": "extern_variable", + "name": "D_800FF070", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF070" + }, + { + "type": "extern_variable", + "name": "D_800FF074", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF074" + }, + { + "type": "extern_variable", + "name": "D_800FF094", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF094" + }, + { + "type": "extern_variable", + "name": "D_800FF098", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF098" + }, + { + "type": "extern_variable", + "name": "D_800FF0D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF0D8" + }, + { + "type": "extern_variable", + "name": "D_800FF0DC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF0DC" + }, + { + "type": "extern_variable", + "name": "D_800FF0E0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF0E0" + }, + { + "type": "extern_variable", + "name": "D_80103154", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80103154" + }, + { + "type": "extern_variable", + "name": "D_80103158", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80103158" + }, + { + "type": "extern_variable", + "name": "D_80103160", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80103160" + }, + { + "type": "extern_variable", + "name": "D_80103188", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80103188" + }, + { + "type": "extern_variable", + "name": "D_801031CC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801031CC" + }, + { + "type": "extern_variable", + "name": "D_801031D4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801031D4" + }, + { + "type": "extern_variable", + "name": "func_80044AC0", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80044AC0" + }, + { + "type": "extern_variable", + "name": "func_80046794", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80046794" + }, + { + "type": "extern_variable", + "name": "D_800F57F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F57F0" + }, + { + "type": "extern_variable", + "name": "D_800F1E54", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F1E54" + }, + { + "type": "extern_variable", + "name": "D_800F1E56", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F1E56" + }, + { + "type": "extern_variable", + "name": "D_800F1E58", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F1E58" + }, + { + "type": "extern_variable", + "name": "D_800F1E5A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F1E5A" + }, + { + "type": "extern_variable", + "name": "D_800F1E5C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F1E5C" + }, + { + "type": "extern_variable", + "name": "D_800F1E5E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F1E5E" + }, + { + "type": "extern_variable", + "name": "D_800F1E60", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F1E60" + }, + { + "type": "extern_variable", + "name": "D_800F1E62", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F1E62" + }, + { + "type": "extern_variable", + "name": "D_800F2F8C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F2F8C" + }, + { + "type": "extern_variable", + "name": "func_800DA380", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800DA380" + }, + { + "type": "extern_variable", + "name": "D_801516FE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801516FE" + }, + { + "type": "extern_variable", + "name": "D_800492FC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800492FC" + }, + { + "type": "extern_variable", + "name": "D_800F55D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F55D8" + }, + { + "type": "extern_variable", + "name": "func_800DDAD8", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800DDAD8" + }, + { + "type": "extern_variable", + "name": "func_800DDCE8", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800DDCE8" + }, + { + "type": "extern_variable", + "name": "D_800F90C6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F90C6" + }, + { + "type": "extern_variable", + "name": "D_8009D8FE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D8FE" + }, + { + "type": "extern_variable", + "name": "D_800F3168", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F3168" + }, + { + "type": "extern_variable", + "name": "D_8009D85C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85C" + }, + { + "type": "extern_variable", + "name": "D_8009D85E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85E" + }, + { + "type": "extern_variable", + "name": "D_801031F4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801031F4" + }, + { + "type": "extern_variable", + "name": "D_80151688", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151688" + }, + { + "type": "extern_variable", + "name": "D_8015174C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8015174C" + }, + { + "type": "extern_variable", + "name": "D_8015178C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8015178C" + }, + { + "type": "extern_variable", + "name": "D_801517C8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801517C8" + }, + { + "type": "extern_variable", + "name": "D_8015187C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8015187C" + }, + { + "type": "extern_variable", + "name": "D_800F33B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F33B0" + }, + { + "type": "extern_variable", + "name": "D_80163778", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163778" + }, + { + "type": "extern_variable", + "name": "D_80163B70", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163B70" + }, + { + "type": "extern_variable", + "name": "D_800F5778", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5778" + }, + { + "type": "extern_variable", + "name": "func_8001786C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001786C" + }, + { + "type": "extern_variable", + "name": "func_80020058", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80020058" + }, + { + "type": "extern_variable", + "name": "D_8009D854", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D854" + }, + { + "type": "extern_variable", + "name": "D_8009D856", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D856" + }, + { + "type": "extern_variable", + "name": "D_8009D860", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D860" + }, + { + "type": "extern_variable", + "name": "D_8009DC5C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009DC5C" + }, + { + "type": "extern_variable", + "name": "D_800F577B", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F577B" + }, + { + "type": "extern_variable", + "name": "D_800F90BE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F90BE" + }, + { + "type": "extern_variable", + "name": "D_800F90BF", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F90BF" + }, + { + "type": "extern_variable", + "name": "D_801516A4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801516A4" + }, + { + "type": "extern_variable", + "name": "D_801516CC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801516CC" + }, + { + "type": "extern_variable", + "name": "D_800F90FC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F90FC" + }, + { + "type": "extern_variable", + "name": "D_800F90FE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F90FE" + }, + { + "type": "extern_variable", + "name": "D_800F9100", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9100" + }, + { + "type": "extern_variable", + "name": "D_800F9102", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9102" + }, + { + "type": "extern_variable", + "name": "D_800F9104", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9104" + }, + { + "type": "extern_variable", + "name": "D_800F9106", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9106" + }, + { + "type": "extern_variable", + "name": "D_800F9107", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9107" + }, + { + "type": "extern_variable", + "name": "D_800F9108", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9108" + }, + { + "type": "extern_variable", + "name": "D_800F9109", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9109" + }, + { + "type": "extern_variable", + "name": "D_800F910A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F910A" + }, + { + "type": "extern_variable", + "name": "D_800F910B", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F910B" + }, + { + "type": "extern_variable", + "name": "D_800F910C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F910C" + }, + { + "type": "extern_variable", + "name": "D_800F910D", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F910D" + }, + { + "type": "extern_variable", + "name": "D_800F32E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F32E4" + }, + { + "type": "extern_variable", + "name": "D_80166F78", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80166F78" + }, + { + "type": "extern_variable", + "name": "func_80046960", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80046960" + }, + { + "type": "extern_variable", + "name": "func_800468FC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800468FC" + }, + { + "type": "extern_variable", + "name": "D_800F335C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F335C" + }, + { + "type": "extern_variable", + "name": "D_800F335D", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F335D" + }, + { + "type": "extern_variable", + "name": "D_800F33AC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F33AC" + }, + { + "type": "extern_variable", + "name": "func_80028484", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80028484" + }, + { + "type": "extern_variable", + "name": "func_800E368C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800E368C" + }, + { + "type": "extern_variable", + "name": "D_8009DB94", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009DB94" + } + ], + "timestamp": "2026-04-18T12:35:26.335691" + }, + { + "function_name": "func_800D8710", + "file": "src/field/field.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80074EB0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB0" + }, + { + "type": "extern_variable", + "name": "D_80074EB4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB4" + }, + { + "type": "extern_variable", + "name": "D_80074EB8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB8" + }, + { + "type": "extern_variable", + "name": "func_800A48B8", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800A48B8" + }, + { + "type": "extern_variable", + "name": "D_80074ED9", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074ED9" + }, + { + "type": "extern_variable", + "name": "D_800DF120", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DF120" + }, + { + "type": "extern_variable", + "name": "D_800DF122", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DF122" + }, + { + "type": "extern_variable", + "name": "D_800DEF88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DEF88" + }, + { + "type": "extern_variable", + "name": "func_800354CC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800354CC" + }, + { + "type": "extern_variable", + "name": "func_80035658", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80035658" + }, + { + "type": "extern_variable", + "name": "D_800E0638", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0638" + }, + { + "type": "extern_variable", + "name": "D_800E48F4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48F4" + }, + { + "type": "extern_variable", + "name": "D_800E48FC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48FC" + }, + { + "type": "extern_variable", + "name": "D_800E48FE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48FE" + }, + { + "type": "extern_variable", + "name": "D_800E4900", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4900" + }, + { + "type": "extern_variable", + "name": "D_800E4901", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4901" + }, + { + "type": "extern_variable", + "name": "D_800E4904", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4904" + }, + { + "type": "extern_variable", + "name": "D_800E4906", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4906" + }, + { + "type": "extern_variable", + "name": "D_800E4908", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4908" + }, + { + "type": "extern_variable", + "name": "D_800E4909", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4909" + }, + { + "type": "extern_variable", + "name": "D_800E490C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E490C" + }, + { + "type": "extern_variable", + "name": "D_800E490E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E490E" + }, + { + "type": "extern_variable", + "name": "D_800E4910", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4910" + }, + { + "type": "extern_variable", + "name": "D_800E4911", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4911" + }, + { + "type": "extern_variable", + "name": "D_800E4914", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4914" + }, + { + "type": "extern_variable", + "name": "D_800E4916", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4916" + }, + { + "type": "extern_variable", + "name": "D_800E4918", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4918" + }, + { + "type": "extern_variable", + "name": "D_800E4919", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4919" + }, + { + "type": "extern_variable", + "name": "D_8007EB98", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007EB98" + }, + { + "type": "extern_variable", + "name": "func_8001786C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001786C" + }, + { + "type": "extern_variable", + "name": "func_80020058", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80020058" + }, + { + "type": "extern_variable", + "name": "D_800491D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800491D0" + }, + { + "type": "extern_variable", + "name": "D_8008328D", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328D" + }, + { + "type": "extern_variable", + "name": "D_800832A2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800832A2" + }, + { + "type": "extern_variable", + "name": "D_8008326C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008326C" + }, + { + "type": "extern_variable", + "name": "D_80083286", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083286" + }, + { + "type": "extern_variable", + "name": "D_80083278", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083278" + }, + { + "type": "extern_variable", + "name": "D_8008327A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327A" + }, + { + "type": "extern_variable", + "name": "D_8008327E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327E" + }, + { + "type": "extern_variable", + "name": "D_80075E24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075E24" + }, + { + "type": "extern_variable", + "name": "D_80075E25", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075E25" + }, + { + "type": "extern_variable", + "name": "D_800E4214", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4214" + }, + { + "type": "extern_variable", + "name": "D_800E4280", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4280" + }, + { + "type": "extern_variable", + "name": "D_800E4D48", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4D48" + }, + { + "type": "extern_variable", + "name": "D_800E0748", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0748" + }, + { + "type": "extern_variable", + "name": "D_800E074A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074A" + }, + { + "type": "extern_variable", + "name": "D_800E074C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074C" + }, + { + "type": "extern_variable", + "name": "D_800E08C0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08C0" + }, + { + "type": "extern_variable", + "name": "D_800E074E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074E" + }, + { + "type": "extern_variable", + "name": "D_800E0754", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0754" + }, + { + "type": "extern_variable", + "name": "D_800E0758", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0758" + }, + { + "type": "extern_variable", + "name": "D_800E08A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08A8" + }, + { + "type": "extern_variable", + "name": "D_800E0756", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0756" + }, + { + "type": "extern_variable", + "name": "D_800E0750", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0750" + }, + { + "type": "extern_variable", + "name": "D_800E0751", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0751" + }, + { + "type": "extern_variable", + "name": "D_800E0752", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0752" + }, + { + "type": "extern_variable", + "name": "func_800D5A60", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D5A60" + }, + { + "type": "extern_variable", + "name": "func_800D5C9C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D5C9C" + }, + { + "type": "extern_variable", + "name": "func_800D6D44", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6D44" + }, + { + "type": "extern_variable", + "name": "func_800D6E0C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6E0C" + }, + { + "type": "extern_variable", + "name": "func_800D6F6C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6F6C" + }, + { + "type": "extern_variable", + "name": "D_80083284", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083284" + }, + { + "type": "extern_variable", + "name": "D_8008328A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328A" + }, + { + "type": "extern_variable", + "name": "D_8008328E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328E" + }, + { + "type": "extern_variable", + "name": "D_80083298", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083298" + }, + { + "type": "extern_variable", + "name": "D_8008329A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329A" + }, + { + "type": "extern_variable", + "name": "D_800E424C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E424C" + }, + { + "type": "extern_variable", + "name": "D_801142CC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801142CC" + }, + { + "type": "extern_variable", + "name": "D_8009AD30", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009AD30" + }, + { + "type": "extern_variable", + "name": "func_800C2E00", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C2E00" + }, + { + "type": "extern_variable", + "name": "func_800DA444", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800DA444" + }, + { + "type": "extern_variable", + "name": "func_800C8634", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C8634" + }, + { + "type": "extern_variable", + "name": "func_800CDC14", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800CDC14" + }, + { + "type": "extern_variable", + "name": "D_80095DE0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80095DE0" + }, + { + "type": "extern_variable", + "name": "func_80025B10", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80025B10" + }, + { + "type": "extern_variable", + "name": "func_800BEAD4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800BEAD4" + }, + { + "type": "extern_variable", + "name": "D_800E0208", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0208" + }, + { + "type": "extern_variable", + "name": "D_800756E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800756E8" + }, + { + "type": "extern_variable", + "name": "D_80083291", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083291" + }, + { + "type": "extern_variable", + "name": "D_80083294", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083294" + }, + { + "type": "extern_variable", + "name": "D_8007078C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007078C" + }, + { + "type": "extern_variable", + "name": "D_8007E7B8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B8" + }, + { + "type": "extern_variable", + "name": "D_8007E7BA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7BA" + }, + { + "type": "extern_variable", + "name": "D_8007E7AC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7AC" + }, + { + "type": "extern_variable", + "name": "D_8007E7AE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7AE" + }, + { + "type": "extern_variable", + "name": "D_8007E7B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B0" + }, + { + "type": "extern_variable", + "name": "D_8007E7B2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B2" + }, + { + "type": "extern_variable", + "name": "D_8007E7B4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B4" + }, + { + "type": "extern_variable", + "name": "D_8007E7B6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B6" + }, + { + "type": "extern_variable", + "name": "D_80082248", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082248" + }, + { + "type": "extern_variable", + "name": "D_8008325C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008325C" + }, + { + "type": "extern_variable", + "name": "D_8009D828", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D828" + }, + { + "type": "extern_variable", + "name": "D_800A0854", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A0854" + }, + { + "type": "extern_variable", + "name": "D_800A0F38", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A0F38" + }, + { + "type": "extern_variable", + "name": "D_8007E7C2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7C2" + }, + { + "type": "extern_variable", + "name": "D_80049209", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049209" + }, + { + "type": "extern_variable", + "name": "D_8004920A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8004920A" + }, + { + "type": "extern_variable", + "name": "func_80044064", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80044064" + }, + { + "type": "extern_variable", + "name": "func_800C5B38", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C5B38" + }, + { + "type": "extern_variable", + "name": "D_80081D90", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80081D90" + }, + { + "type": "extern_variable", + "name": "D_80083288", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083288" + }, + { + "type": "extern_variable", + "name": "D_800E4944", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4944" + }, + { + "type": "extern_variable", + "name": "D_80114480", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80114480" + }, + { + "type": "extern_variable", + "name": "D_800E42A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42A8" + }, + { + "type": "extern_variable", + "name": "D_8008327C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327C" + }, + { + "type": "extern_variable", + "name": "D_80083280", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083280" + }, + { + "type": "extern_variable", + "name": "D_80083282", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083282" + }, + { + "type": "extern_variable", + "name": "D_8008328F", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328F" + }, + { + "type": "extern_variable", + "name": "D_80083290", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083290" + }, + { + "type": "extern_variable", + "name": "D_8008329C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329C" + }, + { + "type": "extern_variable", + "name": "D_8008329E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329E" + }, + { + "type": "extern_variable", + "name": "D_80071748", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071748" + }, + { + "type": "extern_variable", + "name": "D_800833F8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800833F8" + }, + { + "type": "extern_variable", + "name": "D_8009A1C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009A1C4" + }, + { + "type": "extern_variable", + "name": "D_800A06B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A06B0" + }, + { + "type": "extern_variable", + "name": "D_80071A88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071A88" + }, + { + "type": "extern_variable", + "name": "D_801142D4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801142D4" + }, + { + "type": "extern_variable", + "name": "D_800E42D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42D8" + }, + { + "type": "extern_variable", + "name": "D_800E42DA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DA" + }, + { + "type": "extern_variable", + "name": "D_800E42DC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DC" + }, + { + "type": "extern_variable", + "name": "D_800E42E0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E0" + }, + { + "type": "extern_variable", + "name": "D_800E42E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E4" + }, + { + "type": "extern_variable", + "name": "D_800E42E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E8" + }, + { + "type": "extern_variable", + "name": "D_800E42EA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EA" + }, + { + "type": "extern_variable", + "name": "D_800E42EE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EE" + }, + { + "type": "extern_variable", + "name": "D_800E48E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48E8" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-18T12:35:26.854381" + }, + { + "function_name": "func_8002F848", + "file": "src/main/akao.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "SpuSetVoiceARAttr", + "return_type": "unknown", + "parameters": "s32, u16, s32", + "suggestion": "Define proper signature for SpuSetVoiceARAttr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceDR", + "return_type": "unknown", + "parameters": "s32, u16", + "suggestion": "Define proper signature for SpuSetVoiceDR in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceLoopStartAddr", + "return_type": "unknown", + "parameters": "s32, s32", + "suggestion": "Define proper signature for SpuSetVoiceLoopStartAddr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoicePitch", + "return_type": "unknown", + "parameters": "u16", + "suggestion": "Define proper signature for SpuSetVoicePitch in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceRRAttr", + "return_type": "unknown", + "parameters": "s32, u16, s32", + "suggestion": "Define proper signature for SpuSetVoiceRRAttr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceSL", + "return_type": "unknown", + "parameters": "s32, u16", + "suggestion": "Define proper signature for SpuSetVoiceSL in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceSRAttr", + "return_type": "unknown", + "parameters": "s32, u16, s32", + "suggestion": "Define proper signature for SpuSetVoiceSRAttr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceStartAddr", + "return_type": "unknown", + "parameters": "s32, s32", + "suggestion": "Define proper signature for SpuSetVoiceStartAddr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceVolume", + "return_type": "unknown", + "parameters": "s32, s16, s16", + "suggestion": "Define proper signature for SpuSetVoiceVolume in header" + }, + { + "type": "extern_variable", + "name": "D_80049C40", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049C40" + }, + { + "type": "extern_variable", + "name": "func_8002BD04", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002BD04" + }, + { + "type": "extern_variable", + "name": "func_8002BFCC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002BFCC" + }, + { + "type": "extern_variable", + "name": "func_8002C004", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002C004" + }, + { + "type": "extern_variable", + "name": "func_8002C2CC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002C2CC" + }, + { + "type": "extern_variable", + "name": "func_8002C300", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002C300" + }, + { + "type": "extern_variable", + "name": "D_8007EBE4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007EBE4" + }, + { + "type": "extern_variable", + "name": "func_80030038", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80030038" + }, + { + "type": "extern_variable", + "name": "D_80081DC8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80081DC8" + }, + { + "type": "extern_variable", + "name": "D_800499A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800499A8" + }, + { + "type": "extern_variable", + "name": "D_80096704", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80096704" + }, + { + "type": "extern_variable", + "name": "func_800293D0", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800293D0" + } + ], + "timestamp": "2026-04-18T12:35:27.369979" + }, + { + "function_name": "func_800D4710", + "file": "src/battle/battle2.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_8003BD7C", + "return_type": "s32", + "parameters": "?*, ?*, ?*, ?*, u32*, void*, DR_MODE*, void*, ?*, ?*", + "suggestion": "Define proper signature for func_8003BD7C in header" + }, + { + "type": "extern_variable", + "name": "func_8003B51C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8003B51C" + }, + { + "type": "extern_variable", + "name": "func_800D4284", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D4284" + }, + { + "type": "extern_variable", + "name": "D_800F0C44", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F0C44" + }, + { + "type": "extern_variable", + "name": "func_800D6840", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6840" + }, + { + "type": "extern_variable", + "name": "D_800F15AC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F15AC" + }, + { + "type": "extern_variable", + "name": "func_8003C21C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8003C21C" + }, + { + "type": "extern_variable", + "name": "func_80046794", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80046794" + }, + { + "type": "extern_variable", + "name": "D_800F1914", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F1914" + }, + { + "type": "extern_variable", + "name": "D_800F191C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F191C" + }, + { + "type": "extern_variable", + "name": "D_800F1924", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F1924" + }, + { + "type": "extern_variable", + "name": "D_800F192C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F192C" + }, + { + "type": "unknown_variable", + "name": "sp48", + "suggestion": "m2c could not determine type of variable sp48" + }, + { + "type": "unknown_variable", + "name": "sp4C", + "suggestion": "m2c could not determine type of variable sp4C" + } + ], + "timestamp": "2026-04-18T12:35:27.410742" + }, + { + "function_name": "func_800A17C0", + "file": "src/ending/ending.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_8004656C", + "return_type": "s16", + "parameters": "s32, ?, s16, s16", + "suggestion": "Define proper signature for func_8004656C in header" + }, + { + "type": "extern_variable", + "name": "func_80043D3C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80043D3C" + }, + { + "type": "extern_variable", + "name": "func_800443B0", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800443B0" + }, + { + "type": "extern_variable", + "name": "func_800444AC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800444AC" + }, + { + "type": "extern_variable", + "name": "D_800AF2E0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800AF2E0" + }, + { + "type": "extern_variable", + "name": "D_800AF398", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800AF398" + }, + { + "type": "extern_variable", + "name": "func_80039EDC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80039EDC" + }, + { + "type": "extern_variable", + "name": "func_8003D0C0", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8003D0C0" + }, + { + "type": "extern_variable", + "name": "func_8003D1B4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8003D1B4" + }, + { + "type": "extern_variable", + "name": "func_80036244", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80036244" + }, + { + "type": "extern_variable", + "name": "func_80044000", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80044000" + }, + { + "type": "extern_variable", + "name": "func_80046CFC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80046CFC" + }, + { + "type": "extern_variable", + "name": "func_80046D0C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80046D0C" + } + ], + "timestamp": "2026-04-18T12:35:27.498718" + }, + { + "function_name": "func_800AAB24", + "file": "src/field/field.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80074EB0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB0" + }, + { + "type": "extern_variable", + "name": "D_80074EB4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB4" + }, + { + "type": "extern_variable", + "name": "D_80074EB8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB8" + }, + { + "type": "extern_variable", + "name": "func_800A48B8", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800A48B8" + }, + { + "type": "extern_variable", + "name": "D_80074ED9", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074ED9" + }, + { + "type": "extern_variable", + "name": "D_800DF120", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DF120" + }, + { + "type": "extern_variable", + "name": "D_800DF122", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DF122" + }, + { + "type": "extern_variable", + "name": "D_800DEF88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DEF88" + }, + { + "type": "extern_variable", + "name": "func_800354CC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800354CC" + }, + { + "type": "extern_variable", + "name": "func_80035658", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80035658" + }, + { + "type": "extern_variable", + "name": "D_800E0638", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0638" + }, + { + "type": "extern_variable", + "name": "D_800E48F4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48F4" + }, + { + "type": "extern_variable", + "name": "D_800E48FC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48FC" + }, + { + "type": "extern_variable", + "name": "D_800E48FE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48FE" + }, + { + "type": "extern_variable", + "name": "D_800E4900", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4900" + }, + { + "type": "extern_variable", + "name": "D_800E4901", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4901" + }, + { + "type": "extern_variable", + "name": "D_800E4904", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4904" + }, + { + "type": "extern_variable", + "name": "D_800E4906", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4906" + }, + { + "type": "extern_variable", + "name": "D_800E4908", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4908" + }, + { + "type": "extern_variable", + "name": "D_800E4909", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4909" + }, + { + "type": "extern_variable", + "name": "D_800E490C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E490C" + }, + { + "type": "extern_variable", + "name": "D_800E490E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E490E" + }, + { + "type": "extern_variable", + "name": "D_800E4910", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4910" + }, + { + "type": "extern_variable", + "name": "D_800E4911", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4911" + }, + { + "type": "extern_variable", + "name": "D_800E4914", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4914" + }, + { + "type": "extern_variable", + "name": "D_800E4916", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4916" + }, + { + "type": "extern_variable", + "name": "D_800E4918", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4918" + }, + { + "type": "extern_variable", + "name": "D_800E4919", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4919" + }, + { + "type": "extern_variable", + "name": "D_8007EB98", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007EB98" + }, + { + "type": "extern_variable", + "name": "func_8001786C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001786C" + }, + { + "type": "extern_variable", + "name": "func_80020058", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80020058" + }, + { + "type": "extern_variable", + "name": "D_800491D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800491D0" + }, + { + "type": "extern_variable", + "name": "D_8008328D", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328D" + }, + { + "type": "extern_variable", + "name": "D_800832A2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800832A2" + }, + { + "type": "extern_variable", + "name": "D_8008326C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008326C" + }, + { + "type": "extern_variable", + "name": "D_80083286", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083286" + }, + { + "type": "extern_variable", + "name": "D_80083278", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083278" + }, + { + "type": "extern_variable", + "name": "D_8008327A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327A" + }, + { + "type": "extern_variable", + "name": "D_8008327E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327E" + }, + { + "type": "extern_variable", + "name": "D_80075E24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075E24" + }, + { + "type": "extern_variable", + "name": "D_80075E25", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075E25" + }, + { + "type": "extern_variable", + "name": "D_800E4214", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4214" + }, + { + "type": "extern_variable", + "name": "D_800E4280", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4280" + }, + { + "type": "extern_variable", + "name": "D_800E4D48", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4D48" + }, + { + "type": "extern_variable", + "name": "D_800E0748", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0748" + }, + { + "type": "extern_variable", + "name": "D_800E074A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074A" + }, + { + "type": "extern_variable", + "name": "D_800E074C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074C" + }, + { + "type": "extern_variable", + "name": "D_800E08C0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08C0" + }, + { + "type": "extern_variable", + "name": "D_800E074E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074E" + }, + { + "type": "extern_variable", + "name": "D_800E0754", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0754" + }, + { + "type": "extern_variable", + "name": "D_800E0758", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0758" + }, + { + "type": "extern_variable", + "name": "D_800E08A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08A8" + }, + { + "type": "extern_variable", + "name": "D_800E0756", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0756" + }, + { + "type": "extern_variable", + "name": "D_800E0750", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0750" + }, + { + "type": "extern_variable", + "name": "D_800E0751", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0751" + }, + { + "type": "extern_variable", + "name": "D_800E0752", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0752" + }, + { + "type": "extern_variable", + "name": "func_800D5A60", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D5A60" + }, + { + "type": "extern_variable", + "name": "func_800D5C9C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D5C9C" + }, + { + "type": "extern_variable", + "name": "func_800D6D44", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6D44" + }, + { + "type": "extern_variable", + "name": "func_800D6E0C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6E0C" + }, + { + "type": "extern_variable", + "name": "func_800D6F6C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6F6C" + }, + { + "type": "extern_variable", + "name": "D_80083284", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083284" + }, + { + "type": "extern_variable", + "name": "D_8008328A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328A" + }, + { + "type": "extern_variable", + "name": "D_8008328E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328E" + }, + { + "type": "extern_variable", + "name": "D_80083298", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083298" + }, + { + "type": "extern_variable", + "name": "D_8008329A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329A" + }, + { + "type": "extern_variable", + "name": "D_800E424C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E424C" + }, + { + "type": "extern_variable", + "name": "D_801142CC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801142CC" + }, + { + "type": "extern_variable", + "name": "D_8009AD30", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009AD30" + }, + { + "type": "extern_variable", + "name": "func_800C2E00", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C2E00" + }, + { + "type": "extern_variable", + "name": "func_800DA444", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800DA444" + }, + { + "type": "extern_variable", + "name": "func_800C8634", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C8634" + }, + { + "type": "extern_variable", + "name": "func_800CDC14", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800CDC14" + }, + { + "type": "extern_variable", + "name": "D_80095DE0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80095DE0" + }, + { + "type": "extern_variable", + "name": "func_80025B10", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80025B10" + }, + { + "type": "extern_variable", + "name": "func_800BEAD4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800BEAD4" + }, + { + "type": "extern_variable", + "name": "D_800E0208", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0208" + }, + { + "type": "extern_variable", + "name": "D_800756E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800756E8" + }, + { + "type": "extern_variable", + "name": "D_80083291", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083291" + }, + { + "type": "extern_variable", + "name": "D_80083294", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083294" + }, + { + "type": "extern_variable", + "name": "D_8007078C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007078C" + }, + { + "type": "extern_variable", + "name": "D_8007E7B8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B8" + }, + { + "type": "extern_variable", + "name": "D_8007E7BA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7BA" + }, + { + "type": "extern_variable", + "name": "D_8007E7AC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7AC" + }, + { + "type": "extern_variable", + "name": "D_8007E7AE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7AE" + }, + { + "type": "extern_variable", + "name": "D_8007E7B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B0" + }, + { + "type": "extern_variable", + "name": "D_8007E7B2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B2" + }, + { + "type": "extern_variable", + "name": "D_8007E7B4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B4" + }, + { + "type": "extern_variable", + "name": "D_8007E7B6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B6" + }, + { + "type": "extern_variable", + "name": "D_80082248", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082248" + }, + { + "type": "extern_variable", + "name": "D_8008325C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008325C" + }, + { + "type": "extern_variable", + "name": "D_8009D828", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D828" + }, + { + "type": "extern_variable", + "name": "D_800A0854", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A0854" + }, + { + "type": "extern_variable", + "name": "D_800A0F38", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A0F38" + }, + { + "type": "extern_variable", + "name": "D_8007E7C2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7C2" + }, + { + "type": "extern_variable", + "name": "D_80049209", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049209" + }, + { + "type": "extern_variable", + "name": "D_8004920A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8004920A" + }, + { + "type": "extern_variable", + "name": "func_80044064", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80044064" + }, + { + "type": "extern_variable", + "name": "func_800C5B38", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C5B38" + }, + { + "type": "extern_variable", + "name": "D_80081D90", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80081D90" + }, + { + "type": "extern_variable", + "name": "D_80083288", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083288" + }, + { + "type": "extern_variable", + "name": "D_800E4944", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4944" + }, + { + "type": "extern_variable", + "name": "D_80114480", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80114480" + }, + { + "type": "extern_variable", + "name": "D_800E42A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42A8" + }, + { + "type": "extern_variable", + "name": "D_8008327C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327C" + }, + { + "type": "extern_variable", + "name": "D_80083280", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083280" + }, + { + "type": "extern_variable", + "name": "D_80083282", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083282" + }, + { + "type": "extern_variable", + "name": "D_8008328F", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328F" + }, + { + "type": "extern_variable", + "name": "D_80083290", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083290" + }, + { + "type": "extern_variable", + "name": "D_8008329C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329C" + }, + { + "type": "extern_variable", + "name": "D_8008329E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329E" + }, + { + "type": "extern_variable", + "name": "D_80071748", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071748" + }, + { + "type": "extern_variable", + "name": "D_800833F8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800833F8" + }, + { + "type": "extern_variable", + "name": "D_8009A1C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009A1C4" + }, + { + "type": "extern_variable", + "name": "D_800A06B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A06B0" + }, + { + "type": "extern_variable", + "name": "D_80071A88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071A88" + }, + { + "type": "extern_variable", + "name": "D_801142D4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801142D4" + }, + { + "type": "extern_variable", + "name": "D_800E42D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42D8" + }, + { + "type": "extern_variable", + "name": "D_800E42DA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DA" + }, + { + "type": "extern_variable", + "name": "D_800E42DC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DC" + }, + { + "type": "extern_variable", + "name": "D_800E42E0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E0" + }, + { + "type": "extern_variable", + "name": "D_800E42E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E4" + }, + { + "type": "extern_variable", + "name": "D_800E42E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E8" + }, + { + "type": "extern_variable", + "name": "D_800E42EA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EA" + }, + { + "type": "extern_variable", + "name": "D_800E42EE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EE" + }, + { + "type": "extern_variable", + "name": "D_800E48E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48E8" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-18T12:35:28.281213" + }, + { + "function_name": "func_800B33A4", + "file": "src/battle/battle1.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "func_800B5E64", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800B5E64" + }, + { + "type": "extern_variable", + "name": "D_800F8384", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F8384" + }, + { + "type": "extern_variable", + "name": "D_80103200", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80103200" + }, + { + "type": "extern_variable", + "name": "D_800F7E10", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7E10" + }, + { + "type": "extern_variable", + "name": "D_800F8180", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F8180" + }, + { + "type": "extern_variable", + "name": "D_800E8E88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E8E88" + }, + { + "type": "extern_variable", + "name": "D_800E8F94", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E8F94" + }, + { + "type": "extern_variable", + "name": "func_800B7DB4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800B7DB4" + }, + { + "type": "extern_variable", + "name": "D_800FA9D1", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FA9D1" + }, + { + "type": "extern_variable", + "name": "D_80163CC0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163CC0" + }, + { + "type": "extern_variable", + "name": "D_80163CC2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163CC2" + }, + { + "type": "extern_variable", + "name": "D_80163CC4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163CC4" + }, + { + "type": "extern_variable", + "name": "D_800F99EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F99EC" + }, + { + "type": "extern_variable", + "name": "D_800F99EE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F99EE" + }, + { + "type": "extern_variable", + "name": "D_800F99F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F99F0" + }, + { + "type": "extern_variable", + "name": "D_800F99F2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F99F2" + }, + { + "type": "extern_variable", + "name": "D_800F99F4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F99F4" + }, + { + "type": "extern_variable", + "name": "D_800F99F6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F99F6" + }, + { + "type": "extern_variable", + "name": "D_800FA9D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FA9D8" + }, + { + "type": "extern_variable", + "name": "D_801517F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801517F0" + }, + { + "type": "extern_variable", + "name": "D_800F7E08", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7E08" + }, + { + "type": "extern_variable", + "name": "D_801516FE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801516FE" + }, + { + "type": "extern_variable", + "name": "D_80151700", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151700" + }, + { + "type": "extern_variable", + "name": "D_80151702", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151702" + }, + { + "type": "extern_variable", + "name": "D_800F8178", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F8178" + }, + { + "type": "extern_variable", + "name": "D_800F8184", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F8184" + }, + { + "type": "extern_variable", + "name": "D_80163B44", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163B44" + }, + { + "type": "extern_variable", + "name": "D_801590E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801590E4" + }, + { + "type": "extern_variable", + "name": "D_801590E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801590E8" + }, + { + "type": "extern_variable", + "name": "D_800F7ED8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7ED8" + }, + { + "type": "extern_variable", + "name": "D_800F7EDA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EDA" + }, + { + "type": "extern_variable", + "name": "D_80151844", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151844" + }, + { + "type": "extern_variable", + "name": "D_80151846", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151846" + }, + { + "type": "extern_variable", + "name": "D_80151848", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151848" + }, + { + "type": "extern_variable", + "name": "D_801518A4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801518A4" + }, + { + "type": "extern_variable", + "name": "D_801518A6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801518A6" + }, + { + "type": "extern_variable", + "name": "D_801518A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801518A8" + }, + { + "type": "extern_variable", + "name": "D_800F7EF0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EF0" + }, + { + "type": "extern_variable", + "name": "D_800F7EDC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EDC" + }, + { + "type": "extern_variable", + "name": "D_800F7EDE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EDE" + }, + { + "type": "extern_variable", + "name": "D_800F7EE0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EE0" + }, + { + "type": "extern_variable", + "name": "D_800F7EE2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EE2" + }, + { + "type": "extern_variable", + "name": "D_800F7EE4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EE4" + }, + { + "type": "extern_variable", + "name": "D_800F7EE6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EE6" + }, + { + "type": "extern_variable", + "name": "D_800F7EE8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EE8" + }, + { + "type": "extern_variable", + "name": "func_800C0480", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C0480" + }, + { + "type": "extern_variable", + "name": "func_800C0630", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C0630" + }, + { + "type": "extern_variable", + "name": "func_800C0970", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C0970" + }, + { + "type": "extern_variable", + "name": "func_800C0B20", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C0B20" + }, + { + "type": "extern_variable", + "name": "D_80151850", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151850" + }, + { + "type": "extern_variable", + "name": "func_800B5AAC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800B5AAC" + }, + { + "type": "extern_variable", + "name": "func_800C36B4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C36B4" + }, + { + "type": "extern_variable", + "name": "func_800B4E30", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800B4E30" + }, + { + "type": "extern_variable", + "name": "func_800B54B8", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800B54B8" + }, + { + "type": "extern_variable", + "name": "func_800D09D0", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D09D0" + }, + { + "type": "extern_variable", + "name": "D_800F9DAA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9DAA" + }, + { + "type": "extern_variable", + "name": "D_800F9DAC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9DAC" + }, + { + "type": "extern_variable", + "name": "D_800FA9C6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FA9C6" + }, + { + "type": "extern_variable", + "name": "D_800F8CF4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F8CF4" + }, + { + "type": "extern_variable", + "name": "func_801B0050", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_801B0050" + }, + { + "type": "extern_variable", + "name": "func_800C74E4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C74E4" + }, + { + "type": "extern_variable", + "name": "D_800F4B0C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4B0C" + }, + { + "type": "extern_variable", + "name": "D_801AFFC0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801AFFC0" + }, + { + "type": "extern_variable", + "name": "func_8003CEBC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8003CEBC" + }, + { + "type": "extern_variable", + "name": "func_8003D1B4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8003D1B4" + }, + { + "type": "extern_variable", + "name": "func_80043938", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80043938" + }, + { + "type": "extern_variable", + "name": "func_80046960", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80046960" + }, + { + "type": "extern_variable", + "name": "func_8003BC9C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8003BC9C" + }, + { + "type": "extern_variable", + "name": "func_800468FC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800468FC" + }, + { + "type": "extern_variable", + "name": "D_800EA264", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800EA264" + } + ], + "timestamp": "2026-04-18T12:35:29.106671" + }, + { + "function_name": "func_800B9B0C", + "file": "src/field/field.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80074EB0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB0" + }, + { + "type": "extern_variable", + "name": "D_80074EB4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB4" + }, + { + "type": "extern_variable", + "name": "D_80074EB8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB8" + }, + { + "type": "extern_variable", + "name": "func_800A48B8", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800A48B8" + }, + { + "type": "extern_variable", + "name": "D_80074ED9", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074ED9" + }, + { + "type": "extern_variable", + "name": "D_800DF120", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DF120" + }, + { + "type": "extern_variable", + "name": "D_800DF122", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DF122" + }, + { + "type": "extern_variable", + "name": "D_800DEF88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DEF88" + }, + { + "type": "extern_variable", + "name": "func_800354CC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800354CC" + }, + { + "type": "extern_variable", + "name": "func_80035658", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80035658" + }, + { + "type": "extern_variable", + "name": "D_800E0638", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0638" + }, + { + "type": "extern_variable", + "name": "D_800E48F4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48F4" + }, + { + "type": "extern_variable", + "name": "D_800E48FC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48FC" + }, + { + "type": "extern_variable", + "name": "D_800E48FE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48FE" + }, + { + "type": "extern_variable", + "name": "D_800E4900", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4900" + }, + { + "type": "extern_variable", + "name": "D_800E4901", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4901" + }, + { + "type": "extern_variable", + "name": "D_800E4904", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4904" + }, + { + "type": "extern_variable", + "name": "D_800E4906", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4906" + }, + { + "type": "extern_variable", + "name": "D_800E4908", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4908" + }, + { + "type": "extern_variable", + "name": "D_800E4909", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4909" + }, + { + "type": "extern_variable", + "name": "D_800E490C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E490C" + }, + { + "type": "extern_variable", + "name": "D_800E490E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E490E" + }, + { + "type": "extern_variable", + "name": "D_800E4910", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4910" + }, + { + "type": "extern_variable", + "name": "D_800E4911", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4911" + }, + { + "type": "extern_variable", + "name": "D_800E4914", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4914" + }, + { + "type": "extern_variable", + "name": "D_800E4916", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4916" + }, + { + "type": "extern_variable", + "name": "D_800E4918", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4918" + }, + { + "type": "extern_variable", + "name": "D_800E4919", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4919" + }, + { + "type": "extern_variable", + "name": "D_8007EB98", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007EB98" + }, + { + "type": "extern_variable", + "name": "func_8001786C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001786C" + }, + { + "type": "extern_variable", + "name": "func_80020058", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80020058" + }, + { + "type": "extern_variable", + "name": "D_800491D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800491D0" + }, + { + "type": "extern_variable", + "name": "D_8008328D", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328D" + }, + { + "type": "extern_variable", + "name": "D_800832A2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800832A2" + }, + { + "type": "extern_variable", + "name": "D_8008326C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008326C" + }, + { + "type": "extern_variable", + "name": "D_80083286", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083286" + }, + { + "type": "extern_variable", + "name": "D_80083278", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083278" + }, + { + "type": "extern_variable", + "name": "D_8008327A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327A" + }, + { + "type": "extern_variable", + "name": "D_8008327E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327E" + }, + { + "type": "extern_variable", + "name": "D_80075E24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075E24" + }, + { + "type": "extern_variable", + "name": "D_80075E25", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075E25" + }, + { + "type": "extern_variable", + "name": "D_800E4214", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4214" + }, + { + "type": "extern_variable", + "name": "D_800E4280", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4280" + }, + { + "type": "extern_variable", + "name": "D_800E4D48", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4D48" + }, + { + "type": "extern_variable", + "name": "D_800E0748", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0748" + }, + { + "type": "extern_variable", + "name": "D_800E074A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074A" + }, + { + "type": "extern_variable", + "name": "D_800E074C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074C" + }, + { + "type": "extern_variable", + "name": "D_800E08C0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08C0" + }, + { + "type": "extern_variable", + "name": "D_800E074E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074E" + }, + { + "type": "extern_variable", + "name": "D_800E0754", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0754" + }, + { + "type": "extern_variable", + "name": "D_800E0758", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0758" + }, + { + "type": "extern_variable", + "name": "D_800E08A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08A8" + }, + { + "type": "extern_variable", + "name": "D_800E0756", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0756" + }, + { + "type": "extern_variable", + "name": "D_800E0750", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0750" + }, + { + "type": "extern_variable", + "name": "D_800E0751", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0751" + }, + { + "type": "extern_variable", + "name": "D_800E0752", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0752" + }, + { + "type": "extern_variable", + "name": "func_800D5A60", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D5A60" + }, + { + "type": "extern_variable", + "name": "func_800D5C9C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D5C9C" + }, + { + "type": "extern_variable", + "name": "func_800D6D44", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6D44" + }, + { + "type": "extern_variable", + "name": "func_800D6E0C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6E0C" + }, + { + "type": "extern_variable", + "name": "func_800D6F6C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6F6C" + }, + { + "type": "extern_variable", + "name": "D_80083284", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083284" + }, + { + "type": "extern_variable", + "name": "D_8008328A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328A" + }, + { + "type": "extern_variable", + "name": "D_8008328E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328E" + }, + { + "type": "extern_variable", + "name": "D_80083298", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083298" + }, + { + "type": "extern_variable", + "name": "D_8008329A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329A" + }, + { + "type": "extern_variable", + "name": "D_800E424C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E424C" + }, + { + "type": "extern_variable", + "name": "D_801142CC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801142CC" + }, + { + "type": "extern_variable", + "name": "D_8009AD30", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009AD30" + }, + { + "type": "extern_variable", + "name": "func_800C2E00", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C2E00" + }, + { + "type": "extern_variable", + "name": "func_800DA444", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800DA444" + }, + { + "type": "extern_variable", + "name": "func_800C8634", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C8634" + }, + { + "type": "extern_variable", + "name": "func_800CDC14", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800CDC14" + }, + { + "type": "extern_variable", + "name": "D_80095DE0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80095DE0" + }, + { + "type": "extern_variable", + "name": "func_80025B10", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80025B10" + }, + { + "type": "extern_variable", + "name": "func_800BEAD4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800BEAD4" + }, + { + "type": "extern_variable", + "name": "D_800E0208", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0208" + }, + { + "type": "extern_variable", + "name": "D_800756E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800756E8" + }, + { + "type": "extern_variable", + "name": "D_80083291", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083291" + }, + { + "type": "extern_variable", + "name": "D_80083294", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083294" + }, + { + "type": "extern_variable", + "name": "D_8007078C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007078C" + }, + { + "type": "extern_variable", + "name": "D_8007E7B8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B8" + }, + { + "type": "extern_variable", + "name": "D_8007E7BA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7BA" + }, + { + "type": "extern_variable", + "name": "D_8007E7AC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7AC" + }, + { + "type": "extern_variable", + "name": "D_8007E7AE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7AE" + }, + { + "type": "extern_variable", + "name": "D_8007E7B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B0" + }, + { + "type": "extern_variable", + "name": "D_8007E7B2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B2" + }, + { + "type": "extern_variable", + "name": "D_8007E7B4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B4" + }, + { + "type": "extern_variable", + "name": "D_8007E7B6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B6" + }, + { + "type": "extern_variable", + "name": "D_80082248", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082248" + }, + { + "type": "extern_variable", + "name": "D_8008325C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008325C" + }, + { + "type": "extern_variable", + "name": "D_8009D828", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D828" + }, + { + "type": "extern_variable", + "name": "D_800A0854", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A0854" + }, + { + "type": "extern_variable", + "name": "D_800A0F38", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A0F38" + }, + { + "type": "extern_variable", + "name": "D_8007E7C2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7C2" + }, + { + "type": "extern_variable", + "name": "D_80049209", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049209" + }, + { + "type": "extern_variable", + "name": "D_8004920A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8004920A" + }, + { + "type": "extern_variable", + "name": "func_80044064", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80044064" + }, + { + "type": "extern_variable", + "name": "func_800C5B38", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C5B38" + }, + { + "type": "extern_variable", + "name": "D_80081D90", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80081D90" + }, + { + "type": "extern_variable", + "name": "D_80083288", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083288" + }, + { + "type": "extern_variable", + "name": "D_800E4944", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4944" + }, + { + "type": "extern_variable", + "name": "D_80114480", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80114480" + }, + { + "type": "extern_variable", + "name": "D_800E42A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42A8" + }, + { + "type": "extern_variable", + "name": "D_8008327C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327C" + }, + { + "type": "extern_variable", + "name": "D_80083280", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083280" + }, + { + "type": "extern_variable", + "name": "D_80083282", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083282" + }, + { + "type": "extern_variable", + "name": "D_8008328F", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328F" + }, + { + "type": "extern_variable", + "name": "D_80083290", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083290" + }, + { + "type": "extern_variable", + "name": "D_8008329C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329C" + }, + { + "type": "extern_variable", + "name": "D_8008329E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329E" + }, + { + "type": "extern_variable", + "name": "D_80071748", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071748" + }, + { + "type": "extern_variable", + "name": "D_800833F8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800833F8" + }, + { + "type": "extern_variable", + "name": "D_8009A1C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009A1C4" + }, + { + "type": "extern_variable", + "name": "D_800A06B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A06B0" + }, + { + "type": "extern_variable", + "name": "D_80071A88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071A88" + }, + { + "type": "extern_variable", + "name": "D_801142D4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801142D4" + }, + { + "type": "extern_variable", + "name": "D_800E42D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42D8" + }, + { + "type": "extern_variable", + "name": "D_800E42DA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DA" + }, + { + "type": "extern_variable", + "name": "D_800E42DC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DC" + }, + { + "type": "extern_variable", + "name": "D_800E42E0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E0" + }, + { + "type": "extern_variable", + "name": "D_800E42E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E4" + }, + { + "type": "extern_variable", + "name": "D_800E42E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E8" + }, + { + "type": "extern_variable", + "name": "D_800E42EA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EA" + }, + { + "type": "extern_variable", + "name": "D_800E42EE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EE" + }, + { + "type": "extern_variable", + "name": "D_800E48E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48E8" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-18T12:35:29.305029" + }, + { + "function_name": "func_800A4BEC", + "file": "src/field/field.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80074EB0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB0" + }, + { + "type": "extern_variable", + "name": "D_80074EB4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB4" + }, + { + "type": "extern_variable", + "name": "D_80074EB8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB8" + }, + { + "type": "extern_variable", + "name": "func_800A48B8", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800A48B8" + }, + { + "type": "extern_variable", + "name": "D_80074ED9", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074ED9" + }, + { + "type": "extern_variable", + "name": "D_800DF120", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DF120" + }, + { + "type": "extern_variable", + "name": "D_800DF122", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DF122" + }, + { + "type": "extern_variable", + "name": "D_800DEF88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DEF88" + }, + { + "type": "extern_variable", + "name": "func_800354CC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800354CC" + }, + { + "type": "extern_variable", + "name": "func_80035658", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80035658" + }, + { + "type": "extern_variable", + "name": "D_800E0638", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0638" + }, + { + "type": "extern_variable", + "name": "D_800E48F4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48F4" + }, + { + "type": "extern_variable", + "name": "D_800E48FC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48FC" + }, + { + "type": "extern_variable", + "name": "D_800E48FE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48FE" + }, + { + "type": "extern_variable", + "name": "D_800E4900", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4900" + }, + { + "type": "extern_variable", + "name": "D_800E4901", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4901" + }, + { + "type": "extern_variable", + "name": "D_800E4904", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4904" + }, + { + "type": "extern_variable", + "name": "D_800E4906", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4906" + }, + { + "type": "extern_variable", + "name": "D_800E4908", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4908" + }, + { + "type": "extern_variable", + "name": "D_800E4909", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4909" + }, + { + "type": "extern_variable", + "name": "D_800E490C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E490C" + }, + { + "type": "extern_variable", + "name": "D_800E490E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E490E" + }, + { + "type": "extern_variable", + "name": "D_800E4910", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4910" + }, + { + "type": "extern_variable", + "name": "D_800E4911", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4911" + }, + { + "type": "extern_variable", + "name": "D_800E4914", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4914" + }, + { + "type": "extern_variable", + "name": "D_800E4916", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4916" + }, + { + "type": "extern_variable", + "name": "D_800E4918", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4918" + }, + { + "type": "extern_variable", + "name": "D_800E4919", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4919" + }, + { + "type": "extern_variable", + "name": "D_8007EB98", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007EB98" + }, + { + "type": "extern_variable", + "name": "func_8001786C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001786C" + }, + { + "type": "extern_variable", + "name": "func_80020058", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80020058" + }, + { + "type": "extern_variable", + "name": "D_800491D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800491D0" + }, + { + "type": "extern_variable", + "name": "D_8008328D", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328D" + }, + { + "type": "extern_variable", + "name": "D_800832A2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800832A2" + }, + { + "type": "extern_variable", + "name": "D_8008326C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008326C" + }, + { + "type": "extern_variable", + "name": "D_80083286", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083286" + }, + { + "type": "extern_variable", + "name": "D_80083278", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083278" + }, + { + "type": "extern_variable", + "name": "D_8008327A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327A" + }, + { + "type": "extern_variable", + "name": "D_8008327E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327E" + }, + { + "type": "extern_variable", + "name": "D_80075E24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075E24" + }, + { + "type": "extern_variable", + "name": "D_80075E25", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075E25" + }, + { + "type": "extern_variable", + "name": "D_800E4214", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4214" + }, + { + "type": "extern_variable", + "name": "D_800E4280", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4280" + }, + { + "type": "extern_variable", + "name": "D_800E4D48", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4D48" + }, + { + "type": "extern_variable", + "name": "D_800E0748", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0748" + }, + { + "type": "extern_variable", + "name": "D_800E074A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074A" + }, + { + "type": "extern_variable", + "name": "D_800E074C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074C" + }, + { + "type": "extern_variable", + "name": "D_800E08C0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08C0" + }, + { + "type": "extern_variable", + "name": "D_800E074E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074E" + }, + { + "type": "extern_variable", + "name": "D_800E0754", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0754" + }, + { + "type": "extern_variable", + "name": "D_800E0758", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0758" + }, + { + "type": "extern_variable", + "name": "D_800E08A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08A8" + }, + { + "type": "extern_variable", + "name": "D_800E0756", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0756" + }, + { + "type": "extern_variable", + "name": "D_800E0750", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0750" + }, + { + "type": "extern_variable", + "name": "D_800E0751", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0751" + }, + { + "type": "extern_variable", + "name": "D_800E0752", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0752" + }, + { + "type": "extern_variable", + "name": "func_800D5A60", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D5A60" + }, + { + "type": "extern_variable", + "name": "func_800D5C9C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D5C9C" + }, + { + "type": "extern_variable", + "name": "func_800D6D44", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6D44" + }, + { + "type": "extern_variable", + "name": "func_800D6E0C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6E0C" + }, + { + "type": "extern_variable", + "name": "func_800D6F6C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6F6C" + }, + { + "type": "extern_variable", + "name": "D_80083284", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083284" + }, + { + "type": "extern_variable", + "name": "D_8008328A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328A" + }, + { + "type": "extern_variable", + "name": "D_8008328E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328E" + }, + { + "type": "extern_variable", + "name": "D_80083298", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083298" + }, + { + "type": "extern_variable", + "name": "D_8008329A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329A" + }, + { + "type": "extern_variable", + "name": "D_800E424C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E424C" + }, + { + "type": "extern_variable", + "name": "D_801142CC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801142CC" + }, + { + "type": "extern_variable", + "name": "D_8009AD30", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009AD30" + }, + { + "type": "extern_variable", + "name": "func_800C2E00", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C2E00" + }, + { + "type": "extern_variable", + "name": "func_800DA444", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800DA444" + }, + { + "type": "extern_variable", + "name": "func_800C8634", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C8634" + }, + { + "type": "extern_variable", + "name": "func_800CDC14", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800CDC14" + }, + { + "type": "extern_variable", + "name": "D_80095DE0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80095DE0" + }, + { + "type": "extern_variable", + "name": "func_80025B10", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80025B10" + }, + { + "type": "extern_variable", + "name": "func_800BEAD4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800BEAD4" + }, + { + "type": "extern_variable", + "name": "D_800E0208", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0208" + }, + { + "type": "extern_variable", + "name": "D_800756E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800756E8" + }, + { + "type": "extern_variable", + "name": "D_80083291", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083291" + }, + { + "type": "extern_variable", + "name": "D_80083294", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083294" + }, + { + "type": "extern_variable", + "name": "D_8007078C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007078C" + }, + { + "type": "extern_variable", + "name": "D_8007E7B8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B8" + }, + { + "type": "extern_variable", + "name": "D_8007E7BA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7BA" + }, + { + "type": "extern_variable", + "name": "D_8007E7AC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7AC" + }, + { + "type": "extern_variable", + "name": "D_8007E7AE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7AE" + }, + { + "type": "extern_variable", + "name": "D_8007E7B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B0" + }, + { + "type": "extern_variable", + "name": "D_8007E7B2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B2" + }, + { + "type": "extern_variable", + "name": "D_8007E7B4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B4" + }, + { + "type": "extern_variable", + "name": "D_8007E7B6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B6" + }, + { + "type": "extern_variable", + "name": "D_80082248", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082248" + }, + { + "type": "extern_variable", + "name": "D_8008325C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008325C" + }, + { + "type": "extern_variable", + "name": "D_8009D828", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D828" + }, + { + "type": "extern_variable", + "name": "D_800A0854", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A0854" + }, + { + "type": "extern_variable", + "name": "D_800A0F38", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A0F38" + }, + { + "type": "extern_variable", + "name": "D_8007E7C2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7C2" + }, + { + "type": "extern_variable", + "name": "D_80049209", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049209" + }, + { + "type": "extern_variable", + "name": "D_8004920A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8004920A" + }, + { + "type": "extern_variable", + "name": "func_80044064", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80044064" + }, + { + "type": "extern_variable", + "name": "func_800C5B38", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C5B38" + }, + { + "type": "extern_variable", + "name": "D_80081D90", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80081D90" + }, + { + "type": "extern_variable", + "name": "D_80083288", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083288" + }, + { + "type": "extern_variable", + "name": "D_800E4944", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4944" + }, + { + "type": "extern_variable", + "name": "D_80114480", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80114480" + }, + { + "type": "extern_variable", + "name": "D_800E42A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42A8" + }, + { + "type": "extern_variable", + "name": "D_8008327C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327C" + }, + { + "type": "extern_variable", + "name": "D_80083280", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083280" + }, + { + "type": "extern_variable", + "name": "D_80083282", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083282" + }, + { + "type": "extern_variable", + "name": "D_8008328F", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328F" + }, + { + "type": "extern_variable", + "name": "D_80083290", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083290" + }, + { + "type": "extern_variable", + "name": "D_8008329C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329C" + }, + { + "type": "extern_variable", + "name": "D_8008329E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329E" + }, + { + "type": "extern_variable", + "name": "D_80071748", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071748" + }, + { + "type": "extern_variable", + "name": "D_800833F8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800833F8" + }, + { + "type": "extern_variable", + "name": "D_8009A1C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009A1C4" + }, + { + "type": "extern_variable", + "name": "D_800A06B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A06B0" + }, + { + "type": "extern_variable", + "name": "D_80071A88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071A88" + }, + { + "type": "extern_variable", + "name": "D_801142D4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801142D4" + }, + { + "type": "extern_variable", + "name": "D_800E42D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42D8" + }, + { + "type": "extern_variable", + "name": "D_800E42DA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DA" + }, + { + "type": "extern_variable", + "name": "D_800E42DC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DC" + }, + { + "type": "extern_variable", + "name": "D_800E42E0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E0" + }, + { + "type": "extern_variable", + "name": "D_800E42E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E4" + }, + { + "type": "extern_variable", + "name": "D_800E42E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E8" + }, + { + "type": "extern_variable", + "name": "D_800E42EA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EA" + }, + { + "type": "extern_variable", + "name": "D_800E42EE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EE" + }, + { + "type": "extern_variable", + "name": "D_800E48E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48E8" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-18T12:35:30.146017" + }, + { + "function_name": "func_800D5C9C", + "file": "src/field/field.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80074EB0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB0" + }, + { + "type": "extern_variable", + "name": "D_80074EB4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB4" + }, + { + "type": "extern_variable", + "name": "D_80074EB8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB8" + }, + { + "type": "extern_variable", + "name": "func_800A48B8", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800A48B8" + }, + { + "type": "extern_variable", + "name": "D_80074ED9", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074ED9" + }, + { + "type": "extern_variable", + "name": "D_800DF120", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DF120" + }, + { + "type": "extern_variable", + "name": "D_800DF122", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DF122" + }, + { + "type": "extern_variable", + "name": "D_800DEF88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DEF88" + }, + { + "type": "extern_variable", + "name": "func_800354CC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800354CC" + }, + { + "type": "extern_variable", + "name": "func_80035658", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80035658" + }, + { + "type": "extern_variable", + "name": "D_800E0638", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0638" + }, + { + "type": "extern_variable", + "name": "D_800E48F4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48F4" + }, + { + "type": "extern_variable", + "name": "D_800E48FC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48FC" + }, + { + "type": "extern_variable", + "name": "D_800E48FE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48FE" + }, + { + "type": "extern_variable", + "name": "D_800E4900", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4900" + }, + { + "type": "extern_variable", + "name": "D_800E4901", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4901" + }, + { + "type": "extern_variable", + "name": "D_800E4904", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4904" + }, + { + "type": "extern_variable", + "name": "D_800E4906", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4906" + }, + { + "type": "extern_variable", + "name": "D_800E4908", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4908" + }, + { + "type": "extern_variable", + "name": "D_800E4909", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4909" + }, + { + "type": "extern_variable", + "name": "D_800E490C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E490C" + }, + { + "type": "extern_variable", + "name": "D_800E490E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E490E" + }, + { + "type": "extern_variable", + "name": "D_800E4910", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4910" + }, + { + "type": "extern_variable", + "name": "D_800E4911", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4911" + }, + { + "type": "extern_variable", + "name": "D_800E4914", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4914" + }, + { + "type": "extern_variable", + "name": "D_800E4916", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4916" + }, + { + "type": "extern_variable", + "name": "D_800E4918", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4918" + }, + { + "type": "extern_variable", + "name": "D_800E4919", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4919" + }, + { + "type": "extern_variable", + "name": "D_8007EB98", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007EB98" + }, + { + "type": "extern_variable", + "name": "func_8001786C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001786C" + }, + { + "type": "extern_variable", + "name": "func_80020058", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80020058" + }, + { + "type": "extern_variable", + "name": "D_800491D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800491D0" + }, + { + "type": "extern_variable", + "name": "D_8008328D", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328D" + }, + { + "type": "extern_variable", + "name": "D_800832A2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800832A2" + }, + { + "type": "extern_variable", + "name": "D_8008326C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008326C" + }, + { + "type": "extern_variable", + "name": "D_80083286", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083286" + }, + { + "type": "extern_variable", + "name": "D_80083278", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083278" + }, + { + "type": "extern_variable", + "name": "D_8008327A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327A" + }, + { + "type": "extern_variable", + "name": "D_8008327E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327E" + }, + { + "type": "extern_variable", + "name": "D_80075E24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075E24" + }, + { + "type": "extern_variable", + "name": "D_80075E25", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075E25" + }, + { + "type": "extern_variable", + "name": "D_800E4214", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4214" + }, + { + "type": "extern_variable", + "name": "D_800E4280", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4280" + }, + { + "type": "extern_variable", + "name": "D_800E4D48", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4D48" + }, + { + "type": "extern_variable", + "name": "D_800E0748", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0748" + }, + { + "type": "extern_variable", + "name": "D_800E074A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074A" + }, + { + "type": "extern_variable", + "name": "D_800E074C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074C" + }, + { + "type": "extern_variable", + "name": "D_800E08C0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08C0" + }, + { + "type": "extern_variable", + "name": "D_800E074E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074E" + }, + { + "type": "extern_variable", + "name": "D_800E0754", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0754" + }, + { + "type": "extern_variable", + "name": "D_800E0758", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0758" + }, + { + "type": "extern_variable", + "name": "D_800E08A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08A8" + }, + { + "type": "extern_variable", + "name": "D_800E0756", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0756" + }, + { + "type": "extern_variable", + "name": "D_800E0750", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0750" + }, + { + "type": "extern_variable", + "name": "D_800E0751", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0751" + }, + { + "type": "extern_variable", + "name": "D_800E0752", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0752" + }, + { + "type": "extern_variable", + "name": "func_800D5A60", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D5A60" + }, + { + "type": "extern_variable", + "name": "func_800D5C9C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D5C9C" + }, + { + "type": "extern_variable", + "name": "func_800D6D44", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6D44" + }, + { + "type": "extern_variable", + "name": "func_800D6E0C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6E0C" + }, + { + "type": "extern_variable", + "name": "func_800D6F6C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6F6C" + }, + { + "type": "extern_variable", + "name": "D_80083284", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083284" + }, + { + "type": "extern_variable", + "name": "D_8008328A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328A" + }, + { + "type": "extern_variable", + "name": "D_8008328E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328E" + }, + { + "type": "extern_variable", + "name": "D_80083298", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083298" + }, + { + "type": "extern_variable", + "name": "D_8008329A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329A" + }, + { + "type": "extern_variable", + "name": "D_800E424C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E424C" + }, + { + "type": "extern_variable", + "name": "D_801142CC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801142CC" + }, + { + "type": "extern_variable", + "name": "D_8009AD30", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009AD30" + }, + { + "type": "extern_variable", + "name": "func_800C2E00", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C2E00" + }, + { + "type": "extern_variable", + "name": "func_800DA444", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800DA444" + }, + { + "type": "extern_variable", + "name": "func_800C8634", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C8634" + }, + { + "type": "extern_variable", + "name": "func_800CDC14", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800CDC14" + }, + { + "type": "extern_variable", + "name": "D_80095DE0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80095DE0" + }, + { + "type": "extern_variable", + "name": "func_80025B10", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80025B10" + }, + { + "type": "extern_variable", + "name": "func_800BEAD4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800BEAD4" + }, + { + "type": "extern_variable", + "name": "D_800E0208", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0208" + }, + { + "type": "extern_variable", + "name": "D_800756E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800756E8" + }, + { + "type": "extern_variable", + "name": "D_80083291", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083291" + }, + { + "type": "extern_variable", + "name": "D_80083294", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083294" + }, + { + "type": "extern_variable", + "name": "D_8007078C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007078C" + }, + { + "type": "extern_variable", + "name": "D_8007E7B8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B8" + }, + { + "type": "extern_variable", + "name": "D_8007E7BA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7BA" + }, + { + "type": "extern_variable", + "name": "D_8007E7AC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7AC" + }, + { + "type": "extern_variable", + "name": "D_8007E7AE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7AE" + }, + { + "type": "extern_variable", + "name": "D_8007E7B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B0" + }, + { + "type": "extern_variable", + "name": "D_8007E7B2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B2" + }, + { + "type": "extern_variable", + "name": "D_8007E7B4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B4" + }, + { + "type": "extern_variable", + "name": "D_8007E7B6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B6" + }, + { + "type": "extern_variable", + "name": "D_80082248", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082248" + }, + { + "type": "extern_variable", + "name": "D_8008325C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008325C" + }, + { + "type": "extern_variable", + "name": "D_8009D828", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D828" + }, + { + "type": "extern_variable", + "name": "D_800A0854", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A0854" + }, + { + "type": "extern_variable", + "name": "D_800A0F38", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A0F38" + }, + { + "type": "extern_variable", + "name": "D_8007E7C2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7C2" + }, + { + "type": "extern_variable", + "name": "D_80049209", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049209" + }, + { + "type": "extern_variable", + "name": "D_8004920A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8004920A" + }, + { + "type": "extern_variable", + "name": "func_80044064", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80044064" + }, + { + "type": "extern_variable", + "name": "func_800C5B38", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C5B38" + }, + { + "type": "extern_variable", + "name": "D_80081D90", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80081D90" + }, + { + "type": "extern_variable", + "name": "D_80083288", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083288" + }, + { + "type": "extern_variable", + "name": "D_800E4944", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4944" + }, + { + "type": "extern_variable", + "name": "D_80114480", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80114480" + }, + { + "type": "extern_variable", + "name": "D_800E42A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42A8" + }, + { + "type": "extern_variable", + "name": "D_8008327C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327C" + }, + { + "type": "extern_variable", + "name": "D_80083280", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083280" + }, + { + "type": "extern_variable", + "name": "D_80083282", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083282" + }, + { + "type": "extern_variable", + "name": "D_8008328F", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328F" + }, + { + "type": "extern_variable", + "name": "D_80083290", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083290" + }, + { + "type": "extern_variable", + "name": "D_8008329C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329C" + }, + { + "type": "extern_variable", + "name": "D_8008329E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329E" + }, + { + "type": "extern_variable", + "name": "D_80071748", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071748" + }, + { + "type": "extern_variable", + "name": "D_800833F8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800833F8" + }, + { + "type": "extern_variable", + "name": "D_8009A1C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009A1C4" + }, + { + "type": "extern_variable", + "name": "D_800A06B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A06B0" + }, + { + "type": "extern_variable", + "name": "D_80071A88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071A88" + }, + { + "type": "extern_variable", + "name": "D_801142D4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801142D4" + }, + { + "type": "extern_variable", + "name": "D_800E42D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42D8" + }, + { + "type": "extern_variable", + "name": "D_800E42DA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DA" + }, + { + "type": "extern_variable", + "name": "D_800E42DC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DC" + }, + { + "type": "extern_variable", + "name": "D_800E42E0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E0" + }, + { + "type": "extern_variable", + "name": "D_800E42E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E4" + }, + { + "type": "extern_variable", + "name": "D_800E42E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E8" + }, + { + "type": "extern_variable", + "name": "D_800E42EA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EA" + }, + { + "type": "extern_variable", + "name": "D_800E42EE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EE" + }, + { + "type": "extern_variable", + "name": "D_800E48E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48E8" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-18T12:35:30.997931" + }, + { + "function_name": "func_800AA930", + "file": "src/field/field.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80074EB0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB0" + }, + { + "type": "extern_variable", + "name": "D_80074EB4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB4" + }, + { + "type": "extern_variable", + "name": "D_80074EB8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB8" + }, + { + "type": "extern_variable", + "name": "func_800A48B8", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800A48B8" + }, + { + "type": "extern_variable", + "name": "D_80074ED9", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074ED9" + }, + { + "type": "extern_variable", + "name": "D_800DF120", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DF120" + }, + { + "type": "extern_variable", + "name": "D_800DF122", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DF122" + }, + { + "type": "extern_variable", + "name": "D_800DEF88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DEF88" + }, + { + "type": "extern_variable", + "name": "func_800354CC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800354CC" + }, + { + "type": "extern_variable", + "name": "func_80035658", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80035658" + }, + { + "type": "extern_variable", + "name": "D_800E0638", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0638" + }, + { + "type": "extern_variable", + "name": "D_800E48F4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48F4" + }, + { + "type": "extern_variable", + "name": "D_800E48FC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48FC" + }, + { + "type": "extern_variable", + "name": "D_800E48FE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48FE" + }, + { + "type": "extern_variable", + "name": "D_800E4900", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4900" + }, + { + "type": "extern_variable", + "name": "D_800E4901", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4901" + }, + { + "type": "extern_variable", + "name": "D_800E4904", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4904" + }, + { + "type": "extern_variable", + "name": "D_800E4906", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4906" + }, + { + "type": "extern_variable", + "name": "D_800E4908", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4908" + }, + { + "type": "extern_variable", + "name": "D_800E4909", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4909" + }, + { + "type": "extern_variable", + "name": "D_800E490C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E490C" + }, + { + "type": "extern_variable", + "name": "D_800E490E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E490E" + }, + { + "type": "extern_variable", + "name": "D_800E4910", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4910" + }, + { + "type": "extern_variable", + "name": "D_800E4911", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4911" + }, + { + "type": "extern_variable", + "name": "D_800E4914", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4914" + }, + { + "type": "extern_variable", + "name": "D_800E4916", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4916" + }, + { + "type": "extern_variable", + "name": "D_800E4918", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4918" + }, + { + "type": "extern_variable", + "name": "D_800E4919", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4919" + }, + { + "type": "extern_variable", + "name": "D_8007EB98", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007EB98" + }, + { + "type": "extern_variable", + "name": "func_8001786C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001786C" + }, + { + "type": "extern_variable", + "name": "func_80020058", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80020058" + }, + { + "type": "extern_variable", + "name": "D_800491D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800491D0" + }, + { + "type": "extern_variable", + "name": "D_8008328D", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328D" + }, + { + "type": "extern_variable", + "name": "D_800832A2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800832A2" + }, + { + "type": "extern_variable", + "name": "D_8008326C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008326C" + }, + { + "type": "extern_variable", + "name": "D_80083286", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083286" + }, + { + "type": "extern_variable", + "name": "D_80083278", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083278" + }, + { + "type": "extern_variable", + "name": "D_8008327A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327A" + }, + { + "type": "extern_variable", + "name": "D_8008327E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327E" + }, + { + "type": "extern_variable", + "name": "D_80075E24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075E24" + }, + { + "type": "extern_variable", + "name": "D_80075E25", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075E25" + }, + { + "type": "extern_variable", + "name": "D_800E4214", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4214" + }, + { + "type": "extern_variable", + "name": "D_800E4280", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4280" + }, + { + "type": "extern_variable", + "name": "D_800E4D48", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4D48" + }, + { + "type": "extern_variable", + "name": "D_800E0748", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0748" + }, + { + "type": "extern_variable", + "name": "D_800E074A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074A" + }, + { + "type": "extern_variable", + "name": "D_800E074C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074C" + }, + { + "type": "extern_variable", + "name": "D_800E08C0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08C0" + }, + { + "type": "extern_variable", + "name": "D_800E074E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074E" + }, + { + "type": "extern_variable", + "name": "D_800E0754", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0754" + }, + { + "type": "extern_variable", + "name": "D_800E0758", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0758" + }, + { + "type": "extern_variable", + "name": "D_800E08A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08A8" + }, + { + "type": "extern_variable", + "name": "D_800E0756", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0756" + }, + { + "type": "extern_variable", + "name": "D_800E0750", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0750" + }, + { + "type": "extern_variable", + "name": "D_800E0751", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0751" + }, + { + "type": "extern_variable", + "name": "D_800E0752", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0752" + }, + { + "type": "extern_variable", + "name": "func_800D5A60", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D5A60" + }, + { + "type": "extern_variable", + "name": "func_800D5C9C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D5C9C" + }, + { + "type": "extern_variable", + "name": "func_800D6D44", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6D44" + }, + { + "type": "extern_variable", + "name": "func_800D6E0C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6E0C" + }, + { + "type": "extern_variable", + "name": "func_800D6F6C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6F6C" + }, + { + "type": "extern_variable", + "name": "D_80083284", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083284" + }, + { + "type": "extern_variable", + "name": "D_8008328A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328A" + }, + { + "type": "extern_variable", + "name": "D_8008328E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328E" + }, + { + "type": "extern_variable", + "name": "D_80083298", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083298" + }, + { + "type": "extern_variable", + "name": "D_8008329A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329A" + }, + { + "type": "extern_variable", + "name": "D_800E424C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E424C" + }, + { + "type": "extern_variable", + "name": "D_801142CC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801142CC" + }, + { + "type": "extern_variable", + "name": "D_8009AD30", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009AD30" + }, + { + "type": "extern_variable", + "name": "func_800C2E00", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C2E00" + }, + { + "type": "extern_variable", + "name": "func_800DA444", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800DA444" + }, + { + "type": "extern_variable", + "name": "func_800C8634", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C8634" + }, + { + "type": "extern_variable", + "name": "func_800CDC14", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800CDC14" + }, + { + "type": "extern_variable", + "name": "D_80095DE0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80095DE0" + }, + { + "type": "extern_variable", + "name": "func_80025B10", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80025B10" + }, + { + "type": "extern_variable", + "name": "func_800BEAD4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800BEAD4" + }, + { + "type": "extern_variable", + "name": "D_800E0208", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0208" + }, + { + "type": "extern_variable", + "name": "D_800756E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800756E8" + }, + { + "type": "extern_variable", + "name": "D_80083291", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083291" + }, + { + "type": "extern_variable", + "name": "D_80083294", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083294" + }, + { + "type": "extern_variable", + "name": "D_8007078C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007078C" + }, + { + "type": "extern_variable", + "name": "D_8007E7B8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B8" + }, + { + "type": "extern_variable", + "name": "D_8007E7BA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7BA" + }, + { + "type": "extern_variable", + "name": "D_8007E7AC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7AC" + }, + { + "type": "extern_variable", + "name": "D_8007E7AE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7AE" + }, + { + "type": "extern_variable", + "name": "D_8007E7B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B0" + }, + { + "type": "extern_variable", + "name": "D_8007E7B2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B2" + }, + { + "type": "extern_variable", + "name": "D_8007E7B4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B4" + }, + { + "type": "extern_variable", + "name": "D_8007E7B6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B6" + }, + { + "type": "extern_variable", + "name": "D_80082248", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082248" + }, + { + "type": "extern_variable", + "name": "D_8008325C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008325C" + }, + { + "type": "extern_variable", + "name": "D_8009D828", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D828" + }, + { + "type": "extern_variable", + "name": "D_800A0854", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A0854" + }, + { + "type": "extern_variable", + "name": "D_800A0F38", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A0F38" + }, + { + "type": "extern_variable", + "name": "D_8007E7C2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7C2" + }, + { + "type": "extern_variable", + "name": "D_80049209", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049209" + }, + { + "type": "extern_variable", + "name": "D_8004920A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8004920A" + }, + { + "type": "extern_variable", + "name": "func_80044064", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80044064" + }, + { + "type": "extern_variable", + "name": "func_800C5B38", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C5B38" + }, + { + "type": "extern_variable", + "name": "D_80081D90", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80081D90" + }, + { + "type": "extern_variable", + "name": "D_80083288", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083288" + }, + { + "type": "extern_variable", + "name": "D_800E4944", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4944" + }, + { + "type": "extern_variable", + "name": "D_80114480", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80114480" + }, + { + "type": "extern_variable", + "name": "D_800E42A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42A8" + }, + { + "type": "extern_variable", + "name": "D_8008327C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327C" + }, + { + "type": "extern_variable", + "name": "D_80083280", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083280" + }, + { + "type": "extern_variable", + "name": "D_80083282", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083282" + }, + { + "type": "extern_variable", + "name": "D_8008328F", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328F" + }, + { + "type": "extern_variable", + "name": "D_80083290", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083290" + }, + { + "type": "extern_variable", + "name": "D_8008329C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329C" + }, + { + "type": "extern_variable", + "name": "D_8008329E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329E" + }, + { + "type": "extern_variable", + "name": "D_80071748", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071748" + }, + { + "type": "extern_variable", + "name": "D_800833F8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800833F8" + }, + { + "type": "extern_variable", + "name": "D_8009A1C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009A1C4" + }, + { + "type": "extern_variable", + "name": "D_800A06B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A06B0" + }, + { + "type": "extern_variable", + "name": "D_80071A88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071A88" + }, + { + "type": "extern_variable", + "name": "D_801142D4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801142D4" + }, + { + "type": "extern_variable", + "name": "D_800E42D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42D8" + }, + { + "type": "extern_variable", + "name": "D_800E42DA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DA" + }, + { + "type": "extern_variable", + "name": "D_800E42DC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DC" + }, + { + "type": "extern_variable", + "name": "D_800E42E0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E0" + }, + { + "type": "extern_variable", + "name": "D_800E42E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E4" + }, + { + "type": "extern_variable", + "name": "D_800E42E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E8" + }, + { + "type": "extern_variable", + "name": "D_800E42EA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EA" + }, + { + "type": "extern_variable", + "name": "D_800E42EE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EE" + }, + { + "type": "extern_variable", + "name": "D_800E48E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48E8" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-18T12:35:31.839433" + }, + { + "function_name": "func_800BA65C", + "file": "src/field/field.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80074EB0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB0" + }, + { + "type": "extern_variable", + "name": "D_80074EB4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB4" + }, + { + "type": "extern_variable", + "name": "D_80074EB8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB8" + }, + { + "type": "extern_variable", + "name": "func_800A48B8", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800A48B8" + }, + { + "type": "extern_variable", + "name": "D_80074ED9", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074ED9" + }, + { + "type": "extern_variable", + "name": "D_800DF120", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DF120" + }, + { + "type": "extern_variable", + "name": "D_800DF122", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DF122" + }, + { + "type": "extern_variable", + "name": "D_800DEF88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DEF88" + }, + { + "type": "extern_variable", + "name": "func_800354CC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800354CC" + }, + { + "type": "extern_variable", + "name": "func_80035658", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80035658" + }, + { + "type": "extern_variable", + "name": "D_800E0638", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0638" + }, + { + "type": "extern_variable", + "name": "D_800E48F4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48F4" + }, + { + "type": "extern_variable", + "name": "D_800E48FC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48FC" + }, + { + "type": "extern_variable", + "name": "D_800E48FE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48FE" + }, + { + "type": "extern_variable", + "name": "D_800E4900", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4900" + }, + { + "type": "extern_variable", + "name": "D_800E4901", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4901" + }, + { + "type": "extern_variable", + "name": "D_800E4904", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4904" + }, + { + "type": "extern_variable", + "name": "D_800E4906", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4906" + }, + { + "type": "extern_variable", + "name": "D_800E4908", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4908" + }, + { + "type": "extern_variable", + "name": "D_800E4909", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4909" + }, + { + "type": "extern_variable", + "name": "D_800E490C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E490C" + }, + { + "type": "extern_variable", + "name": "D_800E490E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E490E" + }, + { + "type": "extern_variable", + "name": "D_800E4910", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4910" + }, + { + "type": "extern_variable", + "name": "D_800E4911", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4911" + }, + { + "type": "extern_variable", + "name": "D_800E4914", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4914" + }, + { + "type": "extern_variable", + "name": "D_800E4916", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4916" + }, + { + "type": "extern_variable", + "name": "D_800E4918", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4918" + }, + { + "type": "extern_variable", + "name": "D_800E4919", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4919" + }, + { + "type": "extern_variable", + "name": "D_8007EB98", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007EB98" + }, + { + "type": "extern_variable", + "name": "func_8001786C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001786C" + }, + { + "type": "extern_variable", + "name": "func_80020058", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80020058" + }, + { + "type": "extern_variable", + "name": "D_800491D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800491D0" + }, + { + "type": "extern_variable", + "name": "D_8008328D", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328D" + }, + { + "type": "extern_variable", + "name": "D_800832A2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800832A2" + }, + { + "type": "extern_variable", + "name": "D_8008326C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008326C" + }, + { + "type": "extern_variable", + "name": "D_80083286", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083286" + }, + { + "type": "extern_variable", + "name": "D_80083278", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083278" + }, + { + "type": "extern_variable", + "name": "D_8008327A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327A" + }, + { + "type": "extern_variable", + "name": "D_8008327E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327E" + }, + { + "type": "extern_variable", + "name": "D_80075E24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075E24" + }, + { + "type": "extern_variable", + "name": "D_80075E25", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075E25" + }, + { + "type": "extern_variable", + "name": "D_800E4214", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4214" + }, + { + "type": "extern_variable", + "name": "D_800E4280", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4280" + }, + { + "type": "extern_variable", + "name": "D_800E4D48", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4D48" + }, + { + "type": "extern_variable", + "name": "D_800E0748", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0748" + }, + { + "type": "extern_variable", + "name": "D_800E074A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074A" + }, + { + "type": "extern_variable", + "name": "D_800E074C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074C" + }, + { + "type": "extern_variable", + "name": "D_800E08C0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08C0" + }, + { + "type": "extern_variable", + "name": "D_800E074E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074E" + }, + { + "type": "extern_variable", + "name": "D_800E0754", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0754" + }, + { + "type": "extern_variable", + "name": "D_800E0758", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0758" + }, + { + "type": "extern_variable", + "name": "D_800E08A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08A8" + }, + { + "type": "extern_variable", + "name": "D_800E0756", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0756" + }, + { + "type": "extern_variable", + "name": "D_800E0750", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0750" + }, + { + "type": "extern_variable", + "name": "D_800E0751", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0751" + }, + { + "type": "extern_variable", + "name": "D_800E0752", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0752" + }, + { + "type": "extern_variable", + "name": "func_800D5A60", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D5A60" + }, + { + "type": "extern_variable", + "name": "func_800D5C9C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D5C9C" + }, + { + "type": "extern_variable", + "name": "func_800D6D44", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6D44" + }, + { + "type": "extern_variable", + "name": "func_800D6E0C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6E0C" + }, + { + "type": "extern_variable", + "name": "func_800D6F6C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6F6C" + }, + { + "type": "extern_variable", + "name": "D_80083284", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083284" + }, + { + "type": "extern_variable", + "name": "D_8008328A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328A" + }, + { + "type": "extern_variable", + "name": "D_8008328E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328E" + }, + { + "type": "extern_variable", + "name": "D_80083298", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083298" + }, + { + "type": "extern_variable", + "name": "D_8008329A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329A" + }, + { + "type": "extern_variable", + "name": "D_800E424C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E424C" + }, + { + "type": "extern_variable", + "name": "D_801142CC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801142CC" + }, + { + "type": "extern_variable", + "name": "D_8009AD30", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009AD30" + }, + { + "type": "extern_variable", + "name": "func_800C2E00", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C2E00" + }, + { + "type": "extern_variable", + "name": "func_800DA444", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800DA444" + }, + { + "type": "extern_variable", + "name": "func_800C8634", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C8634" + }, + { + "type": "extern_variable", + "name": "func_800CDC14", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800CDC14" + }, + { + "type": "extern_variable", + "name": "D_80095DE0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80095DE0" + }, + { + "type": "extern_variable", + "name": "func_80025B10", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80025B10" + }, + { + "type": "extern_variable", + "name": "func_800BEAD4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800BEAD4" + }, + { + "type": "extern_variable", + "name": "D_800E0208", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0208" + }, + { + "type": "extern_variable", + "name": "D_800756E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800756E8" + }, + { + "type": "extern_variable", + "name": "D_80083291", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083291" + }, + { + "type": "extern_variable", + "name": "D_80083294", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083294" + }, + { + "type": "extern_variable", + "name": "D_8007078C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007078C" + }, + { + "type": "extern_variable", + "name": "D_8007E7B8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B8" + }, + { + "type": "extern_variable", + "name": "D_8007E7BA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7BA" + }, + { + "type": "extern_variable", + "name": "D_8007E7AC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7AC" + }, + { + "type": "extern_variable", + "name": "D_8007E7AE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7AE" + }, + { + "type": "extern_variable", + "name": "D_8007E7B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B0" + }, + { + "type": "extern_variable", + "name": "D_8007E7B2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B2" + }, + { + "type": "extern_variable", + "name": "D_8007E7B4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B4" + }, + { + "type": "extern_variable", + "name": "D_8007E7B6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B6" + }, + { + "type": "extern_variable", + "name": "D_80082248", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082248" + }, + { + "type": "extern_variable", + "name": "D_8008325C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008325C" + }, + { + "type": "extern_variable", + "name": "D_8009D828", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D828" + }, + { + "type": "extern_variable", + "name": "D_800A0854", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A0854" + }, + { + "type": "extern_variable", + "name": "D_800A0F38", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A0F38" + }, + { + "type": "extern_variable", + "name": "D_8007E7C2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7C2" + }, + { + "type": "extern_variable", + "name": "D_80049209", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049209" + }, + { + "type": "extern_variable", + "name": "D_8004920A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8004920A" + }, + { + "type": "extern_variable", + "name": "func_80044064", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80044064" + }, + { + "type": "extern_variable", + "name": "func_800C5B38", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C5B38" + }, + { + "type": "extern_variable", + "name": "D_80081D90", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80081D90" + }, + { + "type": "extern_variable", + "name": "D_80083288", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083288" + }, + { + "type": "extern_variable", + "name": "D_800E4944", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4944" + }, + { + "type": "extern_variable", + "name": "D_80114480", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80114480" + }, + { + "type": "extern_variable", + "name": "D_800E42A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42A8" + }, + { + "type": "extern_variable", + "name": "D_8008327C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327C" + }, + { + "type": "extern_variable", + "name": "D_80083280", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083280" + }, + { + "type": "extern_variable", + "name": "D_80083282", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083282" + }, + { + "type": "extern_variable", + "name": "D_8008328F", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328F" + }, + { + "type": "extern_variable", + "name": "D_80083290", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083290" + }, + { + "type": "extern_variable", + "name": "D_8008329C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329C" + }, + { + "type": "extern_variable", + "name": "D_8008329E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329E" + }, + { + "type": "extern_variable", + "name": "D_80071748", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071748" + }, + { + "type": "extern_variable", + "name": "D_800833F8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800833F8" + }, + { + "type": "extern_variable", + "name": "D_8009A1C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009A1C4" + }, + { + "type": "extern_variable", + "name": "D_800A06B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A06B0" + }, + { + "type": "extern_variable", + "name": "D_80071A88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071A88" + }, + { + "type": "extern_variable", + "name": "D_801142D4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801142D4" + }, + { + "type": "extern_variable", + "name": "D_800E42D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42D8" + }, + { + "type": "extern_variable", + "name": "D_800E42DA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DA" + }, + { + "type": "extern_variable", + "name": "D_800E42DC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DC" + }, + { + "type": "extern_variable", + "name": "D_800E42E0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E0" + }, + { + "type": "extern_variable", + "name": "D_800E42E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E4" + }, + { + "type": "extern_variable", + "name": "D_800E42E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E8" + }, + { + "type": "extern_variable", + "name": "D_800E42EA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EA" + }, + { + "type": "extern_variable", + "name": "D_800E42EE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EE" + }, + { + "type": "extern_variable", + "name": "D_800E48E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48E8" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-18T12:35:32.631636" + }, + { + "function_name": "func_800BC9FC", + "file": "src/field/field.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80074EB0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB0" + }, + { + "type": "extern_variable", + "name": "D_80074EB4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB4" + }, + { + "type": "extern_variable", + "name": "D_80074EB8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB8" + }, + { + "type": "extern_variable", + "name": "func_800A48B8", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800A48B8" + }, + { + "type": "extern_variable", + "name": "D_80074ED9", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074ED9" + }, + { + "type": "extern_variable", + "name": "D_800DF120", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DF120" + }, + { + "type": "extern_variable", + "name": "D_800DF122", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DF122" + }, + { + "type": "extern_variable", + "name": "D_800DEF88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DEF88" + }, + { + "type": "extern_variable", + "name": "func_800354CC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800354CC" + }, + { + "type": "extern_variable", + "name": "func_80035658", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80035658" + }, + { + "type": "extern_variable", + "name": "D_800E0638", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0638" + }, + { + "type": "extern_variable", + "name": "D_800E48F4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48F4" + }, + { + "type": "extern_variable", + "name": "D_800E48FC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48FC" + }, + { + "type": "extern_variable", + "name": "D_800E48FE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48FE" + }, + { + "type": "extern_variable", + "name": "D_800E4900", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4900" + }, + { + "type": "extern_variable", + "name": "D_800E4901", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4901" + }, + { + "type": "extern_variable", + "name": "D_800E4904", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4904" + }, + { + "type": "extern_variable", + "name": "D_800E4906", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4906" + }, + { + "type": "extern_variable", + "name": "D_800E4908", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4908" + }, + { + "type": "extern_variable", + "name": "D_800E4909", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4909" + }, + { + "type": "extern_variable", + "name": "D_800E490C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E490C" + }, + { + "type": "extern_variable", + "name": "D_800E490E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E490E" + }, + { + "type": "extern_variable", + "name": "D_800E4910", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4910" + }, + { + "type": "extern_variable", + "name": "D_800E4911", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4911" + }, + { + "type": "extern_variable", + "name": "D_800E4914", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4914" + }, + { + "type": "extern_variable", + "name": "D_800E4916", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4916" + }, + { + "type": "extern_variable", + "name": "D_800E4918", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4918" + }, + { + "type": "extern_variable", + "name": "D_800E4919", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4919" + }, + { + "type": "extern_variable", + "name": "D_8007EB98", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007EB98" + }, + { + "type": "extern_variable", + "name": "func_8001786C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001786C" + }, + { + "type": "extern_variable", + "name": "func_80020058", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80020058" + }, + { + "type": "extern_variable", + "name": "D_800491D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800491D0" + }, + { + "type": "extern_variable", + "name": "D_8008328D", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328D" + }, + { + "type": "extern_variable", + "name": "D_800832A2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800832A2" + }, + { + "type": "extern_variable", + "name": "D_8008326C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008326C" + }, + { + "type": "extern_variable", + "name": "D_80083286", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083286" + }, + { + "type": "extern_variable", + "name": "D_80083278", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083278" + }, + { + "type": "extern_variable", + "name": "D_8008327A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327A" + }, + { + "type": "extern_variable", + "name": "D_8008327E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327E" + }, + { + "type": "extern_variable", + "name": "D_80075E24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075E24" + }, + { + "type": "extern_variable", + "name": "D_80075E25", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075E25" + }, + { + "type": "extern_variable", + "name": "D_800E4214", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4214" + }, + { + "type": "extern_variable", + "name": "D_800E4280", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4280" + }, + { + "type": "extern_variable", + "name": "D_800E4D48", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4D48" + }, + { + "type": "extern_variable", + "name": "D_800E0748", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0748" + }, + { + "type": "extern_variable", + "name": "D_800E074A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074A" + }, + { + "type": "extern_variable", + "name": "D_800E074C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074C" + }, + { + "type": "extern_variable", + "name": "D_800E08C0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08C0" + }, + { + "type": "extern_variable", + "name": "D_800E074E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074E" + }, + { + "type": "extern_variable", + "name": "D_800E0754", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0754" + }, + { + "type": "extern_variable", + "name": "D_800E0758", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0758" + }, + { + "type": "extern_variable", + "name": "D_800E08A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08A8" + }, + { + "type": "extern_variable", + "name": "D_800E0756", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0756" + }, + { + "type": "extern_variable", + "name": "D_800E0750", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0750" + }, + { + "type": "extern_variable", + "name": "D_800E0751", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0751" + }, + { + "type": "extern_variable", + "name": "D_800E0752", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0752" + }, + { + "type": "extern_variable", + "name": "func_800D5A60", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D5A60" + }, + { + "type": "extern_variable", + "name": "func_800D5C9C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D5C9C" + }, + { + "type": "extern_variable", + "name": "func_800D6D44", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6D44" + }, + { + "type": "extern_variable", + "name": "func_800D6E0C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6E0C" + }, + { + "type": "extern_variable", + "name": "func_800D6F6C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6F6C" + }, + { + "type": "extern_variable", + "name": "D_80083284", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083284" + }, + { + "type": "extern_variable", + "name": "D_8008328A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328A" + }, + { + "type": "extern_variable", + "name": "D_8008328E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328E" + }, + { + "type": "extern_variable", + "name": "D_80083298", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083298" + }, + { + "type": "extern_variable", + "name": "D_8008329A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329A" + }, + { + "type": "extern_variable", + "name": "D_800E424C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E424C" + }, + { + "type": "extern_variable", + "name": "D_801142CC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801142CC" + }, + { + "type": "extern_variable", + "name": "D_8009AD30", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009AD30" + }, + { + "type": "extern_variable", + "name": "func_800C2E00", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C2E00" + }, + { + "type": "extern_variable", + "name": "func_800DA444", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800DA444" + }, + { + "type": "extern_variable", + "name": "func_800C8634", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C8634" + }, + { + "type": "extern_variable", + "name": "func_800CDC14", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800CDC14" + }, + { + "type": "extern_variable", + "name": "D_80095DE0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80095DE0" + }, + { + "type": "extern_variable", + "name": "func_80025B10", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80025B10" + }, + { + "type": "extern_variable", + "name": "func_800BEAD4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800BEAD4" + }, + { + "type": "extern_variable", + "name": "D_800E0208", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0208" + }, + { + "type": "extern_variable", + "name": "D_800756E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800756E8" + }, + { + "type": "extern_variable", + "name": "D_80083291", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083291" + }, + { + "type": "extern_variable", + "name": "D_80083294", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083294" + }, + { + "type": "extern_variable", + "name": "D_8007078C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007078C" + }, + { + "type": "extern_variable", + "name": "D_8007E7B8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B8" + }, + { + "type": "extern_variable", + "name": "D_8007E7BA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7BA" + }, + { + "type": "extern_variable", + "name": "D_8007E7AC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7AC" + }, + { + "type": "extern_variable", + "name": "D_8007E7AE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7AE" + }, + { + "type": "extern_variable", + "name": "D_8007E7B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B0" + }, + { + "type": "extern_variable", + "name": "D_8007E7B2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B2" + }, + { + "type": "extern_variable", + "name": "D_8007E7B4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B4" + }, + { + "type": "extern_variable", + "name": "D_8007E7B6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B6" + }, + { + "type": "extern_variable", + "name": "D_80082248", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082248" + }, + { + "type": "extern_variable", + "name": "D_8008325C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008325C" + }, + { + "type": "extern_variable", + "name": "D_8009D828", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D828" + }, + { + "type": "extern_variable", + "name": "D_800A0854", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A0854" + }, + { + "type": "extern_variable", + "name": "D_800A0F38", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A0F38" + }, + { + "type": "extern_variable", + "name": "D_8007E7C2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7C2" + }, + { + "type": "extern_variable", + "name": "D_80049209", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049209" + }, + { + "type": "extern_variable", + "name": "D_8004920A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8004920A" + }, + { + "type": "extern_variable", + "name": "func_80044064", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80044064" + }, + { + "type": "extern_variable", + "name": "func_800C5B38", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C5B38" + }, + { + "type": "extern_variable", + "name": "D_80081D90", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80081D90" + }, + { + "type": "extern_variable", + "name": "D_80083288", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083288" + }, + { + "type": "extern_variable", + "name": "D_800E4944", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4944" + }, + { + "type": "extern_variable", + "name": "D_80114480", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80114480" + }, + { + "type": "extern_variable", + "name": "D_800E42A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42A8" + }, + { + "type": "extern_variable", + "name": "D_8008327C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327C" + }, + { + "type": "extern_variable", + "name": "D_80083280", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083280" + }, + { + "type": "extern_variable", + "name": "D_80083282", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083282" + }, + { + "type": "extern_variable", + "name": "D_8008328F", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328F" + }, + { + "type": "extern_variable", + "name": "D_80083290", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083290" + }, + { + "type": "extern_variable", + "name": "D_8008329C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329C" + }, + { + "type": "extern_variable", + "name": "D_8008329E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329E" + }, + { + "type": "extern_variable", + "name": "D_80071748", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071748" + }, + { + "type": "extern_variable", + "name": "D_800833F8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800833F8" + }, + { + "type": "extern_variable", + "name": "D_8009A1C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009A1C4" + }, + { + "type": "extern_variable", + "name": "D_800A06B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A06B0" + }, + { + "type": "extern_variable", + "name": "D_80071A88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071A88" + }, + { + "type": "extern_variable", + "name": "D_801142D4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801142D4" + }, + { + "type": "extern_variable", + "name": "D_800E42D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42D8" + }, + { + "type": "extern_variable", + "name": "D_800E42DA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DA" + }, + { + "type": "extern_variable", + "name": "D_800E42DC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DC" + }, + { + "type": "extern_variable", + "name": "D_800E42E0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E0" + }, + { + "type": "extern_variable", + "name": "D_800E42E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E4" + }, + { + "type": "extern_variable", + "name": "D_800E42E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E8" + }, + { + "type": "extern_variable", + "name": "D_800E42EA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EA" + }, + { + "type": "extern_variable", + "name": "D_800E42EE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EE" + }, + { + "type": "extern_variable", + "name": "D_800E48E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48E8" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-18T12:35:33.533875" + }, + { + "function_name": "func_800A19A4", + "file": "src/ending/ending.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_8004656C", + "return_type": "s16", + "parameters": "s32, ?, s16, s16", + "suggestion": "Define proper signature for func_8004656C in header" + }, + { + "type": "extern_variable", + "name": "func_80043D3C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80043D3C" + }, + { + "type": "extern_variable", + "name": "func_800443B0", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800443B0" + }, + { + "type": "extern_variable", + "name": "func_800444AC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800444AC" + }, + { + "type": "extern_variable", + "name": "D_800AF2E0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800AF2E0" + }, + { + "type": "extern_variable", + "name": "D_800AF398", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800AF398" + }, + { + "type": "extern_variable", + "name": "func_80039EDC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80039EDC" + }, + { + "type": "extern_variable", + "name": "func_8003D0C0", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8003D0C0" + }, + { + "type": "extern_variable", + "name": "func_8003D1B4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8003D1B4" + }, + { + "type": "extern_variable", + "name": "func_80036244", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80036244" + }, + { + "type": "extern_variable", + "name": "func_80044000", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80044000" + }, + { + "type": "extern_variable", + "name": "func_80046CFC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80046CFC" + }, + { + "type": "extern_variable", + "name": "func_80046D0C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80046D0C" + } + ], + "timestamp": "2026-04-18T12:35:35.128596" + }, + { + "function_name": "func_80034150", + "file": "src/main/psxsdk.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "_SpuInit", + "return_type": "unknown", + "parameters": "?", + "suggestion": "Define proper signature for _SpuInit in header" + }, + { + "type": "extern_variable", + "name": "func_8003DD84", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8003DD84" + }, + { + "type": "extern_variable", + "name": "func_80034350", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable func_80034350" + }, + { + "type": "extern_variable", + "name": "D_7FFFFF", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_7FFFFF" + }, + { + "type": "extern_variable", + "name": "D_80095DB4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80095DB4" + } + ], + "timestamp": "2026-04-18T12:35:35.282730" + }, + { + "function_name": "func_800D650C", + "file": "src/battle/battle2.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_8003BD7C", + "return_type": "s32", + "parameters": "?*, ?*, ?*, ?*, u32*, void*, DR_MODE*, void*, ?*, ?*", + "suggestion": "Define proper signature for func_8003BD7C in header" + }, + { + "type": "extern_variable", + "name": "func_8003B51C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8003B51C" + }, + { + "type": "extern_variable", + "name": "func_800D4284", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D4284" + }, + { + "type": "extern_variable", + "name": "D_800F0C44", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F0C44" + }, + { + "type": "extern_variable", + "name": "func_800D6840", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6840" + }, + { + "type": "extern_variable", + "name": "D_800F15AC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F15AC" + }, + { + "type": "extern_variable", + "name": "func_8003C21C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8003C21C" + }, + { + "type": "extern_variable", + "name": "func_80046794", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80046794" + }, + { + "type": "extern_variable", + "name": "D_800F1914", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F1914" + }, + { + "type": "extern_variable", + "name": "D_800F191C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F191C" + }, + { + "type": "extern_variable", + "name": "D_800F1924", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F1924" + }, + { + "type": "extern_variable", + "name": "D_800F192C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F192C" + }, + { + "type": "unknown_variable", + "name": "sp48", + "suggestion": "m2c could not determine type of variable sp48" + }, + { + "type": "unknown_variable", + "name": "sp4C", + "suggestion": "m2c could not determine type of variable sp4C" + } + ], + "timestamp": "2026-04-18T12:35:35.802047" + }, + { + "function_name": "func_800A3ED0", + "file": "src/battle/battle.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_8009D954", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D954" + }, + { + "type": "extern_variable", + "name": "D_800FA9D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FA9D0" + }, + { + "type": "extern_variable", + "name": "D_800FA9D4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FA9D4" + }, + { + "type": "extern_variable", + "name": "D_800F9F3C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9F3C" + }, + { + "type": "extern_variable", + "name": "D_800F9F42", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9F42" + }, + { + "type": "extern_variable", + "name": "D_800F9F44", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9F44" + }, + { + "type": "extern_variable", + "name": "D_800F87F4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F87F4" + }, + { + "type": "extern_variable", + "name": "D_800F5E65", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E65" + }, + { + "type": "extern_variable", + "name": "D_800F3A40", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F3A40" + }, + { + "type": "extern_variable", + "name": "D_80071C32", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071C32" + }, + { + "type": "extern_variable", + "name": "D_80071E64", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071E64" + }, + { + "type": "extern_variable", + "name": "D_800722D6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800722D6" + }, + { + "type": "extern_variable", + "name": "D_800722D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800722D8" + }, + { + "type": "extern_variable", + "name": "D_800738A0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738A0" + }, + { + "type": "extern_variable", + "name": "D_800738CA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738CA" + }, + { + "type": "extern_variable", + "name": "D_801671B8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801671B8" + }, + { + "type": "extern_variable", + "name": "D_801671BA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801671BA" + }, + { + "type": "extern_variable", + "name": "D_801671BC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801671BC" + }, + { + "type": "extern_variable", + "name": "D_8009D866", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D866" + }, + { + "type": "extern_variable", + "name": "D_800F5E68", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E68" + }, + { + "type": "extern_variable", + "name": "D_800F5E6A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E6A" + }, + { + "type": "extern_variable", + "name": "D_800708D1", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708D1" + }, + { + "type": "extern_variable", + "name": "D_8009D85E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85E" + }, + { + "type": "extern_variable", + "name": "D_8009D862", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D862" + }, + { + "type": "extern_variable", + "name": "D_800F5E70", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E70" + }, + { + "type": "extern_variable", + "name": "D_800F5E72", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E72" + }, + { + "type": "extern_variable", + "name": "D_800738A4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738A4" + }, + { + "type": "extern_variable", + "name": "D_800738C7", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738C7" + }, + { + "type": "extern_variable", + "name": "D_8009D84E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D84E" + }, + { + "type": "extern_variable", + "name": "D_800F5E64", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E64" + }, + { + "type": "extern_variable", + "name": "D_800F5EFC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5EFC" + }, + { + "type": "extern_variable", + "name": "func_800AA574", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AA574" + }, + { + "type": "extern_variable", + "name": "func_800AA688", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AA688" + }, + { + "type": "extern_variable", + "name": "D_80163778", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163778" + }, + { + "type": "extern_variable", + "name": "D_800E7BA4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BA4" + }, + { + "type": "extern_variable", + "name": "D_800E7BA5", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BA5" + }, + { + "type": "extern_variable", + "name": "D_800E7BA6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BA6" + }, + { + "type": "extern_variable", + "name": "D_800F5E74", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E74" + }, + { + "type": "extern_variable", + "name": "D_800F5E76", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E76" + }, + { + "type": "extern_variable", + "name": "D_800730D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730D0" + }, + { + "type": "extern_variable", + "name": "D_800E7BBC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BBC" + }, + { + "type": "extern_variable", + "name": "D_800E7BBD", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BBD" + }, + { + "type": "extern_variable", + "name": "D_8009D86F", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D86F" + }, + { + "type": "extern_variable", + "name": "D_800E7BCC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BCC" + }, + { + "type": "extern_variable", + "name": "D_800E7BFC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BFC" + }, + { + "type": "extern_variable", + "name": "D_800E7BEC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BEC" + }, + { + "type": "extern_variable", + "name": "func_800AF264", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AF264" + }, + { + "type": "extern_variable", + "name": "func_800AF3AC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AF3AC" + }, + { + "type": "extern_variable", + "name": "D_800E7C7C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7C7C" + }, + { + "type": "extern_variable", + "name": "D_800E7CBC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7CBC" + }, + { + "type": "extern_variable", + "name": "D_800E7CDC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7CDC" + }, + { + "type": "extern_variable", + "name": "D_800F4A48", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4A48" + }, + { + "type": "extern_variable", + "name": "D_800F4A70", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4A70" + }, + { + "type": "extern_variable", + "name": "D_800F4A98", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4A98" + }, + { + "type": "extern_variable", + "name": "D_800F49A0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F49A0" + }, + { + "type": "extern_variable", + "name": "D_800F49A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F49A8" + }, + { + "type": "extern_variable", + "name": "D_8009D85C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85C" + }, + { + "type": "extern_variable", + "name": "D_8009D860", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D860" + }, + { + "type": "extern_variable", + "name": "D_8009D868", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D868" + }, + { + "type": "extern_variable", + "name": "D_8009D86A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D86A" + }, + { + "type": "extern_variable", + "name": "D_800F5F01", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5F01" + }, + { + "type": "extern_variable", + "name": "D_800F87F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F87F0" + }, + { + "type": "extern_variable", + "name": "func_800A5250", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800A5250" + } + ], + "timestamp": "2026-04-18T12:35:36.221072" + }, + { + "function_name": "func_800BA598", + "file": "src/battle/battle1.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "func_800B5E64", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800B5E64" + }, + { + "type": "extern_variable", + "name": "D_800F8384", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F8384" + }, + { + "type": "extern_variable", + "name": "D_80103200", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80103200" + }, + { + "type": "extern_variable", + "name": "D_800F7E10", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7E10" + }, + { + "type": "extern_variable", + "name": "D_800F8180", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F8180" + }, + { + "type": "extern_variable", + "name": "D_800E8E88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E8E88" + }, + { + "type": "extern_variable", + "name": "D_800E8F94", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E8F94" + }, + { + "type": "extern_variable", + "name": "func_800B7DB4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800B7DB4" + }, + { + "type": "extern_variable", + "name": "D_800FA9D1", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FA9D1" + }, + { + "type": "extern_variable", + "name": "D_80163CC0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163CC0" + }, + { + "type": "extern_variable", + "name": "D_80163CC2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163CC2" + }, + { + "type": "extern_variable", + "name": "D_80163CC4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163CC4" + }, + { + "type": "extern_variable", + "name": "D_800F99EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F99EC" + }, + { + "type": "extern_variable", + "name": "D_800F99EE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F99EE" + }, + { + "type": "extern_variable", + "name": "D_800F99F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F99F0" + }, + { + "type": "extern_variable", + "name": "D_800F99F2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F99F2" + }, + { + "type": "extern_variable", + "name": "D_800F99F4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F99F4" + }, + { + "type": "extern_variable", + "name": "D_800F99F6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F99F6" + }, + { + "type": "extern_variable", + "name": "D_800FA9D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FA9D8" + }, + { + "type": "extern_variable", + "name": "D_801517F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801517F0" + }, + { + "type": "extern_variable", + "name": "D_800F7E08", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7E08" + }, + { + "type": "extern_variable", + "name": "D_801516FE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801516FE" + }, + { + "type": "extern_variable", + "name": "D_80151700", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151700" + }, + { + "type": "extern_variable", + "name": "D_80151702", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151702" + }, + { + "type": "extern_variable", + "name": "D_800F8178", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F8178" + }, + { + "type": "extern_variable", + "name": "D_800F8184", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F8184" + }, + { + "type": "extern_variable", + "name": "D_80163B44", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163B44" + }, + { + "type": "extern_variable", + "name": "D_801590E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801590E4" + }, + { + "type": "extern_variable", + "name": "D_801590E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801590E8" + }, + { + "type": "extern_variable", + "name": "D_800F7ED8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7ED8" + }, + { + "type": "extern_variable", + "name": "D_800F7EDA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EDA" + }, + { + "type": "extern_variable", + "name": "D_80151844", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151844" + }, + { + "type": "extern_variable", + "name": "D_80151846", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151846" + }, + { + "type": "extern_variable", + "name": "D_80151848", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151848" + }, + { + "type": "extern_variable", + "name": "D_801518A4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801518A4" + }, + { + "type": "extern_variable", + "name": "D_801518A6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801518A6" + }, + { + "type": "extern_variable", + "name": "D_801518A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801518A8" + }, + { + "type": "extern_variable", + "name": "D_800F7EF0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EF0" + }, + { + "type": "extern_variable", + "name": "D_800F7EDC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EDC" + }, + { + "type": "extern_variable", + "name": "D_800F7EDE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EDE" + }, + { + "type": "extern_variable", + "name": "D_800F7EE0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EE0" + }, + { + "type": "extern_variable", + "name": "D_800F7EE2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EE2" + }, + { + "type": "extern_variable", + "name": "D_800F7EE4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EE4" + }, + { + "type": "extern_variable", + "name": "D_800F7EE6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EE6" + }, + { + "type": "extern_variable", + "name": "D_800F7EE8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EE8" + }, + { + "type": "extern_variable", + "name": "func_800C0480", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C0480" + }, + { + "type": "extern_variable", + "name": "func_800C0630", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C0630" + }, + { + "type": "extern_variable", + "name": "func_800C0970", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C0970" + }, + { + "type": "extern_variable", + "name": "func_800C0B20", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C0B20" + }, + { + "type": "extern_variable", + "name": "D_80151850", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151850" + }, + { + "type": "extern_variable", + "name": "func_800B5AAC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800B5AAC" + }, + { + "type": "extern_variable", + "name": "func_800C36B4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C36B4" + }, + { + "type": "extern_variable", + "name": "func_800B4E30", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800B4E30" + }, + { + "type": "extern_variable", + "name": "func_800B54B8", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800B54B8" + }, + { + "type": "extern_variable", + "name": "func_800D09D0", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D09D0" + }, + { + "type": "extern_variable", + "name": "D_800F9DAA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9DAA" + }, + { + "type": "extern_variable", + "name": "D_800F9DAC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9DAC" + }, + { + "type": "extern_variable", + "name": "D_800FA9C6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FA9C6" + }, + { + "type": "extern_variable", + "name": "D_800F8CF4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F8CF4" + }, + { + "type": "extern_variable", + "name": "func_801B0050", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_801B0050" + }, + { + "type": "extern_variable", + "name": "func_800C74E4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C74E4" + }, + { + "type": "extern_variable", + "name": "D_800F4B0C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4B0C" + }, + { + "type": "extern_variable", + "name": "D_801AFFC0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801AFFC0" + }, + { + "type": "extern_variable", + "name": "func_8003CEBC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8003CEBC" + }, + { + "type": "extern_variable", + "name": "func_8003D1B4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8003D1B4" + }, + { + "type": "extern_variable", + "name": "func_80043938", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80043938" + }, + { + "type": "extern_variable", + "name": "func_80046960", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80046960" + }, + { + "type": "extern_variable", + "name": "func_8003BC9C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8003BC9C" + }, + { + "type": "extern_variable", + "name": "func_800468FC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800468FC" + }, + { + "type": "extern_variable", + "name": "D_800EA264", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800EA264" + } + ], + "timestamp": "2026-04-18T12:35:36.601061" + }, + { + "function_name": "func_800308D4", + "file": "src/main/akao.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "SpuSetVoiceARAttr", + "return_type": "unknown", + "parameters": "s32, u16, s32", + "suggestion": "Define proper signature for SpuSetVoiceARAttr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceDR", + "return_type": "unknown", + "parameters": "s32, u16", + "suggestion": "Define proper signature for SpuSetVoiceDR in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceLoopStartAddr", + "return_type": "unknown", + "parameters": "s32, s32", + "suggestion": "Define proper signature for SpuSetVoiceLoopStartAddr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoicePitch", + "return_type": "unknown", + "parameters": "u16", + "suggestion": "Define proper signature for SpuSetVoicePitch in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceRRAttr", + "return_type": "unknown", + "parameters": "s32, u16, s32", + "suggestion": "Define proper signature for SpuSetVoiceRRAttr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceSL", + "return_type": "unknown", + "parameters": "s32, u16", + "suggestion": "Define proper signature for SpuSetVoiceSL in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceSRAttr", + "return_type": "unknown", + "parameters": "s32, u16, s32", + "suggestion": "Define proper signature for SpuSetVoiceSRAttr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceStartAddr", + "return_type": "unknown", + "parameters": "s32, s32", + "suggestion": "Define proper signature for SpuSetVoiceStartAddr in header" + }, + { + "type": "extern_function", + "name": "SpuSetVoiceVolume", + "return_type": "unknown", + "parameters": "s32, s16, s16", + "suggestion": "Define proper signature for SpuSetVoiceVolume in header" + }, + { + "type": "extern_variable", + "name": "D_80049C40", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049C40" + }, + { + "type": "extern_variable", + "name": "func_8002BD04", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002BD04" + }, + { + "type": "extern_variable", + "name": "func_8002BFCC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002BFCC" + }, + { + "type": "extern_variable", + "name": "func_8002C004", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002C004" + }, + { + "type": "extern_variable", + "name": "func_8002C2CC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002C2CC" + }, + { + "type": "extern_variable", + "name": "func_8002C300", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8002C300" + }, + { + "type": "extern_variable", + "name": "D_8007EBE4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007EBE4" + }, + { + "type": "extern_variable", + "name": "func_80030038", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80030038" + }, + { + "type": "extern_variable", + "name": "D_80081DC8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80081DC8" + }, + { + "type": "extern_variable", + "name": "D_800499A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800499A8" + }, + { + "type": "extern_variable", + "name": "D_80096704", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80096704" + }, + { + "type": "extern_variable", + "name": "func_800293D0", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800293D0" + } + ], + "timestamp": "2026-04-18T12:35:36.882132" + }, + { + "function_name": "func_8001786C", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_8007E7A0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7A0" + }, + { + "type": "extern_variable", + "name": "D_8007EB6A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007EB6A" + }, + { + "type": "extern_variable", + "name": "D_8009A078", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009A078" + }, + { + "type": "extern_variable", + "name": "D_8009A079", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009A079" + }, + { + "type": "extern_variable", + "name": "D_8009A07A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009A07A" + }, + { + "type": "extern_variable", + "name": "D_80063048", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80063048" + }, + { + "type": "extern_variable", + "name": "D_80010118", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80010118" + }, + { + "type": "extern_variable", + "name": "D_80010120", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80010120" + }, + { + "type": "extern_variable", + "name": "D_80010124", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80010124" + }, + { + "type": "extern_variable", + "name": "D_800F5BC7", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5BC7" + }, + { + "type": "extern_variable", + "name": "D_800F5BE1", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5BE1" + }, + { + "type": "extern_variable", + "name": "D_800F5BF4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5BF4" + }, + { + "type": "extern_variable", + "name": "D_800F5F44", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5F44" + }, + { + "type": "extern_variable", + "name": "D_800F652C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F652C" + }, + { + "type": "extern_variable", + "name": "D_800F83E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F83E4" + }, + { + "type": "extern_variable", + "name": "D_800F8410", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F8410" + }, + { + "type": "extern_variable", + "name": "D_80163658", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163658" + }, + { + "type": "extern_variable", + "name": "D_8009D808", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D808" + }, + { + "type": "extern_variable", + "name": "D_8009D80A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D80A" + }, + { + "type": "extern_variable", + "name": "D_8009D80C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D80C" + }, + { + "type": "extern_variable", + "name": "func_80018028", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80018028" + }, + { + "type": "extern_variable", + "name": "D_800491B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800491B0" + }, + { + "type": "extern_variable", + "name": "D_800730D9", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730D9" + }, + { + "type": "extern_variable", + "name": "D_800730DA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730DA" + }, + { + "type": "extern_variable", + "name": "D_800730DB", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730DB" + }, + { + "type": "extern_variable", + "name": "D_80062E53", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80062E53" + }, + { + "type": "extern_variable", + "name": "D_8006950A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8006950A" + }, + { + "type": "extern_variable", + "name": "func_80019254", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80019254" + }, + { + "type": "extern_variable", + "name": "func_8001937C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001937C" + }, + { + "type": "extern_variable", + "name": "func_800193F4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800193F4" + }, + { + "type": "extern_variable", + "name": "func_80019544", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80019544" + }, + { + "type": "extern_variable", + "name": "D_80049060", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049060" + }, + { + "type": "extern_variable", + "name": "D_80049062", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049062" + }, + { + "type": "extern_variable", + "name": "D_80049064", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049064" + }, + { + "type": "extern_variable", + "name": "D_80049066", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049066" + }, + { + "type": "extern_variable", + "name": "D_80049068", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049068" + }, + { + "type": "extern_variable", + "name": "D_8004906A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8004906A" + }, + { + "type": "extern_variable", + "name": "D_8004906C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8004906C" + }, + { + "type": "extern_variable", + "name": "D_8004906E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8004906E" + }, + { + "type": "extern_variable", + "name": "D_800730D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730D8" + }, + { + "type": "extern_variable", + "name": "D_800694E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800694E4" + }, + { + "type": "extern_variable", + "name": "D_8006947C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8006947C" + }, + { + "type": "extern_variable", + "name": "D_800730DE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730DE" + }, + { + "type": "extern_variable", + "name": "D_80069508", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069508" + }, + { + "type": "extern_variable", + "name": "func_8001BB30", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001BB30" + }, + { + "type": "extern_variable", + "name": "D_80069538", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069538" + }, + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069555", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069555" + }, + { + "type": "extern_variable", + "name": "D_80069556", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069556" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_800708C8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C8" + }, + { + "type": "extern_variable", + "name": "D_800708D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708D0" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80071E46", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071E46" + }, + { + "type": "extern_variable", + "name": "D_800738A4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738A4" + }, + { + "type": "extern_variable", + "name": "D_8009D888", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D888" + }, + { + "type": "extern_variable", + "name": "D_80069844", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069844" + }, + { + "type": "extern_variable", + "name": "D_800494A4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800494A4" + }, + { + "type": "extern_variable", + "name": "D_80071E4D", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071E4D" + }, + { + "type": "extern_variable", + "name": "D_800738BC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738BC" + }, + { + "type": "extern_variable", + "name": "D_800491D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800491D0" + }, + { + "type": "extern_variable", + "name": "D_8009D85C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85C" + }, + { + "type": "extern_variable", + "name": "D_8009D85E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85E" + }, + { + "type": "extern_variable", + "name": "D_8009D860", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D860" + }, + { + "type": "extern_variable", + "name": "D_8009D862", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D862" + }, + { + "type": "extern_variable", + "name": "func_80026090", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80026090" + }, + { + "type": "extern_variable", + "name": "func_800260DC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800260DC" + }, + { + "type": "extern_variable", + "name": "D_80083084", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083084" + }, + { + "type": "extern_variable", + "name": "D_80074EB0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB0" + }, + { + "type": "extern_variable", + "name": "D_80074EB4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB4" + }, + { + "type": "extern_variable", + "name": "D_80074EDA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EDA" + }, + { + "type": "extern_variable", + "name": "D_80074F16", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074F16" + }, + { + "type": "extern_variable", + "name": "D_80071C32", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071C32" + }, + { + "type": "extern_variable", + "name": "D_80071E64", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071E64" + }, + { + "type": "extern_variable", + "name": "D_800722D6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800722D6" + }, + { + "type": "extern_variable", + "name": "D_800738CA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738CA" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + }, + { + "type": "extern_variable", + "name": "D_8009D88A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D88A" + }, + { + "type": "extern_variable", + "name": "D_8009D88C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D88C" + }, + { + "type": "extern_variable", + "name": "D_8009D88E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D88E" + }, + { + "type": "extern_variable", + "name": "func_80018630", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80018630" + }, + { + "type": "extern_variable", + "name": "func_80018934", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80018934" + }, + { + "type": "extern_variable", + "name": "D_800730DF", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730DF" + } + ], + "timestamp": "2026-04-18T12:35:38.024166" + }, + { + "function_name": "func_800E3E10", + "file": "src/battle/battle3.c", + "primary_error": "Local variable 'temp_s0' is void* but used with -> (m2c struct type inference failure)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_80026A34", + "return_type": "void", + "parameters": "?, ?, ?, ?", + "suggestion": "Define proper signature for func_80026A34 in header" + }, + { + "type": "extern_function", + "name": "func_80028484", + "return_type": "void", + "parameters": "s16*, u16, ?", + "suggestion": "Define proper signature for func_80028484 in header" + }, + { + "type": "extern_function", + "name": "func_800E368C", + "return_type": "void", + "parameters": "?, ?, ?", + "suggestion": "Define proper signature for func_800E368C in header" + }, + { + "type": "extern_variable", + "name": "D_800FB064", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FB064" + }, + { + "type": "extern_variable", + "name": "D_800FF060", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF060" + }, + { + "type": "extern_variable", + "name": "D_800FF064", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF064" + }, + { + "type": "extern_variable", + "name": "D_800FF068", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF068" + }, + { + "type": "extern_variable", + "name": "D_800FF06C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF06C" + }, + { + "type": "extern_variable", + "name": "D_800FF070", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF070" + }, + { + "type": "extern_variable", + "name": "D_800FF074", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF074" + }, + { + "type": "extern_variable", + "name": "D_800FF094", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF094" + }, + { + "type": "extern_variable", + "name": "D_800FF098", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF098" + }, + { + "type": "extern_variable", + "name": "D_800FF0D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF0D8" + }, + { + "type": "extern_variable", + "name": "D_800FF0DC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF0DC" + }, + { + "type": "extern_variable", + "name": "D_800FF0E0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF0E0" + }, + { + "type": "extern_variable", + "name": "D_80103154", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80103154" + }, + { + "type": "extern_variable", + "name": "D_80103158", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80103158" + }, + { + "type": "extern_variable", + "name": "D_80103160", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80103160" + }, + { + "type": "extern_variable", + "name": "D_80103188", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80103188" + }, + { + "type": "extern_variable", + "name": "D_801031CC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801031CC" + }, + { + "type": "extern_variable", + "name": "D_801031D4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801031D4" + }, + { + "type": "extern_variable", + "name": "func_80044AC0", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80044AC0" + }, + { + "type": "extern_variable", + "name": "func_80046794", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80046794" + }, + { + "type": "extern_variable", + "name": "D_800F57F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F57F0" + }, + { + "type": "extern_variable", + "name": "D_800F1E54", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F1E54" + }, + { + "type": "extern_variable", + "name": "D_800F1E56", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F1E56" + }, + { + "type": "extern_variable", + "name": "D_800F1E58", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F1E58" + }, + { + "type": "extern_variable", + "name": "D_800F1E5A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F1E5A" + }, + { + "type": "extern_variable", + "name": "D_800F1E5C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F1E5C" + }, + { + "type": "extern_variable", + "name": "D_800F1E5E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F1E5E" + }, + { + "type": "extern_variable", + "name": "D_800F1E60", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F1E60" + }, + { + "type": "extern_variable", + "name": "D_800F1E62", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F1E62" + }, + { + "type": "extern_variable", + "name": "D_800F2F8C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F2F8C" + }, + { + "type": "extern_variable", + "name": "func_800DA380", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800DA380" + }, + { + "type": "extern_variable", + "name": "D_801516FE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801516FE" + }, + { + "type": "extern_variable", + "name": "D_800492FC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800492FC" + }, + { + "type": "extern_variable", + "name": "D_800F55D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F55D8" + }, + { + "type": "extern_variable", + "name": "func_800DDAD8", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800DDAD8" + }, + { + "type": "extern_variable", + "name": "func_800DDCE8", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800DDCE8" + }, + { + "type": "extern_variable", + "name": "D_800F90C6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F90C6" + }, + { + "type": "extern_variable", + "name": "D_8009D8FE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D8FE" + }, + { + "type": "extern_variable", + "name": "D_800F3168", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F3168" + }, + { + "type": "extern_variable", + "name": "D_8009D85C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85C" + }, + { + "type": "extern_variable", + "name": "D_8009D85E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85E" + }, + { + "type": "extern_variable", + "name": "D_801031F4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801031F4" + }, + { + "type": "extern_variable", + "name": "D_80151688", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151688" + }, + { + "type": "extern_variable", + "name": "D_8015174C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8015174C" + }, + { + "type": "extern_variable", + "name": "D_8015178C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8015178C" + }, + { + "type": "extern_variable", + "name": "D_801517C8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801517C8" + }, + { + "type": "extern_variable", + "name": "D_8015187C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8015187C" + }, + { + "type": "extern_variable", + "name": "D_800F33B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F33B0" + }, + { + "type": "extern_variable", + "name": "D_80163778", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163778" + }, + { + "type": "extern_variable", + "name": "D_80163B70", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163B70" + }, + { + "type": "extern_variable", + "name": "D_800F5778", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5778" + }, + { + "type": "extern_variable", + "name": "func_8001786C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001786C" + }, + { + "type": "extern_variable", + "name": "func_80020058", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80020058" + }, + { + "type": "extern_variable", + "name": "D_8009D854", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D854" + }, + { + "type": "extern_variable", + "name": "D_8009D856", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D856" + }, + { + "type": "extern_variable", + "name": "D_8009D860", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D860" + }, + { + "type": "extern_variable", + "name": "D_8009DC5C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009DC5C" + }, + { + "type": "extern_variable", + "name": "D_800F577B", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F577B" + }, + { + "type": "extern_variable", + "name": "D_800F90BE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F90BE" + }, + { + "type": "extern_variable", + "name": "D_800F90BF", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F90BF" + }, + { + "type": "extern_variable", + "name": "D_801516A4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801516A4" + }, + { + "type": "extern_variable", + "name": "D_801516CC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801516CC" + }, + { + "type": "extern_variable", + "name": "D_800F90FC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F90FC" + }, + { + "type": "extern_variable", + "name": "D_800F90FE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F90FE" + }, + { + "type": "extern_variable", + "name": "D_800F9100", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9100" + }, + { + "type": "extern_variable", + "name": "D_800F9102", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9102" + }, + { + "type": "extern_variable", + "name": "D_800F9104", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9104" + }, + { + "type": "extern_variable", + "name": "D_800F9106", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9106" + }, + { + "type": "extern_variable", + "name": "D_800F9107", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9107" + }, + { + "type": "extern_variable", + "name": "D_800F9108", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9108" + }, + { + "type": "extern_variable", + "name": "D_800F9109", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9109" + }, + { + "type": "extern_variable", + "name": "D_800F910A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F910A" + }, + { + "type": "extern_variable", + "name": "D_800F910B", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F910B" + }, + { + "type": "extern_variable", + "name": "D_800F910C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F910C" + }, + { + "type": "extern_variable", + "name": "D_800F910D", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F910D" + }, + { + "type": "extern_variable", + "name": "D_800F32E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F32E4" + }, + { + "type": "extern_variable", + "name": "D_80166F78", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80166F78" + }, + { + "type": "extern_variable", + "name": "func_80046960", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80046960" + }, + { + "type": "extern_variable", + "name": "func_800468FC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800468FC" + }, + { + "type": "extern_variable", + "name": "D_800F335C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F335C" + }, + { + "type": "extern_variable", + "name": "D_800F335D", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F335D" + }, + { + "type": "extern_variable", + "name": "D_800F33AC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F33AC" + }, + { + "type": "extern_variable", + "name": "func_80028484", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80028484" + }, + { + "type": "extern_variable", + "name": "func_800E368C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800E368C" + }, + { + "type": "extern_variable", + "name": "D_8009DB14", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009DB14" + }, + { + "type": "extern_variable", + "name": "D_800F90EA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F90EA" + } + ], + "timestamp": "2026-04-18T12:35:38.386296" + }, + { + "function_name": "func_80035744", + "file": "src/main/psxsdk.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "_SpuInit", + "return_type": "unknown", + "parameters": "?", + "suggestion": "Define proper signature for _SpuInit in header" + }, + { + "type": "extern_variable", + "name": "func_8003DD84", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8003DD84" + }, + { + "type": "extern_variable", + "name": "func_80034350", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable func_80034350" + }, + { + "type": "extern_variable", + "name": "D_7FFFFF", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_7FFFFF" + }, + { + "type": "extern_variable", + "name": "D_80095DB4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80095DB4" + } + ], + "timestamp": "2026-04-18T12:35:38.546795" + }, + { + "function_name": "func_800A38FC", + "file": "src/battle/battle.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_8009D954", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D954" + }, + { + "type": "extern_variable", + "name": "D_800FA9D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FA9D0" + }, + { + "type": "extern_variable", + "name": "D_800FA9D4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FA9D4" + }, + { + "type": "extern_variable", + "name": "D_800F9F3C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9F3C" + }, + { + "type": "extern_variable", + "name": "D_800F9F42", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9F42" + }, + { + "type": "extern_variable", + "name": "D_800F9F44", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9F44" + }, + { + "type": "extern_variable", + "name": "D_800F87F4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F87F4" + }, + { + "type": "extern_variable", + "name": "D_800F5E65", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E65" + }, + { + "type": "extern_variable", + "name": "D_800F3A40", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F3A40" + }, + { + "type": "extern_variable", + "name": "D_80071C32", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071C32" + }, + { + "type": "extern_variable", + "name": "D_80071E64", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071E64" + }, + { + "type": "extern_variable", + "name": "D_800722D6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800722D6" + }, + { + "type": "extern_variable", + "name": "D_800722D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800722D8" + }, + { + "type": "extern_variable", + "name": "D_800738A0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738A0" + }, + { + "type": "extern_variable", + "name": "D_800738CA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738CA" + }, + { + "type": "extern_variable", + "name": "D_801671B8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801671B8" + }, + { + "type": "extern_variable", + "name": "D_801671BA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801671BA" + }, + { + "type": "extern_variable", + "name": "D_801671BC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801671BC" + }, + { + "type": "extern_variable", + "name": "D_8009D866", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D866" + }, + { + "type": "extern_variable", + "name": "D_800F5E68", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E68" + }, + { + "type": "extern_variable", + "name": "D_800F5E6A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E6A" + }, + { + "type": "extern_variable", + "name": "D_800708D1", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708D1" + }, + { + "type": "extern_variable", + "name": "D_8009D85E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85E" + }, + { + "type": "extern_variable", + "name": "D_8009D862", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D862" + }, + { + "type": "extern_variable", + "name": "D_800F5E70", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E70" + }, + { + "type": "extern_variable", + "name": "D_800F5E72", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E72" + }, + { + "type": "extern_variable", + "name": "D_800738A4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738A4" + }, + { + "type": "extern_variable", + "name": "D_800738C7", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738C7" + }, + { + "type": "extern_variable", + "name": "D_8009D84E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D84E" + }, + { + "type": "extern_variable", + "name": "D_800F5E64", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E64" + }, + { + "type": "extern_variable", + "name": "D_800F5EFC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5EFC" + }, + { + "type": "extern_variable", + "name": "func_800AA574", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AA574" + }, + { + "type": "extern_variable", + "name": "func_800AA688", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AA688" + }, + { + "type": "extern_variable", + "name": "D_80163778", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163778" + }, + { + "type": "extern_variable", + "name": "D_800E7BA4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BA4" + }, + { + "type": "extern_variable", + "name": "D_800E7BA5", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BA5" + }, + { + "type": "extern_variable", + "name": "D_800E7BA6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BA6" + }, + { + "type": "extern_variable", + "name": "D_800F5E74", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E74" + }, + { + "type": "extern_variable", + "name": "D_800F5E76", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E76" + }, + { + "type": "extern_variable", + "name": "D_800730D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730D0" + }, + { + "type": "extern_variable", + "name": "D_800E7BBC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BBC" + }, + { + "type": "extern_variable", + "name": "D_800E7BBD", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BBD" + }, + { + "type": "extern_variable", + "name": "D_8009D86F", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D86F" + }, + { + "type": "extern_variable", + "name": "D_800E7BCC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BCC" + }, + { + "type": "extern_variable", + "name": "D_800E7BFC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BFC" + }, + { + "type": "extern_variable", + "name": "D_800E7BEC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BEC" + }, + { + "type": "extern_variable", + "name": "func_800AF264", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AF264" + }, + { + "type": "extern_variable", + "name": "func_800AF3AC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AF3AC" + }, + { + "type": "extern_variable", + "name": "D_800E7C7C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7C7C" + }, + { + "type": "extern_variable", + "name": "D_800E7CBC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7CBC" + }, + { + "type": "extern_variable", + "name": "D_800E7CDC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7CDC" + }, + { + "type": "extern_variable", + "name": "D_800F4A48", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4A48" + }, + { + "type": "extern_variable", + "name": "D_800F4A70", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4A70" + }, + { + "type": "extern_variable", + "name": "D_800F4A98", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4A98" + }, + { + "type": "extern_variable", + "name": "D_800F49A0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F49A0" + }, + { + "type": "extern_variable", + "name": "D_800F49A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F49A8" + }, + { + "type": "extern_variable", + "name": "D_8009D85C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85C" + }, + { + "type": "extern_variable", + "name": "D_8009D860", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D860" + }, + { + "type": "extern_variable", + "name": "D_8009D868", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D868" + }, + { + "type": "extern_variable", + "name": "D_8009D86A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D86A" + }, + { + "type": "extern_variable", + "name": "D_800F5F01", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5F01" + }, + { + "type": "extern_variable", + "name": "D_800F87F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F87F0" + }, + { + "type": "extern_variable", + "name": "func_800A5250", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800A5250" + } + ], + "timestamp": "2026-04-18T12:35:38.812163" + }, + { + "function_name": "func_800A8F88", + "file": "src/field/field.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80074EB0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB0" + }, + { + "type": "extern_variable", + "name": "D_80074EB4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB4" + }, + { + "type": "extern_variable", + "name": "D_80074EB8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB8" + }, + { + "type": "extern_variable", + "name": "func_800A48B8", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800A48B8" + }, + { + "type": "extern_variable", + "name": "D_80074ED9", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074ED9" + }, + { + "type": "extern_variable", + "name": "D_800DF120", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DF120" + }, + { + "type": "extern_variable", + "name": "D_800DF122", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DF122" + }, + { + "type": "extern_variable", + "name": "D_800DEF88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DEF88" + }, + { + "type": "extern_variable", + "name": "func_800354CC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800354CC" + }, + { + "type": "extern_variable", + "name": "func_80035658", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80035658" + }, + { + "type": "extern_variable", + "name": "D_800E0638", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0638" + }, + { + "type": "extern_variable", + "name": "D_800E48F4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48F4" + }, + { + "type": "extern_variable", + "name": "D_800E48FC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48FC" + }, + { + "type": "extern_variable", + "name": "D_800E48FE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48FE" + }, + { + "type": "extern_variable", + "name": "D_800E4900", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4900" + }, + { + "type": "extern_variable", + "name": "D_800E4901", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4901" + }, + { + "type": "extern_variable", + "name": "D_800E4904", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4904" + }, + { + "type": "extern_variable", + "name": "D_800E4906", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4906" + }, + { + "type": "extern_variable", + "name": "D_800E4908", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4908" + }, + { + "type": "extern_variable", + "name": "D_800E4909", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4909" + }, + { + "type": "extern_variable", + "name": "D_800E490C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E490C" + }, + { + "type": "extern_variable", + "name": "D_800E490E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E490E" + }, + { + "type": "extern_variable", + "name": "D_800E4910", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4910" + }, + { + "type": "extern_variable", + "name": "D_800E4911", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4911" + }, + { + "type": "extern_variable", + "name": "D_800E4914", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4914" + }, + { + "type": "extern_variable", + "name": "D_800E4916", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4916" + }, + { + "type": "extern_variable", + "name": "D_800E4918", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4918" + }, + { + "type": "extern_variable", + "name": "D_800E4919", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4919" + }, + { + "type": "extern_variable", + "name": "D_8007EB98", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007EB98" + }, + { + "type": "extern_variable", + "name": "func_8001786C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001786C" + }, + { + "type": "extern_variable", + "name": "func_80020058", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80020058" + }, + { + "type": "extern_variable", + "name": "D_800491D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800491D0" + }, + { + "type": "extern_variable", + "name": "D_8008328D", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328D" + }, + { + "type": "extern_variable", + "name": "D_800832A2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800832A2" + }, + { + "type": "extern_variable", + "name": "D_8008326C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008326C" + }, + { + "type": "extern_variable", + "name": "D_80083286", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083286" + }, + { + "type": "extern_variable", + "name": "D_80083278", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083278" + }, + { + "type": "extern_variable", + "name": "D_8008327A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327A" + }, + { + "type": "extern_variable", + "name": "D_8008327E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327E" + }, + { + "type": "extern_variable", + "name": "D_80075E24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075E24" + }, + { + "type": "extern_variable", + "name": "D_80075E25", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075E25" + }, + { + "type": "extern_variable", + "name": "D_800E4214", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4214" + }, + { + "type": "extern_variable", + "name": "D_800E4280", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4280" + }, + { + "type": "extern_variable", + "name": "D_800E4D48", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4D48" + }, + { + "type": "extern_variable", + "name": "D_800E0748", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0748" + }, + { + "type": "extern_variable", + "name": "D_800E074A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074A" + }, + { + "type": "extern_variable", + "name": "D_800E074C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074C" + }, + { + "type": "extern_variable", + "name": "D_800E08C0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08C0" + }, + { + "type": "extern_variable", + "name": "D_800E074E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074E" + }, + { + "type": "extern_variable", + "name": "D_800E0754", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0754" + }, + { + "type": "extern_variable", + "name": "D_800E0758", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0758" + }, + { + "type": "extern_variable", + "name": "D_800E08A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08A8" + }, + { + "type": "extern_variable", + "name": "D_800E0756", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0756" + }, + { + "type": "extern_variable", + "name": "D_800E0750", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0750" + }, + { + "type": "extern_variable", + "name": "D_800E0751", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0751" + }, + { + "type": "extern_variable", + "name": "D_800E0752", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0752" + }, + { + "type": "extern_variable", + "name": "func_800D5A60", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D5A60" + }, + { + "type": "extern_variable", + "name": "func_800D5C9C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D5C9C" + }, + { + "type": "extern_variable", + "name": "func_800D6D44", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6D44" + }, + { + "type": "extern_variable", + "name": "func_800D6E0C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6E0C" + }, + { + "type": "extern_variable", + "name": "func_800D6F6C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6F6C" + }, + { + "type": "extern_variable", + "name": "D_80083284", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083284" + }, + { + "type": "extern_variable", + "name": "D_8008328A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328A" + }, + { + "type": "extern_variable", + "name": "D_8008328E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328E" + }, + { + "type": "extern_variable", + "name": "D_80083298", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083298" + }, + { + "type": "extern_variable", + "name": "D_8008329A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329A" + }, + { + "type": "extern_variable", + "name": "D_800E424C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E424C" + }, + { + "type": "extern_variable", + "name": "D_801142CC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801142CC" + }, + { + "type": "extern_variable", + "name": "D_8009AD30", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009AD30" + }, + { + "type": "extern_variable", + "name": "func_800C2E00", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C2E00" + }, + { + "type": "extern_variable", + "name": "func_800DA444", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800DA444" + }, + { + "type": "extern_variable", + "name": "func_800C8634", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C8634" + }, + { + "type": "extern_variable", + "name": "func_800CDC14", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800CDC14" + }, + { + "type": "extern_variable", + "name": "D_80095DE0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80095DE0" + }, + { + "type": "extern_variable", + "name": "func_80025B10", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80025B10" + }, + { + "type": "extern_variable", + "name": "func_800BEAD4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800BEAD4" + }, + { + "type": "extern_variable", + "name": "D_800E0208", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0208" + }, + { + "type": "extern_variable", + "name": "D_800756E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800756E8" + }, + { + "type": "extern_variable", + "name": "D_80083291", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083291" + }, + { + "type": "extern_variable", + "name": "D_80083294", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083294" + }, + { + "type": "extern_variable", + "name": "D_8007078C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007078C" + }, + { + "type": "extern_variable", + "name": "D_8007E7B8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B8" + }, + { + "type": "extern_variable", + "name": "D_8007E7BA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7BA" + }, + { + "type": "extern_variable", + "name": "D_8007E7AC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7AC" + }, + { + "type": "extern_variable", + "name": "D_8007E7AE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7AE" + }, + { + "type": "extern_variable", + "name": "D_8007E7B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B0" + }, + { + "type": "extern_variable", + "name": "D_8007E7B2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B2" + }, + { + "type": "extern_variable", + "name": "D_8007E7B4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B4" + }, + { + "type": "extern_variable", + "name": "D_8007E7B6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B6" + }, + { + "type": "extern_variable", + "name": "D_80082248", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082248" + }, + { + "type": "extern_variable", + "name": "D_8008325C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008325C" + }, + { + "type": "extern_variable", + "name": "D_8009D828", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D828" + }, + { + "type": "extern_variable", + "name": "D_800A0854", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A0854" + }, + { + "type": "extern_variable", + "name": "D_800A0F38", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A0F38" + }, + { + "type": "extern_variable", + "name": "D_8007E7C2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7C2" + }, + { + "type": "extern_variable", + "name": "D_80049209", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049209" + }, + { + "type": "extern_variable", + "name": "D_8004920A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8004920A" + }, + { + "type": "extern_variable", + "name": "func_80044064", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80044064" + }, + { + "type": "extern_variable", + "name": "func_800C5B38", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C5B38" + }, + { + "type": "extern_variable", + "name": "D_80081D90", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80081D90" + }, + { + "type": "extern_variable", + "name": "D_80083288", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083288" + }, + { + "type": "extern_variable", + "name": "D_800E4944", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4944" + }, + { + "type": "extern_variable", + "name": "D_80114480", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80114480" + }, + { + "type": "extern_variable", + "name": "D_800E42A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42A8" + }, + { + "type": "extern_variable", + "name": "D_8008327C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327C" + }, + { + "type": "extern_variable", + "name": "D_80083280", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083280" + }, + { + "type": "extern_variable", + "name": "D_80083282", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083282" + }, + { + "type": "extern_variable", + "name": "D_8008328F", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328F" + }, + { + "type": "extern_variable", + "name": "D_80083290", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083290" + }, + { + "type": "extern_variable", + "name": "D_8008329C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329C" + }, + { + "type": "extern_variable", + "name": "D_8008329E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329E" + }, + { + "type": "extern_variable", + "name": "D_80071748", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071748" + }, + { + "type": "extern_variable", + "name": "D_800833F8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800833F8" + }, + { + "type": "extern_variable", + "name": "D_8009A1C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009A1C4" + }, + { + "type": "extern_variable", + "name": "D_800A06B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A06B0" + }, + { + "type": "extern_variable", + "name": "D_80071A88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071A88" + }, + { + "type": "extern_variable", + "name": "D_801142D4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801142D4" + }, + { + "type": "extern_variable", + "name": "D_800E42D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42D8" + }, + { + "type": "extern_variable", + "name": "D_800E42DA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DA" + }, + { + "type": "extern_variable", + "name": "D_800E42DC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DC" + }, + { + "type": "extern_variable", + "name": "D_800E42E0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E0" + }, + { + "type": "extern_variable", + "name": "D_800E42E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E4" + }, + { + "type": "extern_variable", + "name": "D_800E42E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E8" + }, + { + "type": "extern_variable", + "name": "D_800E42EA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EA" + }, + { + "type": "extern_variable", + "name": "D_800E42EE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EE" + }, + { + "type": "extern_variable", + "name": "D_800E48E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48E8" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-18T12:35:38.936529" + }, + { + "function_name": "func_800BCB1C", + "file": "src/battle/battle1.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "func_800B5E64", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800B5E64" + }, + { + "type": "extern_variable", + "name": "D_800F8384", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F8384" + }, + { + "type": "extern_variable", + "name": "D_80103200", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80103200" + }, + { + "type": "extern_variable", + "name": "D_800F7E10", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7E10" + }, + { + "type": "extern_variable", + "name": "D_800F8180", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F8180" + }, + { + "type": "extern_variable", + "name": "D_800E8E88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E8E88" + }, + { + "type": "extern_variable", + "name": "D_800E8F94", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E8F94" + }, + { + "type": "extern_variable", + "name": "func_800B7DB4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800B7DB4" + }, + { + "type": "extern_variable", + "name": "D_800FA9D1", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FA9D1" + }, + { + "type": "extern_variable", + "name": "D_80163CC0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163CC0" + }, + { + "type": "extern_variable", + "name": "D_80163CC2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163CC2" + }, + { + "type": "extern_variable", + "name": "D_80163CC4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163CC4" + }, + { + "type": "extern_variable", + "name": "D_800F99EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F99EC" + }, + { + "type": "extern_variable", + "name": "D_800F99EE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F99EE" + }, + { + "type": "extern_variable", + "name": "D_800F99F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F99F0" + }, + { + "type": "extern_variable", + "name": "D_800F99F2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F99F2" + }, + { + "type": "extern_variable", + "name": "D_800F99F4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F99F4" + }, + { + "type": "extern_variable", + "name": "D_800F99F6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F99F6" + }, + { + "type": "extern_variable", + "name": "D_800FA9D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FA9D8" + }, + { + "type": "extern_variable", + "name": "D_801517F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801517F0" + }, + { + "type": "extern_variable", + "name": "D_800F7E08", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7E08" + }, + { + "type": "extern_variable", + "name": "D_801516FE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801516FE" + }, + { + "type": "extern_variable", + "name": "D_80151700", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151700" + }, + { + "type": "extern_variable", + "name": "D_80151702", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151702" + }, + { + "type": "extern_variable", + "name": "D_800F8178", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F8178" + }, + { + "type": "extern_variable", + "name": "D_800F8184", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F8184" + }, + { + "type": "extern_variable", + "name": "D_80163B44", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163B44" + }, + { + "type": "extern_variable", + "name": "D_801590E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801590E4" + }, + { + "type": "extern_variable", + "name": "D_801590E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801590E8" + }, + { + "type": "extern_variable", + "name": "D_800F7ED8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7ED8" + }, + { + "type": "extern_variable", + "name": "D_800F7EDA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EDA" + }, + { + "type": "extern_variable", + "name": "D_80151844", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151844" + }, + { + "type": "extern_variable", + "name": "D_80151846", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151846" + }, + { + "type": "extern_variable", + "name": "D_80151848", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151848" + }, + { + "type": "extern_variable", + "name": "D_801518A4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801518A4" + }, + { + "type": "extern_variable", + "name": "D_801518A6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801518A6" + }, + { + "type": "extern_variable", + "name": "D_801518A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801518A8" + }, + { + "type": "extern_variable", + "name": "D_800F7EF0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EF0" + }, + { + "type": "extern_variable", + "name": "D_800F7EDC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EDC" + }, + { + "type": "extern_variable", + "name": "D_800F7EDE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EDE" + }, + { + "type": "extern_variable", + "name": "D_800F7EE0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EE0" + }, + { + "type": "extern_variable", + "name": "D_800F7EE2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EE2" + }, + { + "type": "extern_variable", + "name": "D_800F7EE4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EE4" + }, + { + "type": "extern_variable", + "name": "D_800F7EE6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EE6" + }, + { + "type": "extern_variable", + "name": "D_800F7EE8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EE8" + }, + { + "type": "extern_variable", + "name": "func_800C0480", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C0480" + }, + { + "type": "extern_variable", + "name": "func_800C0630", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C0630" + }, + { + "type": "extern_variable", + "name": "func_800C0970", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C0970" + }, + { + "type": "extern_variable", + "name": "func_800C0B20", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C0B20" + }, + { + "type": "extern_variable", + "name": "D_80151850", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151850" + }, + { + "type": "extern_variable", + "name": "func_800B5AAC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800B5AAC" + }, + { + "type": "extern_variable", + "name": "func_800C36B4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C36B4" + }, + { + "type": "extern_variable", + "name": "func_800B4E30", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800B4E30" + }, + { + "type": "extern_variable", + "name": "func_800B54B8", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800B54B8" + }, + { + "type": "extern_variable", + "name": "func_800D09D0", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D09D0" + }, + { + "type": "extern_variable", + "name": "D_800F9DAA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9DAA" + }, + { + "type": "extern_variable", + "name": "D_800F9DAC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9DAC" + }, + { + "type": "extern_variable", + "name": "D_800FA9C6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FA9C6" + }, + { + "type": "extern_variable", + "name": "D_800F8CF4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F8CF4" + }, + { + "type": "extern_variable", + "name": "func_801B0050", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_801B0050" + }, + { + "type": "extern_variable", + "name": "func_800C74E4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C74E4" + }, + { + "type": "extern_variable", + "name": "D_800F4B0C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4B0C" + }, + { + "type": "extern_variable", + "name": "D_801AFFC0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801AFFC0" + }, + { + "type": "extern_variable", + "name": "func_8003CEBC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8003CEBC" + }, + { + "type": "extern_variable", + "name": "func_8003D1B4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8003D1B4" + }, + { + "type": "extern_variable", + "name": "func_80043938", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80043938" + }, + { + "type": "extern_variable", + "name": "func_80046960", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80046960" + }, + { + "type": "extern_variable", + "name": "func_8003BC9C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8003BC9C" + }, + { + "type": "extern_variable", + "name": "func_800468FC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800468FC" + }, + { + "type": "extern_variable", + "name": "D_800EA264", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800EA264" + } + ], + "timestamp": "2026-04-18T12:35:39.525916" + }, + { + "function_name": "func_800260DC", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_8007E7A0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7A0" + }, + { + "type": "extern_variable", + "name": "D_8007EB6A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007EB6A" + }, + { + "type": "extern_variable", + "name": "D_8009A078", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009A078" + }, + { + "type": "extern_variable", + "name": "D_8009A079", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009A079" + }, + { + "type": "extern_variable", + "name": "D_8009A07A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009A07A" + }, + { + "type": "extern_variable", + "name": "D_80063048", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80063048" + }, + { + "type": "extern_variable", + "name": "D_80010118", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80010118" + }, + { + "type": "extern_variable", + "name": "D_80010120", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80010120" + }, + { + "type": "extern_variable", + "name": "D_80010124", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80010124" + }, + { + "type": "extern_variable", + "name": "D_800F5BC7", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5BC7" + }, + { + "type": "extern_variable", + "name": "D_800F5BE1", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5BE1" + }, + { + "type": "extern_variable", + "name": "D_800F5BF4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5BF4" + }, + { + "type": "extern_variable", + "name": "D_800F5F44", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5F44" + }, + { + "type": "extern_variable", + "name": "D_800F652C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F652C" + }, + { + "type": "extern_variable", + "name": "D_800F83E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F83E4" + }, + { + "type": "extern_variable", + "name": "D_800F8410", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F8410" + }, + { + "type": "extern_variable", + "name": "D_80163658", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163658" + }, + { + "type": "extern_variable", + "name": "D_8009D808", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D808" + }, + { + "type": "extern_variable", + "name": "D_8009D80A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D80A" + }, + { + "type": "extern_variable", + "name": "D_8009D80C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D80C" + }, + { + "type": "extern_variable", + "name": "func_80018028", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80018028" + }, + { + "type": "extern_variable", + "name": "D_800491B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800491B0" + }, + { + "type": "extern_variable", + "name": "D_800730D9", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730D9" + }, + { + "type": "extern_variable", + "name": "D_800730DA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730DA" + }, + { + "type": "extern_variable", + "name": "D_800730DB", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730DB" + }, + { + "type": "extern_variable", + "name": "D_80062E53", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80062E53" + }, + { + "type": "extern_variable", + "name": "D_8006950A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8006950A" + }, + { + "type": "extern_variable", + "name": "func_80019254", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80019254" + }, + { + "type": "extern_variable", + "name": "func_8001937C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001937C" + }, + { + "type": "extern_variable", + "name": "func_800193F4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800193F4" + }, + { + "type": "extern_variable", + "name": "func_80019544", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80019544" + }, + { + "type": "extern_variable", + "name": "D_80049060", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049060" + }, + { + "type": "extern_variable", + "name": "D_80049062", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049062" + }, + { + "type": "extern_variable", + "name": "D_80049064", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049064" + }, + { + "type": "extern_variable", + "name": "D_80049066", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049066" + }, + { + "type": "extern_variable", + "name": "D_80049068", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049068" + }, + { + "type": "extern_variable", + "name": "D_8004906A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8004906A" + }, + { + "type": "extern_variable", + "name": "D_8004906C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8004906C" + }, + { + "type": "extern_variable", + "name": "D_8004906E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8004906E" + }, + { + "type": "extern_variable", + "name": "D_800730D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730D8" + }, + { + "type": "extern_variable", + "name": "D_800694E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800694E4" + }, + { + "type": "extern_variable", + "name": "D_8006947C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8006947C" + }, + { + "type": "extern_variable", + "name": "D_800730DE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730DE" + }, + { + "type": "extern_variable", + "name": "D_80069508", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069508" + }, + { + "type": "extern_variable", + "name": "func_8001BB30", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001BB30" + }, + { + "type": "extern_variable", + "name": "D_80069538", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069538" + }, + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069555", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069555" + }, + { + "type": "extern_variable", + "name": "D_80069556", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069556" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_800708C8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C8" + }, + { + "type": "extern_variable", + "name": "D_800708D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708D0" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80071E46", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071E46" + }, + { + "type": "extern_variable", + "name": "D_800738A4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738A4" + }, + { + "type": "extern_variable", + "name": "D_8009D888", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D888" + }, + { + "type": "extern_variable", + "name": "D_80069844", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069844" + }, + { + "type": "extern_variable", + "name": "D_800494A4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800494A4" + }, + { + "type": "extern_variable", + "name": "D_80071E4D", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071E4D" + }, + { + "type": "extern_variable", + "name": "D_800738BC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738BC" + }, + { + "type": "extern_variable", + "name": "D_800491D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800491D0" + }, + { + "type": "extern_variable", + "name": "D_8009D85C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85C" + }, + { + "type": "extern_variable", + "name": "D_8009D85E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85E" + }, + { + "type": "extern_variable", + "name": "D_8009D860", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D860" + }, + { + "type": "extern_variable", + "name": "D_8009D862", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D862" + }, + { + "type": "extern_variable", + "name": "func_80026090", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80026090" + }, + { + "type": "extern_variable", + "name": "func_800260DC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800260DC" + }, + { + "type": "extern_variable", + "name": "D_80083084", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083084" + }, + { + "type": "extern_variable", + "name": "D_80074EB0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB0" + }, + { + "type": "extern_variable", + "name": "D_80074EB4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB4" + }, + { + "type": "extern_variable", + "name": "D_80074EDA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EDA" + }, + { + "type": "extern_variable", + "name": "D_80074F16", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074F16" + }, + { + "type": "extern_variable", + "name": "D_80071C32", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071C32" + }, + { + "type": "extern_variable", + "name": "D_80071E64", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071E64" + }, + { + "type": "extern_variable", + "name": "D_800722D6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800722D6" + }, + { + "type": "extern_variable", + "name": "D_800738CA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738CA" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + }, + { + "type": "extern_variable", + "name": "D_8009D88A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D88A" + }, + { + "type": "extern_variable", + "name": "D_8009D88C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D88C" + }, + { + "type": "extern_variable", + "name": "D_8009D88E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D88E" + }, + { + "type": "extern_variable", + "name": "func_80018630", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80018630" + }, + { + "type": "extern_variable", + "name": "func_80018934", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80018934" + }, + { + "type": "extern_variable", + "name": "D_800730DF", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730DF" + } + ], + "timestamp": "2026-04-18T12:35:40.580513" + }, + { + "function_name": "func_800AC35C", + "file": "src/field/field.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80074EB0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB0" + }, + { + "type": "extern_variable", + "name": "D_80074EB4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB4" + }, + { + "type": "extern_variable", + "name": "D_80074EB8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB8" + }, + { + "type": "extern_variable", + "name": "func_800A48B8", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800A48B8" + }, + { + "type": "extern_variable", + "name": "D_80074ED9", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074ED9" + }, + { + "type": "extern_variable", + "name": "D_800DF120", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DF120" + }, + { + "type": "extern_variable", + "name": "D_800DF122", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DF122" + }, + { + "type": "extern_variable", + "name": "D_800DEF88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DEF88" + }, + { + "type": "extern_variable", + "name": "func_800354CC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800354CC" + }, + { + "type": "extern_variable", + "name": "func_80035658", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80035658" + }, + { + "type": "extern_variable", + "name": "D_800E0638", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0638" + }, + { + "type": "extern_variable", + "name": "D_800E48F4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48F4" + }, + { + "type": "extern_variable", + "name": "D_800E48FC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48FC" + }, + { + "type": "extern_variable", + "name": "D_800E48FE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48FE" + }, + { + "type": "extern_variable", + "name": "D_800E4900", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4900" + }, + { + "type": "extern_variable", + "name": "D_800E4901", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4901" + }, + { + "type": "extern_variable", + "name": "D_800E4904", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4904" + }, + { + "type": "extern_variable", + "name": "D_800E4906", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4906" + }, + { + "type": "extern_variable", + "name": "D_800E4908", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4908" + }, + { + "type": "extern_variable", + "name": "D_800E4909", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4909" + }, + { + "type": "extern_variable", + "name": "D_800E490C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E490C" + }, + { + "type": "extern_variable", + "name": "D_800E490E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E490E" + }, + { + "type": "extern_variable", + "name": "D_800E4910", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4910" + }, + { + "type": "extern_variable", + "name": "D_800E4911", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4911" + }, + { + "type": "extern_variable", + "name": "D_800E4914", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4914" + }, + { + "type": "extern_variable", + "name": "D_800E4916", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4916" + }, + { + "type": "extern_variable", + "name": "D_800E4918", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4918" + }, + { + "type": "extern_variable", + "name": "D_800E4919", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4919" + }, + { + "type": "extern_variable", + "name": "D_8007EB98", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007EB98" + }, + { + "type": "extern_variable", + "name": "func_8001786C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001786C" + }, + { + "type": "extern_variable", + "name": "func_80020058", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80020058" + }, + { + "type": "extern_variable", + "name": "D_800491D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800491D0" + }, + { + "type": "extern_variable", + "name": "D_8008328D", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328D" + }, + { + "type": "extern_variable", + "name": "D_800832A2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800832A2" + }, + { + "type": "extern_variable", + "name": "D_8008326C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008326C" + }, + { + "type": "extern_variable", + "name": "D_80083286", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083286" + }, + { + "type": "extern_variable", + "name": "D_80083278", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083278" + }, + { + "type": "extern_variable", + "name": "D_8008327A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327A" + }, + { + "type": "extern_variable", + "name": "D_8008327E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327E" + }, + { + "type": "extern_variable", + "name": "D_80075E24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075E24" + }, + { + "type": "extern_variable", + "name": "D_80075E25", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075E25" + }, + { + "type": "extern_variable", + "name": "D_800E4214", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4214" + }, + { + "type": "extern_variable", + "name": "D_800E4280", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4280" + }, + { + "type": "extern_variable", + "name": "D_800E4D48", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4D48" + }, + { + "type": "extern_variable", + "name": "D_800E0748", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0748" + }, + { + "type": "extern_variable", + "name": "D_800E074A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074A" + }, + { + "type": "extern_variable", + "name": "D_800E074C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074C" + }, + { + "type": "extern_variable", + "name": "D_800E08C0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08C0" + }, + { + "type": "extern_variable", + "name": "D_800E074E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074E" + }, + { + "type": "extern_variable", + "name": "D_800E0754", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0754" + }, + { + "type": "extern_variable", + "name": "D_800E0758", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0758" + }, + { + "type": "extern_variable", + "name": "D_800E08A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08A8" + }, + { + "type": "extern_variable", + "name": "D_800E0756", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0756" + }, + { + "type": "extern_variable", + "name": "D_800E0750", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0750" + }, + { + "type": "extern_variable", + "name": "D_800E0751", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0751" + }, + { + "type": "extern_variable", + "name": "D_800E0752", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0752" + }, + { + "type": "extern_variable", + "name": "func_800D5A60", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D5A60" + }, + { + "type": "extern_variable", + "name": "func_800D5C9C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D5C9C" + }, + { + "type": "extern_variable", + "name": "func_800D6D44", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6D44" + }, + { + "type": "extern_variable", + "name": "func_800D6E0C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6E0C" + }, + { + "type": "extern_variable", + "name": "func_800D6F6C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6F6C" + }, + { + "type": "extern_variable", + "name": "D_80083284", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083284" + }, + { + "type": "extern_variable", + "name": "D_8008328A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328A" + }, + { + "type": "extern_variable", + "name": "D_8008328E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328E" + }, + { + "type": "extern_variable", + "name": "D_80083298", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083298" + }, + { + "type": "extern_variable", + "name": "D_8008329A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329A" + }, + { + "type": "extern_variable", + "name": "D_800E424C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E424C" + }, + { + "type": "extern_variable", + "name": "D_801142CC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801142CC" + }, + { + "type": "extern_variable", + "name": "D_8009AD30", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009AD30" + }, + { + "type": "extern_variable", + "name": "func_800C2E00", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C2E00" + }, + { + "type": "extern_variable", + "name": "func_800DA444", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800DA444" + }, + { + "type": "extern_variable", + "name": "func_800C8634", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C8634" + }, + { + "type": "extern_variable", + "name": "func_800CDC14", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800CDC14" + }, + { + "type": "extern_variable", + "name": "D_80095DE0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80095DE0" + }, + { + "type": "extern_variable", + "name": "func_80025B10", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80025B10" + }, + { + "type": "extern_variable", + "name": "func_800BEAD4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800BEAD4" + }, + { + "type": "extern_variable", + "name": "D_800E0208", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0208" + }, + { + "type": "extern_variable", + "name": "D_800756E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800756E8" + }, + { + "type": "extern_variable", + "name": "D_80083291", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083291" + }, + { + "type": "extern_variable", + "name": "D_80083294", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083294" + }, + { + "type": "extern_variable", + "name": "D_8007078C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007078C" + }, + { + "type": "extern_variable", + "name": "D_8007E7B8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B8" + }, + { + "type": "extern_variable", + "name": "D_8007E7BA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7BA" + }, + { + "type": "extern_variable", + "name": "D_8007E7AC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7AC" + }, + { + "type": "extern_variable", + "name": "D_8007E7AE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7AE" + }, + { + "type": "extern_variable", + "name": "D_8007E7B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B0" + }, + { + "type": "extern_variable", + "name": "D_8007E7B2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B2" + }, + { + "type": "extern_variable", + "name": "D_8007E7B4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B4" + }, + { + "type": "extern_variable", + "name": "D_8007E7B6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B6" + }, + { + "type": "extern_variable", + "name": "D_80082248", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082248" + }, + { + "type": "extern_variable", + "name": "D_8008325C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008325C" + }, + { + "type": "extern_variable", + "name": "D_8009D828", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D828" + }, + { + "type": "extern_variable", + "name": "D_800A0854", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A0854" + }, + { + "type": "extern_variable", + "name": "D_800A0F38", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A0F38" + }, + { + "type": "extern_variable", + "name": "D_8007E7C2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7C2" + }, + { + "type": "extern_variable", + "name": "D_80049209", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049209" + }, + { + "type": "extern_variable", + "name": "D_8004920A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8004920A" + }, + { + "type": "extern_variable", + "name": "func_80044064", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80044064" + }, + { + "type": "extern_variable", + "name": "func_800C5B38", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C5B38" + }, + { + "type": "extern_variable", + "name": "D_80081D90", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80081D90" + }, + { + "type": "extern_variable", + "name": "D_80083288", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083288" + }, + { + "type": "extern_variable", + "name": "D_800E4944", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4944" + }, + { + "type": "extern_variable", + "name": "D_80114480", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80114480" + }, + { + "type": "extern_variable", + "name": "D_800E42A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42A8" + }, + { + "type": "extern_variable", + "name": "D_8008327C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327C" + }, + { + "type": "extern_variable", + "name": "D_80083280", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083280" + }, + { + "type": "extern_variable", + "name": "D_80083282", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083282" + }, + { + "type": "extern_variable", + "name": "D_8008328F", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328F" + }, + { + "type": "extern_variable", + "name": "D_80083290", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083290" + }, + { + "type": "extern_variable", + "name": "D_8008329C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329C" + }, + { + "type": "extern_variable", + "name": "D_8008329E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329E" + }, + { + "type": "extern_variable", + "name": "D_80071748", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071748" + }, + { + "type": "extern_variable", + "name": "D_800833F8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800833F8" + }, + { + "type": "extern_variable", + "name": "D_8009A1C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009A1C4" + }, + { + "type": "extern_variable", + "name": "D_800A06B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A06B0" + }, + { + "type": "extern_variable", + "name": "D_80071A88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071A88" + }, + { + "type": "extern_variable", + "name": "D_801142D4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801142D4" + }, + { + "type": "extern_variable", + "name": "D_800E42D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42D8" + }, + { + "type": "extern_variable", + "name": "D_800E42DA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DA" + }, + { + "type": "extern_variable", + "name": "D_800E42DC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DC" + }, + { + "type": "extern_variable", + "name": "D_800E42E0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E0" + }, + { + "type": "extern_variable", + "name": "D_800E42E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E4" + }, + { + "type": "extern_variable", + "name": "D_800E42E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E8" + }, + { + "type": "extern_variable", + "name": "D_800E42EA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EA" + }, + { + "type": "extern_variable", + "name": "D_800E42EE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EE" + }, + { + "type": "extern_variable", + "name": "D_800E48E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48E8" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-18T12:35:40.714554" + }, + { + "function_name": "func_800A23E0", + "file": "src/battle/battle.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_8009D954", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D954" + }, + { + "type": "extern_variable", + "name": "D_800FA9D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FA9D0" + }, + { + "type": "extern_variable", + "name": "D_800FA9D4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FA9D4" + }, + { + "type": "extern_variable", + "name": "D_800F9F3C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9F3C" + }, + { + "type": "extern_variable", + "name": "D_800F9F42", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9F42" + }, + { + "type": "extern_variable", + "name": "D_800F9F44", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9F44" + }, + { + "type": "extern_variable", + "name": "D_800F87F4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F87F4" + }, + { + "type": "extern_variable", + "name": "D_800F5E65", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E65" + }, + { + "type": "extern_variable", + "name": "D_800F3A40", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F3A40" + }, + { + "type": "extern_variable", + "name": "D_80071C32", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071C32" + }, + { + "type": "extern_variable", + "name": "D_80071E64", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071E64" + }, + { + "type": "extern_variable", + "name": "D_800722D6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800722D6" + }, + { + "type": "extern_variable", + "name": "D_800722D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800722D8" + }, + { + "type": "extern_variable", + "name": "D_800738A0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738A0" + }, + { + "type": "extern_variable", + "name": "D_800738CA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738CA" + }, + { + "type": "extern_variable", + "name": "D_801671B8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801671B8" + }, + { + "type": "extern_variable", + "name": "D_801671BA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801671BA" + }, + { + "type": "extern_variable", + "name": "D_801671BC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801671BC" + }, + { + "type": "extern_variable", + "name": "D_8009D866", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D866" + }, + { + "type": "extern_variable", + "name": "D_800F5E68", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E68" + }, + { + "type": "extern_variable", + "name": "D_800F5E6A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E6A" + }, + { + "type": "extern_variable", + "name": "D_800708D1", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708D1" + }, + { + "type": "extern_variable", + "name": "D_8009D85E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85E" + }, + { + "type": "extern_variable", + "name": "D_8009D862", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D862" + }, + { + "type": "extern_variable", + "name": "D_800F5E70", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E70" + }, + { + "type": "extern_variable", + "name": "D_800F5E72", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E72" + }, + { + "type": "extern_variable", + "name": "D_800738A4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738A4" + }, + { + "type": "extern_variable", + "name": "D_800738C7", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738C7" + }, + { + "type": "extern_variable", + "name": "D_8009D84E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D84E" + }, + { + "type": "extern_variable", + "name": "D_800F5E64", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E64" + }, + { + "type": "extern_variable", + "name": "D_800F5EFC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5EFC" + }, + { + "type": "extern_variable", + "name": "func_800AA574", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AA574" + }, + { + "type": "extern_variable", + "name": "func_800AA688", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AA688" + }, + { + "type": "extern_variable", + "name": "D_80163778", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163778" + }, + { + "type": "extern_variable", + "name": "D_800E7BA4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BA4" + }, + { + "type": "extern_variable", + "name": "D_800E7BA5", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BA5" + }, + { + "type": "extern_variable", + "name": "D_800E7BA6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BA6" + }, + { + "type": "extern_variable", + "name": "D_800F5E74", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E74" + }, + { + "type": "extern_variable", + "name": "D_800F5E76", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E76" + }, + { + "type": "extern_variable", + "name": "D_800730D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730D0" + }, + { + "type": "extern_variable", + "name": "D_800E7BBC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BBC" + }, + { + "type": "extern_variable", + "name": "D_800E7BBD", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BBD" + }, + { + "type": "extern_variable", + "name": "D_8009D86F", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D86F" + }, + { + "type": "extern_variable", + "name": "D_800E7BCC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BCC" + }, + { + "type": "extern_variable", + "name": "D_800E7BFC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BFC" + }, + { + "type": "extern_variable", + "name": "D_800E7BEC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BEC" + }, + { + "type": "extern_variable", + "name": "func_800AF264", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AF264" + }, + { + "type": "extern_variable", + "name": "func_800AF3AC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AF3AC" + }, + { + "type": "extern_variable", + "name": "D_800E7C7C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7C7C" + }, + { + "type": "extern_variable", + "name": "D_800E7CBC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7CBC" + }, + { + "type": "extern_variable", + "name": "D_800E7CDC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7CDC" + }, + { + "type": "extern_variable", + "name": "D_800F4A48", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4A48" + }, + { + "type": "extern_variable", + "name": "D_800F4A70", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4A70" + }, + { + "type": "extern_variable", + "name": "D_800F4A98", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4A98" + }, + { + "type": "extern_variable", + "name": "D_800F49A0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F49A0" + }, + { + "type": "extern_variable", + "name": "D_800F49A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F49A8" + }, + { + "type": "extern_variable", + "name": "D_8009D85C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85C" + }, + { + "type": "extern_variable", + "name": "D_8009D860", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D860" + }, + { + "type": "extern_variable", + "name": "D_8009D868", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D868" + }, + { + "type": "extern_variable", + "name": "D_8009D86A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D86A" + }, + { + "type": "extern_variable", + "name": "D_800F5F01", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5F01" + }, + { + "type": "extern_variable", + "name": "D_800F87F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F87F0" + }, + { + "type": "extern_variable", + "name": "func_800A5250", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800A5250" + } + ], + "timestamp": "2026-04-18T12:35:40.917485" + }, + { + "function_name": "func_800E3B64", + "file": "src/battle/battle3.c", + "primary_error": "Local variable 'temp_a0' is void* but used with -> (m2c struct type inference failure)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_80028484", + "return_type": "void", + "parameters": "s16*, u16, ?", + "suggestion": "Define proper signature for func_80028484 in header" + }, + { + "type": "extern_function", + "name": "func_800E368C", + "return_type": "void", + "parameters": "?, ?, ?", + "suggestion": "Define proper signature for func_800E368C in header" + }, + { + "type": "extern_variable", + "name": "D_800FB064", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FB064" + }, + { + "type": "extern_variable", + "name": "D_800FF060", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF060" + }, + { + "type": "extern_variable", + "name": "D_800FF064", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF064" + }, + { + "type": "extern_variable", + "name": "D_800FF068", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF068" + }, + { + "type": "extern_variable", + "name": "D_800FF06C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF06C" + }, + { + "type": "extern_variable", + "name": "D_800FF070", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF070" + }, + { + "type": "extern_variable", + "name": "D_800FF074", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF074" + }, + { + "type": "extern_variable", + "name": "D_800FF094", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF094" + }, + { + "type": "extern_variable", + "name": "D_800FF098", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF098" + }, + { + "type": "extern_variable", + "name": "D_800FF0D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF0D8" + }, + { + "type": "extern_variable", + "name": "D_800FF0DC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF0DC" + }, + { + "type": "extern_variable", + "name": "D_800FF0E0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF0E0" + }, + { + "type": "extern_variable", + "name": "D_80103154", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80103154" + }, + { + "type": "extern_variable", + "name": "D_80103158", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80103158" + }, + { + "type": "extern_variable", + "name": "D_80103160", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80103160" + }, + { + "type": "extern_variable", + "name": "D_80103188", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80103188" + }, + { + "type": "extern_variable", + "name": "D_801031CC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801031CC" + }, + { + "type": "extern_variable", + "name": "D_801031D4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801031D4" + }, + { + "type": "extern_variable", + "name": "func_80044AC0", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80044AC0" + }, + { + "type": "extern_variable", + "name": "func_80046794", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80046794" + }, + { + "type": "extern_variable", + "name": "D_800F57F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F57F0" + }, + { + "type": "extern_variable", + "name": "D_800F1E54", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F1E54" + }, + { + "type": "extern_variable", + "name": "D_800F1E56", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F1E56" + }, + { + "type": "extern_variable", + "name": "D_800F1E58", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F1E58" + }, + { + "type": "extern_variable", + "name": "D_800F1E5A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F1E5A" + }, + { + "type": "extern_variable", + "name": "D_800F1E5C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F1E5C" + }, + { + "type": "extern_variable", + "name": "D_800F1E5E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F1E5E" + }, + { + "type": "extern_variable", + "name": "D_800F1E60", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F1E60" + }, + { + "type": "extern_variable", + "name": "D_800F1E62", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F1E62" + }, + { + "type": "extern_variable", + "name": "D_800F2F8C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F2F8C" + }, + { + "type": "extern_variable", + "name": "func_800DA380", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800DA380" + }, + { + "type": "extern_variable", + "name": "D_801516FE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801516FE" + }, + { + "type": "extern_variable", + "name": "D_800492FC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800492FC" + }, + { + "type": "extern_variable", + "name": "D_800F55D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F55D8" + }, + { + "type": "extern_variable", + "name": "func_800DDAD8", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800DDAD8" + }, + { + "type": "extern_variable", + "name": "func_800DDCE8", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800DDCE8" + }, + { + "type": "extern_variable", + "name": "D_800F90C6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F90C6" + }, + { + "type": "extern_variable", + "name": "D_8009D8FE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D8FE" + }, + { + "type": "extern_variable", + "name": "D_800F3168", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F3168" + }, + { + "type": "extern_variable", + "name": "D_8009D85C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85C" + }, + { + "type": "extern_variable", + "name": "D_8009D85E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85E" + }, + { + "type": "extern_variable", + "name": "D_801031F4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801031F4" + }, + { + "type": "extern_variable", + "name": "D_80151688", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151688" + }, + { + "type": "extern_variable", + "name": "D_8015174C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8015174C" + }, + { + "type": "extern_variable", + "name": "D_8015178C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8015178C" + }, + { + "type": "extern_variable", + "name": "D_801517C8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801517C8" + }, + { + "type": "extern_variable", + "name": "D_8015187C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8015187C" + }, + { + "type": "extern_variable", + "name": "D_800F33B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F33B0" + }, + { + "type": "extern_variable", + "name": "D_80163778", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163778" + }, + { + "type": "extern_variable", + "name": "D_80163B70", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163B70" + }, + { + "type": "extern_variable", + "name": "D_800F5778", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5778" + }, + { + "type": "extern_variable", + "name": "func_8001786C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001786C" + }, + { + "type": "extern_variable", + "name": "func_80020058", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80020058" + }, + { + "type": "extern_variable", + "name": "D_8009D854", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D854" + }, + { + "type": "extern_variable", + "name": "D_8009D856", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D856" + }, + { + "type": "extern_variable", + "name": "D_8009D860", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D860" + }, + { + "type": "extern_variable", + "name": "D_8009DC5C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009DC5C" + }, + { + "type": "extern_variable", + "name": "D_800F577B", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F577B" + }, + { + "type": "extern_variable", + "name": "D_800F90BE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F90BE" + }, + { + "type": "extern_variable", + "name": "D_800F90BF", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F90BF" + }, + { + "type": "extern_variable", + "name": "D_801516A4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801516A4" + }, + { + "type": "extern_variable", + "name": "D_801516CC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801516CC" + }, + { + "type": "extern_variable", + "name": "D_800F90FC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F90FC" + }, + { + "type": "extern_variable", + "name": "D_800F90FE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F90FE" + }, + { + "type": "extern_variable", + "name": "D_800F9100", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9100" + }, + { + "type": "extern_variable", + "name": "D_800F9102", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9102" + }, + { + "type": "extern_variable", + "name": "D_800F9104", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9104" + }, + { + "type": "extern_variable", + "name": "D_800F9106", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9106" + }, + { + "type": "extern_variable", + "name": "D_800F9107", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9107" + }, + { + "type": "extern_variable", + "name": "D_800F9108", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9108" + }, + { + "type": "extern_variable", + "name": "D_800F9109", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9109" + }, + { + "type": "extern_variable", + "name": "D_800F910A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F910A" + }, + { + "type": "extern_variable", + "name": "D_800F910B", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F910B" + }, + { + "type": "extern_variable", + "name": "D_800F910C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F910C" + }, + { + "type": "extern_variable", + "name": "D_800F910D", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F910D" + }, + { + "type": "extern_variable", + "name": "D_800F32E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F32E4" + }, + { + "type": "extern_variable", + "name": "D_80166F78", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80166F78" + }, + { + "type": "extern_variable", + "name": "func_80046960", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80046960" + }, + { + "type": "extern_variable", + "name": "func_800468FC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800468FC" + }, + { + "type": "extern_variable", + "name": "D_800F335C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F335C" + }, + { + "type": "extern_variable", + "name": "D_800F335D", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F335D" + }, + { + "type": "extern_variable", + "name": "D_800F33AC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F33AC" + }, + { + "type": "extern_variable", + "name": "func_800E368C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800E368C" + }, + { + "type": "extern_variable", + "name": "D_8009D954", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D954" + }, + { + "type": "extern_variable", + "name": "D_800F90D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F90D8" + } + ], + "timestamp": "2026-04-18T12:35:42.137705" + }, + { + "function_name": "func_80021F58", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_8007E7A0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7A0" + }, + { + "type": "extern_variable", + "name": "D_8007EB6A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007EB6A" + }, + { + "type": "extern_variable", + "name": "D_8009A078", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009A078" + }, + { + "type": "extern_variable", + "name": "D_8009A079", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009A079" + }, + { + "type": "extern_variable", + "name": "D_8009A07A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009A07A" + }, + { + "type": "extern_variable", + "name": "D_80063048", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80063048" + }, + { + "type": "extern_variable", + "name": "D_80010118", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80010118" + }, + { + "type": "extern_variable", + "name": "D_80010120", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80010120" + }, + { + "type": "extern_variable", + "name": "D_80010124", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80010124" + }, + { + "type": "extern_variable", + "name": "D_800F5BC7", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5BC7" + }, + { + "type": "extern_variable", + "name": "D_800F5BE1", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5BE1" + }, + { + "type": "extern_variable", + "name": "D_800F5BF4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5BF4" + }, + { + "type": "extern_variable", + "name": "D_800F5F44", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5F44" + }, + { + "type": "extern_variable", + "name": "D_800F652C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F652C" + }, + { + "type": "extern_variable", + "name": "D_800F83E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F83E4" + }, + { + "type": "extern_variable", + "name": "D_800F8410", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F8410" + }, + { + "type": "extern_variable", + "name": "D_80163658", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163658" + }, + { + "type": "extern_variable", + "name": "D_8009D808", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D808" + }, + { + "type": "extern_variable", + "name": "D_8009D80A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D80A" + }, + { + "type": "extern_variable", + "name": "D_8009D80C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D80C" + }, + { + "type": "extern_variable", + "name": "func_80018028", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80018028" + }, + { + "type": "extern_variable", + "name": "D_800491B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800491B0" + }, + { + "type": "extern_variable", + "name": "D_800730D9", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730D9" + }, + { + "type": "extern_variable", + "name": "D_800730DA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730DA" + }, + { + "type": "extern_variable", + "name": "D_800730DB", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730DB" + }, + { + "type": "extern_variable", + "name": "D_80062E53", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80062E53" + }, + { + "type": "extern_variable", + "name": "D_8006950A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8006950A" + }, + { + "type": "extern_variable", + "name": "func_80019254", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80019254" + }, + { + "type": "extern_variable", + "name": "func_8001937C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001937C" + }, + { + "type": "extern_variable", + "name": "func_800193F4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800193F4" + }, + { + "type": "extern_variable", + "name": "func_80019544", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80019544" + }, + { + "type": "extern_variable", + "name": "D_80049060", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049060" + }, + { + "type": "extern_variable", + "name": "D_80049062", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049062" + }, + { + "type": "extern_variable", + "name": "D_80049064", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049064" + }, + { + "type": "extern_variable", + "name": "D_80049066", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049066" + }, + { + "type": "extern_variable", + "name": "D_80049068", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049068" + }, + { + "type": "extern_variable", + "name": "D_8004906A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8004906A" + }, + { + "type": "extern_variable", + "name": "D_8004906C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8004906C" + }, + { + "type": "extern_variable", + "name": "D_8004906E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8004906E" + }, + { + "type": "extern_variable", + "name": "D_800730D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730D8" + }, + { + "type": "extern_variable", + "name": "D_800694E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800694E4" + }, + { + "type": "extern_variable", + "name": "D_8006947C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8006947C" + }, + { + "type": "extern_variable", + "name": "D_800730DE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730DE" + }, + { + "type": "extern_variable", + "name": "D_80069508", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069508" + }, + { + "type": "extern_variable", + "name": "func_8001BB30", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001BB30" + }, + { + "type": "extern_variable", + "name": "D_80069538", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069538" + }, + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069555", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069555" + }, + { + "type": "extern_variable", + "name": "D_80069556", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069556" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_800708C8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C8" + }, + { + "type": "extern_variable", + "name": "D_800708D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708D0" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80071E46", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071E46" + }, + { + "type": "extern_variable", + "name": "D_800738A4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738A4" + }, + { + "type": "extern_variable", + "name": "D_8009D888", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D888" + }, + { + "type": "extern_variable", + "name": "D_80069844", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069844" + }, + { + "type": "extern_variable", + "name": "D_800494A4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800494A4" + }, + { + "type": "extern_variable", + "name": "D_80071E4D", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071E4D" + }, + { + "type": "extern_variable", + "name": "D_800738BC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738BC" + }, + { + "type": "extern_variable", + "name": "D_800491D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800491D0" + }, + { + "type": "extern_variable", + "name": "D_8009D85C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85C" + }, + { + "type": "extern_variable", + "name": "D_8009D85E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85E" + }, + { + "type": "extern_variable", + "name": "D_8009D860", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D860" + }, + { + "type": "extern_variable", + "name": "D_8009D862", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D862" + }, + { + "type": "extern_variable", + "name": "func_80026090", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80026090" + }, + { + "type": "extern_variable", + "name": "func_800260DC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800260DC" + }, + { + "type": "extern_variable", + "name": "D_80083084", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083084" + }, + { + "type": "extern_variable", + "name": "D_80074EB0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB0" + }, + { + "type": "extern_variable", + "name": "D_80074EB4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB4" + }, + { + "type": "extern_variable", + "name": "D_80074EDA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EDA" + }, + { + "type": "extern_variable", + "name": "D_80074F16", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074F16" + }, + { + "type": "extern_variable", + "name": "D_80071C32", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071C32" + }, + { + "type": "extern_variable", + "name": "D_80071E64", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071E64" + }, + { + "type": "extern_variable", + "name": "D_800722D6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800722D6" + }, + { + "type": "extern_variable", + "name": "D_800738CA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738CA" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + }, + { + "type": "extern_variable", + "name": "D_8009D88A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D88A" + }, + { + "type": "extern_variable", + "name": "D_8009D88C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D88C" + }, + { + "type": "extern_variable", + "name": "D_8009D88E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D88E" + }, + { + "type": "extern_variable", + "name": "func_80018630", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80018630" + }, + { + "type": "extern_variable", + "name": "func_80018934", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80018934" + }, + { + "type": "extern_variable", + "name": "D_800730DF", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730DF" + } + ], + "timestamp": "2026-04-18T12:35:42.402628" + }, + { + "function_name": "func_800B1D48", + "file": "src/battle/battle.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_8009D954", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D954" + }, + { + "type": "extern_variable", + "name": "D_800FA9D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FA9D0" + }, + { + "type": "extern_variable", + "name": "D_800FA9D4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FA9D4" + }, + { + "type": "extern_variable", + "name": "D_800F9F3C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9F3C" + }, + { + "type": "extern_variable", + "name": "D_800F9F42", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9F42" + }, + { + "type": "extern_variable", + "name": "D_800F9F44", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9F44" + }, + { + "type": "extern_variable", + "name": "D_800F87F4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F87F4" + }, + { + "type": "extern_variable", + "name": "D_800F5E65", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E65" + }, + { + "type": "extern_variable", + "name": "D_800F3A40", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F3A40" + }, + { + "type": "extern_variable", + "name": "D_80071C32", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071C32" + }, + { + "type": "extern_variable", + "name": "D_80071E64", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071E64" + }, + { + "type": "extern_variable", + "name": "D_800722D6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800722D6" + }, + { + "type": "extern_variable", + "name": "D_800722D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800722D8" + }, + { + "type": "extern_variable", + "name": "D_800738A0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738A0" + }, + { + "type": "extern_variable", + "name": "D_800738CA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738CA" + }, + { + "type": "extern_variable", + "name": "D_801671B8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801671B8" + }, + { + "type": "extern_variable", + "name": "D_801671BA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801671BA" + }, + { + "type": "extern_variable", + "name": "D_801671BC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801671BC" + }, + { + "type": "extern_variable", + "name": "D_8009D866", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D866" + }, + { + "type": "extern_variable", + "name": "D_800F5E68", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E68" + }, + { + "type": "extern_variable", + "name": "D_800F5E6A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E6A" + }, + { + "type": "extern_variable", + "name": "D_800708D1", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708D1" + }, + { + "type": "extern_variable", + "name": "D_8009D85E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85E" + }, + { + "type": "extern_variable", + "name": "D_8009D862", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D862" + }, + { + "type": "extern_variable", + "name": "D_800F5E70", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E70" + }, + { + "type": "extern_variable", + "name": "D_800F5E72", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E72" + }, + { + "type": "extern_variable", + "name": "D_800738A4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738A4" + }, + { + "type": "extern_variable", + "name": "D_800738C7", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738C7" + }, + { + "type": "extern_variable", + "name": "D_8009D84E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D84E" + }, + { + "type": "extern_variable", + "name": "D_800F5E64", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E64" + }, + { + "type": "extern_variable", + "name": "D_800F5EFC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5EFC" + }, + { + "type": "extern_variable", + "name": "func_800AA574", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AA574" + }, + { + "type": "extern_variable", + "name": "func_800AA688", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AA688" + }, + { + "type": "extern_variable", + "name": "D_80163778", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163778" + }, + { + "type": "extern_variable", + "name": "D_800E7BA4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BA4" + }, + { + "type": "extern_variable", + "name": "D_800E7BA5", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BA5" + }, + { + "type": "extern_variable", + "name": "D_800E7BA6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BA6" + }, + { + "type": "extern_variable", + "name": "D_800F5E74", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E74" + }, + { + "type": "extern_variable", + "name": "D_800F5E76", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E76" + }, + { + "type": "extern_variable", + "name": "D_800730D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730D0" + }, + { + "type": "extern_variable", + "name": "D_800E7BBC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BBC" + }, + { + "type": "extern_variable", + "name": "D_800E7BBD", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BBD" + }, + { + "type": "extern_variable", + "name": "D_8009D86F", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D86F" + }, + { + "type": "extern_variable", + "name": "D_800E7BCC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BCC" + }, + { + "type": "extern_variable", + "name": "D_800E7BFC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BFC" + }, + { + "type": "extern_variable", + "name": "D_800E7BEC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BEC" + }, + { + "type": "extern_variable", + "name": "func_800AF264", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AF264" + }, + { + "type": "extern_variable", + "name": "func_800AF3AC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AF3AC" + }, + { + "type": "extern_variable", + "name": "D_800E7C7C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7C7C" + }, + { + "type": "extern_variable", + "name": "D_800E7CBC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7CBC" + }, + { + "type": "extern_variable", + "name": "D_800E7CDC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7CDC" + }, + { + "type": "extern_variable", + "name": "D_800F4A48", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4A48" + }, + { + "type": "extern_variable", + "name": "D_800F4A70", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4A70" + }, + { + "type": "extern_variable", + "name": "D_800F4A98", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4A98" + }, + { + "type": "extern_variable", + "name": "D_800F49A0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F49A0" + }, + { + "type": "extern_variable", + "name": "D_800F49A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F49A8" + }, + { + "type": "extern_variable", + "name": "D_8009D85C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85C" + }, + { + "type": "extern_variable", + "name": "D_8009D860", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D860" + }, + { + "type": "extern_variable", + "name": "D_8009D868", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D868" + }, + { + "type": "extern_variable", + "name": "D_8009D86A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D86A" + }, + { + "type": "extern_variable", + "name": "D_800F5F01", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5F01" + }, + { + "type": "extern_variable", + "name": "D_800F87F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F87F0" + }, + { + "type": "extern_variable", + "name": "func_800A5250", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800A5250" + } + ], + "timestamp": "2026-04-18T12:35:42.693792" + }, + { + "function_name": "func_800A16CC", + "file": "src/field/field.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80074EB0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB0" + }, + { + "type": "extern_variable", + "name": "D_80074EB4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB4" + }, + { + "type": "extern_variable", + "name": "D_80074EB8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB8" + }, + { + "type": "extern_variable", + "name": "func_800A48B8", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800A48B8" + }, + { + "type": "extern_variable", + "name": "D_80074ED9", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074ED9" + }, + { + "type": "extern_variable", + "name": "D_800DF120", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DF120" + }, + { + "type": "extern_variable", + "name": "D_800DF122", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DF122" + }, + { + "type": "extern_variable", + "name": "D_800DEF88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DEF88" + }, + { + "type": "extern_variable", + "name": "func_800354CC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800354CC" + }, + { + "type": "extern_variable", + "name": "func_80035658", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80035658" + }, + { + "type": "extern_variable", + "name": "D_800E0638", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0638" + }, + { + "type": "extern_variable", + "name": "D_800E48F4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48F4" + }, + { + "type": "extern_variable", + "name": "D_800E48FC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48FC" + }, + { + "type": "extern_variable", + "name": "D_800E48FE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48FE" + }, + { + "type": "extern_variable", + "name": "D_800E4900", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4900" + }, + { + "type": "extern_variable", + "name": "D_800E4901", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4901" + }, + { + "type": "extern_variable", + "name": "D_800E4904", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4904" + }, + { + "type": "extern_variable", + "name": "D_800E4906", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4906" + }, + { + "type": "extern_variable", + "name": "D_800E4908", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4908" + }, + { + "type": "extern_variable", + "name": "D_800E4909", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4909" + }, + { + "type": "extern_variable", + "name": "D_800E490C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E490C" + }, + { + "type": "extern_variable", + "name": "D_800E490E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E490E" + }, + { + "type": "extern_variable", + "name": "D_800E4910", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4910" + }, + { + "type": "extern_variable", + "name": "D_800E4911", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4911" + }, + { + "type": "extern_variable", + "name": "D_800E4914", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4914" + }, + { + "type": "extern_variable", + "name": "D_800E4916", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4916" + }, + { + "type": "extern_variable", + "name": "D_800E4918", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4918" + }, + { + "type": "extern_variable", + "name": "D_800E4919", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4919" + }, + { + "type": "extern_variable", + "name": "D_8007EB98", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007EB98" + }, + { + "type": "extern_variable", + "name": "func_8001786C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001786C" + }, + { + "type": "extern_variable", + "name": "func_80020058", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80020058" + }, + { + "type": "extern_variable", + "name": "D_800491D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800491D0" + }, + { + "type": "extern_variable", + "name": "D_8008328D", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328D" + }, + { + "type": "extern_variable", + "name": "D_800832A2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800832A2" + }, + { + "type": "extern_variable", + "name": "D_8008326C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008326C" + }, + { + "type": "extern_variable", + "name": "D_80083286", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083286" + }, + { + "type": "extern_variable", + "name": "D_80083278", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083278" + }, + { + "type": "extern_variable", + "name": "D_8008327A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327A" + }, + { + "type": "extern_variable", + "name": "D_8008327E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327E" + }, + { + "type": "extern_variable", + "name": "D_80075E24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075E24" + }, + { + "type": "extern_variable", + "name": "D_80075E25", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075E25" + }, + { + "type": "extern_variable", + "name": "D_800E4214", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4214" + }, + { + "type": "extern_variable", + "name": "D_800E4280", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4280" + }, + { + "type": "extern_variable", + "name": "D_800E4D48", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4D48" + }, + { + "type": "extern_variable", + "name": "D_800E0748", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0748" + }, + { + "type": "extern_variable", + "name": "D_800E074A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074A" + }, + { + "type": "extern_variable", + "name": "D_800E074C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074C" + }, + { + "type": "extern_variable", + "name": "D_800E08C0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08C0" + }, + { + "type": "extern_variable", + "name": "D_800E074E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074E" + }, + { + "type": "extern_variable", + "name": "D_800E0754", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0754" + }, + { + "type": "extern_variable", + "name": "D_800E0758", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0758" + }, + { + "type": "extern_variable", + "name": "D_800E08A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08A8" + }, + { + "type": "extern_variable", + "name": "D_800E0756", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0756" + }, + { + "type": "extern_variable", + "name": "D_800E0750", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0750" + }, + { + "type": "extern_variable", + "name": "D_800E0751", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0751" + }, + { + "type": "extern_variable", + "name": "D_800E0752", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0752" + }, + { + "type": "extern_variable", + "name": "func_800D5A60", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D5A60" + }, + { + "type": "extern_variable", + "name": "func_800D5C9C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D5C9C" + }, + { + "type": "extern_variable", + "name": "func_800D6D44", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6D44" + }, + { + "type": "extern_variable", + "name": "func_800D6E0C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6E0C" + }, + { + "type": "extern_variable", + "name": "func_800D6F6C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6F6C" + }, + { + "type": "extern_variable", + "name": "D_80083284", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083284" + }, + { + "type": "extern_variable", + "name": "D_8008328A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328A" + }, + { + "type": "extern_variable", + "name": "D_8008328E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328E" + }, + { + "type": "extern_variable", + "name": "D_80083298", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083298" + }, + { + "type": "extern_variable", + "name": "D_8008329A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329A" + }, + { + "type": "extern_variable", + "name": "D_800E424C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E424C" + }, + { + "type": "extern_variable", + "name": "D_801142CC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801142CC" + }, + { + "type": "extern_variable", + "name": "D_8009AD30", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009AD30" + }, + { + "type": "extern_variable", + "name": "func_800C2E00", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C2E00" + }, + { + "type": "extern_variable", + "name": "func_800DA444", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800DA444" + }, + { + "type": "extern_variable", + "name": "func_800C8634", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C8634" + }, + { + "type": "extern_variable", + "name": "func_800CDC14", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800CDC14" + }, + { + "type": "extern_variable", + "name": "D_80095DE0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80095DE0" + }, + { + "type": "extern_variable", + "name": "func_80025B10", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80025B10" + }, + { + "type": "extern_variable", + "name": "func_800BEAD4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800BEAD4" + }, + { + "type": "extern_variable", + "name": "D_800E0208", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0208" + }, + { + "type": "extern_variable", + "name": "D_800756E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800756E8" + }, + { + "type": "extern_variable", + "name": "D_80083291", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083291" + }, + { + "type": "extern_variable", + "name": "D_80083294", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083294" + }, + { + "type": "extern_variable", + "name": "D_8007078C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007078C" + }, + { + "type": "extern_variable", + "name": "D_8007E7B8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B8" + }, + { + "type": "extern_variable", + "name": "D_8007E7BA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7BA" + }, + { + "type": "extern_variable", + "name": "D_8007E7AC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7AC" + }, + { + "type": "extern_variable", + "name": "D_8007E7AE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7AE" + }, + { + "type": "extern_variable", + "name": "D_8007E7B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B0" + }, + { + "type": "extern_variable", + "name": "D_8007E7B2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B2" + }, + { + "type": "extern_variable", + "name": "D_8007E7B4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B4" + }, + { + "type": "extern_variable", + "name": "D_8007E7B6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B6" + }, + { + "type": "extern_variable", + "name": "D_80082248", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082248" + }, + { + "type": "extern_variable", + "name": "D_8008325C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008325C" + }, + { + "type": "extern_variable", + "name": "D_8009D828", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D828" + }, + { + "type": "extern_variable", + "name": "D_800A0854", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A0854" + }, + { + "type": "extern_variable", + "name": "D_800A0F38", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A0F38" + }, + { + "type": "extern_variable", + "name": "D_8007E7C2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7C2" + }, + { + "type": "extern_variable", + "name": "D_80049209", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049209" + }, + { + "type": "extern_variable", + "name": "D_8004920A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8004920A" + }, + { + "type": "extern_variable", + "name": "func_80044064", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80044064" + }, + { + "type": "extern_variable", + "name": "func_800C5B38", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C5B38" + }, + { + "type": "extern_variable", + "name": "D_80081D90", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80081D90" + }, + { + "type": "extern_variable", + "name": "D_80083288", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083288" + }, + { + "type": "extern_variable", + "name": "D_800E4944", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4944" + }, + { + "type": "extern_variable", + "name": "D_80114480", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80114480" + }, + { + "type": "extern_variable", + "name": "D_800E42A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42A8" + }, + { + "type": "extern_variable", + "name": "D_8008327C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327C" + }, + { + "type": "extern_variable", + "name": "D_80083280", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083280" + }, + { + "type": "extern_variable", + "name": "D_80083282", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083282" + }, + { + "type": "extern_variable", + "name": "D_8008328F", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328F" + }, + { + "type": "extern_variable", + "name": "D_80083290", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083290" + }, + { + "type": "extern_variable", + "name": "D_8008329C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329C" + }, + { + "type": "extern_variable", + "name": "D_8008329E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329E" + }, + { + "type": "extern_variable", + "name": "D_80071748", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071748" + }, + { + "type": "extern_variable", + "name": "D_800833F8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800833F8" + }, + { + "type": "extern_variable", + "name": "D_8009A1C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009A1C4" + }, + { + "type": "extern_variable", + "name": "D_800A06B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A06B0" + }, + { + "type": "extern_variable", + "name": "D_80071A88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071A88" + }, + { + "type": "extern_variable", + "name": "D_801142D4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801142D4" + }, + { + "type": "extern_variable", + "name": "D_800E42D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42D8" + }, + { + "type": "extern_variable", + "name": "D_800E42DA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DA" + }, + { + "type": "extern_variable", + "name": "D_800E42DC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DC" + }, + { + "type": "extern_variable", + "name": "D_800E42E0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E0" + }, + { + "type": "extern_variable", + "name": "D_800E42E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E4" + }, + { + "type": "extern_variable", + "name": "D_800E42E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E8" + }, + { + "type": "extern_variable", + "name": "D_800E42EA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EA" + }, + { + "type": "extern_variable", + "name": "D_800E42EE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EE" + }, + { + "type": "extern_variable", + "name": "D_800E48E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48E8" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-18T12:35:43.736163" + }, + { + "function_name": "func_800140F4", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_8007E7A0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7A0" + }, + { + "type": "extern_variable", + "name": "D_8007EB6A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007EB6A" + }, + { + "type": "extern_variable", + "name": "D_8009A078", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009A078" + }, + { + "type": "extern_variable", + "name": "D_8009A079", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009A079" + }, + { + "type": "extern_variable", + "name": "D_8009A07A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009A07A" + }, + { + "type": "extern_variable", + "name": "D_80063048", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80063048" + }, + { + "type": "extern_variable", + "name": "D_80010118", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80010118" + }, + { + "type": "extern_variable", + "name": "D_80010120", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80010120" + }, + { + "type": "extern_variable", + "name": "D_80010124", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80010124" + }, + { + "type": "extern_variable", + "name": "D_800F5BC7", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5BC7" + }, + { + "type": "extern_variable", + "name": "D_800F5BE1", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5BE1" + }, + { + "type": "extern_variable", + "name": "D_800F5BF4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5BF4" + }, + { + "type": "extern_variable", + "name": "D_800F5F44", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5F44" + }, + { + "type": "extern_variable", + "name": "D_800F652C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F652C" + }, + { + "type": "extern_variable", + "name": "D_800F83E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F83E4" + }, + { + "type": "extern_variable", + "name": "D_800F8410", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F8410" + }, + { + "type": "extern_variable", + "name": "D_80163658", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163658" + }, + { + "type": "extern_variable", + "name": "D_8009D808", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D808" + }, + { + "type": "extern_variable", + "name": "D_8009D80A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D80A" + }, + { + "type": "extern_variable", + "name": "D_8009D80C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D80C" + }, + { + "type": "extern_variable", + "name": "func_80018028", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80018028" + }, + { + "type": "extern_variable", + "name": "D_800491B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800491B0" + }, + { + "type": "extern_variable", + "name": "D_800730D9", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730D9" + }, + { + "type": "extern_variable", + "name": "D_800730DA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730DA" + }, + { + "type": "extern_variable", + "name": "D_800730DB", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730DB" + }, + { + "type": "extern_variable", + "name": "D_80062E53", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80062E53" + }, + { + "type": "extern_variable", + "name": "D_8006950A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8006950A" + }, + { + "type": "extern_variable", + "name": "func_80019254", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80019254" + }, + { + "type": "extern_variable", + "name": "func_8001937C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001937C" + }, + { + "type": "extern_variable", + "name": "func_800193F4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800193F4" + }, + { + "type": "extern_variable", + "name": "func_80019544", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80019544" + }, + { + "type": "extern_variable", + "name": "D_80049060", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049060" + }, + { + "type": "extern_variable", + "name": "D_80049062", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049062" + }, + { + "type": "extern_variable", + "name": "D_80049064", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049064" + }, + { + "type": "extern_variable", + "name": "D_80049066", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049066" + }, + { + "type": "extern_variable", + "name": "D_80049068", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049068" + }, + { + "type": "extern_variable", + "name": "D_8004906A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8004906A" + }, + { + "type": "extern_variable", + "name": "D_8004906C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8004906C" + }, + { + "type": "extern_variable", + "name": "D_8004906E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8004906E" + }, + { + "type": "extern_variable", + "name": "D_800730D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730D8" + }, + { + "type": "extern_variable", + "name": "D_800694E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800694E4" + }, + { + "type": "extern_variable", + "name": "D_8006947C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8006947C" + }, + { + "type": "extern_variable", + "name": "D_800730DE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730DE" + }, + { + "type": "extern_variable", + "name": "D_80069508", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069508" + }, + { + "type": "extern_variable", + "name": "func_8001BB30", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001BB30" + }, + { + "type": "extern_variable", + "name": "D_80069538", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069538" + }, + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069555", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069555" + }, + { + "type": "extern_variable", + "name": "D_80069556", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069556" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_800708C8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C8" + }, + { + "type": "extern_variable", + "name": "D_800708D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708D0" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80071E46", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071E46" + }, + { + "type": "extern_variable", + "name": "D_800738A4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738A4" + }, + { + "type": "extern_variable", + "name": "D_8009D888", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D888" + }, + { + "type": "extern_variable", + "name": "D_80069844", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069844" + }, + { + "type": "extern_variable", + "name": "D_800494A4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800494A4" + }, + { + "type": "extern_variable", + "name": "D_80071E4D", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071E4D" + }, + { + "type": "extern_variable", + "name": "D_800738BC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738BC" + }, + { + "type": "extern_variable", + "name": "D_800491D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800491D0" + }, + { + "type": "extern_variable", + "name": "D_8009D85C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85C" + }, + { + "type": "extern_variable", + "name": "D_8009D85E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85E" + }, + { + "type": "extern_variable", + "name": "D_8009D860", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D860" + }, + { + "type": "extern_variable", + "name": "D_8009D862", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D862" + }, + { + "type": "extern_variable", + "name": "func_80026090", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80026090" + }, + { + "type": "extern_variable", + "name": "func_800260DC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800260DC" + }, + { + "type": "extern_variable", + "name": "D_80083084", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083084" + }, + { + "type": "extern_variable", + "name": "D_80074EB0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB0" + }, + { + "type": "extern_variable", + "name": "D_80074EB4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB4" + }, + { + "type": "extern_variable", + "name": "D_80074EDA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EDA" + }, + { + "type": "extern_variable", + "name": "D_80074F16", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074F16" + }, + { + "type": "extern_variable", + "name": "D_80071C32", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071C32" + }, + { + "type": "extern_variable", + "name": "D_80071E64", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071E64" + }, + { + "type": "extern_variable", + "name": "D_800722D6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800722D6" + }, + { + "type": "extern_variable", + "name": "D_800738CA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738CA" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + }, + { + "type": "extern_variable", + "name": "D_8009D88A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D88A" + }, + { + "type": "extern_variable", + "name": "D_8009D88C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D88C" + }, + { + "type": "extern_variable", + "name": "D_8009D88E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D88E" + }, + { + "type": "extern_variable", + "name": "func_80018630", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80018630" + }, + { + "type": "extern_variable", + "name": "func_80018934", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80018934" + }, + { + "type": "extern_variable", + "name": "D_800730DF", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730DF" + } + ], + "timestamp": "2026-04-18T12:35:44.167037" + }, + { + "function_name": "func_800A1798", + "file": "src/battle/battle.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_8009D954", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D954" + }, + { + "type": "extern_variable", + "name": "D_800FA9D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FA9D0" + }, + { + "type": "extern_variable", + "name": "D_800FA9D4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FA9D4" + }, + { + "type": "extern_variable", + "name": "D_800F9F3C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9F3C" + }, + { + "type": "extern_variable", + "name": "D_800F9F42", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9F42" + }, + { + "type": "extern_variable", + "name": "D_800F9F44", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9F44" + }, + { + "type": "extern_variable", + "name": "D_800F87F4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F87F4" + }, + { + "type": "extern_variable", + "name": "D_800F5E65", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E65" + }, + { + "type": "extern_variable", + "name": "D_800F3A40", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F3A40" + }, + { + "type": "extern_variable", + "name": "D_80071C32", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071C32" + }, + { + "type": "extern_variable", + "name": "D_80071E64", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071E64" + }, + { + "type": "extern_variable", + "name": "D_800722D6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800722D6" + }, + { + "type": "extern_variable", + "name": "D_800722D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800722D8" + }, + { + "type": "extern_variable", + "name": "D_800738A0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738A0" + }, + { + "type": "extern_variable", + "name": "D_800738CA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738CA" + }, + { + "type": "extern_variable", + "name": "D_801671B8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801671B8" + }, + { + "type": "extern_variable", + "name": "D_801671BA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801671BA" + }, + { + "type": "extern_variable", + "name": "D_801671BC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801671BC" + }, + { + "type": "extern_variable", + "name": "D_8009D866", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D866" + }, + { + "type": "extern_variable", + "name": "D_800F5E68", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E68" + }, + { + "type": "extern_variable", + "name": "D_800F5E6A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E6A" + }, + { + "type": "extern_variable", + "name": "D_800708D1", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708D1" + }, + { + "type": "extern_variable", + "name": "D_8009D85E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85E" + }, + { + "type": "extern_variable", + "name": "D_8009D862", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D862" + }, + { + "type": "extern_variable", + "name": "D_800F5E70", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E70" + }, + { + "type": "extern_variable", + "name": "D_800F5E72", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E72" + }, + { + "type": "extern_variable", + "name": "D_800738A4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738A4" + }, + { + "type": "extern_variable", + "name": "D_800738C7", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738C7" + }, + { + "type": "extern_variable", + "name": "D_8009D84E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D84E" + }, + { + "type": "extern_variable", + "name": "D_800F5E64", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E64" + }, + { + "type": "extern_variable", + "name": "D_800F5EFC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5EFC" + }, + { + "type": "extern_variable", + "name": "func_800AA574", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AA574" + }, + { + "type": "extern_variable", + "name": "func_800AA688", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AA688" + }, + { + "type": "extern_variable", + "name": "D_80163778", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163778" + }, + { + "type": "extern_variable", + "name": "D_800E7BA4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BA4" + }, + { + "type": "extern_variable", + "name": "D_800E7BA5", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BA5" + }, + { + "type": "extern_variable", + "name": "D_800E7BA6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BA6" + }, + { + "type": "extern_variable", + "name": "D_800F5E74", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E74" + }, + { + "type": "extern_variable", + "name": "D_800F5E76", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E76" + }, + { + "type": "extern_variable", + "name": "D_800730D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730D0" + }, + { + "type": "extern_variable", + "name": "D_800E7BBC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BBC" + }, + { + "type": "extern_variable", + "name": "D_800E7BBD", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BBD" + }, + { + "type": "extern_variable", + "name": "D_8009D86F", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D86F" + }, + { + "type": "extern_variable", + "name": "D_800E7BCC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BCC" + }, + { + "type": "extern_variable", + "name": "D_800E7BFC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BFC" + }, + { + "type": "extern_variable", + "name": "D_800E7BEC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BEC" + }, + { + "type": "extern_variable", + "name": "func_800AF264", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AF264" + }, + { + "type": "extern_variable", + "name": "func_800AF3AC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AF3AC" + }, + { + "type": "extern_variable", + "name": "D_800E7C7C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7C7C" + }, + { + "type": "extern_variable", + "name": "D_800E7CBC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7CBC" + }, + { + "type": "extern_variable", + "name": "D_800E7CDC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7CDC" + }, + { + "type": "extern_variable", + "name": "D_800F4A48", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4A48" + }, + { + "type": "extern_variable", + "name": "D_800F4A70", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4A70" + }, + { + "type": "extern_variable", + "name": "D_800F4A98", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4A98" + }, + { + "type": "extern_variable", + "name": "D_800F49A0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F49A0" + }, + { + "type": "extern_variable", + "name": "D_800F49A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F49A8" + }, + { + "type": "extern_variable", + "name": "D_8009D85C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85C" + }, + { + "type": "extern_variable", + "name": "D_8009D860", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D860" + }, + { + "type": "extern_variable", + "name": "D_8009D868", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D868" + }, + { + "type": "extern_variable", + "name": "D_8009D86A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D86A" + }, + { + "type": "extern_variable", + "name": "D_800F5F01", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5F01" + }, + { + "type": "extern_variable", + "name": "D_800F87F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F87F0" + }, + { + "type": "extern_variable", + "name": "func_800A5250", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800A5250" + } + ], + "timestamp": "2026-04-18T12:35:44.567054" + }, + { + "function_name": "func_800A2314", + "file": "src/field/field.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80074EB0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB0" + }, + { + "type": "extern_variable", + "name": "D_80074EB4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB4" + }, + { + "type": "extern_variable", + "name": "D_80074EB8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB8" + }, + { + "type": "extern_variable", + "name": "func_800A48B8", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800A48B8" + }, + { + "type": "extern_variable", + "name": "D_80074ED9", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074ED9" + }, + { + "type": "extern_variable", + "name": "D_800DF120", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DF120" + }, + { + "type": "extern_variable", + "name": "D_800DF122", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DF122" + }, + { + "type": "extern_variable", + "name": "D_800DEF88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800DEF88" + }, + { + "type": "extern_variable", + "name": "func_800354CC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800354CC" + }, + { + "type": "extern_variable", + "name": "func_80035658", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80035658" + }, + { + "type": "extern_variable", + "name": "D_800E0638", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0638" + }, + { + "type": "extern_variable", + "name": "D_800E48F4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48F4" + }, + { + "type": "extern_variable", + "name": "D_800E48FC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48FC" + }, + { + "type": "extern_variable", + "name": "D_800E48FE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48FE" + }, + { + "type": "extern_variable", + "name": "D_800E4900", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4900" + }, + { + "type": "extern_variable", + "name": "D_800E4901", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4901" + }, + { + "type": "extern_variable", + "name": "D_800E4904", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4904" + }, + { + "type": "extern_variable", + "name": "D_800E4906", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4906" + }, + { + "type": "extern_variable", + "name": "D_800E4908", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4908" + }, + { + "type": "extern_variable", + "name": "D_800E4909", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4909" + }, + { + "type": "extern_variable", + "name": "D_800E490C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E490C" + }, + { + "type": "extern_variable", + "name": "D_800E490E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E490E" + }, + { + "type": "extern_variable", + "name": "D_800E4910", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4910" + }, + { + "type": "extern_variable", + "name": "D_800E4911", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4911" + }, + { + "type": "extern_variable", + "name": "D_800E4914", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4914" + }, + { + "type": "extern_variable", + "name": "D_800E4916", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4916" + }, + { + "type": "extern_variable", + "name": "D_800E4918", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4918" + }, + { + "type": "extern_variable", + "name": "D_800E4919", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4919" + }, + { + "type": "extern_variable", + "name": "D_8007EB98", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007EB98" + }, + { + "type": "extern_variable", + "name": "func_8001786C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001786C" + }, + { + "type": "extern_variable", + "name": "func_80020058", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80020058" + }, + { + "type": "extern_variable", + "name": "D_800491D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800491D0" + }, + { + "type": "extern_variable", + "name": "D_8008328D", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328D" + }, + { + "type": "extern_variable", + "name": "D_800832A2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800832A2" + }, + { + "type": "extern_variable", + "name": "D_8008326C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008326C" + }, + { + "type": "extern_variable", + "name": "D_80083286", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083286" + }, + { + "type": "extern_variable", + "name": "D_80083278", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083278" + }, + { + "type": "extern_variable", + "name": "D_8008327A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327A" + }, + { + "type": "extern_variable", + "name": "D_8008327E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327E" + }, + { + "type": "extern_variable", + "name": "D_80075E24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075E24" + }, + { + "type": "extern_variable", + "name": "D_80075E25", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075E25" + }, + { + "type": "extern_variable", + "name": "D_800E4214", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4214" + }, + { + "type": "extern_variable", + "name": "D_800E4280", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4280" + }, + { + "type": "extern_variable", + "name": "D_800E4D48", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4D48" + }, + { + "type": "extern_variable", + "name": "D_800E0748", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0748" + }, + { + "type": "extern_variable", + "name": "D_800E074A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074A" + }, + { + "type": "extern_variable", + "name": "D_800E074C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074C" + }, + { + "type": "extern_variable", + "name": "D_800E08C0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08C0" + }, + { + "type": "extern_variable", + "name": "D_800E074E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E074E" + }, + { + "type": "extern_variable", + "name": "D_800E0754", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0754" + }, + { + "type": "extern_variable", + "name": "D_800E0758", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0758" + }, + { + "type": "extern_variable", + "name": "D_800E08A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08A8" + }, + { + "type": "extern_variable", + "name": "D_800E0756", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0756" + }, + { + "type": "extern_variable", + "name": "D_800E0750", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0750" + }, + { + "type": "extern_variable", + "name": "D_800E0751", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0751" + }, + { + "type": "extern_variable", + "name": "D_800E0752", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0752" + }, + { + "type": "extern_variable", + "name": "func_800D5A60", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D5A60" + }, + { + "type": "extern_variable", + "name": "func_800D5C9C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D5C9C" + }, + { + "type": "extern_variable", + "name": "func_800D6D44", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6D44" + }, + { + "type": "extern_variable", + "name": "func_800D6E0C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6E0C" + }, + { + "type": "extern_variable", + "name": "func_800D6F6C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6F6C" + }, + { + "type": "extern_variable", + "name": "D_80083284", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083284" + }, + { + "type": "extern_variable", + "name": "D_8008328A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328A" + }, + { + "type": "extern_variable", + "name": "D_8008328E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328E" + }, + { + "type": "extern_variable", + "name": "D_80083298", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083298" + }, + { + "type": "extern_variable", + "name": "D_8008329A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329A" + }, + { + "type": "extern_variable", + "name": "D_800E424C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E424C" + }, + { + "type": "extern_variable", + "name": "D_801142CC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801142CC" + }, + { + "type": "extern_variable", + "name": "D_8009AD30", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009AD30" + }, + { + "type": "extern_variable", + "name": "func_800C2E00", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C2E00" + }, + { + "type": "extern_variable", + "name": "func_800DA444", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800DA444" + }, + { + "type": "extern_variable", + "name": "func_800C8634", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C8634" + }, + { + "type": "extern_variable", + "name": "func_800CDC14", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800CDC14" + }, + { + "type": "extern_variable", + "name": "D_80095DE0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80095DE0" + }, + { + "type": "extern_variable", + "name": "func_80025B10", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80025B10" + }, + { + "type": "extern_variable", + "name": "func_800BEAD4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800BEAD4" + }, + { + "type": "extern_variable", + "name": "D_800E0208", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0208" + }, + { + "type": "extern_variable", + "name": "D_800756E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800756E8" + }, + { + "type": "extern_variable", + "name": "D_80083291", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083291" + }, + { + "type": "extern_variable", + "name": "D_80083294", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083294" + }, + { + "type": "extern_variable", + "name": "D_8007078C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007078C" + }, + { + "type": "extern_variable", + "name": "D_8007E7B8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B8" + }, + { + "type": "extern_variable", + "name": "D_8007E7BA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7BA" + }, + { + "type": "extern_variable", + "name": "D_8007E7AC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7AC" + }, + { + "type": "extern_variable", + "name": "D_8007E7AE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7AE" + }, + { + "type": "extern_variable", + "name": "D_8007E7B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B0" + }, + { + "type": "extern_variable", + "name": "D_8007E7B2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B2" + }, + { + "type": "extern_variable", + "name": "D_8007E7B4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B4" + }, + { + "type": "extern_variable", + "name": "D_8007E7B6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7B6" + }, + { + "type": "extern_variable", + "name": "D_80082248", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082248" + }, + { + "type": "extern_variable", + "name": "D_8008325C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008325C" + }, + { + "type": "extern_variable", + "name": "D_8009D828", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D828" + }, + { + "type": "extern_variable", + "name": "D_800A0854", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A0854" + }, + { + "type": "extern_variable", + "name": "D_800A0F38", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A0F38" + }, + { + "type": "extern_variable", + "name": "D_8007E7C2", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7C2" + }, + { + "type": "extern_variable", + "name": "D_80049209", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049209" + }, + { + "type": "extern_variable", + "name": "D_8004920A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8004920A" + }, + { + "type": "extern_variable", + "name": "func_80044064", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80044064" + }, + { + "type": "extern_variable", + "name": "func_800C5B38", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C5B38" + }, + { + "type": "extern_variable", + "name": "D_80081D90", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80081D90" + }, + { + "type": "extern_variable", + "name": "D_80083288", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083288" + }, + { + "type": "extern_variable", + "name": "D_800E4944", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E4944" + }, + { + "type": "extern_variable", + "name": "D_80114480", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80114480" + }, + { + "type": "extern_variable", + "name": "D_800E42A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42A8" + }, + { + "type": "extern_variable", + "name": "D_8008327C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008327C" + }, + { + "type": "extern_variable", + "name": "D_80083280", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083280" + }, + { + "type": "extern_variable", + "name": "D_80083282", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083282" + }, + { + "type": "extern_variable", + "name": "D_8008328F", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008328F" + }, + { + "type": "extern_variable", + "name": "D_80083290", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083290" + }, + { + "type": "extern_variable", + "name": "D_8008329C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329C" + }, + { + "type": "extern_variable", + "name": "D_8008329E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8008329E" + }, + { + "type": "extern_variable", + "name": "D_80071748", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071748" + }, + { + "type": "extern_variable", + "name": "D_800833F8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800833F8" + }, + { + "type": "extern_variable", + "name": "D_8009A1C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009A1C4" + }, + { + "type": "extern_variable", + "name": "D_800A06B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A06B0" + }, + { + "type": "extern_variable", + "name": "D_80071A88", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071A88" + }, + { + "type": "extern_variable", + "name": "D_801142D4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801142D4" + }, + { + "type": "extern_variable", + "name": "D_800E42D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42D8" + }, + { + "type": "extern_variable", + "name": "D_800E42DA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DA" + }, + { + "type": "extern_variable", + "name": "D_800E42DC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DC" + }, + { + "type": "extern_variable", + "name": "D_800E42E0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E0" + }, + { + "type": "extern_variable", + "name": "D_800E42E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E4" + }, + { + "type": "extern_variable", + "name": "D_800E42E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E8" + }, + { + "type": "extern_variable", + "name": "D_800E42EA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EA" + }, + { + "type": "extern_variable", + "name": "D_800E42EE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EE" + }, + { + "type": "extern_variable", + "name": "D_800E48E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48E8" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-18T12:35:45.141699" + }, + { + "function_name": "func_80023AD4", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_8007E7A0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007E7A0" + }, + { + "type": "extern_variable", + "name": "D_8007EB6A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8007EB6A" + }, + { + "type": "extern_variable", + "name": "D_8009A078", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009A078" + }, + { + "type": "extern_variable", + "name": "D_8009A079", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009A079" + }, + { + "type": "extern_variable", + "name": "D_8009A07A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009A07A" + }, + { + "type": "extern_variable", + "name": "D_80063048", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80063048" + }, + { + "type": "extern_variable", + "name": "D_80010118", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80010118" + }, + { + "type": "extern_variable", + "name": "D_80010120", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80010120" + }, + { + "type": "extern_variable", + "name": "D_80010124", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80010124" + }, + { + "type": "extern_variable", + "name": "D_800F5BC7", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5BC7" + }, + { + "type": "extern_variable", + "name": "D_800F5BE1", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5BE1" + }, + { + "type": "extern_variable", + "name": "D_800F5BF4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5BF4" + }, + { + "type": "extern_variable", + "name": "D_800F5F44", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5F44" + }, + { + "type": "extern_variable", + "name": "D_800F652C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F652C" + }, + { + "type": "extern_variable", + "name": "D_800F83E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F83E4" + }, + { + "type": "extern_variable", + "name": "D_800F8410", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F8410" + }, + { + "type": "extern_variable", + "name": "D_80163658", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163658" + }, + { + "type": "extern_variable", + "name": "D_8009D808", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D808" + }, + { + "type": "extern_variable", + "name": "D_8009D80A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D80A" + }, + { + "type": "extern_variable", + "name": "D_8009D80C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D80C" + }, + { + "type": "extern_variable", + "name": "func_80018028", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80018028" + }, + { + "type": "extern_variable", + "name": "D_800491B0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800491B0" + }, + { + "type": "extern_variable", + "name": "D_800730D9", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730D9" + }, + { + "type": "extern_variable", + "name": "D_800730DA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730DA" + }, + { + "type": "extern_variable", + "name": "D_800730DB", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730DB" + }, + { + "type": "extern_variable", + "name": "D_80062E53", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80062E53" + }, + { + "type": "extern_variable", + "name": "D_8006950A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8006950A" + }, + { + "type": "extern_variable", + "name": "func_80019254", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80019254" + }, + { + "type": "extern_variable", + "name": "func_8001937C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001937C" + }, + { + "type": "extern_variable", + "name": "func_800193F4", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800193F4" + }, + { + "type": "extern_variable", + "name": "func_80019544", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80019544" + }, + { + "type": "extern_variable", + "name": "D_80049060", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049060" + }, + { + "type": "extern_variable", + "name": "D_80049062", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049062" + }, + { + "type": "extern_variable", + "name": "D_80049064", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049064" + }, + { + "type": "extern_variable", + "name": "D_80049066", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049066" + }, + { + "type": "extern_variable", + "name": "D_80049068", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80049068" + }, + { + "type": "extern_variable", + "name": "D_8004906A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8004906A" + }, + { + "type": "extern_variable", + "name": "D_8004906C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8004906C" + }, + { + "type": "extern_variable", + "name": "D_8004906E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8004906E" + }, + { + "type": "extern_variable", + "name": "D_800730D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730D8" + }, + { + "type": "extern_variable", + "name": "D_800694E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800694E4" + }, + { + "type": "extern_variable", + "name": "D_8006947C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8006947C" + }, + { + "type": "extern_variable", + "name": "D_800730DE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730DE" + }, + { + "type": "extern_variable", + "name": "D_80069508", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069508" + }, + { + "type": "extern_variable", + "name": "func_8001BB30", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001BB30" + }, + { + "type": "extern_variable", + "name": "D_80069538", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069538" + }, + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069555", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069555" + }, + { + "type": "extern_variable", + "name": "D_80069556", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069556" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_800708C8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C8" + }, + { + "type": "extern_variable", + "name": "D_800708D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708D0" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80071E46", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071E46" + }, + { + "type": "extern_variable", + "name": "D_800738A4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738A4" + }, + { + "type": "extern_variable", + "name": "D_8009D888", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D888" + }, + { + "type": "extern_variable", + "name": "D_80069844", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069844" + }, + { + "type": "extern_variable", + "name": "D_800494A4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800494A4" + }, + { + "type": "extern_variable", + "name": "D_80071E4D", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071E4D" + }, + { + "type": "extern_variable", + "name": "D_800738BC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738BC" + }, + { + "type": "extern_variable", + "name": "D_800491D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800491D0" + }, + { + "type": "extern_variable", + "name": "D_8009D85C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85C" + }, + { + "type": "extern_variable", + "name": "D_8009D85E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85E" + }, + { + "type": "extern_variable", + "name": "D_8009D860", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D860" + }, + { + "type": "extern_variable", + "name": "D_8009D862", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D862" + }, + { + "type": "extern_variable", + "name": "func_80026090", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80026090" + }, + { + "type": "extern_variable", + "name": "func_800260DC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800260DC" + }, + { + "type": "extern_variable", + "name": "D_80083084", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80083084" + }, + { + "type": "extern_variable", + "name": "D_80074EB0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB0" + }, + { + "type": "extern_variable", + "name": "D_80074EB4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB4" + }, + { + "type": "extern_variable", + "name": "D_80074EDA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EDA" + }, + { + "type": "extern_variable", + "name": "D_80074F16", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074F16" + }, + { + "type": "extern_variable", + "name": "D_80071C32", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071C32" + }, + { + "type": "extern_variable", + "name": "D_80071E64", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071E64" + }, + { + "type": "extern_variable", + "name": "D_800722D6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800722D6" + }, + { + "type": "extern_variable", + "name": "D_800738CA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738CA" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + }, + { + "type": "extern_variable", + "name": "D_8009D88A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D88A" + }, + { + "type": "extern_variable", + "name": "D_8009D88C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D88C" + }, + { + "type": "extern_variable", + "name": "D_8009D88E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D88E" + }, + { + "type": "extern_variable", + "name": "func_80018630", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80018630" + }, + { + "type": "extern_variable", + "name": "func_80018934", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80018934" + }, + { + "type": "extern_variable", + "name": "D_800730DF", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730DF" + } + ], + "timestamp": "2026-04-18T12:35:45.663920" + }, + { + "function_name": "func_800AABBC", + "file": "src/battle/battle.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_8009D954", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D954" + }, + { + "type": "extern_variable", + "name": "D_800FA9D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FA9D0" + }, + { + "type": "extern_variable", + "name": "D_800FA9D4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FA9D4" + }, + { + "type": "extern_variable", + "name": "D_800F9F3C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9F3C" + }, + { + "type": "extern_variable", + "name": "D_800F9F42", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9F42" + }, + { + "type": "extern_variable", + "name": "D_800F9F44", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9F44" + }, + { + "type": "extern_variable", + "name": "D_800F87F4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F87F4" + }, + { + "type": "extern_variable", + "name": "D_800F5E65", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E65" + }, + { + "type": "extern_variable", + "name": "D_800F3A40", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F3A40" + }, + { + "type": "extern_variable", + "name": "D_80071C32", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071C32" + }, + { + "type": "extern_variable", + "name": "D_80071E64", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071E64" + }, + { + "type": "extern_variable", + "name": "D_800722D6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800722D6" + }, + { + "type": "extern_variable", + "name": "D_800722D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800722D8" + }, + { + "type": "extern_variable", + "name": "D_800738A0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738A0" + }, + { + "type": "extern_variable", + "name": "D_800738CA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738CA" + }, + { + "type": "extern_variable", + "name": "D_801671B8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801671B8" + }, + { + "type": "extern_variable", + "name": "D_801671BA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801671BA" + }, + { + "type": "extern_variable", + "name": "D_801671BC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801671BC" + }, + { + "type": "extern_variable", + "name": "D_8009D866", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D866" + }, + { + "type": "extern_variable", + "name": "D_800F5E68", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E68" + }, + { + "type": "extern_variable", + "name": "D_800F5E6A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E6A" + }, + { + "type": "extern_variable", + "name": "D_800708D1", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708D1" + }, + { + "type": "extern_variable", + "name": "D_8009D85E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85E" + }, + { + "type": "extern_variable", + "name": "D_8009D862", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D862" + }, + { + "type": "extern_variable", + "name": "D_800F5E70", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E70" + }, + { + "type": "extern_variable", + "name": "D_800F5E72", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E72" + }, + { + "type": "extern_variable", + "name": "D_800738A4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738A4" + }, + { + "type": "extern_variable", + "name": "D_800738C7", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738C7" + }, + { + "type": "extern_variable", + "name": "D_8009D84E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D84E" + }, + { + "type": "extern_variable", + "name": "D_800F5E64", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E64" + }, + { + "type": "extern_variable", + "name": "D_800F5EFC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5EFC" + }, + { + "type": "extern_variable", + "name": "func_800AA574", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AA574" + }, + { + "type": "extern_variable", + "name": "func_800AA688", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AA688" + }, + { + "type": "extern_variable", + "name": "D_80163778", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163778" + }, + { + "type": "extern_variable", + "name": "D_800E7BA4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BA4" + }, + { + "type": "extern_variable", + "name": "D_800E7BA5", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BA5" + }, + { + "type": "extern_variable", + "name": "D_800E7BA6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BA6" + }, + { + "type": "extern_variable", + "name": "D_800F5E74", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E74" + }, + { + "type": "extern_variable", + "name": "D_800F5E76", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E76" + }, + { + "type": "extern_variable", + "name": "D_800730D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730D0" + }, + { + "type": "extern_variable", + "name": "D_800E7BBC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BBC" + }, + { + "type": "extern_variable", + "name": "D_800E7BBD", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BBD" + }, + { + "type": "extern_variable", + "name": "D_8009D86F", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D86F" + }, + { + "type": "extern_variable", + "name": "D_800E7BCC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BCC" + }, + { + "type": "extern_variable", + "name": "D_800E7BFC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BFC" + }, + { + "type": "extern_variable", + "name": "D_800E7BEC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BEC" + }, + { + "type": "extern_variable", + "name": "func_800AF264", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AF264" + }, + { + "type": "extern_variable", + "name": "func_800AF3AC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AF3AC" + }, + { + "type": "extern_variable", + "name": "D_800E7C7C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7C7C" + }, + { + "type": "extern_variable", + "name": "D_800E7CBC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7CBC" + }, + { + "type": "extern_variable", + "name": "D_800E7CDC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7CDC" + }, + { + "type": "extern_variable", + "name": "D_800F4A48", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4A48" + }, + { + "type": "extern_variable", + "name": "D_800F4A70", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4A70" + }, + { + "type": "extern_variable", + "name": "D_800F4A98", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4A98" + }, + { + "type": "extern_variable", + "name": "D_800F49A0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F49A0" + }, + { + "type": "extern_variable", + "name": "D_800F49A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F49A8" + }, + { + "type": "extern_variable", + "name": "D_8009D85C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85C" + }, + { + "type": "extern_variable", + "name": "D_8009D860", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D860" + }, + { + "type": "extern_variable", + "name": "D_8009D868", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D868" + }, + { + "type": "extern_variable", + "name": "D_8009D86A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D86A" + }, + { + "type": "extern_variable", + "name": "D_800F5F01", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5F01" + }, + { + "type": "extern_variable", + "name": "D_800F87F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F87F0" + }, + { + "type": "extern_variable", + "name": "func_800A5250", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800A5250" + } + ], + "timestamp": "2026-04-18T12:35:45.939659" + }, + { + "function_name": "func_800ABB0C", + "file": "src/battle/battle.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_8009D954", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D954" + }, + { + "type": "extern_variable", + "name": "D_800FA9D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FA9D0" + }, + { + "type": "extern_variable", + "name": "D_800FA9D4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FA9D4" + }, + { + "type": "extern_variable", + "name": "D_800F9F3C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9F3C" + }, + { + "type": "extern_variable", + "name": "D_800F9F42", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9F42" + }, + { + "type": "extern_variable", + "name": "D_800F9F44", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9F44" + }, + { + "type": "extern_variable", + "name": "D_800F87F4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F87F4" + }, + { + "type": "extern_variable", + "name": "D_800F5E65", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E65" + }, + { + "type": "extern_variable", + "name": "D_800F3A40", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F3A40" + }, + { + "type": "extern_variable", + "name": "D_80071C32", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071C32" + }, + { + "type": "extern_variable", + "name": "D_80071E64", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071E64" + }, + { + "type": "extern_variable", + "name": "D_800722D6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800722D6" + }, + { + "type": "extern_variable", + "name": "D_800722D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800722D8" + }, + { + "type": "extern_variable", + "name": "D_800738A0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738A0" + }, + { + "type": "extern_variable", + "name": "D_800738CA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738CA" + }, + { + "type": "extern_variable", + "name": "D_801671B8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801671B8" + }, + { + "type": "extern_variable", + "name": "D_801671BA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801671BA" + }, + { + "type": "extern_variable", + "name": "D_801671BC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801671BC" + }, + { + "type": "extern_variable", + "name": "D_8009D866", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D866" + }, + { + "type": "extern_variable", + "name": "D_800F5E68", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E68" + }, + { + "type": "extern_variable", + "name": "D_800F5E6A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E6A" + }, + { + "type": "extern_variable", + "name": "D_800708D1", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708D1" + }, + { + "type": "extern_variable", + "name": "D_8009D85E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85E" + }, + { + "type": "extern_variable", + "name": "D_8009D862", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D862" + }, + { + "type": "extern_variable", + "name": "D_800F5E70", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E70" + }, + { + "type": "extern_variable", + "name": "D_800F5E72", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E72" + }, + { + "type": "extern_variable", + "name": "D_800738A4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738A4" + }, + { + "type": "extern_variable", + "name": "D_800738C7", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738C7" + }, + { + "type": "extern_variable", + "name": "D_8009D84E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D84E" + }, + { + "type": "extern_variable", + "name": "D_800F5E64", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E64" + }, + { + "type": "extern_variable", + "name": "D_800F5EFC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5EFC" + }, + { + "type": "extern_variable", + "name": "func_800AA574", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AA574" + }, + { + "type": "extern_variable", + "name": "func_800AA688", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AA688" + }, + { + "type": "extern_variable", + "name": "D_80163778", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163778" + }, + { + "type": "extern_variable", + "name": "D_800E7BA4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BA4" + }, + { + "type": "extern_variable", + "name": "D_800E7BA5", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BA5" + }, + { + "type": "extern_variable", + "name": "D_800E7BA6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BA6" + }, + { + "type": "extern_variable", + "name": "D_800F5E74", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E74" + }, + { + "type": "extern_variable", + "name": "D_800F5E76", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E76" + }, + { + "type": "extern_variable", + "name": "D_800730D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730D0" + }, + { + "type": "extern_variable", + "name": "D_800E7BBC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BBC" + }, + { + "type": "extern_variable", + "name": "D_800E7BBD", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BBD" + }, + { + "type": "extern_variable", + "name": "D_8009D86F", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D86F" + }, + { + "type": "extern_variable", + "name": "D_800E7BCC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BCC" + }, + { + "type": "extern_variable", + "name": "D_800E7BFC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BFC" + }, + { + "type": "extern_variable", + "name": "D_800E7BEC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BEC" + }, + { + "type": "extern_variable", + "name": "func_800AF264", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AF264" + }, + { + "type": "extern_variable", + "name": "func_800AF3AC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AF3AC" + }, + { + "type": "extern_variable", + "name": "D_800E7C7C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7C7C" + }, + { + "type": "extern_variable", + "name": "D_800E7CBC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7CBC" + }, + { + "type": "extern_variable", + "name": "D_800E7CDC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7CDC" + }, + { + "type": "extern_variable", + "name": "D_800F4A48", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4A48" + }, + { + "type": "extern_variable", + "name": "D_800F4A70", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4A70" + }, + { + "type": "extern_variable", + "name": "D_800F4A98", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4A98" + }, + { + "type": "extern_variable", + "name": "D_800F49A0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F49A0" + }, + { + "type": "extern_variable", + "name": "D_800F49A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F49A8" + }, + { + "type": "extern_variable", + "name": "D_8009D85C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85C" + }, + { + "type": "extern_variable", + "name": "D_8009D860", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D860" + }, + { + "type": "extern_variable", + "name": "D_8009D868", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D868" + }, + { + "type": "extern_variable", + "name": "D_8009D86A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D86A" + }, + { + "type": "extern_variable", + "name": "D_800F5F01", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5F01" + }, + { + "type": "extern_variable", + "name": "D_800F87F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F87F0" + }, + { + "type": "extern_variable", + "name": "func_800A5250", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800A5250" + } + ], + "timestamp": "2026-04-18T12:35:46.981814" + }, + { + "function_name": "func_800A1158", + "file": "src/battle/battle.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_8009D954", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D954" + }, + { + "type": "extern_variable", + "name": "D_800FA9D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FA9D0" + }, + { + "type": "extern_variable", + "name": "D_800FA9D4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FA9D4" + }, + { + "type": "extern_variable", + "name": "D_800F9F3C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9F3C" + }, + { + "type": "extern_variable", + "name": "D_800F9F42", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9F42" + }, + { + "type": "extern_variable", + "name": "D_800F9F44", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9F44" + }, + { + "type": "extern_variable", + "name": "D_800F87F4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F87F4" + }, + { + "type": "extern_variable", + "name": "D_800F5E65", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E65" + }, + { + "type": "extern_variable", + "name": "D_800F3A40", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F3A40" + }, + { + "type": "extern_variable", + "name": "D_80071C32", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071C32" + }, + { + "type": "extern_variable", + "name": "D_80071E64", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071E64" + }, + { + "type": "extern_variable", + "name": "D_800722D6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800722D6" + }, + { + "type": "extern_variable", + "name": "D_800722D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800722D8" + }, + { + "type": "extern_variable", + "name": "D_800738A0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738A0" + }, + { + "type": "extern_variable", + "name": "D_800738CA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738CA" + }, + { + "type": "extern_variable", + "name": "D_801671B8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801671B8" + }, + { + "type": "extern_variable", + "name": "D_801671BA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801671BA" + }, + { + "type": "extern_variable", + "name": "D_801671BC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801671BC" + }, + { + "type": "extern_variable", + "name": "D_8009D866", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D866" + }, + { + "type": "extern_variable", + "name": "D_800F5E68", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E68" + }, + { + "type": "extern_variable", + "name": "D_800F5E6A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E6A" + }, + { + "type": "extern_variable", + "name": "D_800708D1", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708D1" + }, + { + "type": "extern_variable", + "name": "D_8009D85E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85E" + }, + { + "type": "extern_variable", + "name": "D_8009D862", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D862" + }, + { + "type": "extern_variable", + "name": "D_800F5E70", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E70" + }, + { + "type": "extern_variable", + "name": "D_800F5E72", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E72" + }, + { + "type": "extern_variable", + "name": "D_800738A4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738A4" + }, + { + "type": "extern_variable", + "name": "D_800738C7", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738C7" + }, + { + "type": "extern_variable", + "name": "D_8009D84E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D84E" + }, + { + "type": "extern_variable", + "name": "D_800F5E64", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E64" + }, + { + "type": "extern_variable", + "name": "D_800F5EFC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5EFC" + }, + { + "type": "extern_variable", + "name": "func_800AA574", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AA574" + }, + { + "type": "extern_variable", + "name": "func_800AA688", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AA688" + }, + { + "type": "extern_variable", + "name": "D_80163778", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163778" + }, + { + "type": "extern_variable", + "name": "D_800E7BA4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BA4" + }, + { + "type": "extern_variable", + "name": "D_800E7BA5", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BA5" + }, + { + "type": "extern_variable", + "name": "D_800E7BA6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BA6" + }, + { + "type": "extern_variable", + "name": "D_800F5E74", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E74" + }, + { + "type": "extern_variable", + "name": "D_800F5E76", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5E76" + }, + { + "type": "extern_variable", + "name": "D_800730D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730D0" + }, + { + "type": "extern_variable", + "name": "D_800E7BBC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BBC" + }, + { + "type": "extern_variable", + "name": "D_800E7BBD", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BBD" + }, + { + "type": "extern_variable", + "name": "D_8009D86F", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D86F" + }, + { + "type": "extern_variable", + "name": "D_800E7BCC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BCC" + }, + { + "type": "extern_variable", + "name": "D_800E7BFC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BFC" + }, + { + "type": "extern_variable", + "name": "D_800E7BEC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7BEC" + }, + { + "type": "extern_variable", + "name": "func_800AF264", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AF264" + }, + { + "type": "extern_variable", + "name": "func_800AF3AC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800AF3AC" + }, + { + "type": "extern_variable", + "name": "D_800E7C7C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7C7C" + }, + { + "type": "extern_variable", + "name": "D_800E7CBC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7CBC" + }, + { + "type": "extern_variable", + "name": "D_800E7CDC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E7CDC" + }, + { + "type": "extern_variable", + "name": "D_800F4A48", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4A48" + }, + { + "type": "extern_variable", + "name": "D_800F4A70", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4A70" + }, + { + "type": "extern_variable", + "name": "D_800F4A98", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4A98" + }, + { + "type": "extern_variable", + "name": "D_800F49A0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F49A0" + }, + { + "type": "extern_variable", + "name": "D_800F49A8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F49A8" + }, + { + "type": "extern_variable", + "name": "D_8009D85C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85C" + }, + { + "type": "extern_variable", + "name": "D_8009D860", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D860" + }, + { + "type": "extern_variable", + "name": "D_8009D868", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D868" + }, + { + "type": "extern_variable", + "name": "D_8009D86A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D86A" + }, + { + "type": "extern_variable", + "name": "D_800F5F01", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F5F01" + }, + { + "type": "extern_variable", + "name": "D_800F87F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F87F0" + }, + { + "type": "extern_variable", + "name": "func_800A5250", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800A5250" + } + ], + "timestamp": "2026-04-18T12:35:47.973354" + }, + { + "function_name": "func_80034D18", + "file": "src/main/psxsdk.c", + "primary_error": "PSY-Q compilation failed: invalid type argument of `unary *'", + "missing_items": [], + "timestamp": "2026-04-22T17:10:07.508617" + }, + { + "function_name": "func_800AA0E0", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:10:10.061623" + }, + { + "function_name": "func_800A6884", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:10:12.453021" + }, + { + "function_name": "func_8001AC9C", + "file": "src/main/18B8.c", + "primary_error": "PSY-Q compilation failed: request for member `unk0' in something not a structure or union; request for member `unk1' in something not a structure or union; request for member `unk4' in something not a structure or union", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800730CE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730CE" + }, + { + "type": "extern_variable", + "name": "D_800730D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730D0" + }, + { + "type": "extern_variable", + "name": "D_800730D6", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730D6" + } + ], + "timestamp": "2026-04-22T17:10:15.211363" + }, + { + "function_name": "func_8002BCCC", + "file": "src/main/akao.c", + "primary_error": "Local variable 'arg0' is void* but used with -> (m2c struct type inference failure)", + "missing_items": [ + { + "type": "void_pointer_struct", + "parameter_name": "arg1", + "accessed_fields": [ + "unk166", + "unk1CE", + "unk1E8", + "unk5E", + "unkC6", + "unkE0" + ], + "suggestion": "Define struct for arg1 with fields: unk166, unk1CE, unk1E8, unk5E, unkC6, unkE0" + } + ], + "timestamp": "2026-04-22T17:10:20.665795" + }, + { + "function_name": "func_8002BFCC", + "file": "src/main/akao.c", + "primary_error": "Local variable 'arg0' is void* but used with -> (m2c struct type inference failure)", + "missing_items": [ + { + "type": "void_pointer_struct", + "parameter_name": "arg1", + "accessed_fields": [ + "unk168", + "unk16A", + "unk1E8", + "unk60", + "unk62", + "unkE0" + ], + "suggestion": "Define struct for arg1 with fields: unk168, unk16A, unk1E8, unk60, unk62, unkE0" + } + ], + "timestamp": "2026-04-22T17:10:23.016527" + }, + { + "function_name": "func_800A92F8", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:10:28.235529" + }, + { + "function_name": "func_800294A4", + "file": "src/main/akao.c", + "primary_error": "Function 'func_800294A4' not found as a definition after decompilation (LLM may have renamed it)", + "missing_items": [], + "timestamp": "2026-04-22T17:10:30.594658" + }, + { + "function_name": "func_800AA32C", + "file": "src/field/field.c", + "primary_error": "Local variable 'var_a0' is void* but used with -> (m2c struct type inference failure)", + "missing_items": [], + "timestamp": "2026-04-22T17:10:33.176556" + }, + { + "function_name": "func_800A8ABC", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:10:35.903269" + }, + { + "function_name": "func_8002BD04", + "file": "src/main/akao.c", + "primary_error": "Local variable 'arg0' is void* but used with -> (m2c struct type inference failure)", + "missing_items": [ + { + "type": "void_pointer_struct", + "parameter_name": "arg1", + "accessed_fields": [ + "unk166", + "unk1CE", + "unk1D0", + "unk5E", + "unkC6", + "unkC8" + ], + "suggestion": "Define struct for arg1 with fields: unk166, unk1CE, unk1D0, unk5E, unkC6, unkC8" + } + ], + "timestamp": "2026-04-22T17:10:40.020054" + }, + { + "function_name": "func_8002C004", + "file": "src/main/akao.c", + "primary_error": "Local variable 'arg0' is void* but used with -> (m2c struct type inference failure)", + "missing_items": [ + { + "type": "void_pointer_struct", + "parameter_name": "arg1", + "accessed_fields": [ + "unk168", + "unk16A", + "unk1D2", + "unk60", + "unk62", + "unkCA" + ], + "suggestion": "Define struct for arg1 with fields: unk168, unk16A, unk1D2, unk60, unk62, unkCA" + } + ], + "timestamp": "2026-04-22T17:10:42.301228" + }, + { + "function_name": "func_800B5DD8", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:10:44.884699" + }, + { + "function_name": "func_8002FDA0", + "file": "src/main/akao.c", + "primary_error": "Local variable 'var_a0' is void* but used with -> (m2c struct type inference failure)", + "missing_items": [], + "timestamp": "2026-04-22T17:10:47.201641" + }, + { + "function_name": "func_80019E4C", + "file": "src/main/18B8.c", + "primary_error": "PSY-Q compilation failed: invalid type argument of `->'; invalid type argument of `->'", + "missing_items": [], + "timestamp": "2026-04-22T17:10:55.144582" + }, + { + "function_name": "func_80018E90", + "file": "src/main/18B8.c", + "primary_error": "Local variable 'temp_v1' is void* but used with -> (m2c struct type inference failure)", + "missing_items": [], + "timestamp": "2026-04-22T17:11:01.209838" + }, + { + "function_name": "func_800A692C", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:11:04.134247" + }, + { + "function_name": "func_800AE024", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:11:06.384239" + }, + { + "function_name": "func_8003345C", + "file": "src/main/akao.c", + "primary_error": "Parameter 'arg0' is void* but accessed as struct (m2c couldn't determine type)", + "missing_items": [ + { + "type": "void_pointer_struct", + "parameter_name": "arg0", + "accessed_fields": [ + "unk0", + "unk4", + "unk56", + "unkC2", + "unkC4" + ], + "suggestion": "Define struct for arg0 with fields: unk0, unk4, unk56, unkC2, unkC4" + } + ], + "timestamp": "2026-04-22T17:11:08.667570" + }, + { + "function_name": "func_800D3474", + "file": "src/battle/battle2.c", + "primary_error": "Contains M2C_ERROR() macro (m2c could not determine register/instruction)", + "missing_items": [], + "timestamp": "2026-04-22T17:11:20.838026" + }, + { + "function_name": "func_80018AB0", + "file": "src/main/18B8.c", + "primary_error": "Local variable 'temp_a2' is void* but used with -> (m2c struct type inference failure)", + "missing_items": [], + "timestamp": "2026-04-22T17:11:21.563068" + }, + { + "function_name": "func_800D3418", + "file": "src/battle/battle2.c", + "primary_error": "Contains M2C_ERROR() macro (m2c could not determine register/instruction)", + "missing_items": [], + "timestamp": "2026-04-22T17:11:22.240422" + }, + { + "function_name": "func_800AB48C", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:11:22.720585" + }, + { + "function_name": "func_800A4F08", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:11:23.201343" + }, + { + "function_name": "ChangeClearSIO", + "file": "src/main/psxsdk.c", + "primary_error": "PSY-Q compilation failed: parse error before `:'", + "missing_items": [], + "timestamp": "2026-04-22T17:11:25.365811" + }, + { + "function_name": "func_80032718", + "file": "src/main/akao.c", + "primary_error": "Parameter 'arg0' is void* but accessed as struct (m2c couldn't determine type)", + "missing_items": [ + { + "type": "void_pointer_struct", + "parameter_name": "arg0", + "accessed_fields": [ + "unk0", + "unk30", + "unk4", + "unk7C", + "unk7E" + ], + "suggestion": "Define struct for arg0 with fields: unk0, unk30, unk4, unk7C, unk7E" + } + ], + "timestamp": "2026-04-22T17:11:25.832218" + }, + { + "function_name": "func_800A993C", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:11:26.271987" + }, + { + "function_name": "func_800A63FC", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:11:26.733929" + }, + { + "function_name": "func_800D32B4", + "file": "src/battle/battle2.c", + "primary_error": "Function 'func_800D32B4' not found as a definition after decompilation (LLM may have renamed it)", + "missing_items": [], + "timestamp": "2026-04-22T17:11:27.391780" + }, + { + "function_name": "func_800D8304", + "file": "src/battle/battle2.c", + "primary_error": "Function 'func_800D8304' not found as a definition after decompilation (LLM may have renamed it)", + "missing_items": [], + "timestamp": "2026-04-22T17:11:29.490271" + }, + { + "function_name": "func_800B2638", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:11:29.950810" + }, + { + "function_name": "func_800D8468", + "file": "src/battle/battle2.c", + "primary_error": "Local variable 'arg0' is void* but used with -> (m2c struct type inference failure)", + "missing_items": [ + { + "type": "void_pointer_struct", + "parameter_name": "arg1", + "accessed_fields": [ + "unk0", + "unk10", + "unk14", + "unk18", + "unk1C", + "unk2", + "unk4", + "unk6", + "unk8", + "unkA", + "unkC", + "unkE" + ], + "suggestion": "Define struct for arg1 with fields: unk0, unk10, unk14, unk18, unk1C, unk2, unk4, unk6, unk8, unkA..." + } + ], + "timestamp": "2026-04-22T17:11:30.671107" + }, + { + "function_name": "func_800D3354", + "file": "src/battle/battle2.c", + "primary_error": "Function 'func_800D3354' not found as a definition after decompilation (LLM may have renamed it)", + "missing_items": [], + "timestamp": "2026-04-22T17:11:32.006894" + }, + { + "function_name": "func_800D83A4", + "file": "src/battle/battle2.c", + "primary_error": "Function 'func_800D83A4' not found as a definition after decompilation (LLM may have renamed it)", + "missing_items": [], + "timestamp": "2026-04-22T17:11:37.239744" + }, + { + "function_name": "func_80031BE4", + "file": "src/main/akao.c", + "primary_error": "Local variable 'temp_a0' is void* but used with -> (m2c struct type inference failure)", + "missing_items": [ + { + "type": "void_pointer_struct", + "parameter_name": "arg1", + "accessed_fields": [ + "unk40", + "unk44", + "unk50" + ], + "suggestion": "Define struct for arg1 with fields: unk40, unk44, unk50" + } + ], + "timestamp": "2026-04-22T17:11:37.685361" + }, + { + "function_name": "__SN_ENTRY_POINT", + "file": "src/main/18B8.c", + "primary_error": "Function '__SN_ENTRY_POINT' not found as a definition after decompilation (LLM may have renamed it)", + "missing_items": [], + "timestamp": "2026-04-22T17:11:38.335041" + }, + { + "function_name": "func_800A5C08", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:11:38.935685" + }, + { + "function_name": "func_8001BA54", + "file": "src/main/18B8.c", + "primary_error": "Local variable 'var_a0' is void* but used with -> (m2c struct type inference failure)", + "missing_items": [], + "timestamp": "2026-04-22T17:11:39.773964" + }, + { + "function_name": "func_800C46A4", + "file": "src/field/field.c", + "primary_error": "Local variable 'var_v0' is a primitive pointer but used with ->unk (m2c struct type inference failure)", + "missing_items": [], + "timestamp": "2026-04-22T17:11:41.931522" + }, + { + "function_name": "func_800D6260", + "file": "src/battle/battle2.c", + "primary_error": "Local variable 'arg0' is void* but used with -> (m2c struct type inference failure)", + "missing_items": [], + "timestamp": "2026-04-22T17:11:42.754437" + }, + { + "function_name": "func_800A91A4", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:11:43.409092" + }, + { + "function_name": "func_800AA098", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:11:47.571592" + }, + { + "function_name": "func_800A98E4", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:11:48.257178" + }, + { + "function_name": "func_800DA444", + "file": "src/field/field.c", + "primary_error": "Parameter 'arg1' is void* but accessed as struct (m2c couldn't determine type)", + "missing_items": [ + { + "type": "void_pointer_struct", + "parameter_name": "arg1", + "accessed_fields": [ + "unk0", + "unk1", + "unk2" + ], + "suggestion": "Define struct for arg1 with fields: unk0, unk1, unk2" + }, + { + "type": "extern_variable", + "name": "D_800E0208", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0208" + } + ], + "timestamp": "2026-04-22T17:11:49.627432" + }, + { + "function_name": "func_800A6B8C", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:11:52.465326" + }, + { + "function_name": "func_800C4C9C", + "file": "src/field/field.c", + "primary_error": "Local variable 'temp_a0' is void* but used with -> (m2c struct type inference failure)", + "missing_items": [], + "timestamp": "2026-04-22T17:11:52.855310" + }, + { + "function_name": "func_800A2088", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:11:53.371059" + }, + { + "function_name": "func_800B7714", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:11:53.881178" + }, + { + "function_name": "func_800B79B8", + "file": "src/world/world.c", + "primary_error": "Function 'func_800B79B8' not found as a definition after decompilation (LLM may have renamed it)", + "missing_items": [], + "timestamp": "2026-04-22T17:11:55.690395" + }, + { + "function_name": "func_800A45D4", + "file": "src/world/world.c", + "primary_error": "Function 'func_800A45D4' not found as a definition after decompilation (LLM may have renamed it)", + "missing_items": [], + "timestamp": "2026-04-22T17:11:56.029319" + }, + { + "function_name": "func_800AA170", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:11:57.210798" + }, + { + "function_name": "func_800A9480", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:11:57.671571" + }, + { + "function_name": "func_800D5774", + "file": "src/battle/battle2.c", + "primary_error": "PSY-Q compilation failed: invalid use of void expression", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800F4CEC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4CEC" + }, + { + "type": "extern_variable", + "name": "D_800F4D2C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4D2C" + } + ], + "timestamp": "2026-04-22T17:12:00.363594" + }, + { + "function_name": "func_800BBA0C", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:00.828475" + }, + { + "function_name": "func_800AA238", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:01.289212" + }, + { + "function_name": "func_80034D2C", + "file": "src/main/psxsdk.c", + "primary_error": "Contains pointer to unknown type '?*'", + "missing_items": [ + { + "type": "extern_variable", + "name": "func_80034E00", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80034E00" + }, + { + "type": "unknown_pointer", + "name": "jtbl_80034D14", + "suggestion": "m2c could not determine type of pointer jtbl_80034D14" + } + ], + "timestamp": "2026-04-22T17:12:01.832148" + }, + { + "function_name": "func_800A1D54", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:02.290977" + }, + { + "function_name": "func_800A8C70", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:04.152673" + }, + { + "function_name": "func_800A9A70", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:04.620708" + }, + { + "function_name": "func_800A9AD0", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:05.067791" + }, + { + "function_name": "func_800BCECC", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:05.511909" + }, + { + "function_name": "func_800ADC70", + "file": "src/world/world.c", + "primary_error": "Function 'func_800ADC70' not found as a definition after decompilation (LLM may have renamed it)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:08.449609" + }, + { + "function_name": "func_800A97A8", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:11.946205" + }, + { + "function_name": "func_800AF1A8", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:12.417376" + }, + { + "function_name": "func_800B57C0", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:12.870573" + }, + { + "function_name": "func_800B2FD0", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:13.320703" + }, + { + "function_name": "func_800A9134", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:15.098406" + }, + { + "function_name": "func_800B579C", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:15.556007" + }, + { + "function_name": "func_800B7838", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:16.005715" + }, + { + "function_name": "func_80034D5C", + "file": "src/main/psxsdk.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "func_80034E00", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80034E00" + }, + { + "type": "unknown_pointer", + "name": "jtbl_80034D14", + "suggestion": "m2c could not determine type of pointer jtbl_80034D14" + }, + { + "type": "unknown_pointer", + "name": "jtbl_80034D14", + "suggestion": "m2c could not determine type of pointer jtbl_80034D14" + } + ], + "timestamp": "2026-04-22T17:12:16.508190" + }, + { + "function_name": "func_800185A8", + "file": "src/main/18B8.c", + "primary_error": "PSY-Q compilation failed: invalid type argument of `->'; invalid type argument of `->'; invalid type argument of `->'", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_80082274", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082274" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80062E53", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80062E53" + } + ], + "timestamp": "2026-04-22T17:12:17.327423" + }, + { + "function_name": "func_800B7B54", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:19.403584" + }, + { + "function_name": "func_800B7B78", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:20.709281" + }, + { + "function_name": "func_800B77F4", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:21.251433" + }, + { + "function_name": "func_800AA1B8", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:21.852420" + }, + { + "function_name": "func_800A94F4", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:23.911474" + }, + { + "function_name": "func_800A9820", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:24.406804" + }, + { + "function_name": "func_800AA04C", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:24.926149" + }, + { + "function_name": "func_800AA2B8", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:25.386418" + }, + { + "function_name": "func_800AA6A4", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:25.845587" + }, + { + "function_name": "func_800AB36C", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:27.630681" + }, + { + "function_name": "func_800A8F48", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:28.077400" + }, + { + "function_name": "func_800A984C", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:28.528166" + }, + { + "function_name": "func_800ADC3C", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:28.984812" + }, + { + "function_name": "func_800A16E0", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:31.763478" + }, + { + "function_name": "func_800A5970", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:32.328594" + }, + { + "function_name": "func_800BB8B0", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:32.769343" + }, + { + "function_name": "func_800A8A88", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:33.988387" + }, + { + "function_name": "func_800AFDE4", + "file": "src/field/field.c", + "primary_error": "Local variable 'var_v1' is a primitive pointer but used with ->unk (m2c struct type inference failure)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:35.976922" + }, + { + "function_name": "func_800B01C4", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:36.420620" + }, + { + "function_name": "func_800B8A5C", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:36.939799" + }, + { + "function_name": "func_800B7BD8", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:37.396788" + }, + { + "function_name": "func_800A97E4", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:37.870768" + }, + { + "function_name": "func_800BB9D0", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:39.451380" + }, + { + "function_name": "func_800AF2A4", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:39.902632" + }, + { + "function_name": "func_800AF324", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:40.358773" + }, + { + "function_name": "func_800AF364", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:40.798540" + }, + { + "function_name": "func_800A8CA4", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:47.428542" + }, + { + "function_name": "func_800B017C", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:47.982327" + }, + { + "function_name": "func_800A5A94", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:50.905700" + }, + { + "function_name": "func_800AA128", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:51.561709" + }, + { + "function_name": "func_800DA480", + "file": "src/field/field.c", + "primary_error": "Parameter 'arg1' is void* but accessed as struct (m2c couldn't determine type)", + "missing_items": [ + { + "type": "void_pointer_struct", + "parameter_name": "arg1", + "accessed_fields": [ + "unk0", + "unk1", + "unk2", + "unk3", + "unk4" + ], + "suggestion": "Define struct for arg1 with fields: unk0, unk1, unk2, unk3, unk4" + }, + { + "type": "extern_variable", + "name": "D_800E08C0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08C0" + }, + { + "type": "extern_variable", + "name": "D_800E0208", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0208" + } + ], + "timestamp": "2026-04-22T17:12:52.013393" + }, + { + "function_name": "func_80026B70", + "file": "src/main/18B8.c", + "primary_error": "Function 'func_80026B70' not found as a definition after decompilation (LLM may have renamed it)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_80082274", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082274" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80069800", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069800" + }, + { + "type": "extern_variable", + "name": "D_8009D890", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D890" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + } + ], + "timestamp": "2026-04-22T17:12:52.710270" + }, + { + "function_name": "func_800A40F0", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:53.261643" + }, + { + "function_name": "func_800AD928", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:55.209177" + }, + { + "function_name": "func_800B37E0", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:55.735399" + }, + { + "function_name": "func_80034DB0", + "file": "src/main/psxsdk.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "func_80034E00", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80034E00" + }, + { + "type": "unknown_pointer", + "name": "jtbl_80034D14", + "suggestion": "m2c could not determine type of pointer jtbl_80034D14" + }, + { + "type": "unknown_pointer", + "name": "jtbl_80034D14", + "suggestion": "m2c could not determine type of pointer jtbl_80034D14" + } + ], + "timestamp": "2026-04-22T17:12:56.268641" + }, + { + "function_name": "func_800B3300", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:56.800595" + }, + { + "function_name": "func_800ADE30", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:57.253579" + }, + { + "function_name": "func_800AA684", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:12:58.805942" + }, + { + "function_name": "func_800B8D20", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:13:00.084334" + }, + { + "function_name": "func_800AF24C", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:13:00.884449" + }, + { + "function_name": "func_800A9988", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:13:03.799160" + }, + { + "function_name": "func_800A2420", + "file": "src/ending/ending.c", + "primary_error": "Local variable 'D_80075D00' is void* but used with -> (m2c struct type inference failure)", + "missing_items": [], + "timestamp": "2026-04-22T17:13:04.241332" + }, + { + "function_name": "func_800D51D4", + "file": "src/battle/battle2.c", + "primary_error": "PSY-Q compilation failed: request for member `unkC' in something not a structure or union; request for member `unk4' in something not a structure or union", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800F4CEC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4CEC" + }, + { + "type": "extern_variable", + "name": "D_800F4D2C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4D2C" + } + ], + "timestamp": "2026-04-22T17:13:05.167743" + }, + { + "function_name": "func_800A8300", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:13:05.663291" + }, + { + "function_name": "func_800AF1E8", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:13:06.113053" + }, + { + "function_name": "func_800AA688", + "file": "src/battle/battle.c", + "primary_error": "PSY-Q compilation failed: invalid operands to binary &", + "missing_items": [], + "timestamp": "2026-04-22T17:13:07.818379" + }, + { + "function_name": "func_80032E6C", + "file": "src/main/akao.c", + "primary_error": "Parameter 'arg0' is void* but accessed as struct (m2c couldn't determine type)", + "missing_items": [ + { + "type": "void_pointer_struct", + "parameter_name": "arg0", + "accessed_fields": [ + "unk0", + "unk24", + "unk38", + "unk4", + "unkE0", + "unkFC" + ], + "suggestion": "Define struct for arg0 with fields: unk0, unk24, unk38, unk4, unkE0, unkFC" + }, + { + "type": "extern_variable", + "name": "D_80096704", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80096704" + } + ], + "timestamp": "2026-04-22T17:13:08.399644" + }, + { + "function_name": "func_800B338C", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:13:09.085526" + }, + { + "function_name": "func_8001937C", + "file": "src/main/18B8.c", + "primary_error": "PSY-Q compilation failed: request for member `unk38' in something not a structure or union; request for member `unk38' in something not a structure or union; request for member `unk38' in something not a structure or union", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_80082274", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082274" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80069800", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069800" + }, + { + "type": "extern_variable", + "name": "D_8009D890", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D890" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + }, + { + "type": "extern_variable", + "name": "D_800730DE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800730DE" + } + ], + "timestamp": "2026-04-22T17:13:10.032318" + }, + { + "function_name": "func_800A91E0", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:13:10.572215" + }, + { + "function_name": "func_80025040", + "file": "src/main/18B8.c", + "primary_error": "PSY-Q compilation failed: incompatible types in assignment", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_80082274", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082274" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80069800", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069800" + }, + { + "type": "extern_variable", + "name": "D_8009D890", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D890" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + } + ], + "timestamp": "2026-04-22T17:13:13.054198" + }, + { + "function_name": "func_800D09D0", + "file": "src/battle/battle2.c", + "primary_error": "PSY-Q compilation failed: invalid type argument of `->'; invalid type argument of `->'", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800F4CEC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4CEC" + }, + { + "type": "extern_variable", + "name": "D_800F4D2C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4D2C" + }, + { + "type": "extern_variable", + "name": "D_800F8384", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F8384" + }, + { + "type": "extern_variable", + "name": "D_800F9984", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9984" + }, + { + "type": "extern_variable", + "name": "D_801679BC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801679BC" + } + ], + "timestamp": "2026-04-22T17:13:13.937253" + }, + { + "function_name": "func_800B6E08", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:13:14.453028" + }, + { + "function_name": "func_800D0958", + "file": "src/battle/battle2.c", + "primary_error": "PSY-Q compilation failed: invalid type argument of `->'; invalid type argument of `->'", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800F4CEC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4CEC" + }, + { + "type": "extern_variable", + "name": "D_800F4D2C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4D2C" + }, + { + "type": "extern_variable", + "name": "D_800F8384", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F8384" + }, + { + "type": "extern_variable", + "name": "D_800F9984", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9984" + }, + { + "type": "extern_variable", + "name": "D_801679BC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801679BC" + } + ], + "timestamp": "2026-04-22T17:13:15.354672" + }, + { + "function_name": "func_800A5A20", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:13:17.179054" + }, + { + "function_name": "func_800B1C1C", + "file": "src/battle/battle.c", + "primary_error": "PSY-Q compilation failed: invalid type argument of `->'", + "missing_items": [], + "timestamp": "2026-04-22T17:13:18.111941" + }, + { + "function_name": "func_800A59A0", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:13:18.686867" + }, + { + "function_name": "func_800A8898", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:13:22.157131" + }, + { + "function_name": "func_800AA7DC", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:13:22.708483" + }, + { + "function_name": "func_800B5AAC", + "file": "src/battle/battle1.c", + "primary_error": "PSY-Q compilation failed: incompatible types in assignment", + "missing_items": [], + "timestamp": "2026-04-22T17:13:24.666443" + }, + { + "function_name": "func_800A0B48", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:13:25.287943" + }, + { + "function_name": "func_800B392C", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:13:25.828275" + }, + { + "function_name": "func_800B8CBC", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:13:26.361933" + }, + { + "function_name": "func_800A60D8", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:13:26.841492" + }, + { + "function_name": "func_800B8A98", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:13:28.253474" + }, + { + "function_name": "func_800A9064", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:13:28.700332" + }, + { + "function_name": "func_80036100", + "file": "src/main/psxsdk.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "func_80034E00", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80034E00" + }, + { + "type": "unknown_pointer", + "name": "jtbl_80034D14", + "suggestion": "m2c could not determine type of pointer jtbl_80034D14" + }, + { + "type": "unknown_pointer", + "name": "jtbl_80034D14", + "suggestion": "m2c could not determine type of pointer jtbl_80034D14" + } + ], + "timestamp": "2026-04-22T17:13:29.197159" + }, + { + "function_name": "func_8001BB30", + "file": "src/main/18B8.c", + "primary_error": "PSY-Q compilation failed: invalid type argument of `->'; invalid type argument of `->'; invalid type argument of `->'", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_80082274", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082274" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80069800", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069800" + }, + { + "type": "extern_variable", + "name": "D_8009D890", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D890" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + }, + { + "type": "extern_variable", + "name": "D_80069508", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069508" + }, + { + "type": "extern_variable", + "name": "D_80069509", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069509" + }, + { + "type": "extern_variable", + "name": "D_8006950A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8006950A" + }, + { + "type": "extern_variable", + "name": "D_800707C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800707C4" + }, + { + "type": "extern_variable", + "name": "D_800707C5", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800707C5" + } + ], + "timestamp": "2026-04-22T17:13:36.641058" + }, + { + "function_name": "func_800D5230", + "file": "src/battle/battle2.c", + "primary_error": "PSY-Q compilation failed: structure has no member named `unk4'; structure has no member named `unk4'", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800F4CEC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4CEC" + }, + { + "type": "extern_variable", + "name": "D_800F4D2C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4D2C" + } + ], + "timestamp": "2026-04-22T17:13:37.752414" + }, + { + "function_name": "func_800150E4", + "file": "src/main/18B8.c", + "primary_error": "Local variable 'temp_a3' is void* but used with -> (m2c struct type inference failure)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_80082274", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082274" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80069800", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069800" + }, + { + "type": "extern_variable", + "name": "D_8009D890", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D890" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + }, + { + "type": "extern_variable", + "name": "D_80063560", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80063560" + }, + { + "type": "unknown_pointer", + "name": "var_a3", + "suggestion": "m2c could not determine type of pointer var_a3" + } + ], + "timestamp": "2026-04-22T17:13:39.762930" + }, + { + "function_name": "func_8002C6C8", + "file": "src/main/akao.c", + "primary_error": "Parameter 'arg0' is void* but accessed as struct (m2c couldn't determine type)", + "missing_items": [ + { + "type": "void_pointer_struct", + "parameter_name": "arg0", + "accessed_fields": [ + "unk4", + "unk8" + ], + "suggestion": "Define struct for arg0 with fields: unk4, unk8" + } + ], + "timestamp": "2026-04-22T17:13:42.949673" + }, + { + "function_name": "func_800B667C", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:13:43.529968" + }, + { + "function_name": "func_800B089C", + "file": "src/battle/battle.c", + "primary_error": "PSY-Q compilation failed: conflicting types for `func_800B089C'; previous declaration of `func_800B089C'", + "missing_items": [], + "timestamp": "2026-04-22T17:13:44.493092" + }, + { + "function_name": "func_800C2130", + "file": "src/world/world2.c", + "primary_error": "Local variable 'arg0' is void* but used with -> (m2c struct type inference failure)", + "missing_items": [ + { + "type": "void_pointer_struct", + "parameter_name": "arg0", + "accessed_fields": [ + "unk0", + "unk3", + "unk4", + "unk6", + "unk8", + "unkC" + ], + "suggestion": "Define struct for arg0 with fields: unk0, unk3, unk4, unk6, unk8, unkC" + } + ], + "timestamp": "2026-04-22T17:13:46.211066" + }, + { + "function_name": "func_800A52A4", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:13:48.192298" + }, + { + "function_name": "func_800B1624", + "file": "src/battle/battle.c", + "primary_error": "PSY-Q compilation failed: request for member `unk8' in something not a structure or union; request for member `unk8' in something not a structure or union; request for member `unk7C' in something not a structure or union", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800708C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C4" + } + ], + "timestamp": "2026-04-22T17:13:49.221770" + }, + { + "function_name": "func_800BCA78", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:13:49.860631" + }, + { + "function_name": "func_800BCB2C", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:13:50.497585" + }, + { + "function_name": "func_800B17F0", + "file": "src/battle/battle.c", + "primary_error": "PSY-Q compilation failed: request for member `unk8' in something not a structure or union; request for member `unk8' in something not a structure or union; request for member `unk7C' in something not a structure or union", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800708C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C4" + } + ], + "timestamp": "2026-04-22T17:13:51.482364" + }, + { + "function_name": "func_800B1C94", + "file": "src/battle/battle.c", + "primary_error": "PSY-Q compilation failed: invalid type argument of `->'; invalid type argument of `->'; invalid type argument of `->'", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800708C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C4" + } + ], + "timestamp": "2026-04-22T17:13:53.747430" + }, + { + "function_name": "func_800A3210", + "file": "src/ending/ending.c", + "primary_error": "Local variable 'var_s0' is void* but used with -> (m2c struct type inference failure)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800A652C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A652C" + } + ], + "timestamp": "2026-04-22T17:13:57.258014" + }, + { + "function_name": "func_800A31F8", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:13:57.876954" + }, + { + "function_name": "func_801D01C4", + "file": "src/menu/bginmenu.c", + "primary_error": "PSY-Q compilation failed: invalid operands to binary +; invalid operands to binary +", + "missing_items": [], + "timestamp": "2026-04-22T17:13:58.641832" + }, + { + "function_name": "func_800ADA64", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:13:59.273763" + }, + { + "function_name": "func_800B89C4", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:14:01.040210" + }, + { + "function_name": "func_800BB568", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:14:02.863796" + }, + { + "function_name": "func_800B1B64", + "file": "src/battle/battle.c", + "primary_error": "PSY-Q compilation failed: request for member `unkC' in something not a structure or union; request for member `unk2C' in something not a structure or union; request for member `unk54' in something not a structure or union", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800708C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C4" + } + ], + "timestamp": "2026-04-22T17:14:03.914334" + }, + { + "function_name": "func_800AB5E4", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:14:04.614855" + }, + { + "function_name": "func_800BB350", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:14:08.439015" + }, + { + "function_name": "func_800A44C4", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:14:09.013480" + }, + { + "function_name": "func_800B1AA0", + "file": "src/battle/battle.c", + "primary_error": "PSY-Q compilation failed: request for member `unkC' in something not a structure or union; request for member `unk2C' in something not a structure or union; request for member `unk54' in something not a structure or union", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800708C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C4" + } + ], + "timestamp": "2026-04-22T17:14:09.977621" + }, + { + "function_name": "func_800BB450", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:14:10.746061" + }, + { + "function_name": "func_800A4DDC", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:14:12.927959" + }, + { + "function_name": "func_8001FCDC", + "file": "src/main/18B8.c", + "primary_error": "Function 'func_8001FCDC' not found as a definition after decompilation (LLM may have renamed it)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_80082274", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082274" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80069800", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069800" + }, + { + "type": "extern_variable", + "name": "D_8009D890", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D890" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + } + ], + "timestamp": "2026-04-22T17:14:14.845145" + }, + { + "function_name": "func_800AF874", + "file": "src/battle/battle.c", + "primary_error": "PSY-Q compilation failed: invalid operands to binary &", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800708C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C4" + } + ], + "timestamp": "2026-04-22T17:14:16.031592" + }, + { + "function_name": "func_800BC04C", + "file": "src/battle/battle1.c", + "primary_error": "PSY-Q compilation failed: conflicting types for `func_800BC04C'; previous declaration of `func_800BC04C'; void value not ignored as it ought to be", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80163B84", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80163B84" + } + ], + "timestamp": "2026-04-22T17:14:19.519193" + }, + { + "function_name": "func_800A9520", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:14:20.266536" + }, + { + "function_name": "func_8002DA7C", + "file": "src/main/akao.c", + "primary_error": "Local variable 'temp_s0' is void* but used with -> (m2c struct type inference failure)", + "missing_items": [], + "timestamp": "2026-04-22T17:14:21.279726" + }, + { + "function_name": "func_800C64D4", + "file": "src/battle/battle1.c", + "primary_error": "PSY-Q compilation failed: invalid operands to binary ==", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80151780", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151780" + } + ], + "timestamp": "2026-04-22T17:14:22.526904" + }, + { + "function_name": "func_800A9B04", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:14:23.429855" + }, + { + "function_name": "func_800C6628", + "file": "src/battle/battle1.c", + "primary_error": "PSY-Q compilation failed: invalid operands to binary ==", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80151780", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151780" + } + ], + "timestamp": "2026-04-22T17:14:25.964958" + }, + { + "function_name": "func_800AE0BC", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:14:26.731458" + }, + { + "function_name": "func_800A4430", + "file": "src/field/field.c", + "primary_error": "PSY-Q compilation failed: default label not within a switch statement", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800E08C0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08C0" + } + ], + "timestamp": "2026-04-22T17:14:28.497203" + }, + { + "function_name": "func_800318BC", + "file": "src/main/akao.c", + "primary_error": "Function 'func_800318BC' not found as a definition after decompilation (LLM may have renamed it)", + "missing_items": [], + "timestamp": "2026-04-22T17:14:29.035390" + }, + { + "function_name": "func_800D415C", + "file": "src/battle/battle2.c", + "primary_error": "Local variable 'arg1' is void* but used with -> (m2c struct type inference failure)", + "missing_items": [ + { + "type": "void_pointer_struct", + "parameter_name": "arg1", + "accessed_fields": [ + "unk0", + "unk4" + ], + "suggestion": "Define struct for arg1 with fields: unk0, unk4" + }, + { + "type": "extern_variable", + "name": "D_800F4CEC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4CEC" + }, + { + "type": "extern_variable", + "name": "D_800F4D2C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4D2C" + }, + { + "type": "unaligned_cast", + "cast_type": "s32", + "suggestion": "Unaligned access to s32 - may need struct packing or alignment fix" + } + ], + "timestamp": "2026-04-22T17:14:34.187436" + }, + { + "function_name": "func_80036298", + "file": "src/main/psxsdk.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "func_80034E00", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80034E00" + }, + { + "type": "unknown_pointer", + "name": "jtbl_80034D14", + "suggestion": "m2c could not determine type of pointer jtbl_80034D14" + }, + { + "type": "unknown_pointer", + "name": "jtbl_80034D14", + "suggestion": "m2c could not determine type of pointer jtbl_80034D14" + } + ], + "timestamp": "2026-04-22T17:14:34.860742" + }, + { + "function_name": "func_800D61AC", + "file": "src/battle/battle2.c", + "primary_error": "Contains unknown parameter type '?'", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800F4CEC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4CEC" + }, + { + "type": "extern_variable", + "name": "D_800F4D2C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4D2C" + } + ], + "timestamp": "2026-04-22T17:14:35.856396" + }, + { + "function_name": "func_800293F4", + "file": "src/main/akao.c", + "primary_error": "Contains function declaration with unknown return type '?'", + "missing_items": [ + { + "type": "extern_function", + "name": "SpuSetTransferCallback", + "return_type": "unknown", + "parameters": "?*", + "suggestion": "Define proper signature for SpuSetTransferCallback in header" + }, + { + "type": "extern_variable", + "name": "func_800293D0", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800293D0" + } + ], + "timestamp": "2026-04-22T17:14:36.560832" + }, + { + "function_name": "func_80015668", + "file": "src/main/18B8.c", + "primary_error": "Contains pointer to unknown type '?*'", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_80082274", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082274" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80069800", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069800" + }, + { + "type": "extern_variable", + "name": "D_8009D890", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D890" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + }, + { + "type": "extern_variable", + "name": "D_80075D24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D24" + }, + { + "type": "extern_variable", + "name": "D_80075D28", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D28" + }, + { + "type": "extern_variable", + "name": "D_80075DE8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075DE8" + }, + { + "type": "extern_variable", + "name": "D_8009D7E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E4" + }, + { + "type": "extern_variable", + "name": "D_8009D7E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E8" + }, + { + "type": "extern_variable", + "name": "D_8009D7EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7EC" + }, + { + "type": "extern_variable", + "name": "D_8009D7ED", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7ED" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T17:14:37.695173" + }, + { + "function_name": "func_80029464", + "file": "src/main/akao.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "SpuSetTransferCallback", + "return_type": "unknown", + "parameters": "?*", + "suggestion": "Define proper signature for SpuSetTransferCallback in header" + }, + { + "type": "extern_variable", + "name": "func_800293D0", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800293D0" + } + ], + "timestamp": "2026-04-22T17:14:39.425155" + }, + { + "function_name": "func_80016340", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_80082274", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082274" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80069800", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069800" + }, + { + "type": "extern_variable", + "name": "D_8009D890", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D890" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + }, + { + "type": "extern_variable", + "name": "D_80075D24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D24" + }, + { + "type": "extern_variable", + "name": "D_80075D28", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D28" + }, + { + "type": "extern_variable", + "name": "D_80075DE8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075DE8" + }, + { + "type": "extern_variable", + "name": "D_8009D7E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E4" + }, + { + "type": "extern_variable", + "name": "D_8009D7E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E8" + }, + { + "type": "extern_variable", + "name": "D_8009D7EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7EC" + }, + { + "type": "extern_variable", + "name": "D_8009D7ED", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7ED" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T17:14:40.211257" + }, + { + "function_name": "func_800A3908", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:14:41.053918" + }, + { + "function_name": "func_800B86E8", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:14:41.818840" + }, + { + "function_name": "func_800293D0", + "file": "src/main/akao.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "SpuSetTransferCallback", + "return_type": "unknown", + "parameters": "?*", + "suggestion": "Define proper signature for SpuSetTransferCallback in header" + }, + { + "type": "extern_variable", + "name": "func_800293D0", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800293D0" + } + ], + "timestamp": "2026-04-22T17:14:42.461138" + }, + { + "function_name": "func_8001C0EC", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_80082274", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082274" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80069800", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069800" + }, + { + "type": "extern_variable", + "name": "D_8009D890", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D890" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + }, + { + "type": "extern_variable", + "name": "D_80075D24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D24" + }, + { + "type": "extern_variable", + "name": "D_80075D28", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D28" + }, + { + "type": "extern_variable", + "name": "D_80075DE8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075DE8" + }, + { + "type": "extern_variable", + "name": "D_8009D7E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E4" + }, + { + "type": "extern_variable", + "name": "D_8009D7E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E8" + }, + { + "type": "extern_variable", + "name": "D_8009D7EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7EC" + }, + { + "type": "extern_variable", + "name": "D_8009D7ED", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7ED" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T17:14:44.432773" + }, + { + "function_name": "func_8001AEE4", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_80082274", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082274" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80069800", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069800" + }, + { + "type": "extern_variable", + "name": "D_8009D890", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D890" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + }, + { + "type": "extern_variable", + "name": "D_80075D24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D24" + }, + { + "type": "extern_variable", + "name": "D_80075D28", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D28" + }, + { + "type": "extern_variable", + "name": "D_80075DE8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075DE8" + }, + { + "type": "extern_variable", + "name": "D_8009D7E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E4" + }, + { + "type": "extern_variable", + "name": "D_8009D7E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E8" + }, + { + "type": "extern_variable", + "name": "D_8009D7EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7EC" + }, + { + "type": "extern_variable", + "name": "D_8009D7ED", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7ED" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T17:14:45.348952" + }, + { + "function_name": "func_800AE180", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:14:46.089750" + }, + { + "function_name": "func_800AB728", + "file": "src/field/field.c", + "primary_error": "Contains pointer to unknown type '?*'", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800E08C0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08C0" + }, + { + "type": "extern_variable", + "name": "D_80074EB0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB0" + }, + { + "type": "extern_variable", + "name": "D_80074EB4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB4" + }, + { + "type": "extern_variable", + "name": "D_80074EB8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB8" + }, + { + "type": "extern_variable", + "name": "D_800E0638", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0638" + }, + { + "type": "extern_variable", + "name": "D_800E42D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42D8" + }, + { + "type": "extern_variable", + "name": "D_800E42DA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DA" + }, + { + "type": "extern_variable", + "name": "D_800E42DC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DC" + }, + { + "type": "extern_variable", + "name": "D_800E42E0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E0" + }, + { + "type": "extern_variable", + "name": "D_800E42E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E4" + }, + { + "type": "extern_variable", + "name": "D_800E42E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E8" + }, + { + "type": "extern_variable", + "name": "D_800E42EA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EA" + }, + { + "type": "extern_variable", + "name": "D_800E42EE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EE" + }, + { + "type": "extern_variable", + "name": "D_800E48E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48E8" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-22T17:14:46.871473" + }, + { + "function_name": "func_800A2888", + "file": "src/ending/ending.c", + "primary_error": "Contains function declaration with unknown return type '?'", + "missing_items": [ + { + "type": "extern_function", + "name": "GetTPage", + "return_type": "s16", + "parameters": "s32, ?, s16, s16", + "suggestion": "Define proper signature for GetTPage in header" + }, + { + "type": "extern_function", + "name": "LoadImage", + "return_type": "unknown", + "parameters": "void*, s32", + "suggestion": "Define proper signature for LoadImage in header" + }, + { + "type": "extern_function", + "name": "OpenTIM", + "return_type": "unknown", + "parameters": "", + "suggestion": "Define proper signature for OpenTIM in header" + }, + { + "type": "extern_function", + "name": "ReadTIM", + "return_type": "unknown", + "parameters": "s32*", + "suggestion": "Define proper signature for ReadTIM in header" + }, + { + "type": "extern_variable", + "name": "D_800A652C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A652C" + } + ], + "timestamp": "2026-04-22T17:14:47.547113" + }, + { + "function_name": "func_800AEB80", + "file": "src/battle/battle.c", + "primary_error": "Contains unknown parameter type '?'", + "missing_items": [ + { + "type": "extern_function", + "name": "func_800AF834", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_800AF834 in header" + }, + { + "type": "extern_variable", + "name": "D_800708C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C4" + } + ], + "timestamp": "2026-04-22T17:14:49.848033" + }, + { + "function_name": "func_800D3A6C", + "file": "src/battle/battle2.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800F4CEC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4CEC" + }, + { + "type": "extern_variable", + "name": "D_800F4D2C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4D2C" + } + ], + "timestamp": "2026-04-22T17:14:50.664772" + }, + { + "function_name": "func_800A66A4", + "file": "src/battle/battle.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_800AF834", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_800AF834 in header" + }, + { + "type": "extern_variable", + "name": "D_800708C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C4" + } + ], + "timestamp": "2026-04-22T17:14:51.597592" + }, + { + "function_name": "func_800D41FC", + "file": "src/battle/battle2.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800F4CEC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4CEC" + }, + { + "type": "extern_variable", + "name": "D_800F4D2C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4D2C" + } + ], + "timestamp": "2026-04-22T17:14:52.465177" + }, + { + "function_name": "func_800D491C", + "file": "src/battle/battle2.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800F4CEC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4CEC" + }, + { + "type": "extern_variable", + "name": "D_800F4D2C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4D2C" + } + ], + "timestamp": "2026-04-22T17:14:53.364866" + }, + { + "function_name": "func_800E1C40", + "file": "src/battle/battle3.c", + "primary_error": "PSY-Q compilation failed: request for member `unk0' in something not a structure or union; request for member `unk2' in something not a structure or union; request for member `unk0' in something not a structure or union", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800F32C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F32C4" + }, + { + "type": "extern_variable", + "name": "D_801031F4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801031F4" + }, + { + "type": "extern_variable", + "name": "D_80151688", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80151688" + }, + { + "type": "extern_variable", + "name": "D_801516A4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801516A4" + }, + { + "type": "extern_variable", + "name": "D_801516CC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801516CC" + }, + { + "type": "extern_variable", + "name": "D_8015174C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8015174C" + }, + { + "type": "extern_variable", + "name": "D_8015178C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8015178C" + }, + { + "type": "extern_variable", + "name": "D_801517C8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801517C8" + }, + { + "type": "extern_variable", + "name": "D_8015187C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8015187C" + } + ], + "timestamp": "2026-04-22T17:14:55.993682" + }, + { + "function_name": "func_800C1490", + "file": "src/world/world2.c", + "primary_error": "Local variable 'arg0' is void* but used with -> (m2c struct type inference failure)", + "missing_items": [ + { + "type": "void_pointer_struct", + "parameter_name": "arg1", + "accessed_fields": [ + "unk0", + "unk10", + "unk14", + "unk18", + "unk1C", + "unk4", + "unk8", + "unkC" + ], + "suggestion": "Define struct for arg1 with fields: unk0, unk10, unk14, unk18, unk1C, unk4, unk8, unkC" + }, + { + "type": "extern_variable", + "name": "D_800C7538", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800C7538" + } + ], + "timestamp": "2026-04-22T17:14:56.966711" + }, + { + "function_name": "func_800BCBE8", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:14:57.551583" + }, + { + "function_name": "func_800BBBB0", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:14:58.133190" + }, + { + "function_name": "func_800A2E80", + "file": "src/ending/ending.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "GetTPage", + "return_type": "s16", + "parameters": "s32, ?, s16, s16", + "suggestion": "Define proper signature for GetTPage in header" + }, + { + "type": "extern_function", + "name": "LoadImage", + "return_type": "unknown", + "parameters": "void*, s32", + "suggestion": "Define proper signature for LoadImage in header" + }, + { + "type": "extern_function", + "name": "OpenTIM", + "return_type": "unknown", + "parameters": "", + "suggestion": "Define proper signature for OpenTIM in header" + }, + { + "type": "extern_function", + "name": "ReadTIM", + "return_type": "unknown", + "parameters": "s32*", + "suggestion": "Define proper signature for ReadTIM in header" + }, + { + "type": "extern_variable", + "name": "D_800A652C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A652C" + } + ], + "timestamp": "2026-04-22T17:14:58.635553" + }, + { + "function_name": "func_800C3948", + "file": "src/world/world2.c", + "primary_error": "Local variable 'arg0' is void* but used with -> (m2c struct type inference failure)", + "missing_items": [ + { + "type": "void_pointer_struct", + "parameter_name": "arg0", + "accessed_fields": [ + "unk18", + "unk4", + "unk8", + "unkE" + ], + "suggestion": "Define struct for arg0 with fields: unk18, unk4, unk8, unkE" + }, + { + "type": "extern_variable", + "name": "D_800C7938", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800C7938" + } + ], + "timestamp": "2026-04-22T17:15:00.718376" + }, + { + "function_name": "func_800B11C4", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:15:01.275555" + }, + { + "function_name": "func_800C6104", + "file": "src/world/world2.c", + "primary_error": "Contains M2C_ERROR() macro (m2c could not determine register/instruction)", + "missing_items": [ + { + "type": "void_pointer_struct", + "parameter_name": "arg0", + "accessed_fields": [ + "unk16", + "unk1C", + "unk4", + "unk8" + ], + "suggestion": "Define struct for arg0 with fields: unk16, unk1C, unk4, unk8" + }, + { + "type": "extern_variable", + "name": "D_800C7938", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800C7938" + } + ], + "timestamp": "2026-04-22T17:15:02.099765" + }, + { + "function_name": "func_800ABF0C", + "file": "src/field/field.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800E08C0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08C0" + }, + { + "type": "extern_variable", + "name": "D_80074EB0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB0" + }, + { + "type": "extern_variable", + "name": "D_80074EB4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB4" + }, + { + "type": "extern_variable", + "name": "D_80074EB8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB8" + }, + { + "type": "extern_variable", + "name": "D_800E0638", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0638" + }, + { + "type": "extern_variable", + "name": "D_800E42D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42D8" + }, + { + "type": "extern_variable", + "name": "D_800E42DA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DA" + }, + { + "type": "extern_variable", + "name": "D_800E42DC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DC" + }, + { + "type": "extern_variable", + "name": "D_800E42E0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E0" + }, + { + "type": "extern_variable", + "name": "D_800E42E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E4" + }, + { + "type": "extern_variable", + "name": "D_800E42E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E8" + }, + { + "type": "extern_variable", + "name": "D_800E42EA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EA" + }, + { + "type": "extern_variable", + "name": "D_800E42EE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EE" + }, + { + "type": "extern_variable", + "name": "D_800E48E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48E8" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-22T17:15:02.590484" + }, + { + "function_name": "func_800A0C54", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:15:03.159265" + }, + { + "function_name": "func_800D84F8", + "file": "src/battle/battle2.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800F4CEC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4CEC" + }, + { + "type": "extern_variable", + "name": "D_800F4D2C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4D2C" + } + ], + "timestamp": "2026-04-22T17:15:07.452522" + }, + { + "function_name": "func_800B153C", + "file": "src/battle/battle.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_800AF834", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_800AF834 in header" + }, + { + "type": "extern_variable", + "name": "D_800708C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C4" + } + ], + "timestamp": "2026-04-22T17:15:08.106521" + }, + { + "function_name": "func_800B58F8", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:15:08.815420" + }, + { + "function_name": "func_800B0F04", + "file": "src/battle/battle.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_800AF834", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_800AF834 in header" + }, + { + "type": "extern_variable", + "name": "D_800708C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C4" + } + ], + "timestamp": "2026-04-22T17:15:09.584482" + }, + { + "function_name": "func_8002E23C", + "file": "src/main/akao.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "SpuSetTransferCallback", + "return_type": "unknown", + "parameters": "?*", + "suggestion": "Define proper signature for SpuSetTransferCallback in header" + }, + { + "type": "extern_variable", + "name": "func_800293D0", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800293D0" + } + ], + "timestamp": "2026-04-22T17:15:10.174490" + }, + { + "function_name": "func_80034CAC", + "file": "src/main/psxsdk.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "func_80034E00", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80034E00" + }, + { + "type": "unknown_pointer", + "name": "jtbl_80034D14", + "suggestion": "m2c could not determine type of pointer jtbl_80034D14" + }, + { + "type": "unknown_pointer", + "name": "jtbl_80034D14", + "suggestion": "m2c could not determine type of pointer jtbl_80034D14" + } + ], + "timestamp": "2026-04-22T17:15:11.711588" + }, + { + "function_name": "func_800C1394", + "file": "src/battle/battle1.c", + "primary_error": "Contains '?' type in cast expression (m2c type inference failure)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800EA470", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800EA470" + } + ], + "timestamp": "2026-04-22T17:15:12.716351" + }, + { + "function_name": "func_800AF3AC", + "file": "src/battle/battle.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_800AF834", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_800AF834 in header" + }, + { + "type": "extern_variable", + "name": "D_800708C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C4" + } + ], + "timestamp": "2026-04-22T17:15:13.450974" + }, + { + "function_name": "func_8001FA28", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_80082274", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082274" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80069800", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069800" + }, + { + "type": "extern_variable", + "name": "D_8009D890", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D890" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + }, + { + "type": "extern_variable", + "name": "D_80075D24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D24" + }, + { + "type": "extern_variable", + "name": "D_80075D28", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D28" + }, + { + "type": "extern_variable", + "name": "D_80075DE8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075DE8" + }, + { + "type": "extern_variable", + "name": "D_8009D7E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E4" + }, + { + "type": "extern_variable", + "name": "D_8009D7E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E8" + }, + { + "type": "extern_variable", + "name": "D_8009D7EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7EC" + }, + { + "type": "extern_variable", + "name": "D_8009D7ED", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7ED" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T17:15:14.161587" + }, + { + "function_name": "func_800A1498", + "file": "src/field/field.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800E08C0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08C0" + }, + { + "type": "extern_variable", + "name": "D_80074EB0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB0" + }, + { + "type": "extern_variable", + "name": "D_80074EB4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB4" + }, + { + "type": "extern_variable", + "name": "D_80074EB8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB8" + }, + { + "type": "extern_variable", + "name": "D_800E0638", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0638" + }, + { + "type": "extern_variable", + "name": "D_800E42D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42D8" + }, + { + "type": "extern_variable", + "name": "D_800E42DA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DA" + }, + { + "type": "extern_variable", + "name": "D_800E42DC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DC" + }, + { + "type": "extern_variable", + "name": "D_800E42E0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E0" + }, + { + "type": "extern_variable", + "name": "D_800E42E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E4" + }, + { + "type": "extern_variable", + "name": "D_800E42E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E8" + }, + { + "type": "extern_variable", + "name": "D_800E42EA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EA" + }, + { + "type": "extern_variable", + "name": "D_800E42EE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EE" + }, + { + "type": "extern_variable", + "name": "D_800E48E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48E8" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-22T17:15:14.746489" + }, + { + "function_name": "func_800C3DE4", + "file": "src/battle/battle1.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800EA470", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800EA470" + } + ], + "timestamp": "2026-04-22T17:15:16.455460" + }, + { + "function_name": "func_800DA124", + "file": "src/field/field.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800E08C0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08C0" + }, + { + "type": "extern_variable", + "name": "D_80074EB0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB0" + }, + { + "type": "extern_variable", + "name": "D_80074EB4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB4" + }, + { + "type": "extern_variable", + "name": "D_80074EB8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB8" + }, + { + "type": "extern_variable", + "name": "D_800E0638", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0638" + }, + { + "type": "extern_variable", + "name": "D_800E42D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42D8" + }, + { + "type": "extern_variable", + "name": "D_800E42DA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DA" + }, + { + "type": "extern_variable", + "name": "D_800E42DC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DC" + }, + { + "type": "extern_variable", + "name": "D_800E42E0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E0" + }, + { + "type": "extern_variable", + "name": "D_800E42E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E4" + }, + { + "type": "extern_variable", + "name": "D_800E42E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E8" + }, + { + "type": "extern_variable", + "name": "D_800E42EA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EA" + }, + { + "type": "extern_variable", + "name": "D_800E42EE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EE" + }, + { + "type": "extern_variable", + "name": "D_800E48E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48E8" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-22T17:15:17.051887" + }, + { + "function_name": "func_8001FA68", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_80082274", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082274" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80069800", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069800" + }, + { + "type": "extern_variable", + "name": "D_8009D890", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D890" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + }, + { + "type": "extern_variable", + "name": "D_80075D24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D24" + }, + { + "type": "extern_variable", + "name": "D_80075D28", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D28" + }, + { + "type": "extern_variable", + "name": "D_80075DE8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075DE8" + }, + { + "type": "extern_variable", + "name": "D_8009D7E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E4" + }, + { + "type": "extern_variable", + "name": "D_8009D7E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E8" + }, + { + "type": "extern_variable", + "name": "D_8009D7EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7EC" + }, + { + "type": "extern_variable", + "name": "D_8009D7ED", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7ED" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T17:15:17.797559" + }, + { + "function_name": "func_800A1FAC", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:15:18.450330" + }, + { + "function_name": "func_80024A04", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_80082274", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082274" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80069800", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069800" + }, + { + "type": "extern_variable", + "name": "D_8009D890", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D890" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + }, + { + "type": "extern_variable", + "name": "D_80075D24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D24" + }, + { + "type": "extern_variable", + "name": "D_80075D28", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D28" + }, + { + "type": "extern_variable", + "name": "D_80075DE8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075DE8" + }, + { + "type": "extern_variable", + "name": "D_8009D7E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E4" + }, + { + "type": "extern_variable", + "name": "D_8009D7E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E8" + }, + { + "type": "extern_variable", + "name": "D_8009D7EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7EC" + }, + { + "type": "extern_variable", + "name": "D_8009D7ED", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7ED" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T17:15:19.213706" + }, + { + "function_name": "func_800D70C0", + "file": "src/battle/battle2.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800F4CEC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4CEC" + }, + { + "type": "extern_variable", + "name": "D_800F4D2C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4D2C" + } + ], + "timestamp": "2026-04-22T17:15:20.807011" + }, + { + "function_name": "func_8001FAAC", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_80082274", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082274" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80069800", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069800" + }, + { + "type": "extern_variable", + "name": "D_8009D890", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D890" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + }, + { + "type": "extern_variable", + "name": "D_80075D24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D24" + }, + { + "type": "extern_variable", + "name": "D_80075D28", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D28" + }, + { + "type": "extern_variable", + "name": "D_80075DE8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075DE8" + }, + { + "type": "extern_variable", + "name": "D_8009D7E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E4" + }, + { + "type": "extern_variable", + "name": "D_8009D7E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E8" + }, + { + "type": "extern_variable", + "name": "D_8009D7EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7EC" + }, + { + "type": "extern_variable", + "name": "D_8009D7ED", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7ED" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T17:15:21.578912" + }, + { + "function_name": "func_800D87EC", + "file": "src/battle/battle2.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800F4CEC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4CEC" + }, + { + "type": "extern_variable", + "name": "D_800F4D2C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4D2C" + } + ], + "timestamp": "2026-04-22T17:15:22.330238" + }, + { + "function_name": "func_800BC9E8", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:15:22.984514" + }, + { + "function_name": "func_800A38C8", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:15:23.705258" + }, + { + "function_name": "func_8002E428", + "file": "src/main/akao.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "SpuSetTransferCallback", + "return_type": "unknown", + "parameters": "?*", + "suggestion": "Define proper signature for SpuSetTransferCallback in header" + }, + { + "type": "extern_variable", + "name": "func_800293D0", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800293D0" + } + ], + "timestamp": "2026-04-22T17:15:25.083785" + }, + { + "function_name": "func_80015D64", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_80082274", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082274" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80069800", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069800" + }, + { + "type": "extern_variable", + "name": "D_8009D890", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D890" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + }, + { + "type": "extern_variable", + "name": "D_80075D24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D24" + }, + { + "type": "extern_variable", + "name": "D_80075D28", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D28" + }, + { + "type": "extern_variable", + "name": "D_80075DE8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075DE8" + }, + { + "type": "extern_variable", + "name": "D_8009D7E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E4" + }, + { + "type": "extern_variable", + "name": "D_8009D7E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E8" + }, + { + "type": "extern_variable", + "name": "D_8009D7EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7EC" + }, + { + "type": "extern_variable", + "name": "D_8009D7ED", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7ED" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T17:15:25.830896" + }, + { + "function_name": "func_800B64A0", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:15:26.502785" + }, + { + "function_name": "func_800B7134", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:15:27.179141" + }, + { + "function_name": "func_800B7C1C", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:15:27.875563" + }, + { + "function_name": "func_800B64D8", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:15:29.297553" + }, + { + "function_name": "func_800BC11C", + "file": "src/battle/battle1.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800EA470", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800EA470" + } + ], + "timestamp": "2026-04-22T17:15:30.132136" + }, + { + "function_name": "func_800A2040", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:15:30.988745" + }, + { + "function_name": "func_800A4080", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:15:31.654429" + }, + { + "function_name": "func_800AE5B8", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:15:32.338389" + }, + { + "function_name": "func_800AE5F0", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:15:33.525781" + }, + { + "function_name": "func_800B65A4", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:15:34.153134" + }, + { + "function_name": "func_800B0098", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:15:34.794727" + }, + { + "function_name": "func_800345BC", + "file": "src/main/psxsdk.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "func_80034E00", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80034E00" + }, + { + "type": "unknown_pointer", + "name": "jtbl_80034D14", + "suggestion": "m2c could not determine type of pointer jtbl_80034D14" + }, + { + "type": "unknown_pointer", + "name": "jtbl_80034D14", + "suggestion": "m2c could not determine type of pointer jtbl_80034D14" + } + ], + "timestamp": "2026-04-22T17:15:35.427497" + }, + { + "function_name": "func_800D5B6C", + "file": "src/battle/battle2.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800F4CEC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4CEC" + }, + { + "type": "extern_variable", + "name": "D_800F4D2C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4D2C" + } + ], + "timestamp": "2026-04-22T17:15:36.047232" + }, + { + "function_name": "func_80032CE8", + "file": "src/main/akao.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "SpuSetTransferCallback", + "return_type": "unknown", + "parameters": "?*", + "suggestion": "Define proper signature for SpuSetTransferCallback in header" + }, + { + "type": "extern_variable", + "name": "func_800293D0", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800293D0" + } + ], + "timestamp": "2026-04-22T17:15:37.127385" + }, + { + "function_name": "func_800BBF7C", + "file": "src/battle/battle1.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800EA470", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800EA470" + } + ], + "timestamp": "2026-04-22T17:15:37.791572" + }, + { + "function_name": "func_80032C20", + "file": "src/main/akao.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "SpuSetTransferCallback", + "return_type": "unknown", + "parameters": "?*", + "suggestion": "Define proper signature for SpuSetTransferCallback in header" + }, + { + "type": "extern_variable", + "name": "func_800293D0", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800293D0" + } + ], + "timestamp": "2026-04-22T17:15:38.281645" + }, + { + "function_name": "func_800A1F48", + "file": "src/ending/ending.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "GetTPage", + "return_type": "s16", + "parameters": "s32, ?, s16, s16", + "suggestion": "Define proper signature for GetTPage in header" + }, + { + "type": "extern_function", + "name": "LoadImage", + "return_type": "unknown", + "parameters": "void*, s32", + "suggestion": "Define proper signature for LoadImage in header" + }, + { + "type": "extern_function", + "name": "OpenTIM", + "return_type": "unknown", + "parameters": "", + "suggestion": "Define proper signature for OpenTIM in header" + }, + { + "type": "extern_function", + "name": "ReadTIM", + "return_type": "unknown", + "parameters": "s32*", + "suggestion": "Define proper signature for ReadTIM in header" + }, + { + "type": "extern_variable", + "name": "D_800A652C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A652C" + } + ], + "timestamp": "2026-04-22T17:15:38.743594" + }, + { + "function_name": "func_800A5924", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:15:39.338547" + }, + { + "function_name": "func_800A6C04", + "file": "src/battle/battle.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_800AF834", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_800AF834 in header" + }, + { + "type": "extern_variable", + "name": "D_800708C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C4" + } + ], + "timestamp": "2026-04-22T17:15:43.452324" + }, + { + "function_name": "func_80032B30", + "file": "src/main/akao.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "SpuSetTransferCallback", + "return_type": "unknown", + "parameters": "?*", + "suggestion": "Define proper signature for SpuSetTransferCallback in header" + }, + { + "type": "extern_variable", + "name": "func_800293D0", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800293D0" + } + ], + "timestamp": "2026-04-22T17:15:44.043291" + }, + { + "function_name": "func_800A4350", + "file": "src/battle/battle.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_800AF834", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_800AF834 in header" + }, + { + "type": "extern_variable", + "name": "D_800708C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C4" + } + ], + "timestamp": "2026-04-22T17:15:44.770016" + }, + { + "function_name": "func_801D027C", + "file": "src/menu/bginmenu.c", + "primary_error": "PSY-Q compilation failed: aggregate value used where an integer was expected; incompatible types in assignment", + "missing_items": [], + "timestamp": "2026-04-22T17:15:52.499429" + }, + { + "function_name": "func_800AC6B4", + "file": "src/battle/battle.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_800AF834", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_800AF834 in header" + }, + { + "type": "extern_variable", + "name": "D_800708C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C4" + } + ], + "timestamp": "2026-04-22T17:15:53.345055" + }, + { + "function_name": "func_800D3548", + "file": "src/battle/battle2.c", + "primary_error": "Function 'func_800D3548' not found as a definition after decompilation (LLM may have renamed it)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800F4CEC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4CEC" + }, + { + "type": "extern_variable", + "name": "D_800F4D2C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4D2C" + } + ], + "timestamp": "2026-04-22T17:15:53.969203" + }, + { + "function_name": "func_800AA468", + "file": "src/battle/battle.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_800AF834", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_800AF834 in header" + }, + { + "type": "extern_variable", + "name": "D_800708C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C4" + } + ], + "timestamp": "2026-04-22T17:15:55.506469" + }, + { + "function_name": "func_80018ECC", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_80082274", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082274" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80069800", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069800" + }, + { + "type": "extern_variable", + "name": "D_8009D890", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D890" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + }, + { + "type": "extern_variable", + "name": "D_80075D24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D24" + }, + { + "type": "extern_variable", + "name": "D_80075D28", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D28" + }, + { + "type": "extern_variable", + "name": "D_80075DE8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075DE8" + }, + { + "type": "extern_variable", + "name": "D_8009D7E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E4" + }, + { + "type": "extern_variable", + "name": "D_8009D7E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E8" + }, + { + "type": "extern_variable", + "name": "D_8009D7EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7EC" + }, + { + "type": "extern_variable", + "name": "D_8009D7ED", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7ED" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T17:15:56.341360" + }, + { + "function_name": "func_800AFFBC", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:15:57.064089" + }, + { + "function_name": "func_800A5AD8", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:15:58.342316" + }, + { + "function_name": "func_800AB788", + "file": "src/battle/battle.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_800AF834", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_800AF834 in header" + }, + { + "type": "extern_variable", + "name": "D_800708C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C4" + } + ], + "timestamp": "2026-04-22T17:15:59.099299" + }, + { + "function_name": "func_800A0000", + "file": "src/brom/brom.c", + "primary_error": "Function 'func_800A0000' not found as a definition after decompilation (LLM may have renamed it)", + "missing_items": [], + "timestamp": "2026-04-22T17:15:59.598073" + }, + { + "function_name": "func_800D4284", + "file": "src/battle/battle2.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800F4CEC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4CEC" + }, + { + "type": "extern_variable", + "name": "D_800F4D2C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4D2C" + } + ], + "timestamp": "2026-04-22T17:16:01.439941" + }, + { + "function_name": "func_800BA938", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:16:02.223447" + }, + { + "function_name": "func_800B69A4", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:16:02.977668" + }, + { + "function_name": "func_800C0254", + "file": "src/battle/battle1.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800EA470", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800EA470" + } + ], + "timestamp": "2026-04-22T17:16:04.604914" + }, + { + "function_name": "func_800ADF38", + "file": "src/battle/battle.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_800AF834", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_800AF834 in header" + }, + { + "type": "extern_variable", + "name": "D_800708C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C4" + } + ], + "timestamp": "2026-04-22T17:16:05.497319" + }, + { + "function_name": "func_800A4138", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:16:06.304538" + }, + { + "function_name": "func_800BFCAC", + "file": "src/world/world2.c", + "primary_error": "Function 'func_800BFCAC' not found as a definition after decompilation (LLM may have renamed it)", + "missing_items": [], + "timestamp": "2026-04-22T17:16:07.832292" + }, + { + "function_name": "func_80035430", + "file": "src/main/psxsdk.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "func_80034E00", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80034E00" + }, + { + "type": "unknown_pointer", + "name": "jtbl_80034D14", + "suggestion": "m2c could not determine type of pointer jtbl_80034D14" + }, + { + "type": "unknown_pointer", + "name": "jtbl_80034D14", + "suggestion": "m2c could not determine type of pointer jtbl_80034D14" + } + ], + "timestamp": "2026-04-22T17:16:08.509173" + }, + { + "function_name": "func_80028E00", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_80082274", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082274" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80069800", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069800" + }, + { + "type": "extern_variable", + "name": "D_8009D890", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D890" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + }, + { + "type": "extern_variable", + "name": "D_80075D24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D24" + }, + { + "type": "extern_variable", + "name": "D_80075D28", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D28" + }, + { + "type": "extern_variable", + "name": "D_80075DE8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075DE8" + }, + { + "type": "extern_variable", + "name": "D_8009D7E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E4" + }, + { + "type": "extern_variable", + "name": "D_8009D7E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E8" + }, + { + "type": "extern_variable", + "name": "D_8009D7EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7EC" + }, + { + "type": "extern_variable", + "name": "D_8009D7ED", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7ED" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T17:16:09.276629" + }, + { + "function_name": "func_80025174", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_80082274", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082274" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80069800", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069800" + }, + { + "type": "extern_variable", + "name": "D_8009D890", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D890" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + }, + { + "type": "extern_variable", + "name": "D_80075D24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D24" + }, + { + "type": "extern_variable", + "name": "D_80075D28", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D28" + }, + { + "type": "extern_variable", + "name": "D_80075DE8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075DE8" + }, + { + "type": "extern_variable", + "name": "D_8009D7E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E4" + }, + { + "type": "extern_variable", + "name": "D_8009D7E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E8" + }, + { + "type": "extern_variable", + "name": "D_8009D7EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7EC" + }, + { + "type": "extern_variable", + "name": "D_8009D7ED", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7ED" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T17:16:10.647432" + }, + { + "function_name": "func_8002D410", + "file": "src/main/akao.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "SpuSetTransferCallback", + "return_type": "unknown", + "parameters": "?*", + "suggestion": "Define proper signature for SpuSetTransferCallback in header" + }, + { + "type": "extern_variable", + "name": "func_800293D0", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800293D0" + } + ], + "timestamp": "2026-04-22T17:16:11.239960" + }, + { + "function_name": "func_8002D4A0", + "file": "src/main/akao.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "SpuSetTransferCallback", + "return_type": "unknown", + "parameters": "?*", + "suggestion": "Define proper signature for SpuSetTransferCallback in header" + }, + { + "type": "extern_variable", + "name": "func_800293D0", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800293D0" + } + ], + "timestamp": "2026-04-22T17:16:11.781677" + }, + { + "function_name": "func_800A7F38", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:16:12.976177" + }, + { + "function_name": "func_8002BB20", + "file": "src/main/akao.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "SpuSetTransferCallback", + "return_type": "unknown", + "parameters": "?*", + "suggestion": "Define proper signature for SpuSetTransferCallback in header" + }, + { + "type": "extern_variable", + "name": "func_800293D0", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800293D0" + } + ], + "timestamp": "2026-04-22T17:16:13.547791" + }, + { + "function_name": "func_800AC3C0", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:16:14.186809" + }, + { + "function_name": "func_800AE4B8", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:16:18.360585" + }, + { + "function_name": "func_80036190", + "file": "src/main/psxsdk.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "func_80034E00", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80034E00" + }, + { + "type": "unknown_pointer", + "name": "jtbl_80034D14", + "suggestion": "m2c could not determine type of pointer jtbl_80034D14" + }, + { + "type": "unknown_pointer", + "name": "jtbl_80034D14", + "suggestion": "m2c could not determine type of pointer jtbl_80034D14" + } + ], + "timestamp": "2026-04-22T17:16:19.042381" + }, + { + "function_name": "func_800A76CC", + "file": "src/battle/battle.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_800AF834", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_800AF834 in header" + }, + { + "type": "extern_variable", + "name": "D_800708C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C4" + } + ], + "timestamp": "2026-04-22T17:16:19.892623" + }, + { + "function_name": "func_80017678", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_80082274", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082274" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80069800", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069800" + }, + { + "type": "extern_variable", + "name": "D_8009D890", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D890" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + }, + { + "type": "extern_variable", + "name": "D_80075D24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D24" + }, + { + "type": "extern_variable", + "name": "D_80075D28", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D28" + }, + { + "type": "extern_variable", + "name": "D_80075DE8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075DE8" + }, + { + "type": "extern_variable", + "name": "D_8009D7E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E4" + }, + { + "type": "extern_variable", + "name": "D_8009D7E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E8" + }, + { + "type": "extern_variable", + "name": "D_8009D7EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7EC" + }, + { + "type": "extern_variable", + "name": "D_8009D7ED", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7ED" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T17:16:21.170274" + }, + { + "function_name": "func_800C02F4", + "file": "src/world/world2.c", + "primary_error": "Function 'func_800C02F4' not found as a definition after decompilation (LLM may have renamed it)", + "missing_items": [], + "timestamp": "2026-04-22T17:16:21.917621" + }, + { + "function_name": "func_80036038", + "file": "src/main/psxsdk.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "func_80034E00", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80034E00" + }, + { + "type": "unknown_pointer", + "name": "jtbl_80034D14", + "suggestion": "m2c could not determine type of pointer jtbl_80034D14" + }, + { + "type": "unknown_pointer", + "name": "jtbl_80034D14", + "suggestion": "m2c could not determine type of pointer jtbl_80034D14" + } + ], + "timestamp": "2026-04-22T17:16:22.877779" + }, + { + "function_name": "func_800A4860", + "file": "src/battle/battle.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_800AF834", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_800AF834 in header" + }, + { + "type": "extern_variable", + "name": "D_800708C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C4" + } + ], + "timestamp": "2026-04-22T17:16:24.155747" + }, + { + "function_name": "func_800B10AC", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:16:24.819991" + }, + { + "function_name": "func_800BC338", + "file": "src/field/field.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800E08C0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08C0" + }, + { + "type": "extern_variable", + "name": "D_80074EB0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB0" + }, + { + "type": "extern_variable", + "name": "D_80074EB4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB4" + }, + { + "type": "extern_variable", + "name": "D_80074EB8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB8" + }, + { + "type": "extern_variable", + "name": "D_800E0638", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0638" + }, + { + "type": "extern_variable", + "name": "D_800E42D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42D8" + }, + { + "type": "extern_variable", + "name": "D_800E42DA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DA" + }, + { + "type": "extern_variable", + "name": "D_800E42DC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DC" + }, + { + "type": "extern_variable", + "name": "D_800E42E0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E0" + }, + { + "type": "extern_variable", + "name": "D_800E42E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E4" + }, + { + "type": "extern_variable", + "name": "D_800E42E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E8" + }, + { + "type": "extern_variable", + "name": "D_800E42EA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EA" + }, + { + "type": "extern_variable", + "name": "D_800E42EE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EE" + }, + { + "type": "extern_variable", + "name": "D_800E48E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48E8" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-22T17:16:25.418700" + }, + { + "function_name": "func_800D751C", + "file": "src/battle/battle2.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800F4CEC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4CEC" + }, + { + "type": "extern_variable", + "name": "D_800F4D2C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4D2C" + } + ], + "timestamp": "2026-04-22T17:16:26.598068" + }, + { + "function_name": "func_800BB7DC", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:16:27.281986" + }, + { + "function_name": "func_800A5FB4", + "file": "src/world/world.c", + "primary_error": "Function 'func_800A5FB4' not found as a definition after decompilation (LLM may have renamed it)", + "missing_items": [], + "timestamp": "2026-04-22T17:16:27.785054" + }, + { + "function_name": "func_8002A7E8", + "file": "src/main/akao.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "SpuSetTransferCallback", + "return_type": "unknown", + "parameters": "?*", + "suggestion": "Define proper signature for SpuSetTransferCallback in header" + }, + { + "type": "extern_variable", + "name": "func_800293D0", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800293D0" + } + ], + "timestamp": "2026-04-22T17:16:28.806348" + }, + { + "function_name": "func_800B69C0", + "file": "src/field/field.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800E08C0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E08C0" + }, + { + "type": "extern_variable", + "name": "D_80074EB0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB0" + }, + { + "type": "extern_variable", + "name": "D_80074EB4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB4" + }, + { + "type": "extern_variable", + "name": "D_80074EB8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB8" + }, + { + "type": "extern_variable", + "name": "D_800E0638", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0638" + }, + { + "type": "extern_variable", + "name": "D_800E42D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42D8" + }, + { + "type": "extern_variable", + "name": "D_800E42DA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DA" + }, + { + "type": "extern_variable", + "name": "D_800E42DC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DC" + }, + { + "type": "extern_variable", + "name": "D_800E42E0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E0" + }, + { + "type": "extern_variable", + "name": "D_800E42E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E4" + }, + { + "type": "extern_variable", + "name": "D_800E42E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E8" + }, + { + "type": "extern_variable", + "name": "D_800E42EA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EA" + }, + { + "type": "extern_variable", + "name": "D_800E42EE", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EE" + }, + { + "type": "extern_variable", + "name": "D_800E48E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48E8" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-22T17:16:29.359862" + }, + { + "function_name": "func_800A4954", + "file": "src/battle/battle.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_800AF834", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_800AF834 in header" + }, + { + "type": "extern_variable", + "name": "D_800708C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C4" + } + ], + "timestamp": "2026-04-22T17:16:30.114109" + }, + { + "function_name": "func_800AAA00", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:16:31.202074" + }, + { + "function_name": "func_800112E8", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_80082274", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082274" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80069800", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069800" + }, + { + "type": "extern_variable", + "name": "D_8009D890", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D890" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + }, + { + "type": "extern_variable", + "name": "D_80075D24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D24" + }, + { + "type": "extern_variable", + "name": "D_80075D28", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D28" + }, + { + "type": "extern_variable", + "name": "D_80075DE8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075DE8" + }, + { + "type": "extern_variable", + "name": "D_8009D7E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E4" + }, + { + "type": "extern_variable", + "name": "D_8009D7E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E8" + }, + { + "type": "extern_variable", + "name": "D_8009D7EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7EC" + }, + { + "type": "extern_variable", + "name": "D_8009D7ED", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7ED" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T17:16:32.003435" + }, + { + "function_name": "func_800BAA00", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:16:32.789655" + }, + { + "function_name": "func_800D44E8", + "file": "src/battle/battle2.c", + "primary_error": "Function 'func_800D44E8' not found as a definition after decompilation (LLM may have renamed it)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800F4CEC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4CEC" + }, + { + "type": "extern_variable", + "name": "D_800F4D2C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4D2C" + } + ], + "timestamp": "2026-04-22T17:16:33.990751" + }, + { + "function_name": "func_800AE954", + "file": "src/battle/battle.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_800AF834", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_800AF834 in header" + }, + { + "type": "extern_variable", + "name": "D_800708C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C4" + } + ], + "timestamp": "2026-04-22T17:16:34.842925" + }, + { + "function_name": "func_800C4814", + "file": "src/battle/battle1.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800EA470", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800EA470" + } + ], + "timestamp": "2026-04-22T17:16:35.807686" + }, + { + "function_name": "func_800C3CA8", + "file": "src/battle/battle1.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800EA470", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800EA470" + } + ], + "timestamp": "2026-04-22T17:16:37.111767" + }, + { + "function_name": "func_800B6B28", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:16:37.787298" + }, + { + "function_name": "func_800B0334", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:16:40.119501" + }, + { + "function_name": "func_800AEF68", + "file": "src/battle/battle.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_800AF834", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_800AF834 in header" + }, + { + "type": "extern_variable", + "name": "D_800708C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C4" + } + ], + "timestamp": "2026-04-22T17:16:40.899016" + }, + { + "function_name": "func_800ABE58", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:16:41.760339" + }, + { + "function_name": "func_8001CB48", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_80082274", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082274" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80069800", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069800" + }, + { + "type": "extern_variable", + "name": "D_8009D890", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D890" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + }, + { + "type": "extern_variable", + "name": "D_80075D24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D24" + }, + { + "type": "extern_variable", + "name": "D_80075D28", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D28" + }, + { + "type": "extern_variable", + "name": "D_80075DE8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075DE8" + }, + { + "type": "extern_variable", + "name": "D_8009D7E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E4" + }, + { + "type": "extern_variable", + "name": "D_8009D7E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E8" + }, + { + "type": "extern_variable", + "name": "D_8009D7EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7EC" + }, + { + "type": "extern_variable", + "name": "D_8009D7ED", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7ED" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T17:16:42.788731" + }, + { + "function_name": "func_800B062C", + "file": "src/battle/battle.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_800AF834", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_800AF834 in header" + }, + { + "type": "extern_variable", + "name": "D_800708C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C4" + } + ], + "timestamp": "2026-04-22T17:16:43.537862" + }, + { + "function_name": "func_800A8A6C", + "file": "src/battle/battle.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_800AF834", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_800AF834 in header" + }, + { + "type": "extern_variable", + "name": "D_800708C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C4" + } + ], + "timestamp": "2026-04-22T17:16:44.379504" + }, + { + "function_name": "func_800AB6E4", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:16:45.398769" + }, + { + "function_name": "func_8001C5BC", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_80082274", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082274" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80069800", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069800" + }, + { + "type": "extern_variable", + "name": "D_8009D890", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D890" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + }, + { + "type": "extern_variable", + "name": "D_80075D24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D24" + }, + { + "type": "extern_variable", + "name": "D_80075D28", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D28" + }, + { + "type": "extern_variable", + "name": "D_80075DE8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075DE8" + }, + { + "type": "extern_variable", + "name": "D_8009D7E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E4" + }, + { + "type": "extern_variable", + "name": "D_8009D7E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E8" + }, + { + "type": "extern_variable", + "name": "D_8009D7EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7EC" + }, + { + "type": "extern_variable", + "name": "D_8009D7ED", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7ED" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T17:16:46.154829" + }, + { + "function_name": "func_800DDCE8", + "file": "src/battle/battle3.c", + "primary_error": "Contains unknown parameter type '?'", + "missing_items": [ + { + "type": "extern_function", + "name": "func_8001DE0C", + "return_type": "void", + "parameters": "?*, s32, ?, s32, s32", + "suggestion": "Define proper signature for func_8001DE0C in header" + }, + { + "type": "extern_function", + "name": "func_8001E040", + "return_type": "void", + "parameters": "?*", + "suggestion": "Define proper signature for func_8001E040 in header" + }, + { + "type": "extern_variable", + "name": "func_8001E040", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001E040" + }, + { + "type": "extern_variable", + "name": "func_80026A00", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80026A00" + }, + { + "type": "unknown_variable", + "name": "sp18", + "suggestion": "m2c could not determine type of variable sp18" + } + ], + "timestamp": "2026-04-22T17:16:47.137933" + }, + { + "function_name": "func_80027990", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_80082274", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082274" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80069800", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069800" + }, + { + "type": "extern_variable", + "name": "D_8009D890", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D890" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + }, + { + "type": "extern_variable", + "name": "D_80075D24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D24" + }, + { + "type": "extern_variable", + "name": "D_80075D28", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D28" + }, + { + "type": "extern_variable", + "name": "D_80075DE8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075DE8" + }, + { + "type": "extern_variable", + "name": "D_8009D7E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E4" + }, + { + "type": "extern_variable", + "name": "D_8009D7E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E8" + }, + { + "type": "extern_variable", + "name": "D_8009D7EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7EC" + }, + { + "type": "extern_variable", + "name": "D_8009D7ED", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7ED" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T17:16:48.198392" + }, + { + "function_name": "func_800AE8AC", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:16:48.911893" + }, + { + "function_name": "func_800A358C", + "file": "src/ending/ending.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "GetTPage", + "return_type": "s16", + "parameters": "s32, ?, s16, s16", + "suggestion": "Define proper signature for GetTPage in header" + }, + { + "type": "extern_function", + "name": "LoadImage", + "return_type": "unknown", + "parameters": "void*, s32", + "suggestion": "Define proper signature for LoadImage in header" + }, + { + "type": "extern_function", + "name": "OpenTIM", + "return_type": "unknown", + "parameters": "", + "suggestion": "Define proper signature for OpenTIM in header" + }, + { + "type": "extern_function", + "name": "ReadTIM", + "return_type": "unknown", + "parameters": "s32*", + "suggestion": "Define proper signature for ReadTIM in header" + }, + { + "type": "extern_variable", + "name": "D_800A652C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A652C" + } + ], + "timestamp": "2026-04-22T17:16:49.485784" + }, + { + "function_name": "func_8002708C", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_80082274", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082274" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80069800", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069800" + }, + { + "type": "extern_variable", + "name": "D_8009D890", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D890" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + }, + { + "type": "extern_variable", + "name": "D_80075D24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D24" + }, + { + "type": "extern_variable", + "name": "D_80075D28", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D28" + }, + { + "type": "extern_variable", + "name": "D_80075DE8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075DE8" + }, + { + "type": "extern_variable", + "name": "D_8009D7E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E4" + }, + { + "type": "extern_variable", + "name": "D_8009D7E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E8" + }, + { + "type": "extern_variable", + "name": "D_8009D7EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7EC" + }, + { + "type": "extern_variable", + "name": "D_8009D7ED", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7ED" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T17:16:53.498864" + }, + { + "function_name": "func_800A86C4", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:16:54.254404" + }, + { + "function_name": "func_800A2504", + "file": "src/ending/ending.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "GetTPage", + "return_type": "s16", + "parameters": "s32, ?, s16, s16", + "suggestion": "Define proper signature for GetTPage in header" + }, + { + "type": "extern_function", + "name": "LoadImage", + "return_type": "unknown", + "parameters": "void*, s32", + "suggestion": "Define proper signature for LoadImage in header" + }, + { + "type": "extern_function", + "name": "OpenTIM", + "return_type": "unknown", + "parameters": "", + "suggestion": "Define proper signature for OpenTIM in header" + }, + { + "type": "extern_function", + "name": "ReadTIM", + "return_type": "unknown", + "parameters": "s32*", + "suggestion": "Define proper signature for ReadTIM in header" + }, + { + "type": "extern_variable", + "name": "D_800A652C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800A652C" + } + ], + "timestamp": "2026-04-22T17:16:54.913763" + }, + { + "function_name": "func_800AE080", + "file": "src/battle/battle.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_800AF834", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_800AF834 in header" + }, + { + "type": "extern_variable", + "name": "D_800708C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C4" + } + ], + "timestamp": "2026-04-22T17:16:56.761340" + }, + { + "function_name": "func_800AB480", + "file": "src/battle/battle.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_800AF834", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_800AF834 in header" + }, + { + "type": "extern_variable", + "name": "D_800708C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C4" + } + ], + "timestamp": "2026-04-22T17:16:57.605889" + }, + { + "function_name": "func_800AD0FC", + "file": "src/battle/battle.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_800AF834", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_800AF834 in header" + }, + { + "type": "extern_variable", + "name": "D_800708C4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C4" + } + ], + "timestamp": "2026-04-22T17:16:58.886050" + }, + { + "function_name": "func_800C7924", + "file": "src/battle/battle1.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800EA470", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800EA470" + } + ], + "timestamp": "2026-04-22T17:16:59.804535" + }, + { + "function_name": "func_800B98F0", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:17:00.584047" + }, + { + "function_name": "func_80029114", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_80082274", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082274" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80069800", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069800" + }, + { + "type": "extern_variable", + "name": "D_8009D890", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D890" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + }, + { + "type": "extern_variable", + "name": "D_80075D24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D24" + }, + { + "type": "extern_variable", + "name": "D_80075D28", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D28" + }, + { + "type": "extern_variable", + "name": "D_80075DE8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075DE8" + }, + { + "type": "extern_variable", + "name": "D_8009D7E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E4" + }, + { + "type": "extern_variable", + "name": "D_8009D7E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E8" + }, + { + "type": "extern_variable", + "name": "D_8009D7EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7EC" + }, + { + "type": "extern_variable", + "name": "D_8009D7ED", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7ED" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T17:17:02.055653" + }, + { + "function_name": "func_800B87D8", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:17:02.964307" + }, + { + "function_name": "func_800BFB88", + "file": "src/battle/battle1.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_800EA470", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800EA470" + } + ], + "timestamp": "2026-04-22T17:17:03.878468" + }, + { + "function_name": "func_80026C5C", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_80082274", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082274" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80069800", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069800" + }, + { + "type": "extern_variable", + "name": "D_8009D890", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D890" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + }, + { + "type": "extern_variable", + "name": "D_80075D24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D24" + }, + { + "type": "extern_variable", + "name": "D_80075D28", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D28" + }, + { + "type": "extern_variable", + "name": "D_80075DE8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075DE8" + }, + { + "type": "extern_variable", + "name": "D_8009D7E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E4" + }, + { + "type": "extern_variable", + "name": "D_8009D7E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E8" + }, + { + "type": "extern_variable", + "name": "D_8009D7EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7EC" + }, + { + "type": "extern_variable", + "name": "D_8009D7ED", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7ED" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T17:17:04.988499" + }, + { + "function_name": "func_800B39B4", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:17:05.767197" + }, + { + "function_name": "func_80028930", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_80082274", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082274" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80069800", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069800" + }, + { + "type": "extern_variable", + "name": "D_8009D890", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D890" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + }, + { + "type": "extern_variable", + "name": "D_80075D24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D24" + }, + { + "type": "extern_variable", + "name": "D_80075D28", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D28" + }, + { + "type": "extern_variable", + "name": "D_80075DE8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075DE8" + }, + { + "type": "extern_variable", + "name": "D_8009D7E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E4" + }, + { + "type": "extern_variable", + "name": "D_8009D7E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E8" + }, + { + "type": "extern_variable", + "name": "D_8009D7EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7EC" + }, + { + "type": "extern_variable", + "name": "D_8009D7ED", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7ED" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T17:17:06.652297" + }, + { + "function_name": "func_800285AC", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_80082274", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082274" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80069800", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069800" + }, + { + "type": "extern_variable", + "name": "D_8009D890", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D890" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + }, + { + "type": "extern_variable", + "name": "D_80075D24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D24" + }, + { + "type": "extern_variable", + "name": "D_80075D28", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D28" + }, + { + "type": "extern_variable", + "name": "D_80075DE8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075DE8" + }, + { + "type": "extern_variable", + "name": "D_8009D7E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E4" + }, + { + "type": "extern_variable", + "name": "D_8009D7E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E8" + }, + { + "type": "extern_variable", + "name": "D_8009D7EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7EC" + }, + { + "type": "extern_variable", + "name": "D_8009D7ED", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7ED" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T17:17:07.758586" + }, + { + "function_name": "func_800A4268", + "file": "src/world/world.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [], + "timestamp": "2026-04-22T17:17:08.516203" + }, + { + "function_name": "func_80014E74", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "D_80069554", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069554" + }, + { + "type": "extern_variable", + "name": "D_80069558", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069558" + }, + { + "type": "extern_variable", + "name": "D_80082274", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80082274" + }, + { + "type": "extern_variable", + "name": "D_800696F0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800696F0" + }, + { + "type": "extern_variable", + "name": "D_80069800", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069800" + }, + { + "type": "extern_variable", + "name": "D_8009D890", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D890" + }, + { + "type": "extern_variable", + "name": "D_8009D894", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D894" + }, + { + "type": "extern_variable", + "name": "D_80075D24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D24" + }, + { + "type": "extern_variable", + "name": "D_80075D28", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D28" + }, + { + "type": "extern_variable", + "name": "D_80075DE8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075DE8" + }, + { + "type": "extern_variable", + "name": "D_8009D7E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E4" + }, + { + "type": "extern_variable", + "name": "D_8009D7E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E8" + }, + { + "type": "extern_variable", + "name": "D_8009D7EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7EC" + }, + { + "type": "extern_variable", + "name": "D_8009D7ED", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7ED" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T17:17:09.297948" + } +] \ No newline at end of file diff --git a/automation/rank_all.md b/automation/rank_all.md new file mode 100644 index 0000000..f10d52e --- /dev/null +++ b/automation/rank_all.md @@ -0,0 +1,1764 @@ +# Function Rank (easiest → hardest) + +## battle + +| Score | Function | +| --- | --- | +| 0.217 | func_800B383C.s | +| 0.217 | func_800B38E0.s | +| 0.234 | func_800A6C04.s | +| 0.235 | func_800B1A5C.s | +| 0.253 | func_800ADFC0.s | +| 0.268 | func_800D5774.s | +| 0.268 | func_800A3208.s | +| 0.304 | func_800AEB80.s | +| 0.314 | func_800A66A4.s | +| 0.327 | func_800A3488.s | +| 0.360 | func_800D4FA8.s | +| 0.378 | func_800B3968.s | +| 0.378 | func_800C614C.s | +| 0.383 | func_800D41FC.s | +| 0.397 | func_800A853C.s | +| 0.407 | func_800B5CD4.s | +| 0.410 | func_800D51D4.s | +| 0.417 | func_800B2EBC.s | +| 0.427 | func_800D3474.s | +| 0.428 | func_800A34CC.s | +| 0.432 | func_800D58D0.s | +| 0.434 | func_800D3354.s | +| 0.434 | func_800D83A4.s | +| 0.434 | func_800D8304.s | +| 0.434 | func_800D32B4.s | +| 0.434 | func_800AC6B4.s | +| 0.445 | func_800AD088.s | +| 0.446 | func_800BC81C.s | +| 0.446 | func_800D34C8.s | +| 0.451 | func_800AA468.s | +| 0.452 | func_800D3658.s | +| 0.457 | func_800D76B8.s | +| 0.471 | func_800D3418.s | +| 0.472 | func_800D56A8.s | +| 0.478 | func_800A2FD0.s | +| 0.482 | func_800D3A6C.s | +| 0.496 | func_800AA688.s | +| 0.503 | func_800B089C.s | +| 0.507 | func_800A311C.s | +| 0.507 | func_800A555C.s | +| 0.527 | func_800B3A04.s | +| 0.532 | func_800D5444.s | +| 0.546 | func_800D5230.s | +| 0.552 | func_800AB9C4.s | +| 0.552 | func_800AF1D4.s | +| 0.557 | func_800D4CBC.s | +| 0.560 | func_800ADF38.s | +| 0.566 | func_800BC04C.s | +| 0.579 | func_800AD804.s | +| 0.582 | func_800D3F0C.s | +| 0.590 | func_800B1C1C.s | +| 0.602 | func_800B3B84.s | +| 0.602 | func_800B3AB8.s | +| 0.625 | func_800D09D0.s | +| 0.630 | func_800D6734.s | +| 0.643 | func_800AB788.s | +| 0.648 | func_800C57B0.s | +| 0.649 | func_800D0958.s | +| 0.649 | func_800B1B64.s | +| 0.649 | func_800C0254.s | +| 0.656 | func_800D508C.s | +| 0.676 | func_800B5C1C.s | +| 0.676 | func_800B153C.s | +| 0.678 | func_800D5138.s | +| 0.683 | func_801B1120.s | +| 0.693 | func_800DF24C.s | +| 0.698 | func_800D7A88.s | +| 0.711 | func_800D3548.s | +| 0.714 | func_800DF530.s | +| 0.721 | func_800AE6C0.s | +| 0.734 | func_800DF9F8.s | +| 0.738 | func_800B10F0.s | +| 0.756 | func_800A4860.s | +| 0.757 | func_800AF3AC.s | +| 0.757 | func_800D61AC.s | +| 0.757 | func_800D415C.s | +| 0.773 | func_800D4FF0.s | +| 0.775 | func_800D6840.s | +| 0.776 | func_800ABA68.s | +| 0.776 | func_800D8468.s | +| 0.777 | func_800D52A0.s | +| 0.789 | func_800D4284.s | +| 0.795 | func_800B1624.s | +| 0.804 | func_800B1AA0.s | +| 0.814 | func_800D70C0.s | +| 0.824 | func_800D6394.s | +| 0.824 | func_800B8E48.s | +| 0.829 | func_800D08B8.s | +| 0.835 | func_800A80DC.s | +| 0.838 | func_800D4C08.s | +| 0.840 | func_800B17F0.s | +| 0.846 | func_800A76CC.s | +| 0.848 | func_800D4368.s | +| 0.851 | func_800D461C.s | +| 0.851 | func_800D84F8.s | +| 0.854 | func_800B1C94.s | +| 0.872 | func_800B16D0.s | +| 0.879 | func_800ADD2C.s | +| 0.879 | func_800ADC70.s | +| 0.886 | func_800D3994.s | +| 0.907 | func_800D7724.s | +| 0.912 | func_800B8944.s | +| 0.916 | func_800E4A64.s | +| 0.917 | func_800C5ADC.s | +| 0.920 | func_800B0F04.s | +| 0.922 | func_800E53C8.s | +| 0.926 | func_800A4954.s | +| 0.932 | func_800D5350.s | +| 0.933 | func_800A8424.s | +| 0.936 | func_800DFA94.s | +| 0.939 | func_800DDCE8.s | +| 0.951 | func_800C2000.s | +| 0.953 | func_800DE46C.s | +| 0.957 | func_800B2B5C.s | +| 0.957 | func_800BB538.s | +| 0.961 | func_800A784C.s | +| 0.963 | func_800B5E64.s | +| 0.964 | func_800DFE34.s | +| 0.964 | func_800D6998.s | +| 0.965 | func_800A72C8.s | +| 0.966 | func_800A4350.s | +| 0.966 | func_800DEB18.s | +| 0.966 | func_800D44E8.s | +| 0.969 | func_800C7340.s | +| 0.970 | func_800C59B8.s | +| 0.970 | func_800DF5C8.s | +| 0.970 | func_800A5AC8.s | +| 0.974 | func_800D6F78.s | +| 0.974 | func_800C4814.s | +| 0.975 | func_800C1394.s | +| 0.976 | func_800C3CA8.s | +| 0.978 | func_800B5D38.s | +| 0.978 | func_800D7368.s | +| 0.979 | func_800DDAD8.s | +| 0.982 | func_800D5938.s | +| 0.984 | func_800D751C.s | +| 0.985 | func_800A4BA4.s | +| 0.985 | func_800C14C0.s | +| 0.987 | func_800C0480.s | +| 0.987 | func_800C0970.s | +| 0.988 | func_800D6ACC.s | +| 0.988 | func_800B062C.s | +| 0.988 | func_800A50E0.s | +| 0.988 | func_800AE82C.s | +| 0.989 | func_800A35F8.s | +| 0.989 | func_800D91DC.s | +| 0.990 | func_800E3E10.s | +| 0.990 | func_800D3BF0.s | +| 0.990 | func_800D376C.s | +| 0.991 | func_800C2704.s | +| 0.991 | func_800DFFE4.s | +| 0.992 | func_800AEF68.s | +| 0.992 | func_800B18A8.s | +| 0.993 | func_801B1CB0.s | +| 0.993 | func_800D7888.s | +| 0.994 | func_800D491C.s | +| 0.994 | func_800AB830.s | +| 0.994 | func_800A3D4C.s | +| 0.994 | func_800A3828.s | +| 0.995 | func_800C3DE4.s | +| 0.995 | func_800D6260.s | +| 0.995 | func_800D650C.s | +| 0.996 | func_800A2974.s | +| 0.997 | func_800AF874.s | +| 0.997 | func_800C64D4.s | +| 0.998 | func_800E3FB4.s | +| 0.998 | func_800C6628.s | +| 0.998 | func_800A6000.s | +| 0.998 | func_800BB2A8.s | +| 0.998 | func_800D6D8C.s | +| 0.998 | func_800DF2CC.s | +| 0.998 | func_800BE86C.s | +| 0.998 | func_800AD0FC.s | +| 0.998 | func_800B33A4.s | +| 0.998 | func_800D5B6C.s | +| 0.999 | func_801B0668.s | +| 0.999 | func_800AE954.s | +| 0.999 | func_800BE69C.s | +| 0.999 | func_800B5AAC.s | +| 0.999 | func_800AE080.s | +| 0.999 | func_800A8A6C.s | +| 0.999 | func_801B11BC.s | +| 0.999 | func_801B0F08.s | +| 0.999 | func_800C494C.s | +| 0.999 | func_801B0050.s | +| 1.000 | func_800A5BC8.s | +| 1.000 | func_800AB480.s | +| 1.000 | func_800D4710.s | +| 1.000 | func_800B2CFC.s | +| 1.000 | func_801B1598.s | +| 1.000 | func_801B1734.s | +| 1.000 | func_800C62F4.s | +| 1.000 | func_800A6278.s | +| 1.000 | func_800C4DC8.s | +| 1.000 | func_800B7DB4.s | +| 1.000 | func_800AA950.s | +| 1.000 | func_800C74E4.s | +| 1.000 | func_800B6B98.s | +| 1.000 | func_800B0378.s | +| 1.000 | func_800C1D8C.s | +| 1.000 | func_800D87EC.s | +| 1.000 | func_800BFB88.s | +| 1.000 | func_800DD85C.s | +| 1.000 | func_800B0910.s | +| 1.000 | func_800D85B0.s | +| 1.000 | func_800C3068.s | +| 1.000 | func_800D4D90.s | +| 1.000 | func_800B8B48.s | +| 1.000 | func_800C7924.s | +| 1.000 | func_800E3B64.s | +| 1.000 | func_800E5530.s | +| 1.000 | func_800E33A0.s | +| 1.000 | func_800C76C8.s | +| 1.000 | func_800A81B8.s | +| 1.000 | func_800E3088.s | +| 1.000 | func_800BACEC.s | +| 1.000 | func_800D8D78.s | +| 1.000 | func_800C2928.s | +| 1.000 | func_800AC73C.s | +| 1.000 | func_800E2C6C.s | +| 1.000 | func_801B19AC.s | +| 1.000 | func_800AE42C.s | +| 1.000 | func_800C0B20.s | +| 1.000 | func_800A5250.s | +| 1.000 | func_800AEC10.s | +| 1.000 | func_800C36B4.s | +| 1.000 | func_800C0630.s | +| 1.000 | func_800B91CC.s | +| 1.000 | func_800A23E0.s | +| 1.000 | func_800B4E30.s | +| 1.000 | func_800B3FFC.s | +| 1.000 | func_800B5138.s | +| 1.000 | func_800A3ED0.s | +| 1.000 | func_800CD860.s | +| 1.000 | func_800D93E4.s | +| 1.000 | func_800D9FA4.s | +| 1.000 | func_800DA380.s | +| 1.000 | func_800DB818.s | +| 1.000 | func_800DC0CC.s | +| 1.000 | func_800DCFD4.s | +| 1.000 | func_800A38FC.s | +| 1.000 | func_800D7D3C.s | +| 1.000 | func_800A1798.s | +| 1.000 | func_800A1158.s | +| 1.000 | func_801B1E0C.s | +| 1.000 | func_800DEC10.s | +| 1.000 | func_800BA598.s | +| 1.000 | func_800BCB1C.s | +| 1.000 | func_800B9568.s | +| 1.000 | func_800BEA38.s | +| 1.000 | func_800C7C4C.s | +| 1.000 | func_800D29D4.s | +| 1.000 | func_800B54B8.s | +| 1.000 | func_800A79CC.s | +| 1.000 | func_800E0E34.s | +| 1.000 | func_800E1C40.s | +| 1.000 | func_800E2098.s | +| 1.000 | func_800A866C.s | +| 1.000 | func_800B4794.s | +| 1.000 | func_800B1D48.s | +| 1.000 | func_800E368C.s | +| 1.000 | func_800D5D28.s | +| 1.000 | func_800C223C.s | +| 1.000 | func_800AABBC.s | +| 1.000 | func_801B08C0.s | +| 1.000 | func_800E4C08.s | +| 1.000 | func_800AF9C8.s | +| 1.000 | func_800ABB0C.s | +| 1.000 | func_800E5978.s | +| 1.000 | func_800E6DCC.s | +| 1.000 | func_800E7170.s | + +## brom + +| Score | Function | +| --- | --- | +| 0.098 | func_800A015C.s | +| 0.183 | func_800A01A0.s | +| 0.217 | func_800A0000.s | +| 0.749 | func_800A0534.s | +| 0.881 | func_800A05D4.s | + +## dschange + +| Score | Function | +| --- | --- | +| 1.000 | func_800A0000.s | +| 1.000 | func_800A0C58.s | + +## ending + +| Score | Function | +| --- | --- | +| 0.110 | func_800A3308.s | +| 0.110 | func_800A32FC.s | +| 0.110 | func_800A32F0.s | +| 0.125 | func_800A24A8.s | +| 0.143 | func_800A32D8.s | +| 0.184 | func_800A2F1C.s | +| 0.184 | func_800A2E80.s | +| 0.193 | func_800A2014.s | +| 0.245 | func_800A2888.s | +| 0.273 | func_800A2420.s | +| 0.315 | func_800A2934.s | +| 0.337 | func_800A22E4.s | +| 0.360 | func_800A1F48.s | +| 0.471 | func_800A12F0.s | +| 0.606 | func_800A20F8.s | +| 0.688 | func_800A343C.s | +| 0.746 | func_800A3178.s | +| 0.832 | func_800A09DC.s | +| 0.851 | func_800A2974.s | +| 0.912 | func_800A3368.s | +| 0.923 | func_800A0E68.s | +| 0.926 | func_800A3210.s | +| 0.958 | func_800A0AB8.s | +| 0.959 | func_800A16E4.s | +| 0.975 | func_800A0BA8.s | +| 0.987 | func_800A139C.s | +| 0.989 | func_800A2504.s | +| 0.991 | func_800A11B4.s | +| 0.992 | func_800A2FB8.s | +| 0.996 | func_800A379C.s | +| 0.998 | func_800A17C0.s | +| 1.000 | func_800A0030.s | +| 1.000 | func_800A0CAC.s | +| 1.000 | func_800A358C.s | +| 1.000 | func_800A2C68.s | +| 1.000 | func_800A0F90.s | +| 1.000 | func_800A04C4.s | +| 1.000 | func_800A2A2C.s | +| 1.000 | func_800A14BC.s | +| 1.000 | func_800A19A4.s | + +## field + +| Score | Function | +| --- | --- | +| 0.100 | func_800A41CC.s | +| 0.100 | func_800D4840.s | +| 0.100 | func_800D4838.s | +| 0.131 | func_800CDC14.s | +| 0.153 | func_800AA32C.s | +| 0.170 | func_800DA424.s | +| 0.213 | func_800C46A4.s | +| 0.216 | func_800D7F9C.s | +| 0.268 | func_800AFDE4.s | +| 0.293 | func_800DA444.s | +| 0.310 | func_800C0DE0.s | +| 0.315 | func_800A8DF4.s | +| 0.332 | func_800CC70C.s | +| 0.332 | func_800C0F58.s | +| 0.337 | func_800DA2CC.s | +| 0.354 | func_800CB8F4.s | +| 0.354 | func_800D3CA8.s | +| 0.354 | func_800CB7C0.s | +| 0.354 | func_800CBB5C.s | +| 0.354 | func_800CBDFC.s | +| 0.354 | func_800CBA28.s | +| 0.355 | func_800CC824.s | +| 0.355 | func_800CC5EC.s | +| 0.355 | func_800C560C.s | +| 0.378 | func_800CBAC0.s | +| 0.378 | func_800CC098.s | +| 0.378 | func_800CB858.s | +| 0.378 | func_800CB98C.s | +| 0.378 | func_800CBF40.s | +| 0.378 | func_800CBCA4.s | +| 0.378 | func_800C8514.s | +| 0.378 | func_800C814C.s | +| 0.378 | func_800C7CE8.s | +| 0.383 | func_800C4C9C.s | +| 0.402 | func_800C17B8.s | +| 0.402 | func_800CC134.s | +| 0.402 | func_800C1674.s | +| 0.402 | func_800D3D40.s | +| 0.402 | func_800D4300.s | +| 0.426 | func_800D3264.s | +| 0.426 | func_800D3330.s | +| 0.426 | func_800C0FD8.s | +| 0.426 | func_800D1D3C.s | +| 0.446 | func_800D1F20.s | +| 0.446 | func_800D1FDC.s | +| 0.446 | func_800CC558.s | +| 0.451 | func_800C2FFC.s | +| 0.451 | func_800C2F7C.s | +| 0.451 | func_800C307C.s | +| 0.451 | func_800CCBBC.s | +| 0.471 | func_800CC78C.s | +| 0.482 | func_800DA124.s | +| 0.485 | func_800B6AE4.s | +| 0.496 | func_800CC670.s | +| 0.496 | func_800CC8A8.s | +| 0.497 | func_800D298C.s | +| 0.516 | func_800CB28C.s | +| 0.527 | func_800ABF0C.s | +| 0.527 | func_800CCC3C.s | +| 0.527 | func_800CCCC8.s | +| 0.532 | func_800A82A0.s | +| 0.541 | func_800D2098.s | +| 0.552 | func_800C3FA0.s | +| 0.552 | func_800C3EA0.s | +| 0.565 | func_800BECA4.s | +| 0.571 | func_800CBD40.s | +| 0.571 | func_800CBFDC.s | +| 0.577 | func_800CD16C.s | +| 0.577 | func_800CCA68.s | +| 0.577 | func_800C506C.s | +| 0.601 | func_800CD6B0.s | +| 0.601 | func_800CD5F0.s | +| 0.601 | func_800CCB10.s | +| 0.601 | func_800C3F1C.s | +| 0.607 | func_800C2970.s | +| 0.607 | func_800C2000.s | +| 0.625 | func_800D2B60.s | +| 0.625 | func_800CB01C.s | +| 0.625 | func_800C401C.s | +| 0.644 | func_800CB1CC.s | +| 0.645 | func_800C7C3C.s | +| 0.645 | func_800C2BFC.s | +| 0.645 | func_800C8588.s | +| 0.645 | func_800C2CA8.s | +| 0.645 | func_800C2D54.s | +| 0.645 | func_800C81C0.s | +| 0.648 | func_800CB5C0.s | +| 0.656 | func_800CC404.s | +| 0.656 | func_800CC284.s | +| 0.671 | func_800D3E64.s | +| 0.676 | func_800DA480.s | +| 0.693 | func_800C4AE8.s | +| 0.693 | func_800CB450.s | +| 0.693 | func_800CC944.s | +| 0.693 | func_800CB718.s | +| 0.693 | func_800CFAF0.s | +| 0.711 | func_800CB660.s | +| 0.712 | func_800BA534.s | +| 0.714 | func_800CDA24.s | +| 0.714 | func_800CD834.s | +| 0.714 | func_800CFB84.s | +| 0.727 | func_800D28A8.s | +| 0.731 | func_800CAF60.s | +| 0.738 | func_800BA65C.s | +| 0.745 | func_800D6D44.s | +| 0.749 | func_800AD7B8.s | +| 0.753 | func_800C42B0.s | +| 0.765 | func_800D2794.s | +| 0.778 | func_800C45AC.s | +| 0.785 | func_800C4BCC.s | +| 0.785 | func_800ACBA0.s | +| 0.786 | func_800CCFE8.s | +| 0.789 | func_800C46D0.s | +| 0.789 | func_800C5564.s | +| 0.789 | func_800C54BC.s | +| 0.789 | func_800C5414.s | +| 0.789 | func_800D4378.s | +| 0.789 | func_800CD0C4.s | +| 0.789 | func_800D2E94.s | +| 0.789 | func_800C5194.s | +| 0.789 | func_800C50EC.s | +| 0.793 | func_800C24A8.s | +| 0.799 | func_800D4780.s | +| 0.802 | func_800CF140.s | +| 0.805 | func_800C4804.s | +| 0.832 | func_800D2F3C.s | +| 0.835 | func_800CB4F8.s | +| 0.835 | func_800D4160.s | +| 0.840 | func_800A1368.s | +| 0.840 | func_800ADC90.s | +| 0.846 | func_800CB0B8.s | +| 0.856 | func_800CF028.s | +| 0.866 | func_800C2754.s | +| 0.866 | func_800C1DE4.s | +| 0.866 | func_800C228C.s | +| 0.873 | func_800D184C.s | +| 0.873 | func_800CD214.s | +| 0.873 | func_800C1D24.s | +| 0.875 | func_800C5A2C.s | +| 0.882 | func_800DA4FC.s | +| 0.887 | func_800C523C.s | +| 0.891 | func_800AB5E8.s | +| 0.891 | func_800C728C.s | +| 0.891 | func_800D4420.s | +| 0.891 | func_800CA95C.s | +| 0.891 | func_800CAA24.s | +| 0.891 | func_800CFC1C.s | +| 0.892 | func_800C30FC.s | +| 0.892 | func_800C32CC.s | +| 0.892 | func_800C31E4.s | +| 0.897 | func_800C1EEC.s | +| 0.897 | func_800C2394.s | +| 0.897 | func_800C285C.s | +| 0.899 | func_800C4DE8.s | +| 0.899 | func_800C4CE8.s | +| 0.909 | func_800CA074.s | +| 0.916 | func_800AA870.s | +| 0.917 | func_800B0EDC.s | +| 0.925 | func_800C684C.s | +| 0.925 | func_800C5668.s | +| 0.929 | func_800D3958.s | +| 0.929 | func_800D3A70.s | +| 0.929 | func_800D3840.s | +| 0.929 | func_800D3728.s | +| 0.939 | func_800CD91C.s | +| 0.939 | func_800CDB0C.s | +| 0.943 | func_800BC338.s | +| 0.947 | func_800BEAD4.s | +| 0.947 | func_800C9F78.s | +| 0.947 | func_800C9E7C.s | +| 0.947 | func_800C9B88.s | +| 0.947 | func_800C9C84.s | +| 0.947 | func_800C9D80.s | +| 0.948 | func_800CA158.s | +| 0.948 | func_800CA394.s | +| 0.948 | func_800C532C.s | +| 0.950 | func_800CB354.s | +| 0.952 | func_800D85FC.s | +| 0.954 | func_800D4214.s | +| 0.957 | func_800CDC28.s | +| 0.957 | func_800D7970.s | +| 0.958 | func_800D3548.s | +| 0.961 | func_800CCE94.s | +| 0.961 | func_800CD2E8.s | +| 0.965 | func_800AA514.s | +| 0.967 | func_800A8858.s | +| 0.968 | func_800D6F6C.s | +| 0.971 | func_800D1DB8.s | +| 0.971 | func_800AB4AC.s | +| 0.972 | func_800D4038.s | +| 0.976 | func_800D1A80.s | +| 0.977 | func_800D775C.s | +| 0.977 | func_800D3F30.s | +| 0.979 | func_800CCD54.s | +| 0.979 | func_800D3004.s | +| 0.980 | func_800CF874.s | +| 0.980 | func_800C8F64.s | +| 0.980 | func_800CDD40.s | +| 0.980 | func_800B69C0.s | +| 0.981 | func_800D6E0C.s | +| 0.981 | func_800D785C.s | +| 0.981 | func_800CA254.s | +| 0.982 | func_800D152C.s | +| 0.986 | func_800CA490.s | +| 0.989 | func_800CF718.s | +| 0.989 | func_800CADFC.s | +| 0.989 | func_800CAC98.s | +| 0.989 | func_800C4EE8.s | +| 0.990 | func_800CF9B8.s | +| 0.991 | func_800D3124.s | +| 0.991 | func_800D195C.s | +| 0.991 | func_800C1BF4.s | +| 0.992 | func_800C2E00.s | +| 0.994 | func_800D0938.s | +| 0.995 | func_800C9A20.s | +| 0.996 | func_800CFCE4.s | +| 0.996 | func_800C9080.s | +| 0.996 | func_800CD3F0.s | +| 0.996 | func_800D1200.s | +| 0.997 | func_800CA5D4.s | +| 0.997 | func_800C5740.s | +| 0.997 | func_800CAAEC.s | +| 0.997 | func_800A8E34.s | +| 0.998 | func_800AA180.s | +| 0.998 | func_800C0C18.s | +| 0.998 | func_800A6418.s | +| 0.998 | func_800AF96C.s | +| 0.998 | func_800B2DD4.s | +| 0.998 | func_800CEE44.s | +| 0.998 | func_800D4C68.s | +| 0.999 | func_800AA930.s | +| 0.999 | func_800A9B64.s | +| 0.999 | func_800CA77C.s | +| 0.999 | func_800AA348.s | +| 0.999 | func_800C5898.s | +| 0.999 | func_800CE054.s | +| 0.999 | func_800A424C.s | +| 0.999 | func_800CDE8C.s | +| 0.999 | func_800A14D8.s | +| 0.999 | func_800B1C7C.s | +| 0.999 | func_800CE6F4.s | +| 1.000 | func_800A2D5C.s | +| 1.000 | func_800D2C60.s | +| 1.000 | func_800CE904.s | +| 1.000 | func_800A4430.s | +| 1.000 | func_800AD858.s | +| 1.000 | func_800C40A4.s | +| 1.000 | func_800D707C.s | +| 1.000 | func_800C5B38.s | +| 1.000 | func_800C43C4.s | +| 1.000 | func_800C107C.s | +| 1.000 | func_800AA5E4.s | +| 1.000 | func_800D1350.s | +| 1.000 | func_800C1214.s | +| 1.000 | func_800D493C.s | +| 1.000 | func_800A9CE8.s | +| 1.000 | func_800ADAA4.s | +| 1.000 | func_800C3A20.s | +| 1.000 | func_800D1654.s | +| 1.000 | func_800D7D6C.s | +| 1.000 | func_800CE214.s | +| 1.000 | func_800CE480.s | +| 1.000 | func_800C6D64.s | +| 1.000 | func_800A45D4.s | +| 1.000 | func_800D5A60.s | +| 1.000 | func_800BAF54.s | +| 1.000 | func_800C7354.s | +| 1.000 | func_800A9EEC.s | +| 1.000 | func_800C1858.s | +| 1.000 | func_800C6FD8.s | +| 1.000 | func_800C3C34.s | +| 1.000 | func_800AF6EC.s | +| 1.000 | func_800D44E8.s | +| 1.000 | func_800B480C.s | +| 1.000 | func_800D579C.s | +| 1.000 | func_800AB728.s | +| 1.000 | func_800AE23C.s | +| 1.000 | func_800CEB94.s | +| 1.000 | func_800C13B0.s | +| 1.000 | func_800B5260.s | +| 1.000 | func_800CFE78.s | +| 1.000 | func_800D0180.s | +| 1.000 | func_800A8304.s | +| 1.000 | func_800D9C04.s | +| 1.000 | func_800ABFE8.s | +| 1.000 | func_800D0518.s | +| 1.000 | func_800C8B98.s | +| 1.000 | func_800C63CC.s | +| 1.000 | func_800C91D8.s | +| 1.000 | func_800B2A00.s | +| 1.000 | func_800B4EAC.s | +| 1.000 | func_800B4B04.s | +| 1.000 | func_800B2F40.s | +| 1.000 | func_800D2164.s | +| 1.000 | func_800C955C.s | +| 1.000 | func_800B2598.s | +| 1.000 | func_800B1E40.s | +| 1.000 | func_800B5504.s | +| 1.000 | func_800B0FB0.s | +| 1.000 | func_800B0A48.s | +| 1.000 | func_800B0618.s | +| 1.000 | func_800AFE1C.s | +| 1.000 | func_800AFAC4.s | +| 1.000 | func_800B62C4.s | +| 1.000 | func_800AEE24.s | +| 1.000 | func_800AE4DC.s | +| 1.000 | func_800B6B4C.s | +| 1.000 | func_800ADD70.s | +| 1.000 | func_800B79B8.s | +| 1.000 | func_800B86D8.s | +| 1.000 | func_800ACC5C.s | +| 1.000 | func_800AC35C.s | +| 1.000 | func_800B8CF0.s | +| 1.000 | func_800ABA70.s | +| 1.000 | func_800B9B0C.s | +| 1.000 | func_800AAB24.s | +| 1.000 | func_800BA7C4.s | +| 1.000 | func_800D0B4C.s | +| 1.000 | func_800BB3A8.s | +| 1.000 | func_800BBBCC.s | +| 1.000 | func_800BBF74.s | +| 1.000 | func_800A8F88.s | +| 1.000 | func_800BC9FC.s | +| 1.000 | func_800BEE10.s | +| 1.000 | func_800D5C9C.s | +| 1.000 | func_800A8968.s | +| 1.000 | func_800BF3AC.s | +| 1.000 | func_800A65A4.s | +| 1.000 | func_800BF908.s | +| 1.000 | func_800A5FB4.s | +| 1.000 | func_800A4BEC.s | +| 1.000 | func_800C0248.s | +| 1.000 | func_800C33B4.s | +| 1.000 | func_800C5FF4.s | +| 1.000 | func_800C6924.s | +| 1.000 | func_800D8710.s | +| 1.000 | func_800C75F0.s | +| 1.000 | func_800A364C.s | +| 1.000 | func_800A3020.s | +| 1.000 | func_800C7D5C.s | +| 1.000 | func_800A2314.s | +| 1.000 | func_800A16CC.s | +| 1.000 | func_800C8634.s | + +## main + +| Score | Function | +| --- | --- | +| 0.011 | func_800197B8.s | +| 0.035 | InitCARD.s | +| 0.046 | func_80018D4C.s | +| 0.047 | StartCARD.s | +| 0.058 | func_80034150.s | +| 0.063 | SsInitHot.s | +| 0.068 | func_8003408C.s | +| 0.092 | AverageSZ4.s | +| 0.092 | func_800425F8.s | +| 0.099 | rsin.s | +| 0.100 | StUnSetRing.s | +| 0.101 | CdReset.s | +| 0.106 | func_8001A174.s | +| 0.110 | func_8001A5B4.s | +| 0.110 | func_8002B7E0.s | +| 0.110 | func_8002B9AC.s | +| 0.110 | DecDCToutSync.s | +| 0.110 | StCdInterrupt2.s | +| 0.110 | DecDCTinSync.s | +| 0.110 | PadStop.s | +| 0.110 | func_8003E2B0.s | +| 0.110 | DecDCTout.s | +| 0.110 | func_8003DE4C.s | +| 0.110 | func_8003DE2C.s | +| 0.110 | func_8003DD84.s | +| 0.110 | func_80036298.s | +| 0.110 | DecDCTBufSize.s | +| 0.110 | SetDQB.s | +| 0.110 | SetIR0.s | +| 0.110 | SetDQA.s | +| 0.110 | SetData32.s | +| 0.110 | Lzc.s | +| 0.116 | func_8001A980.s | +| 0.118 | func_800294A4.s | +| 0.118 | DecDCTReset.s | +| 0.120 | func_8002B730.s | +| 0.120 | func_80034104.s | +| 0.120 | func_80024A04.s | +| 0.120 | _card_clear.s | +| 0.120 | _cmp.s | +| 0.120 | DecDCTinCallback.s | +| 0.120 | SpuSetReverbVoice.s | +| 0.120 | DecDCToutCallback.s | +| 0.120 | SpuSetNoiseVoice.s | +| 0.120 | func_8003E28C.s | +| 0.120 | func_800293D0.s | +| 0.120 | CdMix.s | +| 0.120 | CdGetSector.s | +| 0.120 | _SpuCallback.s | +| 0.120 | _SpuDataCallback.s | +| 0.120 | _addque.s | +| 0.120 | SpuSetPitchLFOVoice.s | +| 0.120 | PAD_dr.s | +| 0.120 | InitHeap.s | +| 0.120 | _card_load.s | +| 0.120 | _card_info.s | +| 0.120 | _new_card.s | +| 0.120 | _card_auto.s | +| 0.120 | _bu_init.s | +| 0.120 | bcopy.s | +| 0.120 | close.s | +| 0.120 | write.s | +| 0.120 | _96_remove.s | +| 0.120 | WaitEvent.s | +| 0.120 | strncmp.s | +| 0.120 | UnDeliverEvent.s | +| 0.120 | TestEvent.s | +| 0.120 | SystemError.s | +| 0.120 | StopPAD.s | +| 0.120 | StartPAD.s | +| 0.120 | StartCARD2.s | +| 0.120 | CdLastPos.s | +| 0.120 | strlen.s | +| 0.120 | delete.s | +| 0.120 | exit.s | +| 0.120 | strcmp.s | +| 0.120 | firstfile.s | +| 0.120 | format.s | +| 0.120 | func_80034410.s | +| 0.120 | SetVertex2.s | +| 0.120 | SetVertex1.s | +| 0.120 | func_80023AC4.s | +| 0.120 | SetVertex0.s | +| 0.120 | ChangeClearPAD.s | +| 0.120 | ChangeClearRCnt.s | +| 0.120 | CheckCallback.s | +| 0.120 | CloseEvent.s | +| 0.120 | srand.s | +| 0.120 | setjmp.s | +| 0.120 | read.s | +| 0.120 | rand.s | +| 0.120 | SetSp.s | +| 0.120 | puts.s | +| 0.120 | printf.s | +| 0.120 | open.s | +| 0.120 | DeliverEvent.s | +| 0.120 | DisableEvent.s | +| 0.120 | EnableEvent.s | +| 0.120 | EnterCriticalSection.s | +| 0.120 | ExitCriticalSection.s | +| 0.120 | FlushCache.s | +| 0.120 | GPU_cw.s | +| 0.120 | GetGraphDebug.s | +| 0.120 | GetGraphType.s | +| 0.120 | SetMem.s | +| 0.120 | GetVideoMode.s | +| 0.120 | HookEntryInt.s | +| 0.120 | nextfile.s | +| 0.120 | InitCARD2.s | +| 0.120 | _card_write.s | +| 0.120 | memset.s | +| 0.120 | memcpy.s | +| 0.120 | func_8003DCD8.s | +| 0.120 | SetGeomScreen.s | +| 0.120 | memchr.s | +| 0.120 | InitPAD.s | +| 0.120 | func_8003DCE8.s | +| 0.120 | func_8003DCF8.s | +| 0.120 | OpenEvent.s | +| 0.120 | ReturnFromException.s | +| 0.120 | ResetEntryInt.s | +| 0.120 | ReadLZC.s | +| 0.120 | ReadGeomScreen.s | +| 0.120 | func_8003FA9C.s | +| 0.120 | OpenTIM.s | +| 0.120 | PAD_init.s | +| 0.120 | AverageSZ3.s | +| 0.124 | func_80034F5C.s | +| 0.126 | func_80029A50.s | +| 0.130 | func_80018C94.s | +| 0.131 | func_8002B8B4.s | +| 0.131 | PadInit.s | +| 0.131 | func_80034CAC.s | +| 0.131 | def_cbread.s | +| 0.131 | def_cbready.s | +| 0.131 | def_cbsync.s | +| 0.131 | SetSprt8.s | +| 0.131 | SetRGBfifo.s | +| 0.131 | SetLineF2.s | +| 0.131 | SetBlockFill.s | +| 0.131 | func_80034D18.s | +| 0.131 | SetLineG2.s | +| 0.131 | SetMAC123.s | +| 0.131 | SetPolyF3.s | +| 0.131 | SetPolyF4.s | +| 0.131 | SetPolyFT3.s | +| 0.131 | SetPolyFT4.s | +| 0.131 | SetPolyG3.s | +| 0.131 | SetPolyG4.s | +| 0.131 | SetPolyGT3.s | +| 0.131 | SetPolyGT4.s | +| 0.131 | VectorNormalS.s | +| 0.131 | SetRii.s | +| 0.131 | SetSXSYfifo.s | +| 0.131 | SetSZfifo3.s | +| 0.131 | SetSprt.s | +| 0.131 | SetSprt16.s | +| 0.131 | SetIR123.s | +| 0.131 | SetTile.s | +| 0.131 | SetTile1.s | +| 0.131 | SetTile16.s | +| 0.131 | SetTile8.s | +| 0.141 | SpuStart.s | +| 0.143 | func_8002B904.s | +| 0.143 | func_8002B958.s | +| 0.143 | func_80041CD4.s | +| 0.143 | func_8002BA08.s | +| 0.143 | func_80029464.s | +| 0.143 | VectorNormal.s | +| 0.143 | func_8003DE6C.s | +| 0.143 | TermPrim.s | +| 0.143 | func_8002C8C4.s | +| 0.143 | GetClut.s | +| 0.143 | _status.s | +| 0.143 | SetSZfifo4.s | +| 0.143 | SetVideoMode.s | +| 0.143 | func_8003DDA4.s | +| 0.143 | func_80041EFC.s | +| 0.143 | GetIntrMask.s | +| 0.143 | func_8003DE84.s | +| 0.143 | ReadOTZ.s | +| 0.143 | _getctl.s | +| 0.145 | func_8002988C.s | +| 0.147 | func_80035CF0.s | +| 0.149 | func_80041AFC.s | +| 0.154 | SetShadeTex.s | +| 0.154 | SetSemiTrans.s | +| 0.156 | cd_read.s | +| 0.156 | func_8002B668.s | +| 0.156 | PadRead.s | +| 0.156 | StSetRing.s | +| 0.156 | SetDrawMove.s | +| 0.156 | DpqColor.s | +| 0.156 | IsEndPrim.s | +| 0.156 | SetIntrMask.s | +| 0.156 | NextPrim.s | +| 0.156 | NormalColor.s | +| 0.161 | func_8002D530.s | +| 0.161 | func_8002D668.s | +| 0.164 | SpuSetTransferMode.s | +| 0.164 | CdInit.s | +| 0.167 | func_8001A384.s | +| 0.167 | SpuSetIRQAddr.s | +| 0.170 | func_8002B6AC.s | +| 0.170 | set_alarm.s | +| 0.170 | SetLineG3.s | +| 0.170 | SetLineF3.s | +| 0.170 | SetLineG4.s | +| 0.170 | SetVertexTri.s | +| 0.170 | SetTransMatrix.s | +| 0.170 | NormalColorCol.s | +| 0.170 | SetGeomOffset.s | +| 0.170 | SetLineF4.s | +| 0.170 | AverageZ3.s | +| 0.170 | SetFarColor.s | +| 0.170 | SetBackColor.s | +| 0.170 | StSetMask.s | +| 0.170 | ReadGeomOffset.s | +| 0.181 | func_80048C58.s | +| 0.181 | SpuSetTransferCallback.s | +| 0.183 | func_800260DC.s | +| 0.185 | GetDispEnv.s | +| 0.185 | func_8002BBB4.s | +| 0.185 | GetDrawEnv.s | +| 0.185 | NormalColorDpq.s | +| 0.185 | CatPrim.s | +| 0.185 | LocalLight.s | +| 0.185 | AverageZ4.s | +| 0.185 | ColorCol.s | +| 0.185 | Intpl.s | +| 0.185 | VectorNormalSS.s | +| 0.187 | func_80034A90.s | +| 0.193 | func_80025174.s | +| 0.197 | _ExitCard.s | +| 0.197 | SetPriority.s | +| 0.197 | func_800346F8.s | +| 0.198 | MargePrim.s | +| 0.198 | func_80025B48.s | +| 0.200 | startIntrDMA.s | +| 0.200 | CD_initintr.s | +| 0.200 | SetTexWindow.s | +| 0.200 | func_8002BA5C.s | +| 0.200 | ColorDpq.s | +| 0.200 | DpqColorLight.s | +| 0.200 | LightColor.s | +| 0.200 | Square12.s | +| 0.200 | Square0.s | +| 0.210 | GPU_memset.s | +| 0.210 | memclr.s | +| 0.210 | DMA_memclr.s | +| 0.210 | VSync_memclr.s | +| 0.213 | setIntrVSync.s | +| 0.214 | _spu_write.s | +| 0.214 | StGetBackloc.s | +| 0.214 | func_8003DDF4.s | +| 0.214 | func_80019E4C.s | +| 0.214 | func_80025B10.s | +| 0.214 | func_8003DDBC.s | +| 0.214 | ResetRCnt.s | +| 0.214 | GetRCnt.s | +| 0.216 | func_80034350.s | +| 0.217 | _spu_read.s | +| 0.217 | OpenTMD.s | +| 0.217 | func_8001FA28.s | +| 0.217 | _spu_FsetDelayW.s | +| 0.217 | func_8002CC18.s | +| 0.217 | _ctl.s | +| 0.217 | func_8003345C.s | +| 0.217 | _spu_FsetDelayR.s | +| 0.228 | CdGetDiskType.s | +| 0.231 | func_80019D1C.s | +| 0.231 | SpuSetIRQCallback.s | +| 0.231 | func_80048BBC.s | +| 0.231 | DecDCTvlcSize.s | +| 0.231 | _spu_FgetRXXa.s | +| 0.234 | startIntrVSync.s | +| 0.234 | SetDrawMode.s | +| 0.235 | func_8001FA68.s | +| 0.235 | func_800345BC.s | +| 0.235 | func_8001FAAC.s | +| 0.235 | SetDrawOffset.s | +| 0.235 | TransMatrix.s | +| 0.235 | RotTrans.s | +| 0.235 | RotTransPers.s | +| 0.235 | RotTransSV.s | +| 0.235 | SetColorMatrix.s | +| 0.235 | func_800254E4.s | +| 0.235 | DMACallback.s | +| 0.235 | func_80034D2C.s | +| 0.235 | ApplyRotMatrix.s | +| 0.235 | RestartCallback.s | +| 0.235 | _param.s | +| 0.235 | StopCallback.s | +| 0.235 | InterruptCallback.s | +| 0.235 | VSyncCallbacks.s | +| 0.235 | SetRotMatrix.s | +| 0.235 | ChangeClearSIO.s | +| 0.235 | func_8003CE0C.s | +| 0.235 | func_80031CB0.s | +| 0.235 | SetLightMatrix.s | +| 0.235 | SquareSL0.s | +| 0.235 | ResetCallback.s | +| 0.235 | SquareSL12.s | +| 0.243 | csqrt.s | +| 0.244 | func_8001A280.s | +| 0.245 | func_80041620.s | +| 0.245 | CD_memcpy.s | +| 0.249 | func_800184C0.s | +| 0.249 | _patch_gte.s | +| 0.250 | SpuSetTransferStartAddr.s | +| 0.253 | GetODE.s | +| 0.253 | func_8002C2CC.s | +| 0.253 | StartRCnt.s | +| 0.253 | VSyncCallback.s | +| 0.253 | StopRCnt.s | +| 0.260 | func_8002D8E8.s | +| 0.260 | func_8002D7A0.s | +| 0.264 | func_8002B5A8.s | +| 0.264 | func_8002B608.s | +| 0.265 | CdRead2.s | +| 0.268 | func_80029818.s | +| 0.268 | func_800297A4.s | +| 0.273 | func_8002BFCC.s | +| 0.273 | SquareSS12.s | +| 0.273 | func_8002BCCC.s | +| 0.273 | SquareSS0.s | +| 0.284 | startIntr.s | +| 0.284 | SpuSetNoiseClock.s | +| 0.289 | func_80018E90.s | +| 0.289 | func_8003257C.s | +| 0.290 | func_80032C8C.s | +| 0.290 | func_80032CE8.s | +| 0.290 | get_ofs.s | +| 0.290 | _spu_FsetRXX.s | +| 0.291 | get_mode.s | +| 0.293 | func_8002E428.s | +| 0.293 | NormalColor3.s | +| 0.293 | func_80033420.s | +| 0.293 | AddPrim.s | +| 0.293 | DpqColor3.s | +| 0.293 | SetDefDispEnv.s | +| 0.293 | AddPrims.s | +| 0.305 | init_ring_status.s | +| 0.308 | func_80034600.s | +| 0.310 | func_8001DE70.s | +| 0.310 | func_8002C884.s | +| 0.312 | func_8002B1F8.s | +| 0.314 | LoadClut.s | +| 0.315 | func_80033224.s | +| 0.315 | DumpClut.s | +| 0.327 | func_80032BB4.s | +| 0.327 | func_8001964C.s | +| 0.330 | func_800347F8.s | +| 0.330 | func_800344C0.s | +| 0.332 | _patch_card2.s | +| 0.332 | func_80031EEC.s | +| 0.337 | func_80031BA0.s | +| 0.337 | NormalColorCol3.s | +| 0.350 | func_80018028.s | +| 0.355 | func_80015AFC.s | +| 0.355 | func_8001FF8C.s | +| 0.355 | func_8001FFD4.s | +| 0.356 | ReadTIM.s | +| 0.356 | SpuInitMalloc.s | +| 0.360 | ReadLightMatrix.s | +| 0.360 | NormalColorDpq3.s | +| 0.360 | ReadRotMatrix.s | +| 0.368 | v_wait.s | +| 0.368 | func_80048540.s | +| 0.373 | func_80038F04.s | +| 0.373 | SpuRead.s | +| 0.374 | func_8002B2F8.s | +| 0.374 | func_800348F4.s | +| 0.378 | func_800193F4.s | +| 0.379 | func_80032C20.s | +| 0.379 | func_80032718.s | +| 0.381 | memmove.s | +| 0.383 | StClearRing.s | +| 0.383 | func_80031AB0.s | +| 0.383 | _cwc.s | +| 0.392 | func_80025310.s | +| 0.397 | _cwb.s | +| 0.399 | DecDCTin.s | +| 0.402 | func_8003252C.s | +| 0.407 | LoadImage.s | +| 0.407 | StoreImage.s | +| 0.407 | TransposeMatrix.s | +| 0.407 | ApplyMatrix.s | +| 0.407 | func_80034DB0.s | +| 0.407 | LoadAverage0.s | +| 0.407 | LoadAverage12.s | +| 0.407 | SpuGetReverbModeParam.s | +| 0.421 | func_80031E98.s | +| 0.423 | CdDiskReady.s | +| 0.428 | restartIntr.s | +| 0.428 | func_80032ABC.s | +| 0.428 | _spu_FwaitFs.s | +| 0.428 | _spu_FsetPCR.s | +| 0.430 | _SpuIsInAllocateArea.s | +| 0.432 | func_80036244.s | +| 0.432 | ReadColorMatrix.s | +| 0.432 | func_80034D5C.s | +| 0.446 | func_8001C5BC.s | +| 0.446 | func_8001BA54.s | +| 0.452 | func_8002CC44.s | +| 0.457 | _spu_r_.s | +| 0.457 | func_800331CC.s | +| 0.457 | OuterProduct12.s | +| 0.457 | OuterProduct0.s | +| 0.467 | sin_1.s | +| 0.477 | DrawSyncCallback.s | +| 0.478 | SpuSetVoiceLoopStartAddr.s | +| 0.478 | SpuSetVoiceStartAddr.s | +| 0.481 | SpuGetKeyStatus.s | +| 0.482 | SetDrawArea.s | +| 0.486 | func_80025288.s | +| 0.496 | DecDCTPutEnv.s | +| 0.502 | _patch_card.s | +| 0.505 | _SpuIsInAllocateArea_.s | +| 0.507 | func_80021D5C.s | +| 0.507 | RotAverage3.s | +| 0.507 | ApplyMatrixSV.s | +| 0.507 | DrawPrim.s | +| 0.507 | LoadAverageByte.s | +| 0.507 | RotTransPers3.s | +| 0.510 | func_8002BBEC.s | +| 0.510 | func_8002C5C8.s | +| 0.516 | func_8002CB78.s | +| 0.516 | func_8002C9E4.s | +| 0.518 | func_80041D28.s | +| 0.522 | func_80018E18.s | +| 0.522 | func_80018AB0.s | +| 0.527 | func_800330C4.s | +| 0.527 | func_80033060.s | +| 0.527 | func_80032FFC.s | +| 0.527 | func_80032F98.s | +| 0.527 | func_80032E08.s | +| 0.527 | func_80032F34.s | +| 0.527 | func_80032ED0.s | +| 0.528 | func_80032B30.s | +| 0.530 | func_80041E30.s | +| 0.535 | func_80032A28.s | +| 0.535 | func_800328F8.s | +| 0.535 | func_80032770.s | +| 0.542 | func_80032D6C.s | +| 0.547 | StopCARD2.s | +| 0.556 | _spu_FiDMA.s | +| 0.560 | func_8002BA98.s | +| 0.560 | func_8002BC58.s | +| 0.560 | func_8002C734.s | +| 0.560 | func_8002C634.s | +| 0.562 | rcos.s | +| 0.569 | SetRCnt.s | +| 0.577 | DrawSync.s | +| 0.577 | SetGraphDebug.s | +| 0.582 | InitGeom.s | +| 0.591 | MDEC_out_sync.s | +| 0.591 | MDEC_in_sync.s | +| 0.602 | SpuSetVoicePitch.s | +| 0.606 | func_80021C4C.s | +| 0.620 | func_80025040.s | +| 0.625 | DrawOTag.s | +| 0.625 | func_8001B570.s | +| 0.630 | StSetStream.s | +| 0.631 | func_80035658.s | +| 0.633 | func_8002BB20.s | +| 0.634 | SpuSetReverbDepth.s | +| 0.644 | trapIntrVSync.s | +| 0.649 | func_8003298C.s | +| 0.650 | get_tw.s | +| 0.652 | _spu_FsetRXXa.s | +| 0.653 | func_8001937C.s | +| 0.659 | get_dx.s | +| 0.662 | SpuSetVoiceVolumeAttr.s | +| 0.667 | func_80033264.s | +| 0.672 | SpuSetVoiceVolume.s | +| 0.672 | SpuSetVoiceSL.s | +| 0.676 | MDEC_out.s | +| 0.678 | func_80031FF0.s | +| 0.683 | func_80035430.s | +| 0.689 | func_80036038.s | +| 0.693 | gteMIMefunc.s | +| 0.694 | func_80036190.s | +| 0.694 | SpuSetVoiceDR.s | +| 0.698 | MDEC_in.s | +| 0.698 | ClearImage.s | +| 0.698 | LoadAverageCol.s | +| 0.698 | RotAverage4.s | +| 0.698 | RotTransPers4.s | +| 0.698 | CdPosToInt.s | +| 0.698 | LoadTPage.s | +| 0.700 | func_80031CE0.s | +| 0.709 | func_80034E00.s | +| 0.711 | func_800332EC.s | +| 0.714 | SetDefDrawEnv.s | +| 0.714 | stopIntr.s | +| 0.715 | _sync.s | +| 0.717 | func_80026B70.s | +| 0.721 | func_80031F30.s | +| 0.722 | SpuSetReverb.s | +| 0.724 | func_800484A8.s | +| 0.726 | SetDispMask.s | +| 0.734 | func_800185A8.s | +| 0.738 | func_80029BAC.s | +| 0.738 | LoadAverageShort0.s | +| 0.738 | LoadAverageShort12.s | +| 0.738 | CD_vol.s | +| 0.742 | CD_searchdir.s | +| 0.745 | InvSquareRoot.s | +| 0.745 | DecDCTGetEnv.s | +| 0.751 | MDEC_reset.s | +| 0.753 | PushMatrix.s | +| 0.753 | PopMatrix.s | +| 0.757 | func_80026A94.s | +| 0.758 | get_tim_addr.s | +| 0.758 | SpuSetVoiceSRAttr.s | +| 0.759 | func_80027354.s | +| 0.760 | func_80036100.s | +| 0.764 | func_80018B14.s | +| 0.767 | func_8002FDA0.s | +| 0.772 | data_ready_callback.s | +| 0.773 | SpuSetVoiceARAttr.s | +| 0.783 | func_8002C300.s | +| 0.785 | setIntrDMA.s | +| 0.786 | GetTPage.s | +| 0.796 | _version.s | +| 0.799 | func_80018A04.s | +| 0.802 | SetGraphQueue.s | +| 0.803 | SpuSetVoiceRRAttr.s | +| 0.803 | func_8003337C.s | +| 0.803 | SquareRoot0.s | +| 0.805 | ClearOTagR.s | +| 0.806 | RotAverageNclip3.s | +| 0.810 | func_80031BE4.s | +| 0.810 | func_80033128.s | +| 0.810 | func_80031AFC.s | +| 0.817 | MoveImage.s | +| 0.818 | DumpTPage.s | +| 0.821 | PutDrawEnv.s | +| 0.824 | func_80031820.s | +| 0.833 | StRingStatus.s | +| 0.843 | func_8002CCDC.s | +| 0.856 | SquareRoot12.s | +| 0.858 | _SpuInit.s | +| 0.868 | func_80029E98.s | +| 0.873 | func_8002B3B4.s | +| 0.874 | callback.s | +| 0.875 | MatrixNormal.s | +| 0.875 | DumpDispEnv.s | +| 0.879 | StFreeRing.s | +| 0.887 | func_80018BB8.s | +| 0.889 | func_8002CDD0.s | +| 0.890 | func_8002BD04.s | +| 0.890 | func_8002C004.s | +| 0.895 | get_cs.s | +| 0.895 | get_ce.s | +| 0.898 | _otc.s | +| 0.899 | ClearOTag.s | +| 0.899 | _reset.s | +| 0.903 | RotAverageNclip4.s | +| 0.908 | func_80032804.s | +| 0.913 | __SN_ENTRY_POINT.s | +| 0.921 | func_80018ECC.s | +| 0.923 | SetFogNearFar.s | +| 0.923 | StGetNext.s | +| 0.925 | ResetGraph.s | +| 0.927 | func_8003A0E8.s | +| 0.930 | func_800112E8.s | +| 0.930 | func_8002A43C.s | +| 0.934 | func_8001A684.s | +| 0.940 | get_tmd_addr.s | +| 0.944 | checkRECT.s | +| 0.947 | CdControlB.s | +| 0.950 | func_8002CA84.s | +| 0.953 | setIntr.s | +| 0.953 | func_80028484.s | +| 0.957 | CdControlF.s | +| 0.958 | func_8001BB30.s | +| 0.961 | func_800138EC.s | +| 0.961 | CD_flush.s | +| 0.964 | func_80032614.s | +| 0.964 | func_80019690.s | +| 0.966 | MulRotMatrix0.s | +| 0.967 | func_8002CFC0.s | +| 0.968 | CdControl.s | +| 0.969 | func_8002F738.s | +| 0.970 | MulRotMatrix.s | +| 0.970 | func_8002382C.s | +| 0.970 | func_80022B5C.s | +| 0.971 | func_80017108.s | +| 0.972 | func_800150E4.s | +| 0.972 | func_80031D6C.s | +| 0.974 | main.s | +| 0.974 | func_8001B704.s | +| 0.975 | CD_datasync.s | +| 0.976 | func_8002E23C.s | +| 0.976 | VSync.s | +| 0.976 | CD_initvol.s | +| 0.978 | func_800318BC.s | +| 0.978 | func_80030234.s | +| 0.979 | func_800354CC.s | +| 0.979 | timeout.s | +| 0.981 | get_alarm.s | +| 0.982 | CD_getsector.s | +| 0.982 | func_80019F90.s | +| 0.983 | func_8001AB1C.s | +| 0.985 | SpuSetIRQ.s | +| 0.985 | CdIntToPos.s | +| 0.985 | SpuClearReverbWorkArea.s | +| 0.985 | SetGraphReverse.s | +| 0.985 | func_8001A9CC.s | +| 0.986 | csqrt_1.s | +| 0.986 | func_8002A7E8.s | +| 0.987 | func_8001155C.s | +| 0.987 | func_800323CC.s | +| 0.987 | MulMatrix0.s | +| 0.988 | ratan2.s | +| 0.989 | SetMulMatrix.s | +| 0.989 | MulMatrix.s | +| 0.989 | MulMatrix2.s | +| 0.990 | func_80016808.s | +| 0.991 | func_80035DC8.s | +| 0.991 | func_800418D8.s | +| 0.993 | _spu_writeByIO.s | +| 0.993 | ScaleMatrixL.s | +| 0.994 | func_8001FCDC.s | +| 0.994 | CD_init.s | +| 0.995 | ScaleMatrix.s | +| 0.997 | func_80023940.s | +| 0.997 | trapIntrDMA.s | +| 0.997 | func_80032274.s | +| 0.997 | func_8002A28C.s | +| 0.997 | DumpDrawEnv.s | +| 0.997 | func_80029F44.s | +| 0.998 | func_8001AC9C.s | +| 0.998 | CompMatrix.s | +| 0.999 | func_800487F0.s | +| 0.999 | func_80014E74.s | +| 0.999 | trapIntr.s | +| 0.999 | func_80041654.s | +| 0.999 | func_8001F710.s | +| 0.999 | func_80033894.s | +| 0.999 | func_800320C4.s | +| 0.999 | ApplyMatrixLV.s | +| 1.000 | RotMatrixX.s | +| 1.000 | RotMatrixZ.s | +| 1.000 | RotMatrixY.s | +| 1.000 | _clr.s | +| 1.000 | CdSearchFile.s | +| 1.000 | _spu_init.s | +| 1.000 | func_80022DE4.s | +| 1.000 | CD_sync.s | +| 1.000 | SpuSetKey.s | +| 1.000 | func_8001CB48.s | +| 1.000 | CD_newmedia.s | +| 1.000 | func_80027990.s | +| 1.000 | CD_cachefile.s | +| 1.000 | func_80017678.s | +| 1.000 | _SpuSetAnyVoice.s | +| 1.000 | _spu_t.s | +| 1.000 | CD_ready.s | +| 1.000 | func_8002AFB8.s | +| 1.000 | SpuMallocWithStartAddr.s | +| 1.000 | _dws.s | +| 1.000 | SpuSetCommonAttr.s | +| 1.000 | func_8002708C.s | +| 1.000 | func_80029C48.s | +| 1.000 | _addque2.s | +| 1.000 | SetDrawEnv.s | +| 1.000 | func_80026C5C.s | +| 1.000 | _drs.s | +| 1.000 | func_80029114.s | +| 1.000 | func_8002DA7C.s | +| 1.000 | func_800485A0.s | +| 1.000 | func_8001EC70.s | +| 1.000 | RotMatrixZYX.s | +| 1.000 | RotMatrix.s | +| 1.000 | RotMatrixYXZ.s | +| 1.000 | func_800140F4.s | +| 1.000 | func_80028E00.s | +| 1.000 | _spu_gcSPU.s | +| 1.000 | ReadTMD.s | +| 1.000 | _exeque.s | +| 1.000 | func_8001726C.s | +| 1.000 | func_8001C0EC.s | +| 1.000 | func_800294BC.s | +| 1.000 | func_8001BDB0.s | +| 1.000 | _SpuMallocSeparateTo3.s | +| 1.000 | func_80035744.s | +| 1.000 | func_80028930.s | +| 1.000 | func_800206E4.s | +| 1.000 | func_80015668.s | +| 1.000 | DecDCTvlc.s | +| 1.000 | func_800285AC.s | +| 1.000 | PutDispEnv.s | +| 1.000 | func_8001F1BC.s | +| 1.000 | SpuSetReverbModeParam.s | +| 1.000 | func_80030380.s | +| 1.000 | func_80027408.s | +| 1.000 | func_80016340.s | +| 1.000 | func_80015D64.s | +| 1.000 | func_80027B84.s | +| 1.000 | func_800308D4.s | +| 1.000 | func_8002AABC.s | +| 1.000 | func_80028030.s | +| 1.000 | func_80030E7C.s | +| 1.000 | getintr.s | +| 1.000 | func_8001AEE4.s | +| 1.000 | _spu_setReverbAttr.s | +| 1.000 | func_800230C4.s | +| 1.000 | func_8003EF30.s | +| 1.000 | func_8002F848.s | +| 1.000 | func_800169B8.s | +| 1.000 | func_80013C9C.s | +| 1.000 | func_8001D6A8.s | +| 1.000 | sprintf.s | +| 1.000 | func_80020058.s | +| 1.000 | func_8002F24C.s | +| 1.000 | func_8002ED34.s | +| 1.000 | func_8002E954.s | +| 1.000 | func_8001786C.s | +| 1.000 | func_800131B8.s | +| 1.000 | func_80012DB0.s | +| 1.000 | func_80023AD4.s | +| 1.000 | func_80020B68.s | +| 1.000 | func_80040CA8.s | +| 1.000 | func_800212A8.s | +| 1.000 | func_80034FC8.s | +| 1.000 | unpack_packet.s | +| 1.000 | func_8002E478.s | +| 1.000 | func_80021F58.s | + +## menu + +| Score | Function | +| --- | --- | +| 0.806 | func_801D1C2C.s | +| 0.998 | func_801D1D40.s | +| 0.999 | func_801D1F40.s | +| 1.000 | func_801D2DA8.s | +| 1.000 | func_801D080C.s | +| 1.000 | func_801D2408.s | + +## world + +| Score | Function | +| --- | --- | +| 0.000 | func_800BBD20.s | +| 0.000 | func_800AC700.s | +| 0.004 | func_800A460C.s | +| 0.025 | func_800B28CC.s | +| 0.061 | func_800B76A8.s | +| 0.066 | func_800BBC4C.s | +| 0.078 | func_800BB8E8.s | +| 0.110 | func_800A7F18.s | +| 0.116 | func_800A41E8.s | +| 0.120 | func_800A2040.s | +| 0.120 | func_800A40B8.s | +| 0.120 | func_800A45D4.s | +| 0.120 | func_800ADC70.s | +| 0.125 | func_800A3908.s | +| 0.127 | func_800AF110.s | +| 0.129 | func_800A6C00.s | +| 0.129 | func_800B6DCC.s | +| 0.129 | func_800AF96C.s | +| 0.131 | func_800A3DFC.s | +| 0.131 | func_800A3E4C.s | +| 0.131 | func_800B7C1C.s | +| 0.131 | func_800B64A0.s | +| 0.131 | func_800B7134.s | +| 0.139 | func_800BBBB0.s | +| 0.141 | func_800A38C8.s | +| 0.141 | func_800A8FA0.s | +| 0.143 | func_800A3E9C.s | +| 0.143 | func_800A9678.s | +| 0.143 | func_800A96A4.s | +| 0.143 | func_800A9D5C.s | +| 0.143 | func_800A9D88.s | +| 0.150 | func_800B7A40.s | +| 0.153 | func_800AA640.s | +| 0.154 | func_800AF9A0.s | +| 0.156 | func_800B7104.s | +| 0.156 | func_800B8720.s | +| 0.156 | func_800B57C0.s | +| 0.163 | func_800B6C84.s | +| 0.167 | func_800A9134.s | +| 0.167 | func_800AA684.s | +| 0.167 | func_800A98E4.s | +| 0.167 | func_800A8F48.s | +| 0.167 | func_800A984C.s | +| 0.168 | func_800B6E78.s | +| 0.168 | func_800B832C.s | +| 0.170 | func_800B64D8.s | +| 0.181 | func_800B86E8.s | +| 0.181 | func_800B075C.s | +| 0.181 | func_800B7B54.s | +| 0.182 | func_800A16E0.s | +| 0.185 | func_800AE5B8.s | +| 0.185 | func_800AE5F0.s | +| 0.185 | func_800A4080.s | +| 0.185 | func_800B579C.s | +| 0.185 | func_800B7838.s | +| 0.193 | func_800A91A4.s | +| 0.193 | func_800A91E0.s | +| 0.197 | func_800B7B78.s | +| 0.197 | func_800A9480.s | +| 0.197 | func_800BBA0C.s | +| 0.197 | func_800A1370.s | +| 0.198 | func_800A9AD0.s | +| 0.198 | func_800A9A70.s | +| 0.200 | func_800B65A4.s | +| 0.200 | func_800AE47C.s | +| 0.200 | func_800A8AF4.s | +| 0.205 | func_800B2E90.s | +| 0.209 | func_800B858C.s | +| 0.209 | func_800A9988.s | +| 0.209 | func_800A8C70.s | +| 0.213 | func_800A9820.s | +| 0.213 | func_800AB36C.s | +| 0.213 | func_800A94F4.s | +| 0.213 | func_800AA6A4.s | +| 0.213 | func_800AA04C.s | +| 0.213 | func_800AA2B8.s | +| 0.217 | func_800B0200.s | +| 0.217 | func_800B8D20.s | +| 0.217 | func_800B77F4.s | +| 0.226 | func_800A9018.s | +| 0.227 | func_800A5970.s | +| 0.231 | func_800B84D8.s | +| 0.231 | func_800A97A8.s | +| 0.231 | func_800BB9D0.s | +| 0.231 | func_800A97E4.s | +| 0.232 | func_800B79B8.s | +| 0.234 | func_800A1FAC.s | +| 0.240 | func_800A92F8.s | +| 0.245 | func_800A40F0.s | +| 0.245 | func_800A8A88.s | +| 0.253 | func_800ADC3C.s | +| 0.254 | func_800AD928.s | +| 0.259 | func_800A8CA4.s | +| 0.263 | func_800AF1A8.s | +| 0.264 | func_800A8ABC.s | +| 0.268 | func_800B77A8.s | +| 0.268 | func_800A5924.s | +| 0.273 | func_800A7EA4.s | +| 0.273 | func_800BB8B0.s | +| 0.279 | func_800A5A94.s | +| 0.289 | func_800BC9E8.s | +| 0.289 | func_800B7BD8.s | +| 0.293 | func_800B8488.s | +| 0.293 | func_800B01C4.s | +| 0.293 | func_800B8A5C.s | +| 0.295 | func_800AB92C.s | +| 0.298 | func_800B7480.s | +| 0.300 | func_800B2FD0.s | +| 0.304 | func_800AA098.s | +| 0.304 | func_800AA0E0.s | +| 0.304 | func_800AA128.s | +| 0.304 | func_800AA170.s | +| 0.310 | func_800A6B8C.s | +| 0.310 | func_800AF364.s | +| 0.310 | func_800AF2A4.s | +| 0.310 | func_800AF324.s | +| 0.311 | func_800A5348.s | +| 0.317 | func_800A993C.s | +| 0.332 | func_800A8A1C.s | +| 0.344 | func_800B5DD8.s | +| 0.345 | func_800ADA08.s | +| 0.350 | func_800B37E0.s | +| 0.360 | func_800B017C.s | +| 0.363 | func_800AB570.s | +| 0.368 | func_800ABA18.s | +| 0.378 | func_800AF0B0.s | +| 0.378 | func_800B851C.s | +| 0.397 | func_800A4008.s | +| 0.402 | func_800ADFC0.s | +| 0.407 | func_800B3300.s | +| 0.410 | func_800A8300.s | +| 0.414 | func_800AF1E8.s | +| 0.421 | func_800AD788.s | +| 0.421 | func_800C6598.s | +| 0.446 | func_800B0794.s | +| 0.447 | func_800B8760.s | +| 0.449 | func_800B338C.s | +| 0.451 | func_800AF24C.s | +| 0.471 | func_800A3EC8.s | +| 0.477 | func_800A1D54.s | +| 0.479 | func_800A692C.s | +| 0.480 | func_800A2108.s | +| 0.484 | func_800AB988.s | +| 0.490 | func_800AB48C.s | +| 0.503 | func_800A5A20.s | +| 0.508 | func_800AD63C.s | +| 0.517 | func_800B3828.s | +| 0.520 | func_800B69A4.s | +| 0.532 | func_800B6A4C.s | +| 0.532 | func_800B8CBC.s | +| 0.536 | func_800AB4F4.s | +| 0.552 | func_800B8A98.s | +| 0.565 | func_800A4138.s | +| 0.566 | func_800A5B88.s | +| 0.567 | func_800B85D4.s | +| 0.586 | func_800A4F08.s | +| 0.591 | func_800B6E08.s | +| 0.604 | func_800AD804.s | +| 0.610 | func_800B7620.s | +| 0.621 | func_800AA238.s | +| 0.621 | func_800AA1B8.s | +| 0.623 | func_800AFFBC.s | +| 0.625 | func_800AE0BC.s | +| 0.638 | func_800A2088.s | +| 0.644 | func_800ADE30.s | +| 0.647 | func_800A52A4.s | +| 0.653 | func_800B5274.s | +| 0.665 | func_800A6884.s | +| 0.669 | func_800A9064.s | +| 0.670 | func_800B0098.s | +| 0.672 | func_800A5208.s | +| 0.675 | func_800A0C54.s | +| 0.687 | func_800AAA00.s | +| 0.693 | func_800A59A0.s | +| 0.706 | func_800AA580.s | +| 0.718 | func_800ABA78.s | +| 0.718 | func_800A8898.s | +| 0.727 | func_800AB398.s | +| 0.730 | func_800B392C.s | +| 0.745 | func_800BA938.s | +| 0.749 | func_800C0808.s | +| 0.757 | func_800A0B48.s | +| 0.772 | func_800A60D8.s | +| 0.785 | func_800BFBF0.s | +| 0.786 | func_800A63FC.s | +| 0.786 | func_800AA6D0.s | +| 0.792 | func_800AE024.s | +| 0.793 | func_800B7714.s | +| 0.793 | func_800B0D98.s | +| 0.795 | func_800BB7DC.s | +| 0.800 | func_800B57DC.s | +| 0.802 | func_800B6348.s | +| 0.805 | func_800AD970.s | +| 0.808 | func_800A5AD8.s | +| 0.817 | func_800A12AC.s | +| 0.828 | func_800B6D10.s | +| 0.843 | func_800AC3C0.s | +| 0.848 | func_800A67A8.s | +| 0.851 | func_800A9B04.s | +| 0.856 | func_800B0250.s | +| 0.861 | func_800B667C.s | +| 0.867 | func_800A806C.s | +| 0.875 | func_800A9C64.s | +| 0.885 | func_800B40B4.s | +| 0.889 | func_800BCA78.s | +| 0.903 | func_800ADA64.s | +| 0.904 | func_800B0670.s | +| 0.909 | func_800BCB2C.s | +| 0.911 | func_800A44C4.s | +| 0.916 | func_800A5C08.s | +| 0.917 | func_800C2450.s | +| 0.919 | func_800B58F8.s | +| 0.926 | func_800A891C.s | +| 0.943 | func_800A7F38.s | +| 0.945 | func_800B89C4.s | +| 0.948 | func_800B624C.s | +| 0.949 | func_800ABE58.s | +| 0.950 | func_800AA8F8.s | +| 0.951 | func_800B21E4.s | +| 0.956 | func_800ADEA8.s | +| 0.957 | func_800BB568.s | +| 0.957 | func_800A8D58.s | +| 0.959 | func_800A1DF0.s | +| 0.959 | func_800A5FB4.s | +| 0.963 | func_800A8B30.s | +| 0.966 | func_800B2638.s | +| 0.966 | func_800B0E84.s | +| 0.968 | func_800B271C.s | +| 0.972 | func_800AE4B8.s | +| 0.973 | func_800B10AC.s | +| 0.974 | func_800AA7DC.s | +| 0.975 | func_800A31F8.s | +| 0.976 | func_800A53A8.s | +| 0.977 | func_800BB350.s | +| 0.981 | func_800BAA00.s | +| 0.982 | func_800B7228.s | +| 0.982 | func_800AB5E4.s | +| 0.983 | func_800BB450.s | +| 0.985 | func_800A57C8.s | +| 0.988 | func_800A9520.s | +| 0.988 | func_800B787C.s | +| 0.990 | func_800A5D00.s | +| 0.991 | func_800B307C.s | +| 0.992 | func_800B6B28.s | +| 0.994 | func_800B0334.s | +| 0.994 | func_800A5E28.s | +| 0.994 | func_800B0BF4.s | +| 0.994 | func_800A4DDC.s | +| 0.995 | func_800AC484.s | +| 0.996 | func_800A3964.s | +| 0.996 | func_800A9E14.s | +| 0.996 | func_800AE8AC.s | +| 0.997 | func_800ABB24.s | +| 0.997 | func_800B6EFC.s | +| 0.998 | func_800A36AC.s | +| 0.998 | func_800BC1CC.s | +| 0.998 | func_800B04AC.s | +| 0.998 | func_800A9334.s | +| 0.998 | func_800A86C4.s | +| 0.999 | func_800A141C.s | +| 1.000 | func_800A4268.s | +| 1.000 | func_800A6FC0.s | +| 1.000 | func_800A6994.s | +| 1.000 | func_800B5C7C.s | +| 1.000 | func_800BB650.s | +| 1.000 | func_800AB6E4.s | +| 1.000 | func_800A6168.s | +| 1.000 | func_800A64AC.s | +| 1.000 | func_800A54F0.s | +| 1.000 | func_800B87D8.s | +| 1.000 | func_800AE638.s | +| 1.000 | func_800AA304.s | +| 1.000 | func_800B98F0.s | +| 1.000 | func_800A6C3C.s | +| 1.000 | func_800A4F78.s | +| 1.000 | func_800B39B4.s | +| 1.000 | func_800AF9DC.s | +| 1.000 | func_800AE180.s | +| 1.000 | func_800B6724.s | +| 1.000 | func_800A19FC.s | +| 1.000 | func_800B59F4.s | +| 1.000 | func_800BCECC.s | +| 1.000 | func_800B8D4C.s | +| 1.000 | func_800B3418.s | +| 1.000 | func_800C1D58.s | +| 1.000 | func_800AFCC8.s | +| 1.000 | func_800A3304.s | +| 1.000 | func_800B1650.s | +| 1.000 | func_800B962C.s | +| 1.000 | func_800C08A8.s | +| 1.000 | func_800ABFC0.s | +| 1.000 | func_800BCBE8.s | +| 1.000 | func_800B7C7C.s | +| 1.000 | func_800B2304.s | +| 1.000 | func_800B29CC.s | +| 1.000 | func_800C3DB0.s | +| 1.000 | func_800B5E28.s | +| 1.000 | func_800B0810.s | +| 1.000 | func_800BFCAC.s | +| 1.000 | func_800C0B48.s | +| 1.000 | func_800BC420.s | +| 1.000 | func_800A0D2C.s | +| 1.000 | func_800B4244.s | +| 1.000 | func_800B1C80.s | +| 1.000 | func_800B45DC.s | +| 1.000 | func_800B11C4.s | +| 1.000 | func_800B5314.s | +| 1.000 | func_800B9B2C.s | +| 1.000 | func_800C02F4.s | +| 1.000 | func_800AAB18.s | +| 1.000 | func_800A21B4.s | +| 1.000 | func_800B3C40.s | +| 1.000 | func_800C1490.s | +| 1.000 | func_800AF3A4.s | +| 1.000 | func_800C2130.s | +| 1.000 | func_800A71E8.s | +| 1.000 | func_800C2524.s | +| 1.000 | func_800C31F0.s | +| 1.000 | func_800C3948.s | +| 1.000 | func_800B90C0.s | +| 1.000 | func_800C4148.s | +| 1.000 | func_800C4FB4.s | +| 1.000 | func_800C5CD4.s | +| 1.000 | func_800C6104.s | +| 1.000 | func_800AEA48.s | diff --git a/automation/rank_all.py b/automation/rank_all.py new file mode 100644 index 0000000..ab04869 --- /dev/null +++ b/automation/rank_all.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python3 +"""Run `./mako.sh rank ` for each module and combine results into a Markdown file.""" + +import subprocess +import sys +from pathlib import Path + +REPO_ROOT = Path(__file__).resolve().parent.parent +MAKO = REPO_ROOT / "mako.sh" +OUTPUT = REPO_ROOT / "automation" / "rank_all.md" + +def discover_modules() -> list[str]: + asm_dir = REPO_ROOT / "asm" / "us" + return sorted(p.name for p in asm_dir.iterdir() if p.is_dir()) + + +def rank_module(module: str) -> list[str]: + result = subprocess.run( + [str(MAKO), "rank", module], + capture_output=True, + text=True, + cwd=REPO_ROOT, + ) + if result.returncode != 0: + print(f" WARNING: rank failed for {module}: {result.stderr.strip()}", file=sys.stderr) + return [] + lines = [l for l in result.stdout.splitlines() if l.strip()] + return lines + + +def main() -> None: + modules = discover_modules() + sections: list[str] = ["# Function Rank (easiest → hardest)\n"] + + for module in modules: + print(f"Ranking {module}...") + lines = rank_module(module) + sections.append(f"## {module}\n") + if lines: + rows = ["| Score | Function |", "| --- | --- |"] + for line in lines: + parts = line.split(": ", 1) + if len(parts) == 2: + score, func = parts + rows.append(f"| {score} | {func} |") + else: + rows.append(f"| — | {line} |") + sections.append("\n".join(rows)) + else: + sections.append("_No non-decompiled functions._") + sections.append("") + + output = "\n".join(sections) + OUTPUT.write_text(output, encoding="utf-8") + print(f"\nWrote {OUTPUT}") + + +if __name__ == "__main__": + main() diff --git a/automation/requirements.txt b/automation/requirements.txt new file mode 100644 index 0000000..cd674f4 --- /dev/null +++ b/automation/requirements.txt @@ -0,0 +1,6 @@ +# Chunk 1: Discovery & Database +# No external dependencies needed! Uses Python stdlib only. + +# Future chunks will add: +# requests>=2.31.0 # For API calls (Chunk 5) +# rich>=13.0.0 # For pretty CLI output (Chunk 6) diff --git a/automation/revert_nonmatching.py b/automation/revert_nonmatching.py new file mode 100644 index 0000000..342bf9a --- /dev/null +++ b/automation/revert_nonmatching.py @@ -0,0 +1,240 @@ +#!/usr/bin/env python3 +""" +Revert all decompiled/verified functions to INCLUDE_ASM stubs, then rebuild. + +This establishes a clean baseline where `make rebuild` passes all SHA1 checks +and creates the `expected/` directory that objdiff-cli needs for binary matching. +After running this script, restart the automation agent — it will use objdiff-cli +to verify each function against the reference before keeping decompiled code. + +Usage: + cd automation/ + python revert_nonmatching.py # Revert all + rebuild + python revert_nonmatching.py --dry-run # Preview without changes + python revert_nonmatching.py --module battle --skip-build + python revert_nonmatching.py --skip-build # Just revert, no rebuild +""" +import argparse +import re +import subprocess +import sys +from pathlib import Path +from typing import Dict, List, Optional, Tuple + +from database import DecompDatabase + +PROJECT_ROOT = Path(__file__).parent.parent + + +def get_include_asm_dir(asm_file_path: str) -> Optional[str]: + """Derive the INCLUDE_ASM directory argument from the DB asm_file_path. + + e.g. "asm/us/main/nonmatchings/18B8/func_80010000.s" + → "asm/us/main/nonmatchings/18B8" + """ + if not asm_file_path: + return None + return str(Path(asm_file_path).parent) + + +def replace_func_with_stub(content: str, func_name: str, asm_dir: str) -> Tuple[str, bool]: + """Replace a C function body definition with an INCLUDE_ASM stub. + + Locates the function definition by matching its header line ending with '{' + (not a prototype ending with ';'), walks brace-counting to the matching '}', + and replaces the entire range with a single INCLUDE_ASM line. + + Returns (new_content, was_replaced). + """ + pattern = re.compile( + r'^[^\s\n][^\n]*\b' + re.escape(func_name) + r'\s*\([^)]*\)[^;{]*\{', + re.MULTILINE, + ) + m = pattern.search(content) + if not m: + return content, False + + # Start of the definition (include the return-type line which starts at the + # previous newline, or at the very beginning of the file). + def_start = content.rfind('\n', 0, m.start()) + 1 + + # Walk from the opening '{' to find the matching closing '}' + depth = 0 + end_pos = None + for i in range(m.end() - 1, len(content)): + if content[i] == '{': + depth += 1 + elif content[i] == '}': + depth -= 1 + if depth == 0: + end_pos = i + break + if end_pos is None: + return content, False + + # Include the trailing newline after '}' + after_end = end_pos + 1 + if after_end < len(content) and content[after_end] == '\n': + after_end += 1 + + stub = f'INCLUDE_ASM("{asm_dir}", {func_name});\n' + return content[:def_start] + stub + content[after_end:], True + + +def run_rebuild(verbose: bool = False) -> bool: + """Run `make rebuild` from the project root and return True on success.""" + print("\nRunning make rebuild to establish expected/ baseline...") + result = subprocess.run( + ['make', 'rebuild'], + cwd=str(PROJECT_ROOT), + capture_output=not verbose, + text=True, + ) + if result.returncode == 0: + print("✅ make rebuild succeeded — expected/ baseline established") + return True + else: + print("❌ make rebuild failed") + if not verbose: + # Print the tail of the output to show what went wrong + combined = (result.stdout or '') + (result.stderr or '') + print(combined[-3000:]) + return False + + +def main(): + parser = argparse.ArgumentParser( + description='Revert decompiled functions to INCLUDE_ASM stubs for objdiff baseline') + parser.add_argument('--dry-run', action='store_true', + help='Show what would be done without writing changes') + parser.add_argument('--module', type=str, + help='Only process a specific module (e.g. battle, field)') + parser.add_argument('--skip-build', action='store_true', + help='Revert files but skip the make rebuild step') + parser.add_argument('--verbose', '-v', action='store_true', + help='Verbose output (also shows full build log)') + args = parser.parse_args() + + db = DecompDatabase() + + # Collect all functions that have been decompiled in any form + statuses = ['decompiled', 'verified', 'decompiled_needs_refine'] + functions: List[Dict] = [] + for status in statuses: + functions.extend(db.get_functions_by_status(status, module=args.module)) + + if not functions: + print("No decompiled/verified functions found — nothing to revert") + return + + print(f"Found {len(functions)} function(s) with statuses: {statuses}") + if args.module: + print(f" (filtered to module: {args.module})") + + # Group by C file so each file is read/written only once + by_file: Dict[str, List] = {} + for func in functions: + c_file = func.get('c_file_path') + if not c_file: + print(f" Warning: {func['name']} has no c_file_path, skipping") + continue + by_file.setdefault(c_file, []).append(func) + + print(f"Across {len(by_file)} C file(s)\n") + + reverted_total = 0 + skipped_total = 0 + reverted_names: List[str] = [] + + for rel_c_path, funcs_in_file in sorted(by_file.items()): + full_path = PROJECT_ROOT / rel_c_path + if not full_path.exists(): + print(f" ⚠️ File not found: {rel_c_path}") + skipped_total += len(funcs_in_file) + continue + + content = full_path.read_text() + file_reverted = 0 + + for func in funcs_in_file: + func_name = func['name'] + asm_dir = get_include_asm_dir(func.get('asm_file_path') or '') + + if not asm_dir: + print(f" ⚠️ {func_name}: no asm_file_path in DB — skipping") + skipped_total += 1 + continue + + # Already a stub? Nothing to do. + already_stub = re.search( + rf'INCLUDE_ASM\s*\(\s*"[^"]*"\s*,\s*{re.escape(func_name)}\s*\)', + content, + ) + if already_stub: + if args.verbose: + print(f" ⏭ {func_name}: already INCLUDE_ASM stub") + skipped_total += 1 + continue + + new_content, replaced = replace_func_with_stub(content, func_name, asm_dir) + if replaced: + content = new_content + file_reverted += 1 + reverted_names.append(func_name) + if args.verbose: + print(f" ✅ {func_name}: replaced with INCLUDE_ASM stub") + else: + if args.verbose: + print(f" ⚠️ {func_name}: body not found in file — already a stub?") + # Treat as already-stubbed (body not found means it was already replaced) + reverted_names.append(func_name) + file_reverted += 1 + + if file_reverted > 0: + if not args.dry_run: + full_path.write_text(content) + print(f" 📝 {rel_c_path}: reverted {file_reverted} function(s)") + else: + print(f" [DRY RUN] {rel_c_path}: would revert {file_reverted} function(s)") + + reverted_total += file_reverted + + print(f"\nReverted: {reverted_total} Skipped: {skipped_total}") + + if args.dry_run: + print("\n[DRY RUN] No files written, no DB changes, no rebuild.") + if not args.skip_build: + print("[DRY RUN] Would run: make rebuild") + return + + # Update DB: mark all reverted functions back to 'todo' + if reverted_names: + print("\nUpdating database...") + for func_name in reverted_names: + db.update_function_status( + func_name, 'todo', + notes='Reverted to INCLUDE_ASM stub for objdiff baseline rebuild') + print(f" Marked {len(reverted_names)} function(s) as 'todo'") + + if args.skip_build: + print("\nSkipping rebuild (--skip-build). Run `make rebuild` manually when ready.") + return + + success = run_rebuild(verbose=args.verbose) + if not success: + print("\n⚠️ Build failed after revert. Common causes:") + print(" - Remaining compile errors in C files (e.g. type conflicts in field.c/world.c)") + print(" - These are pre-existing issues unrelated to decompiled functions.") + print(" Re-run with --verbose for the full build output.") + sys.exit(1) + else: + print("\n✅ Baseline established.") + print(" The expected/ directory now has reference object files for objdiff-cli.") + print(" Next steps:") + print(" 1. Restart the automation agent — it will now verify each") + print(" decompiled function against the binary before keeping it.") + print(" 2. Run: python agent.py --run --verbose") + + +if __name__ == '__main__': + main() diff --git a/automation/review_llm_fixes.py b/automation/review_llm_fixes.py new file mode 100755 index 0000000..f9b2454 --- /dev/null +++ b/automation/review_llm_fixes.py @@ -0,0 +1,254 @@ +#!/usr/bin/env python3 +""" +Review LLM Auto-Fixes + +Helper tool to review functions that were automatically fixed by the LLM. +Shows functions marked as 'decompiled_needs_refine' from LLM fixes. + +Usage: + python review_llm_fixes.py --list # List all LLM-fixed functions + python review_llm_fixes.py --log # Show audit log + python review_llm_fixes.py --promote func # Promote to 'decompiled' after manual review + python review_llm_fixes.py --stats # Statistics on LLM fixes +""" + +import argparse +import sqlite3 +import json +from pathlib import Path +from datetime import datetime + +PROJECT_ROOT = Path(__file__).parent.parent +DB_PATH = Path(__file__).parent / "functions.db" +AUDIT_LOG = Path(__file__).parent / "llm_fixes_audit.log" + + +def list_llm_fixes(): + """List all functions with LLM auto-fixes.""" + conn = sqlite3.connect(DB_PATH) + conn.row_factory = sqlite3.Row + cursor = conn.cursor() + + # Find functions with LLM fix notes + cursor.execute(""" + SELECT name, status, c_file_path, notes, updated_at + FROM functions + WHERE notes LIKE '%LLM auto-fix%' + ORDER BY updated_at DESC + """) + + results = cursor.fetchall() + + if not results: + print("No LLM-fixed functions found.") + return + + print(f"\n{'='*80}") + print(f"LLM AUTO-FIXED FUNCTIONS ({len(results)} total)") + print(f"{'='*80}\n") + + needs_refine = [] + decompiled = [] + + for row in results: + # Try to parse JSON notes + try: + notes_data = json.loads(row['notes']) + if 'llm_analysis' in notes_data: + # This is just analysis, not a fix + continue + except (json.JSONDecodeError, TypeError): + pass + + # Check if it's an actual fix + if 'LLM auto-fix' not in row['notes']: + continue + + # Extract confidence + confidence = 'unknown' + if '(high confidence)' in row['notes']: + confidence = 'high' + elif '(medium confidence)' in row['notes']: + confidence = 'medium' + elif '(low confidence)' in row['notes']: + confidence = 'low' + + entry = { + 'name': row['name'], + 'status': row['status'], + 'file': row['c_file_path'], + 'confidence': confidence, + 'updated': row['updated_at'], + 'notes': row['notes'] + } + + if row['status'] == 'decompiled_needs_refine': + needs_refine.append(entry) + else: + decompiled.append(entry) + + # Show functions needing review + if needs_refine: + print(f"⚠️ NEEDS MANUAL REVIEW ({len(needs_refine)} functions):") + print(f"{'-'*80}") + for entry in needs_refine: + print(f" {entry['name']}") + print(f" File: {entry['file']}") + print(f" Confidence: {entry['confidence']}") + print(f" Updated: {entry['updated']}") + explanation = entry['notes'].split('): ', 1)[-1] if '): ' in entry['notes'] else '' + if explanation: + print(f" Fix: {explanation[:100]}...") + print() + + # Show already-decompiled (high confidence) + if decompiled: + print(f"\n✅ HIGH CONFIDENCE (already marked 'decompiled' - {len(decompiled)} functions):") + print(f"{'-'*80}") + for entry in decompiled[:5]: # Show first 5 + print(f" {entry['name']} ({entry['file']})") + if len(decompiled) > 5: + print(f" ... and {len(decompiled) - 5} more") + + conn.close() + + +def show_audit_log(): + """Display the audit log.""" + if not AUDIT_LOG.exists(): + print("No audit log found.") + return + + print(f"\n{'='*80}") + print("LLM FIX AUDIT LOG") + print(f"{'='*80}\n") + + with open(AUDIT_LOG, 'r') as f: + lines = f.readlines() + + if not lines: + print("Audit log is empty.") + return + + print(f"{'Timestamp':<20} {'Function':<25} {'Confidence':<10} {'Error Type'}") + print(f"{'-'*80}") + + for line in lines[-20:]: # Show last 20 + parts = line.strip().split('\t') + if len(parts) >= 6: + timestamp = parts[0].split('T')[0] # Just date + func_name = parts[1] + confidence = parts[3] + error_type = parts[4][:30] if len(parts[4]) > 30 else parts[4] + print(f"{timestamp:<20} {func_name:<25} {confidence:<10} {error_type}") + + if len(lines) > 20: + print(f"\n... showing last 20 of {len(lines)} entries") + + +def promote_function(func_name): + """Promote a function from needs_refine to decompiled after manual review.""" + conn = sqlite3.connect(DB_PATH) + cursor = conn.cursor() + + # Check current status + cursor.execute("SELECT status, notes FROM functions WHERE name = ?", (func_name,)) + row = cursor.fetchone() + + if not row: + print(f"Function {func_name} not found in database.") + return + + status, notes = row + + if status != 'decompiled_needs_refine': + print(f"Function {func_name} has status '{status}', not 'decompiled_needs_refine'.") + print("Only functions flagged for review can be promoted.") + return + + # Update status + cursor.execute(""" + UPDATE functions + SET status = 'decompiled', + notes = ?, + updated_at = CURRENT_TIMESTAMP + WHERE name = ? + """, (f"{notes} [Manually reviewed and promoted]", func_name)) + + conn.commit() + conn.close() + + print(f"✅ Promoted {func_name} to 'decompiled' status.") + print(f" Function has been manually reviewed and approved.") + + +def show_statistics(): + """Show statistics on LLM fixes.""" + conn = sqlite3.connect(DB_PATH) + cursor = conn.cursor() + + # Count LLM fixes by status + cursor.execute(""" + SELECT status, COUNT(*) as count + FROM functions + WHERE notes LIKE '%LLM auto-fix%' + GROUP BY status + """) + + stats = dict(cursor.fetchall()) + + # Count by confidence (from audit log) + confidence_counts = {'high': 0, 'medium': 0, 'low': 0} + if AUDIT_LOG.exists(): + with open(AUDIT_LOG, 'r') as f: + for line in f: + parts = line.strip().split('\t') + if len(parts) >= 4: + conf = parts[3] + if conf in confidence_counts: + confidence_counts[conf] += 1 + + print(f"\n{'='*60}") + print("LLM FIX STATISTICS") + print(f"{'='*60}\n") + + print("By Status:") + total = sum(stats.values()) + for status, count in stats.items(): + print(f" {status}: {count} ({count/total*100:.1f}%)") + + print(f"\nBy Confidence:") + conf_total = sum(confidence_counts.values()) + if conf_total > 0: + for conf, count in confidence_counts.items(): + print(f" {conf}: {count} ({count/conf_total*100:.1f}%)") + + print(f"\nTotal LLM fixes attempted: {conf_total}") + print(f"Functions needing review: {stats.get('decompiled_needs_refine', 0)}") + + conn.close() + + +def main(): + parser = argparse.ArgumentParser(description='Review LLM auto-fixes') + parser.add_argument('--list', action='store_true', help='List all LLM-fixed functions') + parser.add_argument('--log', action='store_true', help='Show audit log') + parser.add_argument('--stats', action='store_true', help='Show statistics') + parser.add_argument('--promote', metavar='FUNC', help='Promote function to decompiled after review') + + args = parser.parse_args() + + if args.list: + list_llm_fixes() + elif args.log: + show_audit_log() + elif args.stats: + show_statistics() + elif args.promote: + promote_function(args.promote) + else: + parser.print_help() + + +if __name__ == '__main__': + main() From 03e7930391f6b0d4eca933112f440ae6c368af21 Mon Sep 17 00:00:00 2001 From: armstrca Date: Wed, 22 Apr 2026 18:57:18 -0500 Subject: [PATCH 2/4] functions.db --- automation/functions.db | Bin 1052672 -> 1052672 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/automation/functions.db b/automation/functions.db index d6672f5462a33a1de499cf974b928c3ed2281523..d59badcd4a52458a59401958410d1c7f53e6a7f5 100644 GIT binary patch literal 1052672 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 Date: Wed, 22 Apr 2026 18:59:53 -0500 Subject: [PATCH 3/4] gitignore --- .gitignore | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.gitignore b/.gitignore index 523511d..5ea6a59 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,13 @@ undefined_syms_auto.*.txt build.ninja objdiff.json /permute* + +automation/functions.db +automation/agent.log +automation/agent_summary.json +automation/__pycache__/ +automation/compile_errors_report.json +automation/CONTINUE_SETUP.md +automation/HANDOFF.md +automation/QUICK_START_TYPE_LEARNING.md +automation/TYPE_LEARNING.md From be2611097a05b2feac54c940be01db7904d2c25c Mon Sep 17 00:00:00 2001 From: armstrca Date: Thu, 23 Apr 2026 13:26:15 -0500 Subject: [PATCH 4/4] 8 new functions - battle2.c, ending.c, 18B8.c, akao.c, bginmenu.c --- automation/agent.log | 1482 +- automation/agent.py | 46 +- automation/agent_summary.json | 10 +- automation/build.py | 63 +- automation/build_warnings_analysis.txt | 318 - automation/functions.db | Bin 1052672 -> 1052672 bytes automation/generate_decls.py | 2 + automation/intellisense_fixer.py | 8 + automation/make build log.txt | 376 +- automation/missing_types_reports.json | 29977 +++-------------------- automation/rank_all.md | 1380 +- include/decomp_decls.h | 408 + include/decomp_decls_battle.h | 195 + include/decomp_decls_field.h | 15 + include/decomp_decls_magic.h | 7 + include/decomp_decls_main.h | 147 + include/decomp_decls_menu.h | 25 + include/decomp_decls_world.h | 62 + src/battle/battle2.c | 9 +- src/ending/ending.c | 2 + src/main/18B8.c | 5 +- src/main/akao.c | 4 +- src/menu/bginmenu.c | 5 +- 23 files changed, 5635 insertions(+), 28911 deletions(-) delete mode 100644 automation/build_warnings_analysis.txt create mode 100644 include/decomp_decls.h create mode 100644 include/decomp_decls_battle.h create mode 100644 include/decomp_decls_field.h create mode 100644 include/decomp_decls_magic.h create mode 100644 include/decomp_decls_main.h create mode 100644 include/decomp_decls_menu.h create mode 100644 include/decomp_decls_world.h diff --git a/automation/agent.log b/automation/agent.log index d64c8d6..dc825ee 100644 --- a/automation/agent.log +++ b/automation/agent.log @@ -1,1199 +1,487 @@ -[2026-04-22 17:15:48] [INFO] Dependency analysis enabled - building call graph... -[2026-04-22 17:15:49] [INFO] Analyzed 3520 functions across all modules -[2026-04-22 17:15:49] [INFO] 1986 leaf functions (56.4%) -[2026-04-22 17:15:49] [INFO] Most depended on: func_800BEAD4 (237 dependents) -[2026-04-22 17:15:49] [INFO] ============================================================ -[2026-04-22 17:15:49] [INFO] STARTING DECOMPILATION AGENT -[2026-04-22 17:15:49] [INFO] ============================================================ -[2026-04-22 17:15:49] [INFO] Batch size: 3 -[2026-04-22 17:15:49] [INFO] Verify interval: 20 -[2026-04-22 17:15:49] [INFO] Checking ASM splits... -[2026-04-22 17:15:49] [INFO] ASM splits up to date -[2026-04-22 17:15:49] [INFO] Refreshed decomp_decls.h + per-module decls: 366 declarations -[2026-04-22 17:15:49] [WARN] Reverted func_800293F4 in akao.c (? in extern block) -[2026-04-22 17:15:49] [WARN] Reverted func_800A22E4 in ending.c (? in extern block) -[2026-04-22 17:15:49] [WARN] Reverted func_800AEB80 in battle.c (? type marker) -[2026-04-22 17:15:49] [WARN] Reverted func_800A23BC in battle.c (? in extern block) -[2026-04-22 17:15:49] [WARN] Reverted func_800D61AC in battle2.c (? type marker) -[2026-04-22 17:15:49] [WARN] Reverted func_800CD558 in battle2.c (? in extern block) -[2026-04-22 17:15:49] [WARN] Reverted 6 function(s) with '?' type markers to INCLUDE_ASM -[2026-04-22 17:15:49] [INFO] Running initial compilation audit of decompiled functions... -[2026-04-22 17:15:50] [INFO] Startup audit: all decompiled functions compile cleanly -[2026-04-22 17:15:50] [INFO] sym_export alias check: all overlay jal targets accounted for -[2026-04-22 17:15:50] [INFO] Reset retry counters for 797 failed/blocked function(s) -[2026-04-22 17:15:50] [INFO] Initial state: 25/1281 verified -[2026-04-22 17:15:51] [INFO] Processing batch of 3 functions -[2026-04-22 17:15:51] [INFO] [1/3] Decompiling func_801D027C (48 lines) - -============================================================ -Attempting to decompile: func_801D027C -============================================================ -Module: menu -Current status: todo -⚠️ Decompilation produced invalid output: PSY-Q compilation failed: aggregate value used where an integer was expected; incompatible types in assignment -🔄 Reverting bginmenu.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:15:52] [INFO] [2/3] Decompiling func_800AC6B4 (41 lines) - -============================================================ -Attempting to decompile: func_800AC6B4 -============================================================ -Module: battle -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting battle.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:15:53] [INFO] [3/3] Decompiling func_800D3548 (43 lines) - -============================================================ -Attempting to decompile: func_800D3548 -============================================================ -Module: battle -Current status: todo -⚠️ Decompilation produced invalid output: Function 'func_800D3548' not found as a definition after decompilation (LLM may have renamed it) -🔄 Reverting battle2.c to INCLUDE_ASM (keeping file clean) - -============================================================ -AGENT PROGRESS - 17:15:54 -============================================================ -Processed: 0 functions -Verified: 25/1281 (2.0%) -Decompiled: 0 -Needs Refine: 5 -Blocked: 647 -Failed: 153 -Todo: 451 -Batches: 1 -Builds: 0 -Rate: 0.00 functions/second -Elapsed: 0:00:04 -============================================================ - -[2026-04-22 17:15:54] [INFO] Processing batch of 3 functions -[2026-04-22 17:15:54] [INFO] [1/3] Decompiling func_800AA468 (42 lines) - -============================================================ -Attempting to decompile: func_800AA468 -============================================================ -Module: battle -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting battle.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:15:55] [INFO] [2/3] Decompiling func_80018ECC (68 lines) - -============================================================ -Attempting to decompile: func_80018ECC -============================================================ -Module: main -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting 18B8.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:15:56] [INFO] [3/3] Decompiling func_800AFFBC (65 lines) - -============================================================ -Attempting to decompile: func_800AFFBC -============================================================ -Module: world -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) - -============================================================ -AGENT PROGRESS - 17:15:57 -============================================================ -Processed: 0 functions -Verified: 25/1281 (2.0%) -Decompiled: 0 -Needs Refine: 5 -Blocked: 650 -Failed: 153 -Todo: 448 -Batches: 2 -Builds: 0 -Rate: 0.00 functions/second -Elapsed: 0:00:07 -============================================================ - -[2026-04-22 17:15:57] [INFO] Processing batch of 3 functions -[2026-04-22 17:15:57] [INFO] [1/3] Decompiling func_800A5AD8 (53 lines) - -============================================================ -Attempting to decompile: func_800A5AD8 -============================================================ -Module: world -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:15:58] [INFO] [2/3] Decompiling func_800AB788 (47 lines) - -============================================================ -Attempting to decompile: func_800AB788 -============================================================ -Module: battle -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting battle.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:15:59] [INFO] [3/3] Decompiling func_800A0000 (55 lines) - -============================================================ -Attempting to decompile: func_800A0000 +[2026-04-23 13:24:24] [INFO] Dependency analysis enabled - building call graph... +[2026-04-23 13:24:24] [INFO] Analyzed 1403 functions across all modules +[2026-04-23 13:24:24] [INFO] 876 leaf functions (62.4%) +[2026-04-23 13:24:24] [INFO] Most depended on: func_80034B44 (33 dependents) +[2026-04-23 13:24:24] [INFO] ============================================================ +[2026-04-23 13:24:24] [INFO] STARTING DECOMPILATION AGENT +[2026-04-23 13:24:24] [INFO] ============================================================ +[2026-04-23 13:24:24] [INFO] Batch size: 8 +[2026-04-23 13:24:24] [INFO] Verify interval: 1 +[2026-04-23 13:24:24] [INFO] Target count: 8 +[2026-04-23 13:24:24] [INFO] Checking ASM splits... +[2026-04-23 13:24:24] [INFO] Re-running splat for battle (nonmatchings/ missing or empty)... +[2026-04-23 13:24:27] [INFO] battle: generated 520 nonmatching .s files +[2026-04-23 13:24:27] [INFO] Re-running splat for brom (nonmatchings/ missing or empty)... +[2026-04-23 13:24:27] [INFO] brom: generated 7 nonmatching .s files +[2026-04-23 13:24:27] [INFO] Re-running splat for ending (nonmatchings/ missing or empty)... +[2026-04-23 13:24:27] [INFO] ending: generated 62 nonmatching .s files +[2026-04-23 13:24:27] [INFO] Re-running splat for field (nonmatchings/ missing or empty)... +[2026-04-23 13:24:30] [INFO] field: generated 406 nonmatching .s files +[2026-04-23 13:24:30] [INFO] Re-running splat for world (nonmatchings/ missing or empty)... +[2026-04-23 13:24:32] [INFO] world: generated 354 nonmatching .s files +[2026-04-23 13:24:32] [INFO] Refreshed decomp_decls.h + per-module decls: 399 declarations +[2026-04-23 13:24:32] [INFO] src/main/akao.c: hoisted 1 extern declaration(s) to file header +[2026-04-23 13:24:32] [INFO] src/main/18B8.c: hoisted 2 extern declaration(s) to file header +[2026-04-23 13:24:32] [INFO] src/battle/battle2.c: hoisted 4 extern declaration(s) to file header +[2026-04-23 13:24:32] [INFO] src/menu/bginmenu.c: hoisted 2 extern declaration(s) to file header +[2026-04-23 13:24:32] [INFO] Hoisted 9 extern declaration(s) across 4 file(s) to file headers +[2026-04-23 13:24:32] [INFO] Running initial compilation audit of decompiled functions... +[2026-04-23 13:24:32] [INFO] No decompiled/verified functions to audit +[2026-04-23 13:24:32] [INFO] Reset retry counters for 1725 failed/blocked function(s) +[2026-04-23 13:24:32] [INFO] Initial state: 0/1791 verified +[2026-04-23 13:24:32] [INFO] +📚 Struct learning database: 16 known types +[2026-04-23 13:24:32] [INFO] Strict ordering: 51 ready, 3 waiting on unresolved callees +[2026-04-23 13:24:33] [INFO] Processing 8 functions from 3 files with 8 parallel workers (file-level locking enabled) + [func_800A0514] Acquiring lock for src/brom/brom.c... + [func_800A1EE4] Acquiring lock for src/ending/ending.c... + [func_800A23F8] Acquiring lock for src/ending/ending.c... + [func_800A20D4] Acquiring lock for src/ending/ending.c... + [func_800A1FA4] Acquiring lock for src/ending/ending.c... + [func_800A7090] Acquiring lock for src/battle/battle.c... + [func_800A0514] Lock acquired for src/brom/brom.c + [func_800A1EE4] Lock acquired for src/ending/ending.c + +============================================================ +Attempting to decompile: func_800A0514 ============================================================ Module: brom Current status: todo -⚠️ Decompilation produced invalid output: Function 'func_800A0000' not found as a definition after decompilation (LLM may have renamed it) -🔄 Reverting brom.c to INCLUDE_ASM (keeping file clean) ============================================================ -AGENT PROGRESS - 17:15:59 -============================================================ -Processed: 0 functions -Verified: 25/1281 (2.0%) -Decompiled: 0 -Needs Refine: 5 -Blocked: 653 -Failed: 153 -Todo: 445 -Batches: 3 -Builds: 0 -Rate: 0.00 functions/second -Elapsed: 0:00:10 +Attempting to decompile: func_800A1EE4 ============================================================ - -[2026-04-22 17:16:00] [INFO] Processing batch of 3 functions -[2026-04-22 17:16:00] [INFO] [1/3] Decompiling func_800D4284 (62 lines) - -============================================================ -Attempting to decompile: func_800D4284 -============================================================ -Module: battle -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting battle2.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:01] [INFO] [2/3] Decompiling func_800BA938 (57 lines) - -============================================================ -Attempting to decompile: func_800BA938 -============================================================ -Module: world -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:02] [INFO] [3/3] Decompiling func_800B69A4 (47 lines) - -============================================================ -Attempting to decompile: func_800B69A4 -============================================================ -Module: world -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) - -============================================================ -AGENT PROGRESS - 17:16:03 -============================================================ -Processed: 0 functions -Verified: 25/1281 (2.0%) -Decompiled: 0 -Needs Refine: 5 -Blocked: 656 -Failed: 153 -Todo: 442 -Batches: 4 -Builds: 0 -Rate: 0.00 functions/second -Elapsed: 0:00:13 -============================================================ - -[2026-04-22 17:16:03] [INFO] Processing batch of 3 functions -[2026-04-22 17:16:03] [INFO] [1/3] Decompiling func_800C0254 (54 lines) - -============================================================ -Attempting to decompile: func_800C0254 -============================================================ -Module: battle +Module: ending Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting battle1.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:04] [INFO] [2/3] Decompiling func_800ADF38 (41 lines) + [func_800A7090] Lock acquired for src/battle/battle.c + [func_800B10B4] Acquiring lock for src/battle/battle.c... + [func_800A4F14] Acquiring lock for src/battle/battle.c... +Running: /home/calvin/GitHub/ff7-decomp-armstrca/mako.sh dec func_800A0514 --fix-structs +Running: /home/calvin/GitHub/ff7-decomp-armstrca/mako.sh dec func_800A1EE4 --fix-structs ============================================================ -Attempting to decompile: func_800ADF38 +Attempting to decompile: func_800A7090 ============================================================ Module: battle Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting battle.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:05] [INFO] [3/3] Decompiling func_800A4138 (50 lines) - -============================================================ -Attempting to decompile: func_800A4138 -============================================================ -Module: world -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) +Running: /home/calvin/GitHub/ff7-decomp-armstrca/mako.sh dec func_800A7090 --fix-structs -============================================================ -AGENT PROGRESS - 17:16:06 -============================================================ -Processed: 0 functions -Verified: 25/1281 (2.0%) -Decompiled: 0 -Needs Refine: 5 -Blocked: 659 -Failed: 153 -Todo: 439 -Batches: 5 -Builds: 0 -Rate: 0.00 functions/second -Elapsed: 0:00:16 -============================================================ +--- STDOUT --- +func_800A0514 decompiled in src/brom/brom.c -[2026-04-22 17:16:07] [INFO] Processing batch of 3 functions -[2026-04-22 17:16:07] [INFO] [1/3] Decompiling func_800BFCAC (430 lines) -============================================================ -Attempting to decompile: func_800BFCAC -============================================================ -Module: world -Current status: todo -⚠️ Decompilation produced invalid output: Function 'func_800BFCAC' not found as a definition after decompilation (LLM may have renamed it) -🔄 Reverting world2.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:07] [INFO] [2/3] Decompiling func_80035430 (45 lines) - -============================================================ -Attempting to decompile: func_80035430 -============================================================ -Module: main -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting psxsdk.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:08] [INFO] [3/3] Decompiling func_80028E00 (211 lines) +--- STDERR --- -============================================================ -Attempting to decompile: func_80028E00 -============================================================ -Module: main -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting 18B8.c to INCLUDE_ASM (keeping file clean) -============================================================ -AGENT PROGRESS - 17:16:09 -============================================================ -Processed: 0 functions -Verified: 25/1281 (2.0%) -Decompiled: 0 -Needs Refine: 5 -Blocked: 662 -Failed: 153 -Todo: 436 -Batches: 6 -Builds: 0 -Rate: 0.00 functions/second -Elapsed: 0:00:19 -============================================================ +--- STDOUT --- +func_800A1EE4 decompiled in src/ending/ending.c -[2026-04-22 17:16:09] [INFO] Processing batch of 3 functions -[2026-04-22 17:16:09] [INFO] [1/3] Decompiling func_80025174 (81 lines) -============================================================ -Attempting to decompile: func_80025174 -============================================================ -Module: main -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting 18B8.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:10] [INFO] [2/3] Decompiling func_8002D410 (41 lines) +--- STDERR --- -============================================================ -Attempting to decompile: func_8002D410 -============================================================ -Module: main -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting akao.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:11] [INFO] [3/3] Decompiling func_8002D4A0 (41 lines) - -============================================================ -Attempting to decompile: func_8002D4A0 -============================================================ -Module: main -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting akao.c to INCLUDE_ASM (keeping file clean) - -============================================================ -AGENT PROGRESS - 17:16:11 -============================================================ -Processed: 0 functions -Verified: 25/1281 (2.0%) -Decompiled: 0 -Needs Refine: 5 -Blocked: 665 -Failed: 153 -Todo: 433 -Batches: 7 -Builds: 0 -Rate: 0.00 functions/second -Elapsed: 0:00:22 -============================================================ - -[2026-04-22 17:16:12] [INFO] Processing batch of 3 functions -[2026-04-22 17:16:12] [INFO] [1/3] Decompiling func_800A7F38 (79 lines) - -============================================================ -Attempting to decompile: func_800A7F38 -============================================================ -Module: world -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:13] [INFO] [2/3] Decompiling func_8002BB20 (44 lines) - -============================================================ -Attempting to decompile: func_8002BB20 -============================================================ -Module: main -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting akao.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:13] [INFO] [3/3] Decompiling func_800AC3C0 (57 lines) - -============================================================ -Attempting to decompile: func_800AC3C0 -============================================================ -Module: world -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) - -============================================================ -AGENT PROGRESS - 17:16:14 -============================================================ -Processed: 0 functions -Verified: 25/1281 (2.0%) -Decompiled: 0 -Needs Refine: 5 -Blocked: 668 -Failed: 153 -Todo: 430 -Batches: 8 -Builds: 0 -Rate: 0.00 functions/second -Elapsed: 0:00:24 -============================================================ - -[2026-04-22 17:16:14] [INFO] Processing batch of 3 functions -[2026-04-22 17:16:14] [INFO] [1/3] Decompiling func_800AE4B8 (69 lines) - -============================================================ -Attempting to decompile: func_800AE4B8 -============================================================ -Module: world -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:18] [INFO] [2/3] Decompiling func_80036190 (53 lines) - -============================================================ -Attempting to decompile: func_80036190 -============================================================ -Module: main -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting psxsdk.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:19] [INFO] [3/3] Decompiling func_800A76CC (52 lines) +✅ Decompilation successful! +✅ Decompilation successful! + [func_800A0514] Lock released for src/brom/brom.c + [func_800A1EE4] Lock released for src/ending/ending.c + [func_800A23F8] Lock acquired for src/ending/ending.c ============================================================ -Attempting to decompile: func_800A76CC +Attempting to decompile: func_800A23F8 ============================================================ -Module: battle +Module: ending Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting battle.c to INCLUDE_ASM (keeping file clean) +Running: /home/calvin/GitHub/ff7-decomp-armstrca/mako.sh dec func_800A23F8 --fix-structs -============================================================ -AGENT PROGRESS - 17:16:19 -============================================================ -Processed: 0 functions -Verified: 25/1281 (2.0%) -Decompiled: 0 -Needs Refine: 5 -Blocked: 671 -Failed: 153 -Todo: 427 -Batches: 9 -Builds: 0 -Rate: 0.00 functions/second -Elapsed: 0:00:30 -============================================================ +--- STDOUT --- +func_800A23F8 decompiled in src/ending/ending.c -[2026-04-22 17:16:20] [INFO] Processing batch of 3 functions -[2026-04-22 17:16:20] [INFO] [1/3] Decompiling func_80017678 (137 lines) -============================================================ -Attempting to decompile: func_80017678 -============================================================ -Module: main -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting 18B8.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:21] [INFO] [2/3] Decompiling func_800C02F4 (354 lines) - -============================================================ -Attempting to decompile: func_800C02F4 -============================================================ -Module: world -Current status: todo -⚠️ Decompilation produced invalid output: Function 'func_800C02F4' not found as a definition after decompilation (LLM may have renamed it) -🔄 Reverting world2.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:21] [INFO] [3/3] Decompiling func_80036038 (57 lines) +--- STDERR --- -============================================================ -Attempting to decompile: func_80036038 -============================================================ -Module: main -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting psxsdk.c to INCLUDE_ASM (keeping file clean) + 🔧 intellisense_fixer: hoisted 1 extern declaration(s) to file header +✅ Decompilation successful! -============================================================ -AGENT PROGRESS - 17:16:22 -============================================================ -Processed: 0 functions -Verified: 25/1281 (2.0%) -Decompiled: 0 -Needs Refine: 5 -Blocked: 674 -Failed: 153 -Todo: 424 -Batches: 10 -Builds: 0 -Rate: 0.00 functions/second -Elapsed: 0:00:33 -============================================================ +--- STDOUT --- +func_800A7090 decompiled in src/battle/battle.c -[2026-04-22 17:16:23] [INFO] Processing batch of 3 functions -[2026-04-22 17:16:23] [INFO] [1/3] Decompiling func_800A4860 (70 lines) -============================================================ -Attempting to decompile: func_800A4860 -============================================================ -Module: battle -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting battle.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:24] [INFO] [2/3] Decompiling func_800B10AC (80 lines) +--- STDERR --- + [func_800A23F8] Lock released for src/ending/ending.c -============================================================ -Attempting to decompile: func_800B10AC -============================================================ -Module: world -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:24] [INFO] [3/3] Decompiling func_800BC338 (69 lines) + [func_800A20D4] Lock acquired for src/ending/ending.c ============================================================ -Attempting to decompile: func_800BC338 +Attempting to decompile: func_800A20D4 ============================================================ -Module: field +Module: ending Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting field.c to INCLUDE_ASM (keeping file clean) - -============================================================ -AGENT PROGRESS - 17:16:25 -============================================================ -Processed: 0 functions -Verified: 25/1281 (2.0%) -Decompiled: 0 -Needs Refine: 5 -Blocked: 677 -Failed: 153 -Todo: 421 -Batches: 11 -Builds: 0 -Rate: 0.00 functions/second -Elapsed: 0:00:36 -============================================================ - -[2026-04-22 17:16:25] [INFO] Processing batch of 3 functions -[2026-04-22 17:16:25] [INFO] [1/3] Decompiling func_800D751C (110 lines) +Running: /home/calvin/GitHub/ff7-decomp-armstrca/mako.sh dec func_800A20D4 --fix-structs +✅ Decompilation successful! + [func_800A7090] Lock released for src/battle/battle.c + [func_800B10B4] Lock acquired for src/battle/battle.c ============================================================ -Attempting to decompile: func_800D751C +Attempting to decompile: func_800B10B4 ============================================================ Module: battle Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting battle2.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:26] [INFO] [2/3] Decompiling func_800BB7DC (61 lines) - -============================================================ -Attempting to decompile: func_800BB7DC -============================================================ -Module: world -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:27] [INFO] [3/3] Decompiling func_800A5FB4 (89 lines) +Running: /home/calvin/GitHub/ff7-decomp-armstrca/mako.sh dec func_800B10B4 --fix-structs -============================================================ -Attempting to decompile: func_800A5FB4 -============================================================ -Module: world -Current status: todo -⚠️ Decompilation produced invalid output: Function 'func_800A5FB4' not found as a definition after decompilation (LLM may have renamed it) -🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) +--- STDOUT --- +func_800A20D4 decompiled in src/ending/ending.c -============================================================ -AGENT PROGRESS - 17:16:27 -============================================================ -Processed: 0 functions -Verified: 25/1281 (2.0%) -Decompiled: 0 -Needs Refine: 5 -Blocked: 680 -Failed: 153 -Todo: 418 -Batches: 12 -Builds: 0 -Rate: 0.00 functions/second -Elapsed: 0:00:38 -============================================================ - -[2026-04-22 17:16:28] [INFO] Processing batch of 3 functions -[2026-04-22 17:16:28] [INFO] [1/3] Decompiling func_8002A7E8 (102 lines) -============================================================ -Attempting to decompile: func_8002A7E8 -============================================================ -Module: main -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting akao.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:28] [INFO] [2/3] Decompiling func_800B69C0 (80 lines) +--- STDERR --- -============================================================ -Attempting to decompile: func_800B69C0 -============================================================ -Module: field -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting field.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:29] [INFO] [3/3] Decompiling func_800A4954 (85 lines) +✅ Decompilation successful! + [func_800A1FA4] Lock acquired for src/ending/ending.c + [func_800A20D4] Lock released for src/ending/ending.c ============================================================ -Attempting to decompile: func_800A4954 +Attempting to decompile: func_800A1FA4 ============================================================ -Module: battle +Module: ending Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting battle.c to INCLUDE_ASM (keeping file clean) +Running: /home/calvin/GitHub/ff7-decomp-armstrca/mako.sh dec func_800A1FA4 --fix-structs -============================================================ -AGENT PROGRESS - 17:16:30 -============================================================ -Processed: 0 functions -Verified: 25/1281 (2.0%) -Decompiled: 0 -Needs Refine: 5 -Blocked: 683 -Failed: 153 -Todo: 415 -Batches: 13 -Builds: 0 -Rate: 0.00 functions/second -Elapsed: 0:00:40 -============================================================ +--- STDOUT --- +func_800A1FA4 decompiled in src/ending/ending.c -[2026-04-22 17:16:30] [INFO] Processing batch of 3 functions -[2026-04-22 17:16:30] [INFO] [1/3] Decompiling func_800AAA00 (82 lines) -============================================================ -Attempting to decompile: func_800AAA00 -============================================================ -Module: world -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:31] [INFO] [2/3] Decompiling func_800112E8 (111 lines) +--- STDERR --- -============================================================ -Attempting to decompile: func_800112E8 -============================================================ -Module: main -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting 18B8.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:32] [INFO] [3/3] Decompiling func_800BAA00 (96 lines) +✅ Decompilation successful! + [func_800A1FA4] Lock released for src/ending/ending.c -============================================================ -Attempting to decompile: func_800BAA00 -============================================================ -Module: world -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) +--- STDOUT --- +func_800B10B4 decompiled in src/battle/battle.c -============================================================ -AGENT PROGRESS - 17:16:32 -============================================================ -Processed: 0 functions -Verified: 25/1281 (2.0%) -Decompiled: 0 -Needs Refine: 5 -Blocked: 686 -Failed: 153 -Todo: 412 -Batches: 14 -Builds: 0 -Rate: 0.00 functions/second -Elapsed: 0:00:43 -============================================================ -[2026-04-22 17:16:33] [INFO] Processing batch of 3 functions -[2026-04-22 17:16:33] [INFO] [1/3] Decompiling func_800D44E8 (81 lines) - -============================================================ -Attempting to decompile: func_800D44E8 -============================================================ -Module: battle -Current status: todo -⚠️ Decompilation produced invalid output: Function 'func_800D44E8' not found as a definition after decompilation (LLM may have renamed it) -🔄 Reverting battle2.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:34] [INFO] [2/3] Decompiling func_800AE954 (131 lines) +--- STDERR --- -============================================================ -Attempting to decompile: func_800AE954 -============================================================ -Module: battle -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting battle.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:34] [INFO] [3/3] Decompiling func_800C4814 (85 lines) +✅ Decompilation successful! + [func_800B10B4] Lock released for src/battle/battle.c + [func_800A4F14] Lock acquired for src/battle/battle.c ============================================================ -Attempting to decompile: func_800C4814 +Attempting to decompile: func_800A4F14 ============================================================ Module: battle Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting battle1.c to INCLUDE_ASM (keeping file clean) +Running: /home/calvin/GitHub/ff7-decomp-armstrca/mako.sh dec func_800A4F14 --fix-structs -============================================================ -AGENT PROGRESS - 17:16:35 -============================================================ -Processed: 0 functions -Verified: 25/1281 (2.0%) -Decompiled: 0 -Needs Refine: 5 -Blocked: 689 -Failed: 153 -Todo: 409 -Batches: 15 -Builds: 0 -Rate: 0.00 functions/second -Elapsed: 0:00:46 -============================================================ - -[2026-04-22 17:16:36] [INFO] Processing batch of 3 functions -[2026-04-22 17:16:36] [INFO] [1/3] Decompiling func_800C3CA8 (86 lines) +--- STDOUT --- +func_800A4F14 decompiled in src/battle/battle.c -============================================================ -Attempting to decompile: func_800C3CA8 -============================================================ -Module: battle -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting battle1.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:37] [INFO] [2/3] Decompiling func_800B6B28 (96 lines) -============================================================ -Attempting to decompile: func_800B6B28 -============================================================ -Module: world -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:37] [INFO] [3/3] Decompiling func_801D1C2C (87 lines) +--- STDERR --- -============================================================ -Attempting to decompile: func_801D1C2C -============================================================ -Module: menu -Current status: todo ✅ Decompilation successful! -[2026-04-22 17:16:38] [INFO] Running verification... + [func_800A4F14] Lock released for src/battle/battle.c +[2026-04-23 13:24:37] [INFO] [1/8] ✅ func_800A1EE4 (6 lines) +[2026-04-23 13:24:37] [INFO] [2/8] ✅ func_800A0514 (12 lines) +[2026-04-23 13:24:37] [INFO] [3/8] ✅ func_800A1FA4 (13 lines) +[2026-04-23 13:24:37] [INFO] [4/8] ✅ func_800A20D4 (13 lines) +[2026-04-23 13:24:37] [INFO] [5/8] ✅ func_800A23F8 (14 lines) +[2026-04-23 13:24:37] [INFO] [6/8] ✅ func_800A7090 (17 lines) +[2026-04-23 13:24:37] [INFO] [7/8] ✅ func_800B10B4 (19 lines) +[2026-04-23 13:24:37] [INFO] [8/8] ✅ func_800A4F14 (23 lines) +[2026-04-23 13:24:37] [INFO] Post-parallel PSY-Q compile check... +[2026-04-23 13:24:37] [INFO] Running verification... ============================================================ VERIFYING DECOMPILED FUNCTIONS ============================================================ -Found 1 decompiled function(s) to verify - -[1/1] Checking func_801D1C2C... - ✅ Matches +Found 8 decompiled function(s) to verify + +[1/8] Checking func_800A0514... + ❌ Not matching: objdiff-cli failed:  INFO Loading project . + INFO Generating report for 37 units (using 8 threads) +Failed: Failed to open ./build/us/asm/us/dschange/data/15E0.bss.s.o + +Caused by: + No such file or directory (os error 2) + ↩️ Reverted to INCLUDE_ASM (binary mismatch: objdiff-cli failed:  INFO Loading project . + INFO Generating report for 37 units (using 8 threads) +Failed: Failed to open ./build/us/asm/us/dschange/data/15E0.bss.s.o + +Caused by: + No such file or directory (os error 2)) +[2/8] Checking func_800A1EE4... + ❌ Not matching: objdiff-cli failed:  INFO Loading project . + INFO Generating report for 37 units (using 8 threads) +Failed: Failed to open ./build/us/asm/us/dschange/data/15E0.bss.s.o + +Caused by: + No such file or directory (os error 2) + ↩️ Reverted to INCLUDE_ASM (binary mismatch: objdiff-cli failed:  INFO Loading project . + INFO Generating report for 37 units (using 8 threads) +Failed: Failed to open ./build/us/asm/us/dschange/data/15E0.bss.s.o + +Caused by: + No such file or directory (os error 2)) +[3/8] Checking func_800A1FA4... + ❌ Not matching: objdiff-cli failed:  INFO Loading project . + INFO Generating report for 37 units (using 8 threads) +Failed: Failed to open ./build/us/asm/us/dschange/data/15E0.bss.s.o + +Caused by: + No such file or directory (os error 2) + ↩️ Reverted to INCLUDE_ASM (binary mismatch: objdiff-cli failed:  INFO Loading project . + INFO Generating report for 37 units (using 8 threads) +Failed: Failed to open ./build/us/asm/us/dschange/data/15E0.bss.s.o + +Caused by: + No such file or directory (os error 2)) +[4/8] Checking func_800A20D4... + ❌ Not matching: objdiff-cli failed:  INFO Loading project . + INFO Generating report for 37 units (using 8 threads) +Failed: Failed to open ./build/us/asm/us/dschange/data/15E0.bss.s.o + +Caused by: + No such file or directory (os error 2) + ↩️ Reverted to INCLUDE_ASM (binary mismatch: objdiff-cli failed:  INFO Loading project . + INFO Generating report for 37 units (using 8 threads) +Failed: Failed to open ./build/us/asm/us/dschange/data/15E0.bss.s.o + +Caused by: + No such file or directory (os error 2)) +[5/8] Checking func_800A23F8... + ❌ Not matching: objdiff-cli failed:  INFO Loading project . + INFO Generating report for 37 units (using 8 threads) +Failed: Failed to open ./build/us/asm/us/dschange/data/15E0.bss.s.o + +Caused by: + No such file or directory (os error 2) + ↩️ Reverted to INCLUDE_ASM (binary mismatch: objdiff-cli failed:  INFO Loading project . + INFO Generating report for 37 units (using 8 threads) +Failed: Failed to open ./build/us/asm/us/dschange/data/15E0.bss.s.o + +Caused by: + No such file or directory (os error 2)) +[6/8] Checking func_800A4F14... + ❌ Not matching: objdiff-cli failed:  INFO Loading project . + INFO Generating report for 37 units (using 8 threads) +Failed: Failed to open ./build/us/asm/us/dschange/data/15E0.bss.s.o + +Caused by: + No such file or directory (os error 2) + ↩️ Reverted to INCLUDE_ASM (binary mismatch: objdiff-cli failed:  INFO Loading project . + INFO Generating report for 37 units (using 8 threads) +Failed: Failed to open ./build/us/asm/us/dschange/data/15E0.bss.s.o + +Caused by: + No such file or directory (os error 2)) +[7/8] Checking func_800A7090... + ❌ Not matching: objdiff-cli failed:  INFO Loading project . + INFO Generating report for 37 units (using 8 threads) +Failed: Failed to open ./build/us/asm/us/brom/data/6B4.data.s.o + +Caused by: + No such file or directory (os error 2) + ↩️ Reverted to INCLUDE_ASM (binary mismatch: objdiff-cli failed:  INFO Loading project . + INFO Generating report for 37 units (using 8 threads) +Failed: Failed to open ./build/us/asm/us/brom/data/6B4.data.s.o + +Caused by: + No such file or directory (os error 2)) +[8/8] Checking func_800B10B4... + ❌ Not matching: objdiff-cli failed:  INFO Loading project . + INFO Generating report for 37 units (using 8 threads) +Failed: Failed to open ./build/us/asm/us/dschange/data/15E0.bss.s.o + +Caused by: + No such file or directory (os error 2) + ↩️ Reverted to INCLUDE_ASM (binary mismatch: objdiff-cli failed:  INFO Loading project . + INFO Generating report for 37 units (using 8 threads) +Failed: Failed to open ./build/us/asm/us/dschange/data/15E0.bss.s.o + +Caused by: + No such file or directory (os error 2)) ============================================================ VERIFICATION COMPLETE ============================================================ -✅ Verified: 1 -❌ Not matching: 0 -============================================================ - -[2026-04-22 17:16:39] [INFO] Verified 1 functions -[2026-04-22 17:16:39] [INFO] Refreshed decomp_decls.h + per-module decls: 360 declarations - -============================================================ -AGENT PROGRESS - 17:16:39 -============================================================ -Processed: 1 functions -Verified: 26/1281 (2.0%) -Decompiled: 0 -Needs Refine: 5 -Blocked: 691 -Failed: 153 -Todo: 406 -Batches: 16 -Builds: 0 -Rate: 0.02 functions/second -Elapsed: 0:00:49 -============================================================ - -[2026-04-22 17:16:39] [INFO] Processing batch of 3 functions -[2026-04-22 17:16:39] [INFO] [1/3] Decompiling func_800B0334 (100 lines) - -============================================================ -Attempting to decompile: func_800B0334 -============================================================ -Module: world -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:40] [INFO] [2/3] Decompiling func_800AEF68 (95 lines) - -============================================================ -Attempting to decompile: func_800AEF68 -============================================================ -Module: battle -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting battle.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:40] [INFO] [3/3] Decompiling func_800ABE58 (103 lines) - -============================================================ -Attempting to decompile: func_800ABE58 -============================================================ -Module: world -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) - -============================================================ -AGENT PROGRESS - 17:16:41 -============================================================ -Processed: 1 functions -Verified: 26/1281 (2.0%) -Decompiled: 0 -Needs Refine: 5 -Blocked: 694 -Failed: 153 -Todo: 403 -Batches: 17 -Builds: 0 -Rate: 0.02 functions/second -Elapsed: 0:00:52 -============================================================ - -[2026-04-22 17:16:42] [INFO] Processing batch of 3 functions -[2026-04-22 17:16:42] [INFO] [1/3] Decompiling func_8001CB48 (168 lines) - -============================================================ -Attempting to decompile: func_8001CB48 -============================================================ -Module: main -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting 18B8.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:42] [INFO] [2/3] Decompiling func_800B062C (100 lines) - -============================================================ -Attempting to decompile: func_800B062C -============================================================ -Module: battle -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting battle.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:43] [INFO] [3/3] Decompiling func_800A8A6C (150 lines) - -============================================================ -Attempting to decompile: func_800A8A6C -============================================================ -Module: battle -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting battle.c to INCLUDE_ASM (keeping file clean) - -============================================================ -AGENT PROGRESS - 17:16:44 -============================================================ -Processed: 1 functions -Verified: 26/1281 (2.0%) -Decompiled: 0 -Needs Refine: 5 -Blocked: 697 -Failed: 153 -Todo: 400 -Batches: 18 -Builds: 0 -Rate: 0.02 functions/second -Elapsed: 0:00:55 -============================================================ - -[2026-04-22 17:16:44] [INFO] Processing batch of 3 functions -[2026-04-22 17:16:44] [INFO] [1/3] Decompiling func_800AB6E4 (145 lines) - -============================================================ -Attempting to decompile: func_800AB6E4 -============================================================ -Module: world -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:45] [INFO] [2/3] Decompiling func_8001C5BC (139 lines) - -============================================================ -Attempting to decompile: func_8001C5BC -============================================================ -Module: main -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting 18B8.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:46] [INFO] [3/3] Decompiling func_800DDCE8 (111 lines) - -============================================================ -Attempting to decompile: func_800DDCE8 -============================================================ -Module: battle -Current status: todo -⚠️ Decompilation produced invalid output: Contains unknown parameter type '?' -📋 Soft error — keeping decompiled code, marking as needs_refine - -============================================================ -AGENT PROGRESS - 17:16:47 -============================================================ -Processed: 1 functions -Verified: 26/1281 (2.0%) -Decompiled: 0 -Needs Refine: 6 -Blocked: 699 -Failed: 153 -Todo: 397 -Batches: 19 -Builds: 0 -Rate: 0.02 functions/second -Elapsed: 0:00:57 -============================================================ - -[2026-04-22 17:16:47] [INFO] Processing batch of 3 functions -[2026-04-22 17:16:47] [INFO] [1/3] Decompiling func_80027990 (129 lines) - -============================================================ -Attempting to decompile: func_80027990 -============================================================ -Module: main -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting 18B8.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:48] [INFO] [2/3] Decompiling func_800AE8AC (113 lines) - -============================================================ -Attempting to decompile: func_800AE8AC -============================================================ -Module: world -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:48] [INFO] [3/3] Decompiling func_800A358C (139 lines) - -============================================================ -Attempting to decompile: func_800A358C -============================================================ -Module: ending -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting ending.c to INCLUDE_ASM (keeping file clean) - -============================================================ -AGENT PROGRESS - 17:16:49 -============================================================ -Processed: 1 functions -Verified: 26/1281 (2.0%) -Decompiled: 0 -Needs Refine: 6 -Blocked: 702 -Failed: 153 -Todo: 394 -Batches: 20 -Builds: 0 -Rate: 0.02 functions/second -Elapsed: 0:01:00 -============================================================ - -[2026-04-22 17:16:49] [INFO] Processing batch of 3 functions -[2026-04-22 17:16:49] [INFO] [1/3] Decompiling func_8002708C (187 lines) - -============================================================ -Attempting to decompile: func_8002708C -============================================================ -Module: main -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting 18B8.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:53] [INFO] [2/3] Decompiling func_800A86C4 (124 lines) - -============================================================ -Attempting to decompile: func_800A86C4 -============================================================ -Module: world -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:54] [INFO] [3/3] Decompiling func_800A2504 (150 lines) - -============================================================ -Attempting to decompile: func_800A2504 -============================================================ -Module: ending -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting ending.c to INCLUDE_ASM (keeping file clean) - -============================================================ -AGENT PROGRESS - 17:16:54 -============================================================ -Processed: 1 functions -Verified: 26/1281 (2.0%) -Decompiled: 0 -Needs Refine: 6 -Blocked: 705 -Failed: 153 -Todo: 391 -Batches: 21 -Builds: 0 -Rate: 0.02 functions/second -Elapsed: 0:01:05 -============================================================ - -[2026-04-22 17:16:55] [INFO] Processing batch of 3 functions -[2026-04-22 17:16:55] [INFO] [1/3] Decompiling func_800B04AC (127 lines) - -============================================================ -Attempting to decompile: func_800B04AC -============================================================ -Module: world -Current status: todo -[2026-04-22 17:16:55] [ERROR] Error processing func_800B04AC: [Errno 32] Broken pipe -[2026-04-22 17:16:55] [INFO] [2/3] Decompiling func_800AE080 (125 lines) - -============================================================ -Attempting to decompile: func_800AE080 -============================================================ -Module: battle -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting battle.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:56] [INFO] [3/3] Decompiling func_800AB480 (139 lines) - -============================================================ -Attempting to decompile: func_800AB480 -============================================================ -Module: battle -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting battle.c to INCLUDE_ASM (keeping file clean) - -============================================================ -AGENT PROGRESS - 17:16:57 -============================================================ -Processed: 1 functions -Verified: 26/1281 (2.0%) -Decompiled: 0 -Needs Refine: 6 -Blocked: 707 -Failed: 153 -Todo: 388 -Batches: 22 -Builds: 0 -Rate: 0.01 functions/second -Elapsed: 0:01:08 -============================================================ - -[2026-04-22 17:16:58] [INFO] Processing batch of 3 functions -[2026-04-22 17:16:58] [INFO] [1/3] Decompiling func_800AD0FC (152 lines) - -============================================================ -Attempting to decompile: func_800AD0FC -============================================================ -Module: battle -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting battle.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:58] [INFO] [2/3] Decompiling func_800C7924 (154 lines) - -============================================================ -Attempting to decompile: func_800C7924 -============================================================ -Module: battle -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting battle1.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:16:59] [INFO] [3/3] Decompiling func_800B98F0 (155 lines) +✅ Verified: 0 +❌ Not matching: 8 +============================================================ + +[2026-04-23 13:24:37] [INFO] Verified 0 functions +[2026-04-23 13:24:37] [INFO] Refreshed decomp_decls.h + per-module decls: 399 declarations +[2026-04-23 13:24:37] [INFO] Running full build check... + +============================================================ +RUNNING BUILD +============================================================ + +Running: /home/calvin/GitHub/ff7-decomp-armstrca/mako.sh build +--- BUILD OUTPUT --- +[1/74] psx cc src/main/akao.c +[2/74] psx cc src/main/18B8.c +[3/74] psx ld build/us/main.ld +mipsel-linux-gnu-ld: warning: build/us/main.elf has a LOAD segment with RWX permissions +[4/74] sym export build/us/main.elf +[5/74] splat build/us/cnfgmenu.yaml +[6/74] splat build/us/brom.yaml +[7/74] splat build/us/dschange.yaml +[8/74] psx as asm/us/brom/data/6B4.data.s +[9/74] psx as asm/us/dschange/data/1580.data.s +[10/74] psx as asm/us/dschange/data/15E0.bss.s +[11/74] splat build/us/bginmenu.yaml +[12/74] psx cc src/brom/brom.c +[13/74] psx cc src/dschange/dschange.c +[14/74] psx as asm/us/menu/data/7F0.data.s +[15/74] psx ld build/us/dschange.ld +mipsel-linux-gnu-ld: warning: build/us/dschange.elf has a LOAD segment with RWX permissions +[16/74] psx ld build/us/brom.ld +mipsel-linux-gnu-ld: warning: build/us/brom.elf has a LOAD segment with RWX permissions +[17/74] psx cc src/menu/cnfgmenu.c +[18/74] psx as asm/us/menu/data/860.bss.s +[19/74] psx exe build/us/dschange.elf +[20/74] psx exe build/us/brom.elf +[21/74] psx ld build/us/cnfgmenu.ld +mipsel-linux-gnu-ld: warning: build/us/cnfgmenu.elf has a LOAD segment with RWX permissions +[22/74] psx exe build/us/cnfgmenu.elf +[23/74] psx cc src/menu/bginmenu.c +[24/74] psx ld build/us/bginmenu.ld +mipsel-linux-gnu-ld: warning: build/us/bginmenu.elf has a LOAD segment with RWX permissions +[25/74] psx exe build/us/bginmenu.elf +[26/74] splat build/us/ending.yaml +[27/74] psx as asm/us/ending/data/0.rodata.s +[28/74] psx as asm/us/ending/data/3934.data.s +[29/74] psx as asm/us/ending/data/6524.bss.s +[30/74] psx cc src/ending/ending.c +[31/74] psx ld build/us/ending.ld +mipsel-linux-gnu-ld: warning: build/us/ending.elf has a LOAD segment with RWX permissions +[32/74] psx exe build/us/ending.elf +[33/74] splat build/us/savemenu.yaml +[34/74] psx as asm/us/menu/data/13650.data.s +[35/74] psx as asm/us/menu/data/13698.bss.s +[36/74] psx as asm/us/menu/data/4EC4.data.s +[37/74] psx cc src/menu/savemenu.c +[38/74] psx cc src/menu/title.c +[39/74] psx ld build/us/savemenu.ld +mipsel-linux-gnu-ld: warning: build/us/savemenu.elf has a LOAD segment with RWX permissions +[40/74] psx exe build/us/savemenu.elf +[41/74] splat build/us/world.yaml +[42/74] psx as asm/us/world/world_unk.s +[43/74] psx as asm/us/world/data/world.data.s +[44/74] psx cc src/world/world2.c +[45/74] psx cc src/world/world.c +[46/74] psx ld build/us/world.ld +mipsel-linux-gnu-ld: warning: build/us/world.elf has a LOAD segment with RWX permissions +[47/74] psx exe build/us/world.elf +[48/74] splat build/us/field.yaml +[49/74] psx as asm/us/field/data/3A5B8.data.s +[50/74] psx cc src/field/field.c +[51/74] psx ld build/us/field.ld +mipsel-linux-gnu-ld: warning: build/us/field.elf has a LOAD segment with RWX permissions +[52/74] psx exe build/us/field.elf +[53/74] splat build/us/battle.yaml +[54/74] psx as asm/us/battle/data/538AC.bss.s +[55/74] psx as asm/us/battle/data/47A38.data.s +[56/74] psx cc src/battle/battle3.c +[57/74] psx cc src/battle/battle1.c +[58/74] psx cc src/battle/battle.c +[59/74] psx cc src/battle/battle2.c +[60/74] psx ld build/us/battle.ld +mipsel-linux-gnu-ld: warning: build/us/battle.elf has a LOAD segment with RWX permissions +[61/74] psx exe build/us/battle.elf +[62/74] sym export build/us/battle.elf +[63/74] splat build/us/barrier.yaml +[64/74] splat build/us/batini.yaml +[65/74] psx cc src/magic/barrier.c +[66/74] psx ld build/us/barrier.ld +mipsel-linux-gnu-ld: warning: build/us/barrier.elf has a LOAD segment with RWX permissions +[67/74] psx exe build/us/barrier.elf +[68/74] psx cc src/battle/batini.c +[69/74] psx ld build/us/batini.ld +mipsel-linux-gnu-ld: warning: build/us/batini.elf has a LOAD segment with RWX permissions +[70/74] psx exe build/us/batini.elf +[71/74] sym export build/us/batini.elf build/us/battle.elf build/us/brom.elf build/us/dschange.elf build/us/ending.elf build/us/field.elf build/us/bginmenu.elf build/us/cnfgmenu.elf build/us/savemenu.elf build/us/world.elf build/us/barrier.elf +[72/74] psx ld build/us/main.ld +mipsel-linux-gnu-ld: warning: build/us/main_final.elf has a LOAD segment with RWX permissions +[73/74] psx exe build/us/main_final.elf +[74/74] check +build/us/main.exe: OK +build/us/batini.exe: OK +build/us/battle.exe: OK +build/us/brom.exe: OK +build/us/dschange.exe: OK +build/us/ending.exe: OK +build/us/field.exe: OK +build/us/bginmenu.exe: OK +build/us/cnfgmenu.exe: OK +build/us/savemenu.exe: OK +build/us/world.exe: OK +build/us/barrier.exe: OK + +✅ Build succeeded! + +Warnings: 0 ============================================================ -Attempting to decompile: func_800B98F0 -============================================================ -Module: world -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) ============================================================ -AGENT PROGRESS - 17:17:00 -============================================================ -Processed: 1 functions -Verified: 26/1281 (2.0%) -Decompiled: 0 -Needs Refine: 6 -Blocked: 710 -Failed: 153 -Todo: 385 -Batches: 23 -Builds: 0 -Rate: 0.01 functions/second -Elapsed: 0:01:11 +VERIFYING DECOMPILED FUNCTIONS ============================================================ -[2026-04-22 17:17:00] [INFO] Processing batch of 3 functions -[2026-04-22 17:17:00] [INFO] [1/3] Decompiling func_80029114 (184 lines) +No functions to verify (none marked as decompiled) ============================================================ -Attempting to decompile: func_80029114 -============================================================ -Module: main -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting 18B8.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:17:02] [INFO] [2/3] Decompiling func_800B87D8 (144 lines) - -============================================================ -Attempting to decompile: func_800B87D8 -============================================================ -Module: world -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:17:03] [INFO] [3/3] Decompiling func_800BFB88 (139 lines) -============================================================ -Attempting to decompile: func_800BFB88 -============================================================ -Module: battle -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting battle1.c to INCLUDE_ASM (keeping file clean) +[2026-04-23 13:24:46] [INFO] Build successful! +✓ Rank scores updated for 1791 functions (2262 from mako.sh rank) +[2026-04-23 13:24:49] [INFO] Rank scores refreshed (1791 functions updated) ============================================================ -AGENT PROGRESS - 17:17:03 +AGENT PROGRESS - 13:24:49 ============================================================ -Processed: 1 functions -Verified: 26/1281 (2.0%) +Processed: 8 functions +Verified: 0/1791 (0.0%) Decompiled: 0 -Needs Refine: 6 -Blocked: 713 -Failed: 153 -Todo: 382 -Batches: 24 -Builds: 0 -Rate: 0.01 functions/second -Elapsed: 0:01:14 -============================================================ - -[2026-04-22 17:17:04] [INFO] Processing batch of 3 functions -[2026-04-22 17:17:04] [INFO] [1/3] Decompiling func_80026C5C (198 lines) - -============================================================ -Attempting to decompile: func_80026C5C -============================================================ -Module: main -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting 18B8.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:17:05] [INFO] [2/3] Decompiling func_800B39B4 (170 lines) - -============================================================ -Attempting to decompile: func_800B39B4 +Needs Refine: 16 +Blocked: 1560 +Failed: 165 +Todo: 50 +Batches: 1 +Builds: 1 +Rate: 0.32 functions/second +Elapsed: 0:00:25 ============================================================ -Module: world -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:17:05] [INFO] [3/3] Decompiling func_80028930 (224 lines) -============================================================ -Attempting to decompile: func_80028930 -============================================================ -Module: main -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting 18B8.c to INCLUDE_ASM (keeping file clean) +[2026-04-23 13:24:49] [INFO] Target count reached (8) +[2026-04-23 13:24:49] [INFO] Target count reached (8) +[2026-04-23 13:24:49] [INFO] Running final verification... +[2026-04-23 13:24:49] [INFO] Running verification... ============================================================ -AGENT PROGRESS - 17:17:06 -============================================================ -Processed: 1 functions -Verified: 26/1281 (2.0%) -Decompiled: 0 -Needs Refine: 6 -Blocked: 716 -Failed: 153 -Todo: 379 -Batches: 25 -Builds: 0 -Rate: 0.01 functions/second -Elapsed: 0:01:17 +VERIFYING DECOMPILED FUNCTIONS ============================================================ -[2026-04-22 17:17:06] [INFO] Processing batch of 3 functions -[2026-04-22 17:17:06] [INFO] [1/3] Decompiling func_800285AC (229 lines) +No functions to verify (none marked as decompiled) +[2026-04-23 13:24:49] [INFO] Verified 0 functions +[2026-04-23 13:24:49] [INFO] Refreshed decomp_decls.h + per-module decls: 399 declarations ============================================================ -Attempting to decompile: func_800285AC +AGENT EXECUTION COMPLETE ============================================================ -Module: main -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting 18B8.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:17:07] [INFO] [2/3] Decompiling func_800A4268 (149 lines) +Total time: 0:00:25 +Functions processed: 8 +Functions verified: 0 +Functions failed: 0 +Batches completed: 1 +Builds run: 1 +Average rate: 0.32 functions/second -============================================================ -Attempting to decompile: func_800A4268 -============================================================ -Module: world -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting world.c to INCLUDE_ASM (keeping file clean) -[2026-04-22 17:17:08] [INFO] [3/3] Decompiling func_80014E74 (180 lines) +Final Progress: 0/1791 (0.0%) +📚 Struct Learning: + Total patterns learned: 16 + High confidence (≥70%): 16 + Medium confidence (30-70%): 0 + Low confidence (<30%): 0 ============================================================ -Attempting to decompile: func_80014E74 -============================================================ -Module: main -Current status: todo -⚠️ Decompilation produced invalid output: m2c added 1 decompilation failure comment(s) (dependency issues) -🔄 Reverting 18B8.c to INCLUDE_ASM (keeping file clean) - -❌ Fatal error: [Errno 32] Broken pipe -Exception ignored in: <__main__._TeeOutput object at 0x7e29f695ea50>Exception ignored in sys.unraisablehook: \ No newline at end of file +Summary saved to agent_summary.json diff --git a/automation/agent.py b/automation/agent.py index db68c6b..d0fa7b7 100755 --- a/automation/agent.py +++ b/automation/agent.py @@ -829,15 +829,23 @@ def _process_batch_parallel(self, functions: List[Dict]) -> Dict: for fname in func_names: entry = self.db.get_function(fname) if entry and entry.get('status') == 'decompiled': + # Revert C body to INCLUDE_ASM so SHA1 stays passing + reverted = self._revert_function_to_include_asm(full_path, fname) self.db.update_function_status( fname, 'decompiled_needs_refine', notes=f"Post-parallel compile check failed: {errors_summary}", ) - self._log( - f" {fname} → decompiled_needs_refine (compile errors)", - "WARN", - ) + if reverted: + self._log( + f" {fname} → decompiled_needs_refine ↩️ reverted (compile errors)", + "WARN", + ) + else: + self._log( + f" {fname} → decompiled_needs_refine (compile errors; revert failed)", + "WARN", + ) success_count -= 1 needs_refine_count += 1 @@ -1664,6 +1672,36 @@ def _initial_audit(self): else: self._log("Startup audit: all decompiled functions compile cleanly", "INFO") + # Second pass: reset verified/decompiled_needs_refine functions that still + # have INCLUDE_ASM in their C file back to 'todo'. This happens when the + # DB is reused after a branch reset (the C files were wiped but the DB + # retained the old status). + import re as _re + reset_count = 0 + stale_statuses = ('verified', 'decompiled_needs_refine', 'decompiled') + stale_funcs = [] + for status in stale_statuses: + stale_funcs.extend(self.db.get_functions_by_status(status, limit=None, + module=self.config.module_filter) or []) + for func in stale_funcs: + c_file_rel = func.get('c_file_path') + func_name = func['name'] + if not c_file_rel: + continue + c_file = project_root / c_file_rel + if not c_file.exists(): + continue + content = c_file.read_text(errors='replace') + pat = rf'INCLUDE_ASM\s*\(\s*"[^"]*"\s*,\s*{_re.escape(func_name)}\s*\)' + if _re.search(pat, content): + self.db.update_function_status(func_name, 'todo', + notes='Reset: C file reverted to INCLUDE_ASM') + reset_count += 1 + if self.config.verbose: + self._log(f" Reset {func_name} ({func['status']} → todo): C file has INCLUDE_ASM", "WARN") + if reset_count: + self._log(f"Startup audit: reset {reset_count} stale function(s) to 'todo'", "WARN") + def _ensure_asm_splits(self): """ Run splat for any module whose nonmatchings/ directory is missing or empty. diff --git a/automation/agent_summary.json b/automation/agent_summary.json index 50f733b..904f00b 100644 --- a/automation/agent_summary.json +++ b/automation/agent_summary.json @@ -1,11 +1,11 @@ { - "completed_at": "2026-04-22T17:15:44.887510", - "duration_seconds": 131, + "completed_at": "2026-04-23T13:24:49.878853", + "duration_seconds": 25, "functions_processed": 8, - "functions_verified": 8, - "functions_failed": 110, + "functions_verified": 0, + "functions_failed": 0, "functions_analyzed_by_llm": 0, - "final_progress_percent": 2.029664324746292, + "final_progress_percent": 0.0, "llm_enabled": false, "errors": [] } \ No newline at end of file diff --git a/automation/build.py b/automation/build.py index 4e251c1..7acd8fa 100755 --- a/automation/build.py +++ b/automation/build.py @@ -330,25 +330,49 @@ def verify_decompiled_functions(self) -> Dict[str, any]: self.db.update_function_status( func_name, 'verified', - notes="Verified - no longer uses INCLUDE_ASM" + notes="Verified - binary match 100%" ) verified_count += 1 else: print(f" ❌ Not matching: {error}") - # Mark as needs refinement (decompiled but doesn't match) if "still uses INCLUDE_ASM" in error: + # C body was never written — just fix the DB status self.db.update_function_status( func_name, 'decompiled_needs_refine', - notes=f"Decompiled but verification failed: {error}" + notes=f"Verification failed: {error}" ) + failed_count += 1 else: - self.db.update_function_status( - func_name, - 'decompiled', - notes=f"Decompiled but needs verification: {error}" - ) - failed_count += 1 + # C body is in the file but doesn't match binary — revert it + # to INCLUDE_ASM so SHA1 stays passing. + c_file = PROJECT_ROOT / func['c_file_path'] + asm_dir = None + if func.get('asm_file_path'): + from revert_nonmatching import get_include_asm_dir + asm_dir = get_include_asm_dir(func['asm_file_path']) + reverted = False + if asm_dir and c_file.exists(): + from revert_nonmatching import replace_func_with_stub + content = c_file.read_text() + new_content, reverted = replace_func_with_stub(content, func_name, asm_dir) + if reverted: + c_file.write_text(new_content) + if reverted: + print(f" ↩️ Reverted to INCLUDE_ASM (binary mismatch: {error})") + self.db.update_function_status( + func_name, + 'decompiled_needs_refine', + notes=f"Reverted: binary mismatch — {error}" + ) + else: + print(f" ⚠️ Could not revert {func_name} — manual check needed") + self.db.update_function_status( + func_name, + 'decompiled_needs_refine', + notes=f"Binary mismatch (revert failed): {error}" + ) + failed_count += 1 print(f"\n{'='*60}") print(f"VERIFICATION COMPLETE") @@ -390,7 +414,7 @@ def full_build_and_verify(self) -> bool: for warning in parsed['warnings'][:5]: # Show first 5 print(f" ⚠️ {warning}") - # Now verify functions + # Now verify functions — revert any that don't reach 100% binary match print("\n" + "="*60) self.verify_decompiled_functions() @@ -413,6 +437,25 @@ def full_build_and_verify(self) -> bool: print(f" - {func}") if len(parsed['link_errors']) > 10: print(f" ... and {len(parsed['link_errors']) - 10} more") + + # SHA1 mismatch: revert non-matching decompiled functions then rebuild + # to restore the passing state. Compile/link errors are a different + # failure mode and do not need this treatment. + if not parsed['compile_errors'] and not parsed['link_errors']: + print("\n🔍 SHA1 mismatch detected — checking for non-matching decompiled functions...") + verify_results = self.verify_decompiled_functions() + if verify_results['failed'] > 0: + print(f"↩️ Reverted {verify_results['failed']} non-matching function(s). Rebuilding...") + self._objdiff_report_cache = None + success2, _, _, _ = self.run_build() + self._objdiff_report_cache = None + if success2: + print("✅ Rebuild after revert succeeded — SHA1 passing again.") + success = True + else: + print("❌ Rebuild still failing after revert — manual intervention needed.") + else: + print("⚠️ No decompiled functions to revert — build failure has another cause.") print(f"\n{'='*60}\n") return success diff --git a/automation/build_warnings_analysis.txt b/automation/build_warnings_analysis.txt deleted file mode 100644 index 5d269e1..0000000 --- a/automation/build_warnings_analysis.txt +++ /dev/null @@ -1,318 +0,0 @@ -FF7 DECOMPILATION BUILD WARNINGS ANALYSIS -Generated: 2026-04-12 -Source: make rebuild output -================================================================================ - -SEVERITY DEFINITIONS --------------------- -BLOCKING - File fails to produce any object file. All functions in that TU are - broken. Must fix before ANY decompilation in that module can be - validated. -CRITICAL - Produces a valid object file but generates wrong machine code for - specific functions. Will prevent byte-exact matching and can cause - runtime crashes if the function is tested. -HARMFUL - Changes calling-convention assumptions (implicit-int return type, - extern/static mismatch). The function may still match the original - binary by accident, but any freshly decompiled function that calls - it will assume the wrong ABI. -COSMETIC - The compiler resolves the issue correctly. No impact on generated - code or matching. Safe to ignore. - -================================================================================ -SECTION 1 — BLOCKING (file fails to build) -================================================================================ - -FILE: src/field/field.c - field.c:3365: parse error before `->' - field.c:3370: redefinition of `__maspsx_include_asm_hack_func_800DA480' - field.c:3362: previously defined here - field.c:3372: redefinition of `__maspsx_include_asm_hack_func_800DA4FC' - field.c:3364: previously defined here - (+ assembler duplicate-symbol errors for func_800DA480 / func_800DA4FC) - - ROOT CAUSE: The agent successfully decompiled func_800DA444 and inserted the - function body, but failed to remove the original INCLUDE_ASM macro. The result - was that the decompiled function body was appended AFTER its own INCLUDE_ASM - replacement attempt, leaving a naked fragment of the function body (3 lines of - struct member assignments, no function header) at the top level of the file, - followed by duplicate INCLUDE_ASM macros for func_800DA480 and func_800DA4FC. - - The naked `arg1->unk2 = 0;` at top level triggers the parse error. The parser - then falls out of sync and re-encounters the INCLUDE_ASM macros, which expand - to label declarations that were already emitted, causing assembler - "symbol already defined" errors. - - STATUS: FIXED IN THIS SESSION — duplicate fragment removed from field.c. - field.c now compiles (produces object file). The remaining ~79 "request for - member" diagnostics in field.c are Category 2c (Critical, wrong offset) — the - file builds but many functions produce incorrect machine code. - - SECONDARY ISSUE (same file — harmful, not blocking): - Multiple struct-member accesses on void* and unknown-struct pointers throughout - field.c (unk4, unk5, unk10, unk26, unkA6, etc.). PSY-Q C89 emits warnings but - still compiles these as pointer arithmetic. The generated code is functionally - correct for accessing struct fields by offset, but the compiler may occasionally - choose different load/store width. Not blocking; does not cause matching - failures in practice. - -================================================================================ -SECTION 2 — CRITICAL (valid object file, wrong code for specific functions) -================================================================================ - ---- 2a. ? placeholders in extern declarations (unknown type) --- - - akao.c:213: ? SpuSetIRQ(?); / ? SpuSetIRQAddr(?); / ? SpuSetTransferCallback(?); - psxsdk.c:247: /*?*/ void func_80034CAC(?); - psxsdk.c:249: s32 func_80041E30(?, ?); - 18B8.c:554: u16 func_800A460C(s32*, s32*, ?*, ?); - battle1.c:311: s32 func_800429E0(?, ?); - battle1.c:312: /*?*/ void func_80043938(?); - - IMPACT: A `?` at the TOP LEVEL (in an extern declaration, not inside a function - body) causes a parse error for that line. PSY-Q C89 then discards the rest of - the current "declaration" and attempts to recover. Subsequent functions in the - same file may compile with incorrect prototype assumptions about the affected - symbol because the declaration was silently dropped. - - This is especially harmful for akao.c:213 where THREE SpuXxx SDK functions lose - their prototype, causing every call to them in akao.c to use implicit-int - calling convention. Since those are BIOS/PSYQ library functions with defined - signatures, every call site in that file generates wrong argument-narrowing or - wrong return-value-widening code. - - FIX NEEDED: - - akao.c:213: Replace `? SpuSetIRQ(?)` etc. with correct PSYQ signatures - (available from psxsdk headers). SpuSetIRQ(void), SpuSetIRQAddr(SpuIRQAttr*), - SpuSetTransferCallback(SpuTransferCallbackProc) — use `void func(void)` as - safe fallback if exact types unknown. - - psxsdk.c:247-249: Replace `?` parameters with `s32` or `void*` as appropriate. - - 18B8.c:554: Replace `?*` and `?` with `void*` and `s32`. - - battle1.c:311-312: Replace `?` parameters with `s32`. - ---- 2b. too many arguments to function --- - - akao.c:1454: too many arguments to function `func_80032E6C' - (in func_800335D8) - - IMPACT: In PSY-Q C89, passing extra arguments pushes values to registers $a0-$a3 - beyond what the callee expects. The callee ignores these, so runtime behaviour - is unchanged. However, the call site emits extra argument-setup instructions, - making the compiled code longer and different from the original binary. - func_800335D8 will never produce a byte-exact match with this mismatch. - - FIX NEEDED: Inspect the call at akao.c:1454. Either the call passes one extra - argument (remove it), or func_80032E6C actually accepts more parameters than - declared — in which case fix the declaration. - ---- 2c. Struct member access on a non-struct pointer (real errors, not warnings) --- - - psxsdk.c:412-413: request for member `unk0/unk8/unk2C/unk2/unkA/unk28' - in func_80036100 - akao.c:770,776: request for member `unk4/unk8' (void* pointer) in func_8002C6C8 - akao.c:1378-1383: request for member `unk0/unkE0/unkFC/unk38/unk24' - (void* pointer) in func_80032E6C - ending.c:378-392: request for member `unk0/unk6/unk8/unkC/unk1' - (void* pointer) in func_800A34C4 - field.c: multiple functions — struct has no member / request for member - (on incorrect pointer type) - - IMPACT: When PSY-Q C89 cannot resolve a struct member access, it falls back to - treating the expression as integer arithmetic using offset 0. The member name - is lost and fields at non-zero offsets produce WRONG loads/stores — the - generated code accesses offset 0 instead of the actual field offset. This - directly produces wrong behaviour and impossible matching. - - These are symptoms of m2c emitting `void*` for a pointer that needed a typed - struct. The struct definitions for these pointers likely exist in the module - headers but m2c used `void*` due to incomplete context. - - FIX NEEDED: Identify the correct struct type for the pointer variable in each - function and cast it appropriately, e.g. cast `void* var_a0` to the actual - struct type before accessing members. Each function needs individual attention. - -================================================================================ -SECTION 3 — HARMFUL (ABI/calling-convention mismatch) -================================================================================ - ---- 3a. Functions used before declared (implicit int return type) --- - - psxsdk.c:357: func_80034F3C was implicitly declared to return `int', later redeclared - 18B8.c:4524: func_80025C94 was implicitly declared to return `int', later redeclared - 18B8.c:4533: func_80025CD4 was implicitly declared to return `int', later redeclared - world.c:2208: func_800B7C44 was implicitly declared to return `int', later redeclared - battle3.c:1884: func_800E593C was implicitly declared to return `int', later redeclared - battle1.c:1699: func_800BAF34 was implicitly declared to return `int', later redeclared - battle.c:3652: func_800AE954 was implicitly declared to return `int', later redeclared - - IMPACT: In C89, calling a function before its first declaration causes the - compiler to assume it returns `int`. If the actual return type is `void` or a - pointer, the compiler emits a zero-extension or truncation at every call site - encountered BEFORE the definition. Functions decompiled that call these - symbols before their definition will contain extra sign-extend or move - instructions not present in the original binary. - - FIX NEEDED: Add forward declarations for each of these functions at the top of - their respective files (or in the per-module decomp_decls header), before their - first call site. The declaration just needs the correct return type. - ---- 3b. Functions declared implicitly extern, redefined as static --- - - world.c:2208: func_800B7C44 declared implicitly extern and later static - world.c:2580: func_800BC1AC declared implicitly extern and later static - battle3.c:1884: func_800E593C declared implicitly extern and later static - battle1.c:1699: func_800BAF34 declared implicitly extern and later static - - IMPACT: PSY-Q C89 gives these functions extern linkage for every call site that - appears before the static definition. The linker resolves correctly (same TU), - but the compiler may emit different register-save/restore prologues for - "extern" vs "static" functions in this compiler version. Any function that - calls one of these before its definition may not match the original binary. - - FIX NEEDED: Add `static` (or a static forward declaration) for these functions - before their first call site within the file. - ---- 3c. savemenu.c conflicting types for func_801D0408 --- - - savemenu.c:17: conflicting types for `func_801D0408' - include/decomp_decls_menu.h:10: previous declaration of `func_801D0408' - - IMPACT: decomp_decls_menu.h declared it as `s32 func_801D0408(s32)` but the - actual definition is `static void func_801D0408(u16)`. Every call site in - savemenu.c compiled by m2c for context will see the wrong signature. - - STATUS: FIXED IN THIS SESSION — decomp_decls_menu.h updated to - `void func_801D0408(u16 arg0)`. - -================================================================================ -SECTION 4 — COSMETIC (no impact on generated code or matching) -================================================================================ - ---- 4a. Battle headers included twice (double-include of battle.h / battle_private.h) --- - - Affects: battle.c, battle1.c, battle2.c, battle3.c - ~60+ "conflicting types / redefinition" messages per file: - include/../src/battle/battle.h vs src/battle/battle.h - include/../src/battle/battle_private.h vs src/battle/battle_private.h - - ROOT CAUSE: battle*.c files include `battle_private.h` directly (from src/), - AND decomp_decls_battle.h also includes `battle_private.h` via the path - `include/../src/battle/battle_private.h`. PSY-Q's preprocessor sees these as - different files (different paths) and processes both. The headers lack - `#pragma once` or proper include guards compatible with this preprocessor. - - IMPACT: None. PSY-Q C89 warns about redefined enum values and struct types but - uses the FIRST definition in both cases, which is identical to the second. - Generated code is byte-for-byte identical to a clean include. The battle module - compiles successfully despite this noise. - - FIX STRATEGY: Add `#ifndef BATTLE_H / #define BATTLE_H ... #endif` guards to - `src/battle/battle.h` and `src/battle/battle_private.h`. This is the correct - permanent fix, but it is not urgent. - ---- 4b. Incompatible pointer type warnings (passing arg N / assignment) --- - - Numerous occurrences in: akao.c, psxsdk.c, 18B8.c, cnfgmenu.c, ending.c, - field.c, world.c, battle.c, battle1.c, battle2.c, battle3.c - - e.g.: "passing arg 1 of `func_80028030' from incompatible pointer type" - "assignment from incompatible pointer type" - "assignment makes pointer from integer without a cast" - - IMPACT: On MIPS/PSX, all pointers are 32-bit regardless of pointed-to type. - Passing an incompatible pointer type generates identical machine code to - passing the matching type — the register value is the same. These warnings - indicate m2c used void* or a generic opaque struct where a typed pointer was - expected, but the function call itself is correct. - - Exception: "makes pointer from integer without a cast" can indicate a genuine - integer-to-pointer conversion which the compiler sign-extends. These are rare - and in practice still produce the expected 32-bit load into the pointer register. - - VERDICT: Cosmetic. No action needed for matching purposes. - ---- 4c. Large integer truncation / overflow in constant conversion --- - - battle.c:1549,1740,1754 battle1.c:1236,1619,1908 - 18B8.c:4791,4814,4856,4899 - - e.g.: "large integer implicitly truncated to unsigned type" - "overflow in implicit constant conversion" - - IMPACT: The compiler truncates the constant correctly to the target width. - These are informational only; the generated instruction uses the truncated - value, matching the original binary. - ---- 4d. Comparison is always 1 / comparison between pointer and integer --- - - 18B8.c:1580: comparison is always 1 due to limited range of data type - (in func_800159B0) - field.c:1971: comparison between pointer and integer (in func_800CF368) - - IMPACT: The comparison with a constant that exceeds the type's range folds to - a constant at compile time. The generated code may differ from the original - (which wouldn't have this fold), making the affected function un-matchable - from this decompilation. However, these are in already-decompiled functions - and are quality issues rather than blocking issues. - ---- 4e. psxsdk.c: assignment from incompatible pointer type (lines 120, 139, 144) --- - - "warning: assignment from incompatible pointer type" in func_80033CB8, - func_80033E34, DS_read - - IMPACT: Function pointer table assignment with void* intermediary. MIPS ABI - passes function pointers as 32-bit values. Cosmetic. - ---- 4f. cast from pointer to integer of different size (battle2.c:1427,1434) --- - - In func_800D54EC. On MIPS-O32 all pointers and integers are 32-bit, so this - cast is safe and generates no extra instructions. - -================================================================================ -SECTION 5 — SUMMARY TABLE -================================================================================ - -| File | Severity | Issue | Fixed? | -|---------------|----------|--------------------------------------------|--------| -| field.c | BLOCKING | Duplicate func_800DA444 body at top level | YES | -| akao.c:213 | CRITICAL | ? in SpuSetXxx extern decls | NO | -| psxsdk.c:247+ | CRITICAL | ? in func_80034CAC / func_80041E30 params | NO | -| 18B8.c:554 | CRITICAL | ? in func_800A460C params | NO | -| battle1.c:311 | CRITICAL | ? in func_800429E0 / func_80043938 params | NO | -| akao.c:1454 | CRITICAL | Too many args to func_80032E6C | NO | -| psxsdk.c:412 | CRITICAL | void* struct members in func_80036100 | NO | -| akao.c:770+ | CRITICAL | void* struct members in akao functions | NO | -| ending.c:378+ | CRITICAL | void* struct members in func_800A34C4 | NO | -| psxsdk.c:357 | HARMFUL | func_80034F3C implicit int forward decl | NO | -| 18B8.c:4524+ | HARMFUL | func_80025C94/D4 implicit int | NO | -| world.c:2208 | HARMFUL | func_800B7C44 implicit int + later static | NO | -| battle3.c:1884| HARMFUL | func_800E593C implicit int + later static | NO | -| battle1.c:1699| HARMFUL | func_800BAF34 implicit int + later static | NO | -| battle.c:3652 | HARMFUL | func_800AE954 implicit int | NO | -| savemenu.c:17 | HARMFUL | func_801D0408 conflicting types (header) | YES | -| battle*.c | COSMETIC | double-include of battle.h/battle_private | NO | -| all files | COSMETIC | incompatible pointer type (void* vs typed) | N/A | -| 18B8.c,battle | COSMETIC | large integer truncation / overflow | N/A | -| 18B8.c,field | COSMETIC | range-limited comparison / ptr vs int | N/A | - -================================================================================ -RECOMMENDED FIX PRIORITY -================================================================================ - -1. IMMEDIATE — Fix ? parameters in extern decls (akao.c, psxsdk.c, 18B8.c, - battle1.c). Replace all bare `?` with `s32` or `void*` as appropriate. - These suppress parse errors that silently corrupt prototype assumptions for - entire compilation units. - -2. HIGH — Fix implicit-int / static mismatch functions (section 3a/3b). Add - forward declarations before the first call site in each file. This prevents - ABI mismatches that make newly-decompiled callers impossible to match. - -3. MEDIUM — Fix void* struct member access (section 2c). These require identifying - the correct struct type per pointer variable, which is manual work. Functions - with these issues cannot currently produce correct code and will be rejected - by the decompilation verifier. - -4. MEDIUM — Fix akao.c:1454 extra argument. Inspect call vs declaration. - -5. LOW — Add include guards to battle.h and battle_private.h to eliminate the - double-include noise. Not urgent but cleans up hundreds of cosmetic warnings. diff --git a/automation/functions.db b/automation/functions.db index d59badcd4a52458a59401958410d1c7f53e6a7f5..dbc4216530907ae30df1fb45b684df71f1bca080 100644 GIT binary patch literal 1052672 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

O(MV<_e<11sv;GnqW`a;L^|`j%W-G zM|H03><~sxbGWG~3JJc``swFCf#-uLdTaDq&*Lhwbc3Knr{4j_(7uDJ&%wQ%eF!~D zlebl0Y-`=xYM#%;p_iScB8ID)8mncoTrSlIR5?RT8N-BFk4nq3z!`ArqG`8IdBbbl z-mOK~CaSmK5TACUY6$9z#Fk49;?tbM31et*s`s{P(Cb+a(bVn1)D)D27eC(e#nmu= z4_;TXtc3I95!4sofa!CWyL@q0oSG%{(94dqoIv@q*Cn)AhB34+t_9}32EpM=hi~1_ z;hXC#sjYOQh7)M35rd2BPAnCL|Zm0E#Ams+K&MkCCildBS`ojJP>p!g;Hn#cDf7aHg-CB!^&W5upKu!q* zFmy5E6)-f039z1DJ@9Q5*j-O6z}do$vE^KDW!!wAX){#d>NO26$-M%HF4|4N`F`b6 z)9jT;Z31EmE5y)^zE{N17-qztc7+&JWVe-$x788rT&2b7nGXk*pboEyp}-ImVt$`9 z#PoRhG9;?*6eDgiE@5vwT@uCDNYwU|roNyz5xn2wk*Ef9l6`sEfZ z)J^@76T&JJ*M`2;lu-PSSFJ!}nC4N>ODNiPuRp56tqzp~YR9*<*n>WugjFPY&O{Ax z5GCaqI2dE9forYh*6fh5N+m0(D^jDxl6eP?uG6^ZF%d^SAH`KZ- zC*!41skpLy(+T|86@>^XkxD`E&#kxnKtv@h0UoxmzxSTs4sz*mc!-{CP-&&X$b+nLd{-R zAoJ4@ClLZBk==HK6Y5Liq?&2xIJMLSeF>a; z)Pg#nbO{%eZRNg0E28G}`R6oWnLmI(5%w(T_^z>)l<=8=qF2tXB=jaV>!zEcaEx;9 zc5XBa)j?~ild0`l=1%%7=OK^JiCxV@=u4ut5qQ=2c=Q!Dtj6J*0{g&ev2{s>D!xP@ z?oV$>U6Y)jm=Sw2x+*9I;^DJGS5qS&!1>btm0cn*!LQl}CJu__Qx`D(a703hT3!zy z(HQ14v<+Q5ef6Fdzm%}Sv3tRyhV;Q{N^37z)a%OqR_&qU7E_8q83k-4lp5(3H#CL` zxAR=#1vlcYJ#xf&`NpfO=3&6ykQ zyyr_4G=_$fQgBu+f;!iYZb89WTG(bmWu!9Noslz(2bQ6d#2B2+=uj<>$wcR>+1hk5 zAJvOcbi(U&L1Sp|rSATGe{}Xv`gI!HQde2Kzy;0u|E8c`X_Z!=RJElgEiX($N#9%6~6l_8DxN<%$#MBZ%t<)TEbLCS>KH+^=!NXiE84Qfb7}$=qsleF3I(| z0u=7UTIvti07sT|tcjLDRewAK2VYL>3^@hXb67i3I%1VpOHy^nYY}BU$65+d z7|4w1D_?);-ix*wauY9@B9B5O^K>uJZ50F}8s>nMz2MsyR@_=76x z4Qk78ZgQ)&CSjSeg{XD*@j$h2XmB}DMl1rCZ1mjaKq`lnbp%x`9jsJGOR~XvY~Hr*|CRaaf1cA$D{Em;6p0 zGdjZQf2ZF`|2h3!`ib;I>3h?+r*BGsBmF<=Rq2b<=cSjY7pG56FGznPePEhT@0-q~ zw@)Y2fz52Wr&-IlsO^_A3Q>IQ(9w)cw?*)VHXss8!TO)H&23wTL=_I*ck%S!ym+Hr$Si z2mc%VTk!SZbHT@h4+ifJ-WL3J@Jqq9!OsQH4=xW@f+q)y!F=66ok94=f+f-*jNH{| z?h=m$w+o;{vDkZBD<1Xv^masVh4ofQZ&7+HsJ8-o%a2>=cf$WT`^_3}oAlAA;5Qqn z#`QOi{Z|_~_8-0VzTWz`(yCO)B46_9@P%u5l+*g7Ym5h?3H{k<+-Sy(X4Gg#jAqzq zhKwdC#mvCjL&MAZqd}t?Fq(d&Y5We6|LW4ne~jk)M)TiB^F5>aFQfUc(fmK7`A?(y z52N{aqxmqeAm{z+bhNcFY6CnUh}|<#se=H%|GeS zt^+O8|7TKfU12=?j4r&g=F#<`%Y86Ud^JDnNu$s2jOOD;^HHPuh|zplAOC+M$ND0~ zkiRk>d&p@1(r7+lG=FY1e`YlAGnzj&n)e#bpBT-%jpkiO^T$T>PNVrFqj`tX{Grjj z-Dv*6Xnx;le$Qy$W;Aa#ng-i=aDNntuHGrWFoK9W!GtHg9g7=7k{hc*5JEHE82hB2(%IS{|Euy=md?GEWDc` zy-~Lj*K4iBBBcd}B|bxMb?7bKp@^q+SyFE$^p@_y#bdfGs@AXH@)>&z4eaXdRuS(MQ?4=TO0M(2EFx`-g;ASy`i^W*IR$qTgLMLsxEs) zZy9U8-T!=cY5myz4f@> zdQ5NqR&PD3w|=9y9?@Hdr|@fC_A9;hkly;G-g;1P{X%a&pttVVTR+!ZKhs8+pY zt$X#>PxRJ3dh2ezb(h}yvEI5t?-mlivDYy@h8eTIR9afLeI2qSm+d=dRORc-=>T`z>9D9StP=hAzX729jY% z1GTWDfm+znKrO@3_>$iD8ohNjSkt4X(xRqdu$1p{Uw8oO+J7y%JaJGw7JWLD5B$#e zxc{4xt0?4)ez5+GA2zuST%2{CIn#V`2Gy7`f#BkS%Ci10<==XcKb8?u{_10JlDAN# zq0lw-?i^8s%8l78xFCjlSXLVVBH|NC5Lt!z^XT|7VDrXoa$7iAh4;}e=Jm7u0?*(Y zC+csCUdzb~L2vbi^gzic-iNpPMyLJ)di=DFcY;{FmWBXn@vak{lPH6@A!1PZSUJRZ zhZyQ@LhRM!sU5Buy~`D1Ky%vS&{D04U*{w`Yi@`bFXGG?cZi|hCdA&r7e&VTrvn{B z#IP-mV&F8y_M1etBO1o#3B{}td+sul=<+#*a^;yNa3_$!Pa!1wM!C9J!p4(AzX4 zHz4}kr6Y!kcQ7Mqu==**u#V~-h8r|=6*j8@OLK2uUu6W{g2UySdiSl|gZB-ME$gq& z8inLs=sGx1#n%{?w`Z{84nV=q5r~^bRfHPOPri(c;<(f|=skt{Mt8S1%tXVBn@p2< z?XKw?$4ioz`3b#Ayf$2tgDda99Oh*L@W3E&s{?bo zc0Fs3!T`2EJAoLWW+@UjJ!+EUb2$3XrJ6x+61GP^dfp2M-||s+;n}bZwA44#)NH@W zq$OT_PPu}0i5K*qTD)vgWp1t9Edwu9aH+8w<8f53Tf9&_F6yiK{=Y>f6yE>awyvh7 z*lJH!H~VpGylPS>9lK>bFolqK-HVgTVs7zjX$>@0zfy38mGnIsNyiZQM9AB82{!SFpdgBab?DWf6g z1MS+~O1oqp$GW+KOhUa$$owbPVP!+R7`mIY<&x>Xnx@aAj=R8L_*yg%CA61Bjt$_=c8Q%F7;(F;Q<5VlTqP$)7l*!5Nbc#PZ#A zYm=}A?EU!wvRy18;}~TZ>&n~|B1kf65-v8Q2w@z>kSD(7{LfwqAdFLnzptqZ74OW#D-jw>&RF z%eZObmLpS!Qg|9#e=&;-Z@ASmRC`CA!Ngq$uZ#HZo28PUDg7?Xplg*0plU z7!GQ5BgJVI9YBq8?PaB0bgAgUhN0dhR6UR5>8KKV)f~;)aQi{IT3gM&2C+S@5%X}D zDbuC8yG-lpxaHg5X@giQ@I9#ie|#YFQuw>RF9@dBv@LyESDD1 z!x2Ie&bZ7+2+s+M%e{}QNyv6HE#25@_7V{5v_g!N84pVf>P=2U&5bm?Y$s+5${kIY zJxb2XY~{S{QHrQHiI{(hE9HXtu4!?im)hi;*}&L<&aqZH$4g$0Mp17P!5+)d6&v;+ zIe^pR{2dVEED()LMC}y3ZS=1 z$t)wv>?j#r@=TA&RhX)OYA{_tEF#bd-clnzIXl`BJ~(_` zWNu`KNQhcSofNq>{z&A@{#Rq)g&GEzM*bb#K6*-UWiS}{ORN(3Bh=daVQfMC$FZKk z+Sq=93t~IQ!qLA5PNd2Kmg1nsT`Ksm;A?@8MW2s89O{eS8A$pckG&B%GxlWc=kX!x zSMhcJcd2XRe~Z81zn8kuf3yGU*g1(v^xM(N=yC_kerkMva`Q;Z`;P*^?25+bPxPcey| zeA|-0ypMbeG5}*;ga`$?$9E@0Qh}CZ^GH#?NXPc86)6!5@jYrq64XN%WBZy!@Dt~d zqFhmq%_c=zfsV~0MM74L?L&%qcxvxjk<3Er)WpH02x9jVWm3clbfQFv(7|hbFOx`+ z<9pVMBuU`J2>G@1LP<c7?~$TXL5>tiktEB(e-WaBoTC%#NRgDK6O)8Umf-g~k`ReVzjh!*a=t7F z|4WF(A}_~wBt)_ZV;x3_@&YXLSVu_|=}f7EuAX|~Kq{?{ZD_{b?H5ie4qT9H&>B{@Nwv;xb^3DP_k z$^sw!C)rUh$q|7Nm1UTZHPFDN0(Va-J3`is)G8 z3NjTWM5Pi#QvpIG@ntbV7*VNIDDsq#c&bzY!*>iR60>q-0V&Gn<;c;5NQMZd1Tlvs znJv?aPVyAFOLUZ=_D{mJ!hjh{kaHX6m6$NCF!`LAFs(3I z7@k~V;4{jxZt^E`1u^)pNd)T<`Gq7F^gc^GC4-VD$VFO)ibTLG^Ob6c~pAscH zK~8rDtXzVy6OxpN-|I@EW1$4Y#BNd z^HHWbhEE(|dJ4uO>=!%*)BQm5DIm3^h$$+wMS-UXBP!E*nob-|xMVUb3Nl43U@{Ank0O_HHb?W3L1HXcVEM@RNfBQV zDbiD5!9$LGk9-PLha%k-xZIMdoyn(IPL3=iL<~do35gJ~46NI?5h9TA37HVFG+<9S zZZb=Q(_AE;VoD{MB3wn8ftf}TJ|>7nIWjCoWN~JQ8vd@A0b7&Oh=ZQM0q;$9a6+eG&RE{%JY#Wsla(q|F0TM z|01<2`Q=14-s3OCQo;F=KZI|i&hu46cbhhLp8j|I$kn?+lp!~?ovAb*Q=~b3#tEbZ zV_l1u3?O!bF};?ZA|-0`X^(WNdt^KU6lj2MN}%C}BmcC2|H-?S@$pP8x14b~VHp;X z1LB2d#k(gWYu-RL&TJZrH(Kf6AEcWnZy7&pHL7v~5blT> zg2rbW){v)_<8BZ36h^=hV%o!=jX0_PP-h4-bcRL6r@HxUaVp3ZC-z>AQoIel8UM8L z(u|A?FS^$o7=hHAKP#+ehpB;)w$~A?HxRIHYpz-A%|I0>rUv>mL(40}z198^M5nlD zpxQfpZe}jh5bM7Mi-a<}8(XA2UTr;DBpAbNk<=_@hbU#cg_d4stAtx{p|~1lDc2yT zXDQ1$zNDy@C&XY3Gh*WoXOoy=a@`z6bGI}^S*OdJyBgIdt|1NfYj+lMHj887ydZ|g zFd^2nX_J!JqsC1*R5gfHwiOxYYC;}xK>Y9lpw_A`QK_~@hkN_Ztn_zhR1KS$yLuZ- zxYWWyp5Ri-2jLO4b#D`7jmhiA7dq23m4FQ3^0@A8#zJiouJOUusE#ve*N&JDRA1j{ zISZ$)C?CZWTrh^FU3iUCYkAmJDxD~p4`Y6@Ij&R= zuKAjR2q?_=38nb}{10q+j#9s3-G+x%tHZn1Ym}C%^i}tO)QH2+r`gcvxOtfWZ-q~( z{&z+~jEAF7M7|MT9y*Xp2A=U>?_04oz9-~ql!$3Gp`UXV3lRH?oJ)6=vrunSp2o|V zreRO~9ULY*L3-G!WTFYs#sG zyqzP45`$ZMLa(K{f*tFzMlA0kr%~kd;DjsdtY*g^#g{=JafKKp1~=ts%4$~DAafkcr^l@{7>hq+?zYYiUu98Xfz%HDVsv zOo}2`Ps)t_vE5zHN`AT^w!bA}5E|}5$Dp@a$D+uP{Z2hha6BuUbLn7XR(4w=20o|< z#OgiRH*gJ8^?d7ti&)+Yv7GE>twg;|I`+C!cJ8bL+{{WSVA@)rU-QRO;RO)?|9&vN zA@zskFB4yhe=+u%sN{P;LWd3tM5)f;E?Z;&KTXD*h^)aJ-Wp3_%{^$2!FBcBodcoX zXYu0T<56DI0)-KQKvg6|g~fVL?o2!M!AuwuT05;?rzb*UxL+l0t7xUQ#K zzuoq{(QaItQ`Zv^K>@Hv0q7bX$(1p`p*uuSZxbSFopJTd#33TtZl)=_GqCN?O%waR z6@Cr)-Y6us@%JtjJlKRB^frC(-(tEn)$h0cz46LnH`3Yjm00(h4iynK@o9fOBraRV zRk+;E0MwgA#JAd+c~pZLAPd7*T|qNteDClQdRAs&B(q{@pnuoRa92ylwFZa^q{v1J=d{!*=8J1qxBYZozGM=!fI@3R>C_(msmh=5(}+R z<#x^#N)3yLAgtziWwX{`HgioojC-;|Hjj6JE)jv=BqF{qI)g$F6k?j99aa;GQv-!S zc~As+L&KcSvtA|=^d_O|dG6av4oZWV`OU^EXc2tPxl#l~qLzq=qKBm_3%yNbb{U{MBd!vQFJt{UOqTnyxDHPDVM0eRBDzl z<)0l)Z%jSwpPk$;5sdvMdVOSl_~Jl!XqZ|UJbWuSQ6In|VKR|i%r$G1SYSMu7u4IN zIx4e-%Eer(IyMTLLnu^JR0j~zh+Ndu326#NljS;iCE^n%p2%!g5-W!fpUlbLcPzmJ#Vm*0MBAm zLI`2nkgPqmh(LWV50(Uan-F>QiqX5yxZq#gJ5&-45xyx(0*H`=uLL4Fg(uP7v=N~a zrwNgVa9M|KTq4pWXSTRzcfxg>DCnmQqQrSY1bUkg*{FDKxdtiIn_GX?4H2q!VaJe| z4;w}+gUc7L*jnceoE87Z zHAhK&z8`$xb}jH3QKg*5iVdZYJ*=zH+ceiVd>ySLLk;p{HfJ-{j3GFnZOS1MAc9Kb zG)6?k@c}NaAM`dM@+u^G!gSx;q4m=p^rjq%p!olUe;0`VPY079PlV%4^z_KSp_8aR z0~`FiP$DI^R_!l3d=e$xa6>!puk14Y7thkyeW>NA_=c5gKa^bQ!vE2;(^V;vv9HRA z5jsb(v|lYwRq0O|wn0s|Z{2xa@8;xN7vnz`Ss+FF5a86VT ztB`}B90pj0p+=ApTu@n28HQqF-CEJ8!GV#%-qF6LnHN7ZnHgGiM*qO##q;`>4PT99?Tpz)Qix~EFT^^1Im(RI^(7X4z5(8GSw)0X1KC^Xm~WU zcxX7o@lStj+hx;I$Y`PADI&`_YN#WzYzW}s%HhYt*V*Mu0>-5PzGJKSvB@M#kW! z7Q@gP`0@P%!|=-vL6NN4Lr_s|co<~toC$XFNc=&yl5={Ez5?WFD+bZa2St|*xW6f$ zR^4ql_<$&n5-mgQsS!{^S%5GN>QQ6LxLSaF)X)fK)P8|;17ka;{myTUJVzFprKZ8xTeN}m7R9i3}tz5tHH24wTgoYiXsIH-0dm7YEgYly$4^c`u?`SIFOc$7v zSDy%tpv?lMh_mVdMIC=USP6KjL%;^?6>(-KQL&T8OB`%zyv}WuH9|TDZ+=QStTy&W z;P%5Vi0`(M%!N{unsN+jHMi9Yz8A@pp8(Y6F4?Z$H>U-h#k**DXs`?YOZSZx3E`D1 z65S_9J)zVZbg^34?!Rv}oEiKq=~yY+GrEyiJbv)x!7!uYGuF*$nwFJyP5DCTU-rKu z^u%9Lna97!MWFU`{K?Qf7U4wI<~;74EQ3ZG`+Fl^2J*_i0!de~^Dz0<4|6O0;#6T&)20jK1eD6m88rnDdJn;Tq5?T@J1D3q^BB9_tP-6J-4`7XeJ5It?-_q2{5J?6`%({J{=U?C zsU?WP4_E_tPDM2aKkB*U`s783!B6291O~sve-dvdo~mW=0|r9G;I~sELfsL60r(1k z9KSxkE{5(Hn5%)_)u98HeJ0B6h{q=+u_iK7Tn4wwoOr;{SOASVbeE;%a$#mZ^K zQ`sDl^L&yNL9O@1sicUJ=>$o>wD^$FrB0q934lEzPf%qWVa@e_fwIZjf)2sE&W zl*q9l&4D7hM))#N<@|_viZ7K!isUWfiy$HiPxzuNMlK>d%J39P>cY!;nIdUqc%a^+ zNE(?eVoSS=7%K}DE0G@)B0(suH{4qjQg1DCrzw)KiO&{zDo1ogMQJ0KkRqTUi>xF>d>)jXq+$|sKqU1!(^K%PP7tDe2`G=2 zlcJ(XQzY9^UKV+(N7pdB8h(T0&o(YNp=L@9qJ5H1U!Be$;2a;K?_O7 z8&S%O)Dohjm<1ZF#iU4p->YI0fv)xwBEA4Kjihw~E=ihNL_7tbQKotcQLYFtWHM=J z){-U-cmw6I`6>89q?OAFWtt+bT#f_6Ceq5~!1_|8mCGUm$difRD_aD-P9jAxAE^^b z5!6qhP9Q}&pej6`6mei+jw3`u87PmAB}FCpXvdHugv0_;Byl1|t{p-FY&5x02yn4N z9Z7b~@iawp&#vqz{i1>+R27cl%NfFJ8 z)PsZwt|NHr7oUcEBp{+#5>+9a=MyBVr92pgpA#KRSpfQHqzLFMsryI~q7MBj zDWXAh?j=O9=E&4fND)|3>K;-A#9`Fkgh-G8LQ+kDl}@I}~4fu}&ujv`PM zQr{zKct8TGjt^(lFCJyT5l4;99l<;(5IawMMYrtBfSm@O+M1=kRW!ABE1d?vCFL? z$C6;tSxt%xuv(E`2T;t4)MeyTdH6zKBt;N@NL^|Y0fb*5ML8Ir^g5&*Z~&8Dhm_6I z)aS{L0(2z34hdLcsn3#60hb_kF)2bT-$kSdt$d`r0_4#$MS4~e4WxRXAv+@0&I<`q zp$xz31*8alp-+<{C;&ixiWC(5Cv=6G?vu=tjl?G05`~h*0Msw2YtqyY4aD(y6z5SV4J+l&NW)q@i~Ue&QMg85BffD(dTJAKVng*Oz# z)6yz}Mhp*P9%y*M$#R&d&4Yfx2xipO;?+C3oK&s7;M6A7(UZqp+;y|8*Sl^sf(DxR zyY4K6d)T}qVYPh(YJy#^++FoO10ntgplsr35M8E#YoF8`WCf@Ec1HMUxI@>pxs zavsCEST;B1sI~NZ(LfC`G+5{w&UN!(c370}hWl%}_QT5*+V2iGx(1K+Do`lt{STDa50Cg?3PBF8M=0~HEMaUjscUea}3DzCTFN2$DpM%R9)gy zk+Xe~@WuY*;@BsmAB~@y{&o1`)K!U_gE{<<-ECO=xi$iA1lkC+5ojae6oK)fm1?1) z9V58*=uGYKLZ;yo5BWQ;*kF|2YSbQ1Z_>!aeOF-zu_gf*w!s=r0GGi>b9`PCF}V!O z!l6aCAQsg;G37Wy&6>*09;hxJ?%fYEpm4g?97t~(tM;K2i%fM0r9_QY`_b73{PhS3 z6F2+5>=dS^JwHLO41y9ABPF^c!;4l~r-gxNiAFr%}O5@@F|!IWV(arjD# zz+|FV$E2Lc^l|PmLA^;#0++hQ#B;HRUO2EE7#tWKSW(F=9~!8F>eQ8r9IKw`rCOv~ zED|ihkD6u$rt$|(bglHMnt(055tl8M3Le<2l-{H!^lUu*vA1t{?={~lHyVM+D_fd$ zsTF3Q=v+zGGc+KR>0-&fK~Z{}AbT9An$2^CShEVvTA5%CF(0g3A=2LH>y}KzS&;`n zLOE$tY?XS@6gb}%RgTotw3Y5IJq}Peb<-tpC3%$?ms{Ilf=#OYhpJhtxJ4P zInj4lcLwz~eMa(Fx@L#VZT2%Zx9ZkJWGz|Qx~2|UiNV+SE)jv=BqF{)x|-vBH{XRfr9Lj|ZTjr5<8l)Y3vKJwVC_{5ZdeVrms!YeCH@(x&!!ajLh=8p zKor&ge=+%JAey*4erfF7=#t2BVL8N59}8~#p;Dao%UB=){`fZPjH=@y0%9sJTW{!1 z&M5!&4lO9&n!paTIeYHNTCHqq9Taf=<-zwvy-iTm-$UBjrNJS!t!oRfn{DKWTNX?$ zb6(b0)SJX&Gn7o5-MDHVM{^ic0Fj-DrKe`IR_46yOi=F+C?Y#rBBBNqyW6Xkm0)6} zuNL2_-c)So(1K_>!ZpPQ10As>4lT31hvOd9+oU7ULUO`a?>Sqo66nxRhlp2O_vl^? z2_Q1lQb#;7?Uw79c6*+=K&ia!^sF1}2q4mwQy)OYl1jDAc-haR-X` zZf8xC*tt5_Zb#^dapPGiGdP68r5%CZCPeN*qZ2pIseVUhKQU4N_AqFLGEc`B_UMj$LvG3F>Wv zWYeGa?>~8$o6d3w2{trYC~Vh^3ls3{ElJKxSuYI5s5gm-?;8%G&^`O6*j%I?8ry2! z0a^(vhJQF{r~lV#P6hc_fec6KZBmC#k37Bo=jR57UCxl^korZkzE?jS-*$6v0pC4u z_1)Q=2VxWn^)`L?jhF_cK3-_Eo`xEEA=r#__3WQV)(R>j<}(kdtK#80R_RS5;vaE2 z1)7sE1T}F73PE_+grR3;?T}M$=vA?9!r# zgGLGUCL!^wl_+eV%WF`uxn>*=`BI^u0RP_wRN}7SHPp@V>r>Ap9}KKXZ-}k;Ul1Op zPQw4RUX4GTzX2Fc#GqpERn#0naCz2)(L}vTP3(CM6Rpm6I5)LxktVrYk+mhO6_w*X z5XMWWH;IT}<%DuPH|>S=cwIk0IX-Ts94yp_cE6&c-Xs(~4=E+^4shprLS#l$YMB5c z2U;RhE_y)(dYce=oKya&1@3I?2%au1@DMh`en&3+AZ9~E)*`koBfp%mdXfj1gv(1N zm&A9YD|44?67{Cf7nu3sT-w@iZ_px!1!_xz=(`q$ovIGiZD zquQKfn2xmt4H5G;hNC@XP)Vq_36V{=mk^t|W80xY(yY9p$lCp_>?oVZb>iG<3F=K^ z;&-bad{fpzbhBI3^urViA#ogLeshNf>P=$N^Xy$`K#0+vDw~}{*PvNN1_2St8WGxq zv&3<<*;#rfIseYngdVrflF+p4f07=s*73;UnhGwJ1bUm4452YrPrzK{`-VSVv-Wjh;D&ar=hZEjaJlbAy`!VcDqZ+LoqfF{gI!}I>i>3C zhpL0UqkT&Us!Md4PDY7F=p4ZvRdQXDSCyZKIAnnwl<#J;xB?G|xC|q9vrykVPl}i< zu&fsehIKq@X7)gJ@o?{cnHr|`@>sQRbYQ5OsSb^177vY8`!fU8%!*ktLt;q&#h@+q}Y&5RD?g2I!!3^7*h$8-xr+Zw&Ca}$@2xlR^S*YPB5#tK^Eatc4Pdu>A_m|=Ts(czE1eZ#*E>RY=G z6JAK0Q-9V9Hf7&W%w)k%dB%&5Km3gRI;Y!5e66rt8q_rpL95l~p5=GDh7v2{Lf&+pbQ9lkYl zzsjoWSl60UC3FijRN4Rg)&|m#rmjx*Cpu&Q7yV^mQRE8W+VCfXCsPYTvqH0)dH`_I z;pejn_v~CYxS#^N?9obpcV^K*wRia3%;3O?az>DO@iUW|p+#r(4=i3huW#8v z2JhaxGdrKcv4ffUN0g7;`4oCEbJ$RCKb$9ImJbh|QRy4abjD2&99*eZhI>cRGsBhT zL&Io;Kb+xmnX&4?=tySv*a-S7F*CY!xYFA{GACZ{9ax5bA^hLW=ul>8d8L}^>{>K7 zu&f^)XQ-zd{Ud!#d#g(-UH!eIyD1NI$7O(q5ll+fvk@qx;f(WOSE%K>h5Yo; zwSz2CV?EwANi>XLMs3rRal~hIs!P<^?DRmb#}YLr=j{|gqG1FxY8w#g#Wq96HKel> zCwf|3-R!pxQAD8`sxAZDY3^sCT*90fuD6fM2qx5gceqh9rdhO{R;#9VXOjw@;7j_R z45c4Tou8aYBx8?9ua5MF=lGrsyz0M&+O4U3|Ec?7jmwG*V1m-^z+nWPAb$p zIZodT#?anN+lah8`|tOyK6Ormb=$_PfVuJ65egd2qe;948Jq}d(-?i5Sl zgtBKRL4YyLz`Y3MU!U5rw!zlHhQ@)DKu-fF0cqUH*1&o9t^}dpyRtsCw*efSinR2= zQqwqCpAK-nMvafHI|-v+cRy4V_>yPe42_|wt9nE9=AZWOKY5p%4212jE9wo=6a{6@ zUw0y@ZU^Wa48G7H635}nfX2{XTyy3(;Wt0Wje%o;xzN_F!eK*wy~{EydWQ#k7s1Wo zENCqpVP<6pMlvgg2Kx8SEE*flC^v~`4~#C&%sVhM8%_U_(cv+;>l{6Ic?ANM7gvTW z)xL^yLpnBGnPat)<#iAL1QJYRXT%lCo|joPh8fH^;XD&~AWN>m6uOy~Mjxtk7v2A- zeGkV%A4zXWJ(Ij5c1qyQNY3|g;xqoI;)CJ6g8zxmcRjV6-EktaW&o6+5wUckAbB8< zS9+8Dj)4Y*s764g)m|UYefXvX%S@!#oT);AV{r|t%Yww=v<6pHmr8FEik{aHf$&~` zR1c|Z`A}^j0$C1CK?Epb*DSGuq#%}+n`w8Dpx!1(He&YA`Peo%hJ9>dB&fFuk|&i#H>zIMJA{PmW}9Lz5hUn{4cU;oi31C&vXHog1obvS@-t=Lbg4-( zjv;A|_lF=Ew1Pz9@rJ@3B&fFuk{9-Q{hTM>|Jy8A6Nl|)nr2IuT0v4Mcpz6Upx!1( zUU~1eWtYn97dV6joLayG1vE8da|KE=WQB+%l$2ekOC^EcCPX#?9x!#vt`On7>86}X z10oeGL<%_^Gvp2t)Z2`Ra!q`i)Aa`H2pCsejy=+&-u`|F0c0{-^dtl!LW&{USb>+G z=^GjxtW-y5kIc!;?yo?EVLv$W=Yr=yGFBOx1BfiMLPX*{khB+2ZxbSaI#s#2P(y)i z+g6MS(WK>^wAr`84JQIJjSSX|b~oZ?-=3 zjMcA37|{p6DrNbr!iOCh?$dJp@m;5lSOGm$pdi5r=3n*CPrU!v+e_b=x4B={@&p0w za7%-_w8)X^`GxCYQ*AW_+_d&)SWlAvV!%?{M6Ujz(wVlw2xe{D^oSA_z1*3$8L&0Q zHMBb3&1$f*U-Xl(>F2uzDJOcJq%eXRwwF=3>IMJmat0f!=7DyhEsng@e1N%^UZ|pG z4vI!DvsYz<5lpCQLD4miRE_zqpPVXOkV2Si#&Tz+Wg1-jUHWMfE@ROuNK*Y(l%u(c zMlit@pqy!!J}H}XWNHPMHYvxKUHU1E*N#}d#%CIydS39TUIiFI!wX;B`L1;c7feR* z(cxmApOW0BiP)v*5k_ddV7zbEs}TZ6q0R{X3Fpr5=Ip)ISq1lXwr15)$DB0pXtZ@- zKCsN#&ZBI>f$EChWdr>vS8%wu+CPG_qSTbeeI~d|(b=)$;RQI3i`LYX5esDMvOl=sTEM`5!1|yhY^E*@?-Nvv@ z*_2tqrP&xzGjx&Fa3diKoJX6CMlj*k^EA$e`j|53Ez9Z#1DdBiC>idMfgv#LsEZV~%k8&R-cr``G#t1`8$pQDX;cgPV;*iUwXX zo+NCGy<}e9i-o@CKVzDI+YiaFH-6ZLX9l8KQQ_h^7RV+e!R^3sX!xuthXfLErIo}i5z}CK#jk(4^ zb%0jxNVU0^+~^DYd|;}O6V%XD6-#-~ih#y2;nuThr>~;T$0AqoL3CS7-5?FViOzK> z=BJ^;NpgcC91ax@jbQ@LcUwJTTb@KHA+RYiKUV&>j+n3xIgX80O>U5^>kzRbjA25o zM=d|a)B|T@rZy{n%m#2MB%~p5Qc14&9329O#xMi-7b0ut zr9mZzEt__5ELppW(ZagLRx=`BqCGp7XbkPW^t~L4%3C*nk{eS3$zrXY5nN6Df6{-Q zKlph1iPR;@1&N(wF9*IHy*YBW|GMx&p_ofGYj>Mc1ja`u(GrPHrPQEgwSY8-=YAp~YZfygfWA00JSN-$ceGX0(l zjnFxQr5b84Dm%q|1K+>~YWWs#d~#ax`bo4?tU*mb4J>e+;PJp5jbPTbH&9jV8H*Ye zuir9iuw7)D5+G)^>oKB$Cegy%7&f*+mbR{Js=XqVO_dqS1|yhZdkR=YcDrMN8a!3& zh}wV+_B`2EI-)vk>?DeDt%1$3Y#hzk`zy|1gAvTIsl}ZRsP|U33>&Hm&{Ehm%f?Nj zeNPQ)#vEmfQvETQBh=6cX4E#}lK-yO1Gv;UiL3QEyt0(2uNS9pao6`_0)>IN$Pc)?-M6eH^kDB=caV? z+8(TpKpTNJ0^Sgqm~+LhVASU>*-k5csk;?Sp2xA-gS`XQE=GhHD~+R5kr3t_{k66( z(n`-x;N}>pYG)ZQ;d_qRb*7v)id$JmLO>;}mPQRQT9E0SD|WU7i{q5LNEcv1PZF%( zp`u?)N7VWSHG6S8VA);w(0<)Z*0I$Qh6a`|zQ6AoZ^}7cd&8vpn57WG*4<~inluoe-_lqST@N76X3iD6S>h$|$|0bOc>_I3yxzdBw{ZmqQJo40u#I_x zb}X&Ew^vV0lb`p0Y`QA`H2A$hmv*t#B_7||xX>l&N$S#XkO>~Xbssl#56)Uz%Mie; zx&#;VZC$cfTF|APEOm*+mlG~@33`&cv_av89XrUCE>C90a!a)g2iC^ zL>FK|PZBJgnl;043!NBou1S@OwgeW+|4;g#^`#$5O(uVmSR7v)J0-fe|Jm@y@Q&0= z!JDmhvi&#H9f6AupF|~@;2f-uO0mF~JyIemBWOp8S}`CqmEu#F7NOoRWVUcJt5PZE z+Ej|QREiJ}F@is+wg)zDB!p~(d;onPZ0E8Sji7x{Z8xkGs`&b^8gMCY;RB+02)L1G zsiUgh8nTnamZ&wVhwTit2Gy|Ddz=Pzx;9XQZE;I4BvjPKkDffMF^ywE5WJ?sqY*S! zQ^EvY#~WciqjNU%Pq@kDq$=o#NMO&rP9QXb_Ey>idJ_i;o>}KnZOHV_)Ro|_ExIh@%`S74luOM7y|QEjmEGfx&^%ffbd^@}Yt1Xl1yr~FuCL5kqbI|MEJl=EF9yEgXR@y4{>>s-z+wW|5ZXROIZe>iJVQx|Wm2vA| zV{SR2LE@StT|gt4QF{wGB%;hLBmYG^0I*{`axLcWP*F?8kAnUGUE#pS^uwvElS>kU z|E}0+(PfeI!k-TvOYJ`0_qhK*|9%slD@Q@&jdGR~x;HBq)KkI51C?d{UCO_8eaAB5 zR#bg#tlGCwq-mvh=ZGTIOvEO{m=a|cV%t|+-^*5wf7({G(AK)@@9p=RB#0u z+>5nz9nzExL3XYsWO+de?sf?o^!`vnHa@iS91Pix5v7=zQAtiNdLdVS5`LFwXZA`mAht_S^~XIuZ&M2&TaV{udsY$ z9#^q&`Nq)O^v0JRiKwnlcl*XuQ!o&|@tEZsb2#$e0T z)xwl$HTYw%eCT~LF!1OczVVvK2+Fq8Sxs)FL&P+vNO>MBBY?S^iEb=69F-F z2HzMlI_JgML2nac8=y#JAbE(I4`6pDsEENfeOkDx$cs433bK4T=RwI(Zxdu*ebttp zw`xj;AVbId4Ye#^^5R9H-ctVDF282%|`W}O0-(hfw)O@R<%bN!+f~Cv3e!iLY;;;P_;K>M%1!Z z9t5gR(9+0{nnGE~A!q~~lss&ZX73C*WehWLYRdS9u7KlPToy5zu{Z~2esL3u>@>w;L;EJzA}A{F%%L-8(8#N>nhil~ z6DGp6sI>=+7TUiynh3>mPOdL;;uJ9$!-QDR%Wy-r&+F%^OsNhRE#Q1?>6MFaK|0r= zOR9#dR?2#>S&POn0q3$vvd|<_X3HRUwIDe*8@*fAdO+dCszu?%66al;(HPoCQDRNr zz@=UHb7KRb5*ckXGD+e8^L@*gel+-U>Z@@7pY@*~`%mB|-?yR7qH1gK z@nhDX&=`7IfU3B4MZ+2W-d1%{h^uZaWAq$gWefs(k|wp*isbdLVdeTl7#)YA)<-I% z-5EKvcwkv2GhA6w86E}JTwu?ce}sJ4amCWY!ZC+W%v*mfInVWIZdqV3`8wfaIejk} zLwhgP$MXG3e*ryKWy|jb?tF8|*RAHcR-%nxe>}OO)Bq-C>r1pb1q{Y80oL;t)=>2x z$(b&oZBR=?xeeTovciq08x&Y}h#MNijN2x3`?kwXgRb-qc0nyIWn|!XiWP2Ira^5x zhq$3J%(%UYNC)5jgAwKIWS&Chtd_cd8g9b+lQrB-%wVzr+iuSW8^$o>rd{ga=t|*Q z&GujbcakM=vUi0OU<@nZ8tl4ltPK1#(Kvqni5hUG1O-`WMDyTqrlK*-z`b;P>FW>O zdlBnW;aXc7P*XU5{c)DKWv5`K!Wd@UHhuZFd5~t@pzN3peWP2<;;Z2{Z~ZYUZt7`( z;fe5qcb626VZzO~#+9Pc-E2$mW;MY0^$V;NjprrLO9C3h1X#}|9IbzxE8HM(BHPNK zb`7_A>yNfnG`2y#eusvQhcQgJxmUE7-e_xp?YI6&4KVXcz?E?Y7cZMCG=>SVVOI(U z`T z>M#cZ&1UD(utl@no9DU(yF_L5dR%#4uQsL`c&5m*_~J_;t<=;*af!-!W)FX;&oeJ4O1k86+E(-t= zL`%>Z5%mnhB_hh{1EC|oybArfI_(A#s0iGgdqhA4F%C3D1l9{BF47$$sJBT+eui@e z5-t&GPGaOlWIbYsL5SepNR1s~a*R?I-z6f@n?%Ham>Ve2NoZ3nE+_}$RcNRjv{X{| z8SbD!y-6r~o`&uJHr4;BFY{r?fG|z+|0bmMh%}3$ej}#d~92 zk$;5mwzd18x`!tCRe6gKDMu}+WeoF&+=%HLPR1XyCSiy(D2c5O6;O)RbhvaI zA6r$xxYbbvN>a(QrB%kza8na$)h*@z&R}Dd%rrzGGDReT{3^*(VIa`Vg&H%Gn@3w1vsLd1@jv$X;)b(dyU(F!-2VLao8#xUdd!X>#wANclP)Ch9h6HUjh zr7n$%+eP73GJ)GgInAM#xRP!4oi?=T)? zXmS06$W70z=v_8e$yA3%GXqPiL&Fdr)jI-JIx<6JOO}qJP^m=~E9X-E621vxmFZSV zk5ZRPV%D(JO`MtMuz7Q(lB5OH*JpVGI*+VKrvYuC-*as=+E_Yu0bARVJq)CagM) zFqcNj9Z43a05KTDgjmnBh?hIO_gq)1CbZh0Q-Sk=N0-IOHSp-zLVa;NhYO7aV`#`} zrBU!T)PO_aV10(H1BiTOrlf|%L~)g%s*D<4QP7u~g6uiELPBF`FRlf~UghwW@g%dG zGGIQiQtBnH*ji^+`qb-O#gjN1R=yzQJu46z!-S*%&#rK6`GuT1=fr!6GdPWS5p&^E+Tu`mKXxqALb4{S9WUfu!#=SjK8-X?gZ3Nl~v=L|{&_bGk7&z+dHaz6+JF;Xgxs5O}bdNLGL?vCLF z^(L7ld|$1LnPH7mzMIKAuou?5wF3M!)(s%t*jI(h97`&5EUt{{5-R9TLe=vYj_f`cAXh+80svy}+6xnRI1P$x4$`85Cmh$E5ve9yMr&~Bw) zV0_8SxmaCxGzap@9Ea;oxl|YEt*Q%-;Pb!fMq3~Yh|Wz_1mDYB3B_qM>_pefIi$hV z<1%HA!D;<2KPU7iXTQreMl}MEcimEh$*`iD;?cEowk2eAS;>uY2^sXBTFCg8W-8P| zHp?0^FZ5v?T}L0LQm%KpF&>adB-mPNwwCW#3)wzakg;ViT84U?w9F%9{Ir>vds{>1 zMax(vQ&pMNTB52~$fk*wov?B*4Kkc{WjKFqiT1D?L%mH}w&|V~4}L#?qVFPCGn27d zx_Y`eflB>9e>#@_d+NpHZxVOKZwTxdyD~U0`q|K7{xp@342MsjHg3RH|3xMuYtB~{ zEvhJ5O(i8chZU`+Sk4w}<>;ky3aB?(Du-HIr(hh9MNl@!a@#N1R4}imf1+cJO4huy z%E)aLr;{Yi`|b`3)SHB&XA|b9_9tCJ!Z)R6ix1R8Wht*Ov?Y~seQuYSKyMNg|2r0wML84YU@_ompnlMemB)#SW4U;-G$+I4+^%bGF36n>$n(W{Z5?o$_ zZI)q8ulckkB013uBGB7}$TM%>@E+LKy&WQg$-|*mNt5hqdd<03kihAlhXRJEw+WIr z-u(kABCM8)wQWnVl4P4yzyYl5*;a^1CBcJ|px!1#Hli|C8`i1?(;OqhH^q_wB8ZW) zVP!|DfD25!TW?Tr6C$r-9qDp4ZMbf}DcdHr1S6_R3rH|goLfi`--Xgw+eto&*kJol z{+KIB*lxNhn{NaOV#;j{N#2Wbm7uo?lIO6NG$=D+!z+RMZ%u;)F;`kZ!g_Gjq&#bO z)E;}`;9EX=-V3|A)sm*%&mlh^(E=k#>I&vcSua&$QEyU9d``D{+CsxOg&qLc|GzI1 zndyHxx~K2H^c~?u>bm4)@U6rI_1}0Q))jbut8cqK{eX$c+QThAro;BI zgnGp`sJb?@XK&64_e6T_p%znJ;%R*Apu1S{P_Ud>V>_E~@+J#OWuoh7W8rm^o z6l)V?e4Xh|J5X;D5#MTOP^d8(5cg+GI~v}}jc{9uS%A}MlhSJumtbR+63gz7dL#jQ zlK}Q?SUP-b=I383JHt^gT-=;pJoqW7I%#7>avqKY!ON*T4kQ^~Y_HAQnQ?PYNC6SV z;B0{iuGi{vk}0HGN?+}y=ND)PfAB3SS2}{~TQ_4>nkcS4f(H- zI)p@9s+z-j2#9QJiAY}du!|I-w+WGr2P{X~4UkfUs6T5L@6Apdj0g~SG-ujGF5kw= zf`~aUdj`~-L_{O+bqECzZ#9X{@bZsXDn~Bs{-ReBp*IOd&$HKD`_eK0{7r+q@69TQ ze)nx_&)_x83R#dD){x*#GnYm+hce9w*G_eIXE>ZM7!n9=Y*skHp3i^qolomG0JD)KG@{lQ6EHEnOS1vJO&X!_TwZzEOlKMaF|0J*&Df2I_G(E1 zk%ToOm}tT+B8XywFr-fbmGU`H{HMWbrMAqkU7cK#;N$-2 zZ$R+F(8aL(-_6TSvid0yFg9VOK%H)|u(2b_ea zIM|CiOH`FES7YdkG#T{a(w+S&dqW?UXh&AUBaZ89nqW&deOC=NVNwho2 zBW*U zgmREGEz@09x+#l}m6jPvl%1DQBxE{Ij|@Rb9@5)TZxdv%&PyK;_lortjCQn)?Pi;@ zE4G5HR?C7UWHnmGd8wcwL2nae8y72o4tJ$xkmui&U9%Nrx|YFu{Ys11?5+Rf!C?DI zy{MT=jF)0GK+I=e<6g!GOb)G&x-9~O-4qAUN-wmjG|_d5k3_6yCefH_+@-yS-lm!K zCOW@9@=wRPnn`e8+mvmS6=M2Kg7Q5Vl91IX8I5`m#P~!-ldj-?Q zUaut6z$OeWE0poUuRF+4Zxdv%^`E@UO;M)DrIs-*_10^(jLZ|O+29n4UP>#V-X_R4 zp`-Fgo?hwp!oZ-JELa@e;v6bu--oqdd?@oKkYx>5tx`Wj>>+_U9#QI=G`~Lu=rAA zuy>%^#fY$M_Vtboc8!g6DU#|?b+C7|Zz<4kk0^hwmlaTYc8;K@wDn@ceXCEM{r8^@ z)y-sPv!UqtN;KQewbohHV&d3wD3CXA?w}6V&I=bFbHu{Z5yvh#Y2i^v&OhQ<6l`D{ zFLP%TWQdf0(^u4*i#1Cuv)R)f3>hN6wG;4E9;*U@`cO49%lymCQb^Dj4~iWXCh4is_2N zaXb!2P$26)vv+7SDu(`=>`CJFD?sbZx6SLQS20_7*$W~(3JBx}E9mWK^$ssFQ|0#d z^;JejFlYS8=b^6jq`X#9Wdy$PHf#g+Kq(%gq;2*D6@3UkT!4Vs5O|fKe9dYRE_#uuU=KXdWR&zrbe5u&V&zI8insw6m@jL>%24J(|qyl z?NrRZcy%Oj3Q6DgTxm;i`I%Vuh#Z!#-kJ^O@|&_SGe@&Qlq7JfkhPXT30r5&SCmi0 z{1%dYE7}fOlAlL$;0rW@*9Iy@dw(jSECz0O9eL2qo-zPk|6x8WFzw z4P-G~NIl_f*;wl$%y@wCI7@^gz7e572rZ2We~lgYY6HdXNTFcUqq<256Xj!#2#2d` zUkuZ#Eof;(_|heZZCvxve+@WPThX8piA&&uZEKHK7vVNxz1Zlf94Q}Tged4B;#^xa za)|P5p?2!o;E^T2htt8p5mXQ%pvaas^l0OzYQfXXM;p=Uw;kBvOMy-?_Uh3+jWVQc zDb~hf*_py{ZDQ-RZi#KM0B-jeJEpk{ zTRz(Uw{3aH`&tNBG3K7tIVbUQ!i85fYHe~nnL%ffzKgD_5o&4H121+?f^2%W)+g7l zI34@Yey18GS0$1dNu}sr8kN>YBHWKCQHY+L{ZSaYF=uR*MUofsbtj#p7HVx|G4vX? z1=rru*pUwK-0(y?5E5g4Ydw;1#D!lp53Nl|UI#^1xbwsmm6V8aZ_?-@o%2h_if6tz zfN>^i>4_0gKh6<+$fFc}Xl)wjr*N%|6Dh~pn`;mtVyqrwAmS!~hL6+)&{+F=+gK{V zkJZ-x$L&%9G7M0RiOBU(;CxIUXvITolbFmX1_A$=Lorbe#cxVB8icaB>mAuX>B6%0zR752~V^kBXBf{prccM(?+cjmS9&z3%4e0=^eIxjK*_G*yI3`R3!!kh zdTH!vTu@6qE~Uw_N$zEbgMmdi0-?QaYqP~{DIQD(H|55Ws|8+kgQdyfs&iATFH8@w zPpn&0c~==q6E0YKAvmiL;X<}$98LAF3k8|xhpL!u^Y2pPT%TT!IJcqdO%(ELkV>Zw$H@%rgWe6j2TU`H% z+)j_?<7_{sa#}g2j-*+MN>SZysiVn?S{g_4O?+GGYj-%5sztxK0qCma!}^SDICa-& zA*6H0azqQYG}4-xRubiWm==~N+suQiiOQm~L}=kGOI6QZK@xBjf^#i_S{i6^4^v@+ zRGUq8qgQ2$15Bb7CNZ5<4lvF!p_T?rb?Pw9zJI|}4=^<~q(zTur4=Tb$60-yV?r&B zm^z$E6LBjFHCdXX>ecz8a@>lNl)^~`ol`M-m_rU94;Pp*-eH&i?3$Gb?T??-@@OlMa7s4w6uiwGz z4S3xMuRZX(7hWHP*TeAoI=t?L*LUIdA$W!1g`NX_p8zlPv(V28!3+J&+sVJtbD$S` zKLaoHeW*|L45%%7R`gux8P>q-4S1pcQ5(bqeKzzNFN4?n;I);!(C7apye@~=-SGMZ zy#4~OkHG6Y@cIe7{taF~h1Vu{T@SA-;Dydw-DW`>3bmXncjTQnZ9*h>CPkCUu?Up zb%%dZ%Q~t~-`RewgbCfYO(n5 zR4?!(If4_qDP}_F&jYOuroy3LLTK-6*PpP8=8@peQ}D#|(#m2;%&J^v*$$NH0mfg= z^q>P4)mfjN1B2E^V2@%Cv&GJU5koZ8MQSRr5OK~}wgbCu*5ehyx!h<44CQh|ZPf_4 zdw+CS3?d0@>(dGcpEH6K7d-LEvms#EtFs=ku&Wsft&PC$$GI_T6CKYAOcO9~O4L~a zs|pzQ`K-$eJC9QeSeQ57oDDsUz5d=!H6cNRdE!lfa9%iAtsbus_K~IJ1+9(p^>d}x z)Dg8_lC#Q}R*^-Lk##hrTINwVOylHPl&J%S!eP`Pn5nj#C0a)d= zz>*h_v%*tONN8;ouz$j}G*5LlA&G-Oqy=uOOObk534kK*;{<!f?cAo`=rOAcIm_4$b0I6Qt4qu5x-0J?A#qSfJOajw*CPZ%8uAeSJ9}oPEx&WR_-1myl_xj<&^5v zLP;~^CQK;cznt-c9!$K3o>i&_Uw5)YY^o=$Jy*B$*Il~&0!X(uu{AfIQBu|65T7`_ zm)|s=gIss{%}VaIVsH~gENw76^x~Dlt>8_ao17}5_@;5l^``VOxyk&E6>;|&MtqtA zO!8q|bI=7o=)sH+pQu}F<6&o)I*c#eWT_+Z4(0LPr(3@73?l-MG#wSrCfenW;{0*oZOl%Wb$K06vMGG zm(LWg4xVbYX(h=aK?Mm0RuxSJB}OEi&Bg^Q=)uhD6=b7Y^YBV4R$xSEYRr`yawY8^ zG*Z(-t`Z{xE?MV-8uVbM_S~2M^z!(}(zPkVW>wtU{#9(MCwy4lE{MA!m`K@Pk?lfN z*oH@NL=-(X)Pot@3<{fxU9!Gb*hr0#`qv2Bde>BoRdu~vhN;!8cTk$h<)&2WL8V64 zyXT$J($+gkoRjsgykYlJxMD(^a4aPs(6sk(GOAoLxeyZQL491+ZvJpdDNa zUu&%mRGeKlaLkC<MqC%-20f_UunHM^8P`Io z&8s>qHX#xeA)iVtF3*i7LFfNo-zR*&PxO5!u%maRr@!UCuE#n*@88!k-X3cGtM25_ z{^==!a`Bdul|Y8VIM$0^AW;t{fqeA_bl3NvE3o#1RUejkxFUwVcSw7yu0H`-UxQ|&20fUuJ^IW_l>c-IjkL*-0b^d=8H%@{vbFW8$w}o3%mp>*!A$LCD4>I? z=ulBZ3n7|+VAj?d$LBt6mzB{HMrcI@})rZh7WP;e29m<^4@)|V@8_q3cE_|hzFFV3zwM;bA65~k4>L~U>fSCQVV_)jX+%Akq;cpm;nY{J zdgQOfGuPQ9mSb_Tsh33RE=8O^+>%-dmxXmf4SFzBBiE4Rw!+5Y9B}0vq&T#zu0ElG`R{(gy3TH$^)vS61yP zG5t;}Y>^0dMWn}udN5;q2`vbJ`CV1CG-*4C0T&rb?A9o1ylrXv9hTT+w7~sUwop@-1a&vudz$aaxAX?8As@c-?&*G`Flot06A{tv9Wv^{EKJX$ zGIhWG%A#70e{f+!=Tcj{GH;IxMkY1<8ml2 zgbjKy3mYj3cmmB-hvjyDc!CBx;#|PTwfLi*zQCT|!+MVIKBY_Yaeeo+zq{?CmMdDv z98CDP;I~%f8#ja4gg&5pQdONhQ-W0IOd#0s&lj|qeWeex;LJ$Mui8}A5((~tDQI<= zYWnt;*o`VHZd^yW)r5fzC#2e&Q)k?gs1Fmj)*_y1(sEu5@)BIU!&Qqm`D%e_kzCD9 z2p!>ZlxTVC#tBTU#=$5hMsO&XK|whqru3l_BQ8cWI2ifzT5humn&x5@nwwhRTseQ^ zBzbZyD^=I36!_-4l@+BAWOn!Pb{SCoOT^PG3vwk#N6$aV=T^*=UkVP4fid$<{3V6W%-R4;ek`* z`Ls=XawHjbJ2{m;)PW;rG45lvBR88OCl0o-)3kLuYLtb7go7Y;Hfkm6d{V64pgRbx33KePZat_{6SiP2cUx1LSIXfY4Xjbc|L^ujl8QMs8a z)1(BFfW?h|LVc)0t6uHQT(9IR<7$INW6xb>7^5Wyi+W z7ksI{AGdt9H`Np9y5E0o`#a&k*{|6NROIPnK>CzxMU(U;5`x>{W7I>9>>10<=`D8E z%b(fDkta1Dn-VDT@wutte5bqqCISRxsAn-vB1U}pFxgqc9B$+= zU+Sn;Cu~yUT~1ikgP9s};>^)dgT!Fcyx7ihobP;9@Yvt(3Bcq%)+mP6$qNAiF4tMq zLyZ{X#0TUa*V(B8Ca>7k-5!~|ftIJa9{--+*7N%A>%Ot`w7~y#UEZ?~-uQm|*W0dZ z+tIe8b%pz}VLdPcHV9N!?^pp-SeH3}of<|a$-}M^bwg`o_Re458AO)P_v1B0XZN&| z9hQd-9CkK+BU5=uggBWGE;c;J;$VKV1Zfec@?*hFF_?j1(M`EL1e3vcW;UTvvN1#S z=#tf|*FcJ#t08v|gqszz`OHLi47>^ktbCAV>~hfY7+0`?eGb0`5+b84D!LKWl&~bn zuo9-szY495BlwgOr8`i2@jdGZR*hiIJ?&_z!%;!!y1YU%zF?x`g<2bVz4RnX*^pfB zOyaAS{-)-+P@U>e*@1HLAzs90sFSY|Y-^?CB|~ciFQ3E2zM5rUZtC`utm|D7ZtWb- zYv`)dwc|8{sFv4Ml^QvhQ=(VSmqa2mXs&Yy&T-!(|3$RqsMcPKT63IW4mg9LV*|p2Yd#NkSI83mTc; z;Evi{D+ckAyKV>Md>a^?P%9~vL#Zv9{N`+GJew)3TXi1Fmh1?avAK~LsXakQOt9%K zZY^b7GlgO{h%-ZM%tDgnY;Z$-F^CLG09kiMkkdE=fg=LCNs6)$=tbs<-c`tk^De4s z2Du03gUFzAOS~np5m$2zS{s4=8;&oiO@lb=mP1<^cw3vsM)@zPp7I>m3MI-={zwqA z+7e}HoFkA{#!y0S)K)1`MrPPy4h2j}4Jbp3{Aio45@oPBE!%;z9@d{VDV(F1@`<3e zQ3%N5^iGEl1rC?U=|A4w5-emNrLA3oKo8f^aYt+C-F4(>p z)ZCp{)anNrzXc9Obz(U1_8L-}d$dcq>D`t@qQmryMUL&QQk4!M4|uI;`Wu6*xyF=fzOVu&u6n^#q|Z`C7&Jo*}g4>JA?O-W1=qX zhL>hLI4fsqRHsmExhPx6ZOV;i6o-2pEF2GxsJ{BeQf_=46>=#CSDl+$ePMcdePZ33 zO4rTEHUJM>bM+=BN%XSwr$sG|-bLU0_64s&YLR2LM}Y&sQiYM9b(e+rop1<_*ojMU z>tY5Yf4;@YCxwJ!N2Oo^EoUG3$I-z5@RPOS^#@~v1G>cs?Z}^JHS&oV&PeY3X;Dk# z$dhc1W0WKBP5tun**BkyN8ao?C?+Dba~`$CEEKQ7$B*2()ZhD_V`xAqUW0yHUW4!` zYb+lHUj|SNYXn^cpmy#b1Qc^;?9AD|i)cof0jqg2kg z8CjF6dbV!G)R}5~O%#EE^ zQ!>m=Nhh@cc=yf7_M`w*(h*gCM8pJ-Ga6F>gq9|NBni<@8iL3V))NCZO!8G0Gb5Ia zP_9&{rEX?CfGZyo!-#_o2`Y{w!%d&fnbCDKvc*?thHhYEFi?rG?DaOeQ9 zjye=LeAft~bArh5k zH>Uvx%D_;QNlPHBGJS?4)PpJXy+zx63$Q(fP#CD4FdGjo6}Rk(a9D-KhSey-j+^7a ztFB8#Y8YoCqB0UDQEQ`-koy!C9lc$CR+k8T!RM8|G|>4sT(56UOWzZLulcX(y{`L| zp0&O;o#P#RdrRvtTfXG_kob1$pfa!@ML${I)HBkDmsWoFkW8|Q=Wf5R4vVs*Od9f4??g$oY zX@oVCnl87W{PY@1Sl(oW#yKE!5IT>m{YI?oqX+VfllL7OElU z$)?VVmaG=17}$?OmFv&LVVsf3IjjVjk^wsx}(Sg71kQx`+MXhG1e1+Azq zXM>}On1GfhT5xXow#-eC*fKl(6Kc zs(5uCc72@d*RB7c!xmez3*pRu6zrg-k=-*#e+I?r68~%cdFxF>KT1|l)x?lah}d+sDVK!^P~}g}$bjE7SQ*H-!L|4LD9LB}Pq8yL1=w2-F!zwUl8AUdESW+5A{8zj+Y< zr7*D59;6eHKMy76 zB1#2mAPt%g-2<&ny65#6ayNcBN<|D3?bupf&G)llm)yF38{eP{S^+9+DyGlwlevcu zwW(FUV%I7V4%luj?7-K~N2$V*;001;qcAx!xDo!)L<4;>Xi%`qJBF5U_XOWXYC7CE z{xM|F<$mu_E`%Vseu<&DG)EQja=XY~Y;7$IUcgDmlqW%dICxr=a7_2K|AIYXj--9q zxv2@)Gr=8h6jxB7$R(=20*$2=P2fU-LJwvI`Wt-OJ;Nc1Xi$j2jkHJ6v{p;2sz3qa z^G1+|+EK)=4yR4kW5`0La z#wVHZy^MXGR#0glyNO@S_>i+$vB3bjfbU0KH+P%AqsZOXyS=rueWdH3TF&VHRo_E_ zFL1ZE`u#8Xe%K@>1?Dc43AL`dD;dRu>)hOhS{e*ELoc8VHh=#p^=BqEuXz#tnXYXB-0^EOFwFf1yu1MeiomD>cj)su))B_CuY;RaA5zSv;cR5i-MTwhhEXm56t(9$G5 zXczOB-^K7c?EGfe);7j%aEz7os5cV;3nhiG4=aRoYEVoyXla7=-`^Vk+>ihLy)>|p zzeQ86x9U{ueFvLrh6xAKgDPOum!8xxos2YEx}+zhs1U zqI$d%QWCx`aX!^hOXE~~4(p{wG*gX7b}2hSd-cu-8GJs-1h*D)6Hq`1$^&hkgxDh} zA+&L-gn}5yg4=VYEy3kyPUWw(6I}wrw#guH4fz737*%?zFU3(>PuV22G!D!wc=tqo zm2E4^$AbkUWCbfF>w@ka-DIPdMpzFm??VYr>x5U@*lI@Op?R^oB2QV_nij6NOEKqV zvtO~XMvddWNONmFs|u0}w7ZnEJ)HFt}0ZEqj*%cP&$QkpSchZ=)o)=l&hT<;%LisUQc<$ zXPGnQ4MWxr8RA#$KEiU*i@M4EnugYTu>v4mRGH2XC-1<~; zQ#?NOn=2l>1Gx}4=)o**GdO1h_jeAtsp=?XOWqoFoKuy!v^$_;^GTA_S@qzAoQpVJ zsvB%5Wh!p3Uj9CH&2wkpam2O6I$>LhtIqGujTF$f4CV3N9hloflE=R4V3dmBoT~KP zP!B3M>}tgQ*qM~UkqRQ=B^1_|HdJrM-36EA@|y~oWl+9(TeeWjjt%HiPF2f6=kh`L z?;=!!hAmRNQBJB`q*OSG@3u3g(s*_dKX%p42)}D|tHST8)~^KWL496TPM*A1@lvE) z>>*=)Q)55X*|ltU8=+R?fRaq|if0nNl%O6=)LND}6cg-{1m3<)J?g2c5CW}ta-F_Y zdU{^#Yi;>Z_j~*ov|ZnIr0*2pDV--Zb1yTmes*Qa&Ljv`HD5%fs(KPhoNR>3@il>3 z8y#PL|5qzdB7Uo`=|D@Z;Z3q{tG%`$MoC!zlAS}AtjO&aB`f8IOKD3q7WYrIteSea zRb@4}(-h31lPgk>gp!p~k3`REmIJUY@v>J_yHR^54O#nlxQFMJZkUS?QyJWO7MU~T zT(6UZC_cDR$^o=C>X#wnfk7h6^}9hEasYmlOu8wAJu!hJw65!o4y_?B{hiu>DwRoVhw}C*aE%%9#tTje;>m zYt$`1Tl=ZCU`@w{(dkEz`chw}gT`d)1BdpPh9y;t|F?mn(_#`j{!{q484O|%ZR zFgI7bAm{P-fk({gFu&_MTcw9bDE-t?OQZkL12|{Z;hMDqETTAd{lWc*Q2HKQA-j!J z{aRW=wDqeCYh;AhsUNj8!g>f7GOLp`_~5WmlB%X&WoYh0AX@0;TA$W%SlLrJceWaV zmPT5y{^?~1{5_DQ5iQ6>Vb4pX(V~T1(~xbfKCNVemKL-$(s~o;(Ylb9*1X9}hz=C> zX(dJ|J)K9OrIFT4*vBD6OKV=JEtKvE*%A>g^TmfS%+sbFLoE%o{6C<<1nG|KCCqQs z6jZ|rUfgf|LSRlA?IADtK#TG$MtIg|*g z7;Umk)Y2eR>X`t%!gw*foQHc32RjF(-scIff&DQRm+59764K#dZs&_3YH7svYn({6 znsD6#EtI3Tsp?%f6QkC!Xmj+YqUIdEFFrj8=|H!iP9s_fR#VTLI#>})SP|?qLLphu z(kNNq`{R>~9(-xTVk%fr?ZB2mJU-mAkH!cv0*nA5 zP+2yOQdQTD#DExAmoD~c++~dso{Bh)>U-#N zgz5Yj)2>GXdN7T|(2KWy5ge-@s4ZM&V?bmm4BFK6n`-QpIE@lw*QYj&Z&B&}7gNxK znc6cbSAOi0+VnSes6ipTrfy>hHLmOH+&fKTT)tp>2_$C$lIBX4iF63>0_j1b9#oJ@ znwA-S;J=(k8K4?)QG01x0w3jyrsr(*m*wI#Dy9M)Yf~MjqcNAETBrvVBuVl37|vDp zF2^Wwl~+laBlqiRR28M}L`=JOH%C3FkFC02zpfPiU0Yjv$Ie8A2(_l#AyxGyO`{SY zI%=B5D3O-2kAaI>2R)dny@9Q_BaWp7RV#!nCrzcMuEH>f(M2r&1q&ytBBou&Y?QG? zl|1GC-`~UaJrej*?+1I%?>@Qne>;Ba?`i*N+ik76mNQhLWPcy>1S%_bPJrI27xteF z$8gv`l^c-K+Uy2|Yv!JhCy(9>xoXy~lP3X8Y!LGgz5-3%s|#T**5Lz$7`b!P9H)}e za9TNR(h)HpSQe>>DVR%|cR0%As@#HcQRb#@8wzWzOPj%bRyjVq!G`k4cE$qxaWTS`+EQ zd+wHd910iALnYQxmgZ)&o!pr>3Ww%9oD3&$N<6xWgjyRX($F)wzV(R?9~sB(LERo( zH$tBJ4y#ja$rbrcqHr4veu(Ar4R_Yf66l#mo{X~ql@ve`mmvJhONi;Qj5wnvK} z0cYqdtyqOZINYC(6>4o{)lypm+D^4>IW9FdqE^r93QJaESlL=rvVzt|R`o*qX4?^H z%N##%EVNhQNBc2P=e z6R}_8=z=q;h=JEzQ={;7#Cj}=MMvl(N>fQ_Z6fAY#+tfKP>FHn{0-e0SOVNlqX$DIkYxOIl1g7 zcZ_z&Ow*+HY#$zI(tc}VxcDB`{w|eFq5^zMTlH4ftzKyAHc!(FmBAZ2jmR`hH7vNe zKnEo7e!8KJnZv9+d)dqMOYCv^GupLqbo&4Cu9-0kJ6k zl}joKt><`Qv?|ruG;@0nXSK40g>+QL{%IUC}Ra_SdLIaLM@Gu&ZB|^`SO}-e9|C=MvahGYVt6g)|FCqBuS{H z5fX8K)@}LiNRn*R7tYH&b>iXEc`x@-o0GMH-&Q#u-ThR9*2~vvqc@UHRD;$XjUH-g z7`>raK9-s;x1UmL(3y1*QLHxjWPxLZty@L&AfhVAq>9s)K|Q8bw5*zH z1Xo%0r}fVC1M5|ArWzIEu!xHWI0uJXn!v3byX@Gnb#gnMk<(_P(9|#lHFth!%s3OP zn}iV&`x`oEg<2X|`PMmOM7EoDYd@RUmqsS-RHM&0?mNzx2-boTU<4QeMt~7u1Q-EE zfDvE>7y(9r5nu!u0dEKdx}M;={QG_W{e2I#{IGXH>z~_0onPvh?EaEBKcD>+M!-a% zvi!y(*daq7Sg2;Q*7BdEBtEQMo)~h-2-@8@dE0RNjo%Zr3vi_mQ!Wo~UyV&ts^;~q zlZOC@7D#cvsoAe0_iklp*lWWbPprJl$xGhz#ST3aH*4#|jSl+lwc&}dtXUYqnl4JO$z|9Orebj*a z!_OZ-a_3T~Ggb2{mYSONI>M8w8rqABIwRdy6E+o!;QaG$$e}*WVX^vO>jMoC2UB+!`yBo|vE;c+B0rI0}DIY#111T)t@$i4U$o$|In zb|rKZN(+p11BoUUs=7hKm4_*Z9aY35eY_XUf3ucPJVyQ4STEgknM<=Jo$MTCyP>3CxPUQ00VCm|u*@5mgxnePw z->iI943-L+(JQlK@t{P)#RBi;zHOWGJo-kM=O`h2{ly>@RZ{3v4mh+n4*1ZoZ{2g= zGb_hp&c>Y-*@Mc!o@CJmB7b8^M8qk@DTzR96Ok7H2js_I?2rh~79!d#58*aj2oQO{ zB@w~Z@(8WxmWb%phT(nIL?UixjSw-<8dqB=As&jL@gK{MPEKsijb}=^$$T(dC`=ZD zOA6U-*+MBhHV_Zafs9;gNrWGELj+ozWW*H_sC?{6PI;I$msk^tx!Gp(G4rf(MMSV! zp~S6>z_RE2_&i$s*hf(bRQhkaNR?G3Z;|du7#qe3pXk;+)Y>$AXYiWGeca)qr&cW& zJgFQTXnzsv|DE2_{jtCsy?a|u?|NV7DXpcpuXdc?dc68u#mD|;1Q>xTfr`8fS(v0r zNakfqgO(5?xL$5HKL*FCLHw7Nr;xmB$Wut()6Su&hZRNqu3GPDX694hfa1zrxkjgm zVf>c79L^C!G%iBrIdTAzmy;tU6nyezlVo*>6eN-aP1=R3(J9<~k|cFjv}#5Pk;iJ7 z(7=B=;)Z%KbNkU?c-cDK3a>$w??4+>#j!E*@H}*m;7vd~jJ<&;?mQ^VsjNn3~^iPUcK1nZ{8XF;cZ`h zVWl%oqZ#RWTX_e~Md?b}iLL81*jS$d-J6@pm2%s%!L5_IJTm2PoGJyUklB8FuCyh% z{LHERm3GRYTFx+;Y`l`YkgZ0ikrGw9a?Qj>NTXoO*Hnd?x55;5ffM27;kHli5%#gmI3d}%|nj)%>xMAR$9kXJ-LXiY?PaXl0Q%ZQ1{ zv+vpuUPsr}8Z~B@5ljS5gPz!eKt@n1>ADy1p%|`RPbnkN+C=2nU>j?F*Zxx+&Kiw~ zC;NFIf~s{`5OH&<8j96is{Tv?GIcl=5iu@#yQ8T1+QH{=8%YbPZhGYRd;=<3hOS)>|J-= z4ap;JR4cSLBHbbZ*Dw#iJpM6oZ#|w03Ai)avKhFaF@1YWmPkZwf22eLtxZT?#5XKtFQ&6V z+S`nHV@iX0gDQ*FUwTE}g|A8oTAPTxgxsG8k6BJBB%&uv?;&s?V~@ZHFanGKBftnS z0*nA7zz8q`i~u9R2rvSS03*N%FanGKBftnS0*nA7zz8q`i~u9R2rvSS03*N%FanGK zBftnS0*nA7zz8q`i~u9R2pswZ0&Sn;db!X0`kn~f<$Iv_#_k8Zz5>zzm$&oW=UdP6 z|E2i^Dg)&$5VWy$^MYe=lyNm%m=Kk5mbHmYEYyv@*)ws3;gy&PyT6YA>}(m)xN zwNUhvDYvW;5ok9+sHK6@(9Gd^ROREn&O}N}8z*`a0&XQzDlE|I`!vlyAO2BUR7M$< z>&kdIhD&fb*954gVf1{Tb~bF7y(9r5nu!u0Y-okU<4QeMt~7u1Q-EEfDvE>7y(9r5pYK!&~_d8 z|9_>WWufo+zWW0&^?tqQ>h2Wxm9Cz)$2z)N&v)1RT(+*r(`&(>BlH2NwvIi!v?9c* zw9G4BFB>zZ(s*_d|0Qa{0OV~$H~{$`Eh0eaV?`0at;Ph*d~5h~KfZg%-(VLH2mk;V z7YV%Ap?H?|R&BX;>@Fn7JSwqeUrTNMWVu1p$QrvVl#bru1N@ zMv6BdsUgy+&04%!DJUdIZPxyDTOP%V8gaYkD&q7x*4S`tfE#QmM!+a+PvGihCs1M& zY()t)9NW@q44JwLmz~*e0Dt(y2-T!g)>l1yo;0``Z`EcBxt9bqJ z3b(apJ09mQol7OD^;KCu{a!K-#PeL6^{L?`u7~7e9F#sxr znk=uLzOYXb+yx3S-^H5T3L(k0+@d~IUZu&g$<}tquy{T$M*x<8ZMK*##e=EfCJ0Um z7P8y2g%Z??E=>kkots*HVS0FdV%-{!^NE@?uz%Pf02_>TM%7iFGU*VmJ?>`8pgvR) z&^8!<`1#{U?p*o-Dq(;PMpJcub%Sw%)k-Pxb*7G^4F>ALOzlM!dw9gP)!l@)!8o|W zhbbfrXcZjG>I1#9g~DVZxI~>y1My&kS4!AloNq-<9KmHk4btX_8tTDJ?Gaorb|ICl z0kx)TX|gQ?YUf!}ONdH9l?!UngP9sR0<5K?7LD^wjfx@E${VK7g|)4E1o(iuwj~8w za0w0dV21V^q}2Sq7uG_n&RNTI69im^*OEmo9^8@{3r^*)%ujC52Nw@5#u1nknZlLX z0)$-#i@DADOlhi+1<6=rB^iR0tX;qz%_r1@`5_;j`P4UH%f5)}A>o)4nFm^k3&6tI z>%ZCG-xqkI_l}-Q_eEV-b`G^KZ24FJ&8=^A^m5DLH~Ym1ct)VIc;_iFk*kG%tN9)h zawx6D?QF_r$HxYhKecI$-!s^F$hS@9N7qMrUTM9esJuz`U)-&D^6Ki9iX=+Eezpf3 z;v~dFw&M3j;3t=Ilc2a%eXD$i#lie!DY$8JDnAy?6oVPqifqc|bINySHkClJ8TTej zRfUu-(s<1}aN;o@_*QT=fUZc;`hJAYe{VL2DDL3Kc3jF523o zT8G{PoXpgCDL9_lm>pNhZO@gqfa=c#i}0_}Ex}?bQ_7-%d@GxdfFo$R%95P}MqWo% zc_oLHg^-dLv^Mf;JJA`hYD{)h_gR7%#jwhgJ5R!_7Ir9s{$(92QFg-$S`$_{y~5B8 zJ_T_*9U_C-D8waLN~N@6GmpCsF3IIL6*9}T6EbY-wHaBRfgnk6fG)x`t*qF28W9h3 zrkO-&BD2d0WQ9A8|S{r7R@2d_`sWU0W&&^C) zvh!Fgu@KWC7s>;*Hi`we+u^fDgF+-OK@y_*p=ekx?`&zEE^-^DNEb!yDeXW;v{HaTBzrV-VHJ^%3HSFnG$BY0Y&=3L@ zdH2=eN~KE#pheTBWihI_H5wxI93}!leV8M%UL8VJ0*hzXI_|~rTeAgqgyVcuozO&5 z=1bmvl_fV}L~(I+#SQu}b9-zDs%CZmsZ`v+kydPGB%8`@#qJLhZY1Hs0yVZHEkpe- zw}~fEA0}?x$D9GvLOeuU&ijoDKo(>oX`$WM7$r?dtX^Umr!!P>dBn1+#=F0^=)spZ zByLzu1rB0~np-nT1()1?tr47-4<{{$>%`MK1qXeYL~ZD`m1CD3`?bzGKFPDGHZ24~ zwlzi1&lDiE3ZOGE&s8d*{K4ctB-8vPUgTaJ8%!4_jBz^GLiT#;vFiGqW z=-Z|`n5+8s?A_ap++v!(l}32i>lEt4%D&#mHvX_Rbyl(nB ztH+As;4W8>1$`JE>o>itzH@nKXodC+5HEr=7TS2MNSv2!KGy2#tLkUV8s?M3wVQ2+ zqlNm=KNh!_@_8iD-t$yK)21z*wig~2>gAPj_&}%+^?}sA@JpzmeefQ-p^C-%rXC_B zHThHMfZw?4RKbOLp*FjuLvW~%8gS+Ilb;?uW{5^61lR_|nt5E6C6bJQ;~w%zwR-ep zDxm|Ml_-RwI5^Xtu0tW3xCeC(y?~EJB-esNEe>!5#u5K&V1NS!T#N3jjDSi%KsPOp5^*}&OICWWbekF)4Kkv^E=Z~j^dn7ZgddpLlq2?*x?uGbaM1(k98~;C>u6PM?NQs9l)N_UElDK zl!oghN)>F_Qv}VPqV%CYw_;D3!E5{`$4`yYTEpFI#O6VL`GJ1pR#`LGCqvO_t=ZY( zbD=)e=TegdPSZRS%4^Z!_4hZeT{!9fXomVQ%iE0NCvXY( zMJjOMVbN59Q_p6V6$jb~xf(M-I98_wl|!>I>cd2i`#cpfSQ6&NX%>jJSQ6t$=HNDJ z#B6c$_fQcFHQARDlJLv+Gx#f7h|T{gk$4Ew41_P|mt# z1SknqzdkA zAA1l#R7gz2h@j|+YHp_16SdTolR4s z?7(zxD^@Z!nJ;B>`C@R5m|8!)cI|m?ti*6w!C78vnWDzkR`L*Pn1w&Abz;t~j;FaiY24 zGQrmV)_l5z0&`o}Z);TCkwBcn0U^3$sE;s;?Uxh?q2(MRgai6KM#ynpf8w@yF()fa z%E&`NH(1)KSQ6pN21T4x3>LIB4%TDf(0IV;fNOKlEM8{m2VF+3259373(Jr%nWPyN3u4L8A}>XlWDyqKAoJr$apq;UDu! z1V{#uNEx|;=*a0NPYfTMD9AxeBe@r`UmM+yO|)4l-P_3nJ2iASuS2KX>_#HAi$An9 zqI0#`wHxc$oXsxig^L@Y8!7|kZsW-4md`{|x#^-1YG`R3nJ1NmECQWSLn<3v*5XDl zpWyq?!TtY7{e4gSKN`5RcSp}f-2+|i9gny7w?5bM&kYzJ)+HlQLjdONq{W;SqDh=4 zL7B7gRdg290s3!k@mE?J=jzD8l-qS7UO_<`Ukh zIV))Ag9-|{*DXDof)iq-=C*TKsHG7WIUf+GO^2|eO%4=RVR0Z@C{nmSEonr#fu*1Y zEseAu6Ha~gsz?6%uG#~F4bg%U_O^T;8ZBDfj*&8o4zAMr$a(5f-5WBBGW? zS})>r`XYz4@FgJ}r)=HYoWJhU5tM{X*|B)Ako~|^wpa>onk)n- zvJ)F2+sO*tI)NHIkutsHwLgf_i^+Lb+sw<5ZE$JH%gDnYK+A|xnKz^EmNw|D6}-n)9p$QtIKK=-r9i`it|l9gXmy=z!Fvp z2MADTDrjkhb@$&t+I_~>FGL(pKI|6-2ezhaDjlq?mavjI3k3x%XlaD?`o=X6{r1a$ zCOMXzZT?^y+RHcE@M(BLId6oeQ|pN&ty+hcMp#5=)jE#NJ`M411}ua0YCR*m%!F8T z6k~5N0*nA7zz8q`i~u9R2rvSS03*N%FanGKBftnS0*nA7zz8q`i~u9R2rvSS03*N% zFanGKBftnS0*nA7zz8q`i~u9R2rvSS03*N%FanGKBftnS0*nA7zz8q`i~u9R2rvSS z03*N%FanH#=L7<6`?+2p@AD7zJrMYG??lh(-94QTcYMD63LoG4zLt|b|3LHn2bQM} zEQFL2^=g16p^8;)9W{q#!BHP-r3q34>;YU*$9eHw$YX~J>O|(G1{gf}VO9?w8X2yw zS>y1*Q6HuUCw2EmaKaWy&1bh9`kX#E)bKiR41RL8u7Q^4JsC|%wKcpPJ~`?`eR4H7 z_skti<=<6~AD!pps1kfrv&pGRkmLhLTXKuy3}hQKrP6qI5dY zHJ%URP+5N9D8h|Yfv&2bNNmJ4H`IrT8}|oFV3MsI=MA1eAZSNg30j0?HFqOus1Fmc zp=X~SJo+==+kQL^w-Bi8rY2$wk&Kbc4=k`0v`EH@d? zz!6r!!s)QrG{B&$r(`R~Sfgj=@&oU*1Qx;BW!=ooF!W&p=6eSfFvy(W z)PnX^2|L^pnCyNF1v#J1z_@Qv0+X7m!>YjEVF`>McD-1Jp%1f!^-%${TN9?iQ!)^E z7uVW-gRkdjefM_X5cnC*&W^QV1Q-EEfDvE>7y(9r5nu!y6R4cE$7kHR$J7!GX*rEc zFc{8;4oi5WK1@4z?iRdr*JU>s^+kWob%3fRgl(C*%yk$th0VOnY~5BhKU53O*}JbJ z3`qrM9m5n~dq?AxA@pHlIP{wbl~OJO6-p>2Z0nfqAxcs{1?2aej%B#n4a!q{P-Uok zmy>CEB;kJip$~QZ$>k&}sQ`5qj&wHsqEerG?k*=Qp*@^Y@U`M3P%{J9{Bxx|pbz!I z)hoK^pgzK%UY=Ou?8&wAx%O&kH|q4S)_~;#oxkL|xiuWO#&><+kGhJ1n>s$#o^4y+ z@_YZkIu>WJydP^EhU!&Cba>dc1sU~W9){Pydj%BLIq57s3=VJngeKREQLR?;f#WQ> zjkq`SMWGKfx0i6;rU6QB_DT^oN_?x_PO;*alt*gyox>Yu)Q6edPwu^a=2PETPD(iG zxlwtU}V9IjV0dtAZ$l`+_EwD!1lVv9HS8Nmkqvb8v-?`Y>~Q^@VkR`1#{U z4QfQ3aSP20tGs+*ktH{=&hqR~-V)G94Ywa7SCGG>;szItlC6DdTuX3Muym|4g0ql}auo~4^haTV#_4ls&4yj%5Y}G=eIv@PWIL`l)XM@Ck5F^kG0-zj%R>~nE2(Fa_>cgxY z-UQ8Xd1&YYsx5{bpD$aCgOEs1Gx@ndx%-$xjb%s^u2d-m=`%$~KD_H+YK? z03q-5t>Jq9t@jt*|L8xi>$aA`&Ko+mw`YB8+Sauu`rZsY)r@)Ymi(FJ)dz}w+~UD2 zk6NJEUws#=ChSB^h$!Zd?URM^u|efet&Tl@FF%=|$dpD=-RUC!2Cb64(t1Tv`M%QR z*yPYX8xl7}&bcq3iJ5vR5Q!ZYR(LDPlfm;O=3kpFW=rv4D!3^(o`q`G_~;odO$Jw; zn_7KgdU$V6YE2$UJs>{z`|t04|C0Zy-FVt~ zCRF&>6JK2*GHFSKSZXMVC^j0UtxDvlZ|vJrxbs9(QeL-dvqMCPhdkM|0TEPZysnJI z#F(OZ>4>1#CK-9?xwBDVM6H{x4I+Fr9umDUz5o$aOx%Kq%ohuzWPU4LoTvd&2K#_P zMqCkz#06V7S#H-LAcD$a*C!%`Tq(woS&z8UjeNu-104`SHLop*2ySFV5X>@ipK|uQ zyw*?A&a8>Vy>aRXBB-!+eIop@8$AN8O|!-&5kBIP9zoTs>k^3$hg`@AYHcF&=4ZaQ z?MHXTQZzdXSbe=Y1AvT-TM~(4hkLrUCJL=hM1BBf*CTf>?V%w8dc>O$JRov~6_Icf z-yG2qL9If8-pv zEBthSt&AM}kOrGoZvs#P{ta9YcRJ@gxAVEai#r}@DfHga{;zFc?P+WM2zPq>ss0V< z)pnrXdA!nhD{?ofyFjIr_!^OpCTeY>Ig?VXE$7kDgnL)stF8Z4RzzZ9S2GS;n~418 zRpknQh=vH*^u1Z2+79>*uO~Zi-}gWVeb7=yV)!zYZq~%0wMj-ERKnrUugx7{XX_u0 zdlS*sD=a|BeYmb>O+?c!WCXP~%LuyW z`27!hsq_d~<2;!)fxEd|jg02SS1_4BWHnH+gzQS;%X6ym!ya8W^ylX5KwV=wP*GPa zGqg6%C|6s$NIc}p%^}R6`8cBjy3K2j*@tK%f%18KgW%L4O)fAwH3(@w#4AR`iEMsqaO37&9{oeR&s5$ucr~csqB=I< z9#$05cPf4juOGH?%|pNa%1XR8>f-VwQClvpEX*?8W`+Z{{2Iz*dr!rWbWDd|lBCXS ziCcq^7Dn&|t@7cEnQdA0k69i`{g&z@p&sxfsfNHAe3QWKr+loCxR&^5#DiNhW5LBk zi-V=Bw`PO6d~jpOIkps#3O)N1+AdnL?(No6Hw0!rtYeg@uWujv=YTPEq|g zAd;`f+*yqV#2aG6*eP#`>SOXsd!rs!GsoB+wrVJptuu9MGGEH%^2Oj9F|~ep?b`F! zE*S_;WJU{;K-uf{dZ|GX_d*y`EEo2o5JaH35N{>QM`;v=wClYD^nfXnaO)Wqd)Rjo zccVj?pzQ=88JC4QNe107a_t-kJHwMLc7{SqRCE@-0HGdqJHuCTIM>C_o*RcH!Ok!w zwA$MlUa=QN_@Ut>-UHR)TJIXBE?Uf2cfdDF<1aXW0cS|8Hz-ocv=BA2b>ikf|#!hwXS; zoevw{3AE`8F0P|DGoz!~ViDF^SfTMQP`6>sFV^oD(XQHZe@K#Sz)|eyO+1dx@sAF) zeV6O@U(ynIs`u}EF7aQ|exT*1u77L&e#euYKWo1g|DNL?$+~+R5U9v|1W+xIilioK zemYt&G{3r~B@wNL(XZub^Bls@d5c2Dk8}wn~#_gsACVFzodk|n;dE1@{CT8A&@#&b5R<WoNwGOuzPta4d*aYkC6EkEG|mF;gqMzn zl8VvMFs4pt0ra7cDKW%w(+&qy-J%G#wkYQFNu7Pl6xyR~&y}_Wm!FAuC}g)nY<-)u zU@#cX29Xd>6|DCug=HhCYl>%>6&wCl1Zk6NjyyIGV=Z4Q`$o^FBIjmS$3Pa_ z_xrf7_1xUm8u)z6;qB*jT;C?6-}47kMcjq5H%gPWKII898dZF%vUwB?J&6C(9DT{V z2A6X39*NfCl^#|U@w=)=)dP^J1=6*Ue2qG97BPao;AY9Q4@n1`TSO{GJj$2tLaC;8 z)HF)cD}eE-_l%;M|0Na-Bcs7S<&VDjMaV z(LBiCsWT!Z{2z)JHMJh6TDLo~3#A0rQ4^{vdIT4J zav?_0!`x8QvQEsWuuL@)yZ0$BURNd$`etR_E|j%bhre3pMvURQJqABnZG|N78uk_B zz3Ko$4`%mb5~()jP-t;6RJ)OCBQ-fI66k5>%)QtuFiRo}Lq*z!>YylCl`K0Ioh}Gr z_hT1Q4Lz8pdWOVh9dO7M?>r!7nh~J;dF6(8)jVzXA56D1j-GhuZxp>_}biF`x(2G^!H`H~a2F zjf4|z1&}la8LH8+M`sN#CJC9dHJPO?ZLUIMf= z;`$Y;Y2@!clM)wiE7-Z=(lxMu1aK|g470IDx{^3s8lH{OWOTO42>)H3ivqMX!g>N1 z#$84Q3o=(Vbvr4OV(6WZa<|P>1zs80pSB!FA*F0}DaH|68prV-oO1g}nsJn&`gwCz zs+t*OV1LpI7SCfNfpb`>r4iOccPlkR-bn=uN`}}9eQlVAAh2NDa{fFO`nTlAsw~~V z+G>FkM~0~vDAd*{eh=cpBS9+hi^ZFK22n%S2lfwJ%~iNe!m06;_1w_{1uc!RetN}+ z|M=vhUo3oU!m28^lqD=7i4##ehXpN-u)d4U93nX^mw^CnvV%#+3xi z!EB*0SqLss%V!V7gN;^fm6P|MLnflx8X$^koYV!c0uB!%(AI#9`zVc2L77LfskJ4V+qPi&5J z7y(9r5nu!y5eT&H<$7AK2(%y3`oYezzBjsW=-SqMU&|F8r}lg^aENA?b_9rhGb1o3 z1S);|Ccq+DugGvRB4Bq&UDYb>+8V!Sa3aBPsa}CfYg5gtAK4f zIW7rVxxJzs7ieu7m*?6~etPie&k`RChmr~ff;{m#tn}|gF;vRjRa}|NnumBYBD#@O z)Y?R3X8dER>2f>wWrw1wdWXxNgfwUZ)^i)TNc*DhKR})~tMn9i9UZ-JDr&9-=|J6%i;S68uFy)5rm9A~?c| zPPW1!6l0~dRb%)_ya|*c7>IOQ5s`So z#ccv=Z6fj$WT8FzX>z~fc!%MQ?>7)>u^^I2r(Bqcl-4F9&m$wz$}v&_R!_vn4nvCD zEBrSHyU=b6B1uUKxiA2r)+QpBfpj)bDxhNoPt5p%&OdWqt#|o4e$)NAuA}-mJ4_RsPNJ4g@#ZhaM7XJZcuYg~t;=PZ<`)RN@ zd32w6v*q47l1#hU`=Hh)A`fB1c5S+-*?mj!<(cSFfOw_vX1}G3B;DMwMxeEc$o*)0 zJoD*(hccoP@g`;&X3dl(k%-{J0vCbSCL*t5>k6?++MYF-2>2g)a_8JVz#U_u1pyXH z!dCzCEHdH>)`%I_PjInuYVq;Jq}_WDca;UKhQ19Wfs#I3j08@xN_WtWL=xtS{EJhO zW5Dm;NKcmSs`IPa&@BwtxbbI^Qmtv@4Kk=ea;5GnjO}bZQPu|J5$&!EDq+1!EKYd zvD1PZr%J)8Vs7y(9r5nu!u0Y;$V1Ojc(K>fex{k;kQiGBaxy{Pl4j!(5;&OP7y*_KSh zf4C<qu`#8GPfjF=iZoswd*+2|u4)Kg#7Qidz-jb-ecD|~_+Ghenk!iU-$@%b;PHJ91I2X(x{c0wGy$H#&A zMXmVBf;;g;?T!3e?s3MC*lZ#0)t0xBnO||M&?xbX5|i!9y%8&XQab5M{7`!%J|A%i zwL5zWJ_um562V8xgj834 zQLgd!bcPSw8}SXjfeO()^j|BfD8dS6%TuT+LMU1ap&+@^z#_CaQsf?YhL7BrNpX86 zDZR(X1$J=H)Yp!O#JiO<_pUIC$B?$Y=9BLBH>kZ)Jp6y_OguClMJFDm?8MgfrAA## z6Ey|3O3pkaM4>4U0c#|0l)tKyhiYN2j(4cNQU17pbS8gfiy>3)uN$~QB*(jM7_`Is z16=>I{^RHh8gU+ABKZ(zR|0Y-okU<4QeMt~7u z1Q-EEfDvE>7=c5DK!3|gzT(vr8z;xt=Q9)8!}?lI^rhEFd47Z+iADRhFNY&ZA=RgS zIU-AZG@$!3#z%YAFNF|f?BaX0FT+wQB6n+FCPqe5e3$kmFNr+gseKuiMkKjI`x1S# z+^&5Y7U2q{P5qJ|iApiPwfbcumgZZkU!uEi|6whQyHxXBI+_ggfxct8ZvVHqz-hfh z-M{Pla_8k8#rCt>j%axW-ekY@1S(5*q1zY~Jwi%v9#usN8Qf7q%}u%N_!$0E^CQ6T z84|dYZ=1@GBI!y;q4kQQ@+L_k)V8+9&LmdTMuN|PQsQ3F5&~-XxT39laJP9htb7Ip zQN6Z3d)Fz16}fsjTVoZ8hLmJJbgWS86_pjc(4~4ckf*Xh>pmgii!r+HQETH+4E^fy zBX>d+9H~gGyBgMwNS)kis$+)`vE!N0un|#1pO)-GH?ehvHiA#`|g360Qxgp%fua_DWx+;Kj%)t*S0?J0NsD|Cg(9GCn z$9}C-IFAygKotP&CCZa6r844ba{{eRQaOV&#jT=6X)AZ0*{#7dl%UHNS?V$#how_a zaAh?qrGLo_+5*ar8No$rloHxo~nZs|X#-v0HTAPUc zY~Pl`oxyt+P|1jQ>F;hzS`%@RH4BK;WX*C(#Gd!PTN&woguCl4r1q4LTIs(jrjDYi zs#PK;Np9pCTASp01}i_Vj)(26%1Sw4(Otl0PG1*08KBct@iCg98 zNftvO61OJeCd)Tm7@3y?>r9uk$_QQ{A+Mt+ws4p`hy1w(M%{P=qTd#YBWAZ}Crci* zHqC>dfBS;hpuij5lE=qITd{?6pc&NbIdVSN%1N^27lR7&`;jpx!4fq*kx zw#GRiVzkZcWkg80Sw5ikToMuDvRAqi1v6J~D-1+jEvQ1xf=Vh3)ky$oLsvoqKwCys zw=(ip+Y+(Q%Lp(6i~u9R2rvSS03*N%FanGKBftnS0?r8pI*#GG{J-$Eyx7;>dqj`F z>kplr{}=6Dt$#qjJAT&TZ~KGuUReu9ph*NO{d*@>6QB9cOb)v!eVst9O-9eHknriZ zU;eZIgxbqs2;>pN%Xuh-TI^@7{5E{?F*S9Pea<>6%oaZq{7;3=&9zg7xBX}h9` zzKw+N54{0uZOQL{ut7Tr!n&q}?eh`sEz7eZL}7X&Br<+)n8o<^Z2AjH6+m1I3)Lt ze+)%0ZlM_xIT8j=3#RroQjuDmO8$?0KoUL0inNG&wdoG_&WtXI73~MiO{{ z{l|eE%VCHi@vqGmv!!@272E_d+*+)4urwK5b#7|)h3Vn-iFIo#;{H6Dm?RsCP<JKs;({X+H7;mt#PySVZ%45`blN9oGj+KKxN?@bcwC2yO1hw}5!W~1 z{^GVTzOax=x?+$$Wj;t3$N87Moi!_ac6$WSZYbdUdPjd>;K|-E^?a-Qhh6(RKht^y zyfyBBu07Uvw!MDXcX>jfvf}@5?_8kVsLljk>bKN-7y>cI5DF90cA&fKp|>%ORFa6n z53mOlAYjYgYFoHlGLpJ^h0L~+!EVw%P5=)Jvk6OPW@jgdWjLEzW)7Rl&MOlVz#$0< zAwYO1Az++2v*$3GJa+$E_f|<&Qnl-$mKt-LgIlWBe^vF}|Gxjn{F%@T)*M)Bf$tfW7$oyG`#DWe2 z-$@ckx0qO4w)c%DCJHeIlx&qDG9GV{*;F!+)**XY4%+p}#;jQ;mCV#4bEzgLDzdr4 z{5creDt&MuNeZRy$8?jWwZVaYguO9Gtu;$t35OI6wj>-9D9J|*l_Z2W25l+{Nb8j3 zMR_0UeA4Y$?uj}(B~z6IkgYaECOSd}(mG^6{pd@hXFm81*iS-cNS2WWJG%RmTo+p-rYcEDY)R(} z&Ej<9Cl1;VMJ**WL0AsgHw$|@qCRmj){-ZNW^tNPvq+|64mtuPt!oxe`_7IYMXAjK zkbTGyS;|3ZUMUIEI%GeRx0w94N9eZ1i8|rT7uwaShV3fls9k}ywp}^xNw}7@tG29K z>6cIflmI0_2~Yx*03|>PPy& z|LEXF13&8MjnOZ6N}#&-zzt;oPoJ+a$t8mJPZDHl?f#!D)3_nNnEw_@`4)_GZE|ZC5v{sE>uUM=T zoM|aC8U=dYE|cW5|;!0{`Cg^ zev%9GPNwl7tOH9^$&pm|1rk@H=e!So4o(0Yt`UAy-zX6`nU8P>N#|hH7jUJ5d-x|L^DzQO-Yv4 zsz>)w<9vXGeF2}~M!$cuB8J!&%Vr9tO&(I4LM5V62ga(hw3gM_yU3ky>hq0(p#&4i zphYc{O@s{xMzm8XQJD`UqA;Y}Hdd9Tb;w@rLk7P8^=w;O2AP;lA#0a&wvyv|{Q)K4 znSMf*h)HP&?Gs6B0Wybdk>gBu-<_CHRig*OTK!vB)4#L>W9dW`q_z0QjzfEe;1Ji@ zq!=_6%S|d4D&WOjW;YAc&h)lzTeq!U$4+O*OGP{bmBRqYndfV907|(%`7#6r7zH_b zf(j8O7MYAju$$1pVJ72zw5x77pv}rvt@Qx0WZ1ryY63~?YXEPJ{22e!nw$7+33sC+LqCOzqKZzhT{z` z3&U-gr7DT+^qaVeXbi_@w1)~wYf-r%{Wz z4f+XVB{#i)=Paiia9g$srw+IS^UPq^t3CdweJ}KQyI%D^I`|pSCij{BU+&x28?{+G zRE!c>E(EGW2LlEZ4~Z9e`%`jRTH8}F_co3Yi){(26A!MVBZT5H2B`dos5l4b`VtS) zI#hStMYSyEXb>aeAn`eE2qP--;6!PAuSb^FvKl)MVK~6+w8>iAgm#JX<)K{&8F5-| zf-I4Af()c}$lkf9^7R`(^B*_Z(lXdlG<9mW^kF6T93)<^tMK%8PCb;Bcqf~%vNS=4 z-QSu2VGR|pn%MBIazy;%av3w^`v7${bf4uTN&B0T5|Y-bt8wfB6D>U0;Q*29_%U*j zc+WOz;1NedElBH#y?`Rqe)J_0O4;mzB^hy-5wTOW%NTW6MB>8{CtV^)>xenkv5p>F zsya4waE0Ls*`dq!8Z{>_S%OkdQBp4Sudd#adCpj9j z*Y(G}u0Ia=yPoi$<$Y`Lu;)6rtNSwGEIk_?4TfNEz&XK zM#B7On`+1}lP0@$K53|iL7bz>-jps4(pqNBUs+?Ns-ZdS?B?ek*ubEzYPe(m5=9N= z;~Y)*@BZ@K#%7`FPOOx}rH*e3H~wvZM233R!&vPo<;w9abbH-JC4* zIcsRu{Q!PhtZtd=j`@ofW_oP|zZLr?gc6e0GsCI(uC<1Yv~zH;dw*%;$ovK^*}5q; zgwD3VVV?qN9ocsul%pE&utru@MsoxCQtuytpXdB~jI413A(h0bwC#;HNSYuc8wl@u zH=^*XS6CyaZbA#Ki82XKObk$)JaNo{kDZhP>DE4RYa)rF`2T~<_1*sOFxUI;9sI|x zr`*4C-P_YMaCYBiy%#xL{8q(} z%Dh`HVWf<&DmnLl4tY-eJ9?S~w2fiST5K%~mO34EV-ZCXvR+)+Zip?4Q+p8@_?IZuT31bM-yP79?ccGy(%HX((ll-V_a>o77VWh#4YQ#~jA@i| zH_hbA6?PI5hfU|Ecf(%EF4!EAz+|t$mWzp#;5xzlCG)Z?UD|!8mVfx9|g9rCS!Z zX{+?|S}Tn>o{~Wc`YQb;?z5VtRWQ*?!4k)mX`JOMjhbvBhON|b0THv!{6vj(%fc0g zH5$ez9}XHRl%TKCxAy<(bDj-15zCZ%(+g8IYSQt@a1=7=HXT=p;{sY$qg7#HtENV) zAF8#{kmz(i1|{fg^i4UbMX^byFB3J|>4-i8Sv3g@X(MW|)|5AL?Y9F|f}Ywj+zy%? zoSLI%$^~+%X8(km!xcUirvxYgN`Mle1SkPYfD)htC;>`<5}*Vqf%gFcU+?WqU)Rr= z{;%|H@;%_)*K;Tq7TvPUB zJGV~=eD1OKvy4NA~s zBcAR}4ChQ>0|Qx8TdJKlkR{O$-3;@+ldF|&yGuD+bYtVyn!0dOLO!>!uP&$rox0p= zt960Bk}2Q2rfQOHn;o^lk#mh}@6uT{)lp4iYcK~?p#&Y(vE!or)8sVBR3j8j8PPSR zJKH|{{}`t0f2MoiN!1AH!%zatlR))?yA(4+601)=)=qGlnC#o&pd*74bR8LU*xLA@ z+TVB9+l%x}RpBn36>uG{G!6sl02h>?!!>qnK63fL{Kc=Xv_&ms()enr&a(+MNGicC zPxYsFMF~&>lmI0_2~Yx*03|>PPy&5y*XFT0s>g~VV=O6fI|C8Rc z20z~OUH5x^ySl&BnLDE2N(oQ`G64u`SOk}*(S0i$;%B6Un1cvPva~K{&C5sSIFK6~ zcYhZPKBw-P2Rj=Bf^7fJ?U|p##2Nyorv%Lx*^hddLee^9zqk#B0Jy!0QJ0C4Ww|s<6b)@3M%EA;EG2Lba*NB- znxSRv)vYf>!#vyKSX>LI-kK2xp7=(iC+0IL*`CW@-;JcTPy8ZECfj#Du+XO?Tueu5 zPu!YlXz;{)44*iKJ@0KkF-U8ln1sw9w)w=tNUPGWJh}X55vJ}C`n0@JpTPyw3@s z`2SwlMU4O3zPr7DH+aBvrTfhOH~Jpwy}9R-Za4ga{umPY?8YO5u;B#h4c7M~e^=M% z&QaZ?BOG>UvK?_Ufl5#!PEO=-IPToU&O$CXQQld~P38-^v1j;?y>-j8zdr@v0YQxh2o=e0g~VbySL?LbEQgdBF^s47qX>W+39?FI$Igv%f9xX?q!R+ zZ=A?aP7aSxN`0DFKVVd2zC9`$)b=)+&shCB6^N={Kcw=t7!j5=!AGkDE$d$4c z^qEp_f3buEW{VLN1-nva*UpsDpQ3DKZz-3ZD6jKmviT`=L-;paDYC`=xdJ;fx_c%+ zH8DC<9?h1g(XZX5;`Hc5wvrtUgC{w9F;X5WdOT8A&R4ek*0_g-pDjhUJOd9j3B{u5 z+Y|W`+-MP=b#1ZC=1L{FCakN9M?APP8_wDj;dD&i?6zN-s05`lmD9@O$K_-dMaz}P zad951cv&P50Bmk!Y&b`Z6Kp6?43<~0{TS=~*|xAj7<^M9!k294Rf()19vLvimWs;R zh#X*p67<+!S+RTb_y6^)YiwcTHFxiW9}LmvF-OGi?!rS$U*uTdtg|#90YXMHNnHhP!c#wCSo; zdS_z$W|&dAw5m|o@4%`69b-G_t)T?vsgxPjvuE5>`TC82xXR9h@n+KwFO@2&{f>Bq zF~k2^AN^;z1g3wW1U@JPsvobSnau@zPG8-x%V*5TBG}AyI-4(y@=>rF9VeR< z@)b?^K=kKPWuTHJM_|h(Ur@T^I}cpY1@q@7sf#C<2(Mp7)@>Iq; zEhMR>b?o)+?;U-9<)w|Z77Oi0%+`c>Xj!Nh11%Bl)irO4B$AYMS}{3-RDDZ4J|$bF zGIv_TMWT2H<3dOCR7RD(rgc@cP2IF5CisY5-2zFiZvF2y&%C)SF@KgVSVCM3cXCCc zz+!wn^Ofa2qCsDQwsV@+XAGP?&;r4R_JgFhKA-;L-qNG&H&-{-=LrrM&@j~LB&|x% z3b1@euo6O4UQJntg(S7GzKb1c8e^yNCOTGtWhx@+QmvsBSWNYtD%zH=Q!Q6*qLL2U zRV|Rz(t1+%I^s`jRINp6;moaEJY>p=#yBVBqIqoBFP`QW0?a+My!(d__}xK^_iJ^y zHt|e|wx?1csny|c!dMr%{9C75)M1e&-D5|0Yt=%8KnYL+lmI0_2~Yx* z03|>PPy&>|2ZDgleFd|k?+GSwsPBouY5s2CCEkDVUN-ps!D~H#>$$}JUH8=kKOXS+ z(;PV;2yLJbNeNH_l)(Fsz#QA7N@$xd&4_qa2qJW5MWEg?-A)v3H(AKSyt0 z!`;HIiLD|Sto#+}8&iJKy&a%GfIfvqcdL~TT7rHcejz?|p zZmg+%Sd=0`{LS*qv3DoY&mI$xY^lBLs@>oYXWe=-iA+WzBfm6Hrl|%Z`y$<~pi8p@ z`tRjLfg?2{zg(K{o$1Hld!5qapguC9S|9Mz!uLiS8=TSO_URuNu_a$CzqIhR%^JGF z_xj6ngPXggSJp%K+#O0&2a69rLwL(CP3WK5o>Ki>RNqrZH9e*LAXn?O1MK%y%N^2` z(4|6;Oc44iwabr+G5i2r2E8=-0Q#m2W-T$@Euc%#JuYtxikrI?l~QLCiC9Vjf?kfj zbwB!f;KX2XpQi7`VTPb5gD&0V8f1pfV{lCC4@m=d4_C;>`<5}*Vq0ZM=ppaduZN`Mle1gsM9fWV4?j|p5DI6Lr4V13}S zz&{4Q7q~NUP2g*Ry@4Zvn*)CqI1V46Ka>C^KnYL+lmI0_2~Yx*03|>PPy&>|$wDB| zeV(h%EN_Ls`&?Je1}>n!mF>s;>e~#m=knFP1v4wJ@)jFG4XSTt%OsEbRyG83t8Zod zoB{Q%Y(dknzLm{c`qa0waY?W87Mp7H)ZQXPh3?v0WDME0qI<}#F)Z)|o`Lm$qC4>0 zz)OK2!-{`@;Ba6j@K1rq0)H9!FM(>{y1PPy&w{*Au}lIeNj3(#+0-CvG&)xCLoP<}()mOS-;ao4{Y zsDIO6|E4eS8Z&^N1AR{~`lkop)K2f^&l2Z_?(S~48~tg8_eCb~WZ?e5o59E=es)JbQBYX3xLSEHIYZKehi~ z#vK^FHA;XIpaduZN`Mle1SkPYfD)htD1oIR@By^{UmB3KR7!vnpaduZN`Mle1SkPY zfD)htC;>`<5?D?Ie1mbu-Sg`nuhjGF{+0e?z8418dA7PQf~*?!hZ3L!D1nocK-GWv z4+G55=)RS!`ytJXI52mWVk?yhC8N=DX?*nNVrgmu|2s0CEl-cml*zS1u`r#jjPK1C z_9&M$(j#SAcK1|qd|z&2?6tEV9^gOr)(|$p5{Ef~<;1uE_Jd#!D1?W(;IJUFd=xAY z<3Tk|3tWO+a=Z}dW7EPoJCPeNPVdi8Wh?n&fz6dl#S*)=l$*_!D!GYuaTa|hJ28=) zV0qnVC$ssfnNp4g`RQDtvbMaAT|1H6pDRq{3gfr3`Eq$CS6)}`|3V)j;_lKB2?rCB zeIiI&ON9A>Efk@6P;3VZrt1F!W2hZq5^A4C2&Al8$kz3!nVG`4+}Re26?U>XQ9#sB&}}-FRXdy&0R^7$IfCi2ti`jw)6}PbEid!OYm{%p1KU{B`r8;iy@HK z)ywgt&wu#91zlxpZIaAzf^lAGN4)?Mmm!f9$2l0)L0V7bk<)H__0mVS*dijvIldi4 z7+>E?#^XAr$A84f41U{le^=7I*L6zYZ@O>od7^J6{%;9%bNLoo9bOm*9SPmEYBe6g zsvlBDFew!c%Q~_%&4Y}kuttamItoQ4LTy!F9Mpc3xeRU z)D|7_Y=#8_EOc0u9lOj{N?Ej~iL+rgU&&3EtHQ$d08A{dA`7V+u%wVq%CjIs2LCd_ zOT{IZpu;uxlSkQq{*ym{{d`;0!r)uej+SLaErh8t)yozpiJsy0XLU@`krWpT$-T1% zn>9U?%g}>+17X|#@8?+rhv$%DoDZ1+cg6N=hOb0RO?9b?Cs=WqJI!XN@)NQivDwm| z8MGK>i<9iG;fsgXFaBo}IQJOiOgU|~fHMUhyr$WXy@7kNHFj~DTFQ0?=fEcz@^s6$ zr*?X0)r|`|t;%euwZLf7c?*Ox^eXd9m?L>NK0azqW%ww|gXbu$UQBgen~LMvDRwqn z%4c^^<=7#3wKFRY!9EW=Tg*>@vX>pcm|cq+cDYiT8L!~h32UKT z2{wmvEZI9+XVd`6DB$N@tkViPndMN|KMeZjoeS zTEW92X<1AwE?D>!07KIXlvrIHsGhF0&ZHpW%@xh~Xl+^nCFpR?T5FTFrAu3ult#@@ z6qWgexNsfeMdlNAyud*jt!*6ef)aGR#@>DK8?#URb?g(?xRJgr*ruhp5w|emR=sfH z8b!_IP47B2gJ=PbgMcM9LnY|2bw6f{7wmkuWr=(uUeHJ9mb{;??pgSxR+sNk+dePF zg3fdqm7uGXvA4Ishc+<6*6K!3X2zioPUUP)oO#l3EO}+pFQ5b{0ZM=ppaduZN`Mle z1SkPYfD)htC;>`<5}*Vq0ZM=ppaduZN`Mle1SkPYfD)htD1oIW;OlvS@iI4b`(N=r zQZ6Mp@Q_2&T89hQOoQ=; z8Sh#!tZ9n@7of-(q2OaqoCT4z76tP|TPPq!N6?IgH~NedM`LiDJe(jb8ho#L!HK6a zlGd^q`{hSp8a?yDZ$xY%5!+-8iI9vLA>pKuZ1QB!9UV#Qki2<6`g!0Yi%77wQz*`v zvUYN+C4KYEOU`;$7)k4t?zn7Fc>(jc7PSt?yl9uXE40I;fX(dujRrM2+!l9UKB3?(N=D2|`YTQBPOM>d&D9h`Z{N!K%@;5)9`uu8Z zT0+d~A#<21Gx26FLbLo5xd;(c<0^l6J>f`PV9r;px}`AB>8Ci>ID)*Eqbp+#AhG3! z*^McHQn66U<_l$ZvmotEZ`-zY+uC*PbauQ{#LiUX#hIxI7R8O2$W?Ns>3ksvktO!z z%kX9tIt?t^2lDzont>8u ztBsU$89J|>u3ZhCl{p7T!BiLTblza-N`-s&YH(qO03!~2YM_afn9Ml#SVv{(fQ=o; zF-i8>y%VETN6Sk*P#g zS}19`@ybw`5@Sug>a22uGW6WuxfVq}9Ew|0ICWU$O$BnhB3sH%qgfU^1QQBDH=)Rm zkLSwB**#lUT-;@McX@_Z7^_2X5v8saP^Mp~eLP=dGZ02Bk(PVXG|%%1|C$2^sq0=cOZaednKT<;jD?wPm2G z9%so{F(lee^&<<@8h~?qYF$q-BG1B|Ob$dSLl5u;?9$t~j$V9@fV*rSdMqKvp6k6D)Ayo6!Pl+NvA#tQbP)36e$s6ax zjX^if>5yoOP)3O|IaF&Ca4$ph?g5TE2}4&FHWDWDg}fY(GCPSzJ8eMVwVO6=h8>7o z*}d6WwAWC8F%jZbR@PNR3pW~q6Yvt)5jZHr031ndZ#n{r+V~=78ecPTa4#(b2kWMj zJ_u4<)`s*;C;>`<5}*Vq0ZM=ppaduZN`Mle1SkPYprZtQ12M?|_p9#yEd%!sj`+UQ z^DF;T?%#U%_pR>eZP72M1SkPYpydRrL-SeK46k`4)tw^nVSI`(na@GmKlxuZ+AqGQ zF;O8OgWda`QI1O?>5;O0k(}W%4>g{wki>)X~)sp-#zNK4Md-FGtAwY+uW0_O_zHxP=%J*;MD0LJsOWt2UNNLoX2 z>^Mrjc-F(?7GXwE?nN;M*48b7>Hj)2yF@S-DYiN?k5U~qZ{RT;GTtU%uOWq}3Jin6=BPQ&UdS=UuAt#y%(pqB7L2Iap=?A0)HRUIw zw@uub-ML7cvKGicWkqUK%L^X$Laip6Bfqj z?Sl3H-AvEj{;T``s{bFnkM#bT=RNnE13#!IOJ7q0lmI2r4gyvGeJeD*_}o>>3?Ugw zNb(G!&fQX7b{ctGs?L_OwANp1>_?OG53#a^RXJFofj1UJ!dT30i}d0G*jAgdQ*$~i zt@ht{Iw7KuqLNHV4xE%_X)O`v03OilQHbg#k!_xf6lI}rOOyamj#G`4Bbs!O!8eJd zwJ64p<01Yw_3>5ZFhxW#m8{RPa`^B2kP(qsD6RKSw$NOVw2sJ8Ii>Mwr`sX|zRB$( za)uERDdE6_J&B}sM4m?e3G6pdu|tH5wyOj2-?!3;NHUgi(4`{j785b$^5eMG^xyYk zLZq=vP2()j_6C^*NNb6>_SjJlo->*4(#{A8Mu?K^9U2+P)-OB zb4`!LRZsAcscB*JLye^hF%u<@^>c+ovzTMUsc$+Ii!}OfTI7hzP&ksq-!C*`B))dd zF~Z6fmgrFkM9`9*cki>z$+kaSz4(wWI)dtsnGT6fe7vnzB9x(2qT=IyY_1Pna93Y# zu`;79ABl^i$%DR@Ip7){Ce$?pB`^Y6Q>n-H>7c|pZU(3fg&=MQT|E}bsRvN4i3>0{ zbI2$lLOPfTH@dZ3)EQKU_KC-iZAAtPXJ29W!Nr!e|LWz3wEq0n+Q=c2s9GAAVv7%s z%1|C$X)I(n?$Z{Z95P6ifD)ht zC;>`<5}*Vq0ZM=ppaduZN`Ml0UlH(mJj_7f+cpA+!CuO5Ql zEG0k*Py&>|2Z#W8`|Z$}7}mlQNSS0*K76(1?OQE`-Cf+fp)FTH{pf zT4xOvHjU!p>@C)kGkxzP%q32`574fwjkODBm$ZdS%19`?q%5l#1HALuQw#SUx*}l> znd-L{Y>VI4iL?udU1dltfinQvBnHwtVm||C<(@O{A)ZTh_ID9xR@wgu-QVDLed14lGEp?Jf&bButu!b>qlGC>-#)kX8Hzr zSHSH%(iDdQYjp7Kx1QR z!e>Zz8InuTSy+yJ@0MqO_ivA7&czcY@NZGVFz{jZl2KraAh_6fbmgKXz!Q#ehSV~d zMo$52)Sv`CHIlKEq`$LBEo?F&wNvk9qX{{o#thCe{#qNFyYk4WUsk=-Wz}<779w~oBe;s{IK?jC&{a-cw|_s?y4bnB9%-wdKOw!cPK%rDrH0Hm6t}( zeDE7L*P`}Vs4WP!5bW&wQ?Xya@W_P(n|@a#k%|SKYB-dj!^S*nN4p`~PkRC%8FddL z;RUT_Q>$9cT=~can0-U|#6&8Za;maWg2J9`0DKomo?U6V1|S3zAC9*ujPL&kbC5vX delta 128038 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 z zRCSxWJ;**>H93(xo**QnRm0S5}F|xRmQ45!DREqwcM{1EdU#-!GG=Z452V>Te zRh&Tz(npx^YU#1@$!Me-oKpKJeLDJPt3Wzn;N+vDBk zp2GjdWA-Nm6yFmIC+eQ=cQ03;(-y$c6>7A;6E1#9&FAu>3Liy<%ODEY3rkg9H?7_> zbqc8BO)s2+viI1-Q6HqvWU7k3MQSD|{A5do11>Q%_mM(uZ$`YI;vKBWuNo1)F8ga3 zCGdVl7eWy8(Df~&HJ)9FbsE@hb6BadZ8}iyNpP=F!?p>B8hDW)$|gaqL2-?31vK_W zE-#_*2{h$2ACA6Utm3fYk!Wn0ItPLj6;3vS6fIHBL5h|@XDPkxF)$zv?dW2e`MfDA zS6@bVy=eZp_eFIj>bRKa?4?lZLNtGweu|;gKsDyCPPj;tZR#cyWiBk%k4yc_>tL2`p>QFmX9K{Da z?GTu&>Iak~(skb-y-oGt@Hnyx8;TC+1hnH`sUtd-qC{YIV>g=e zp=z=y@_wZDH8leaD~6(&2OJGRHk5|7helaia`I!<@TPJR;u%3CW0YGa-$Hwr(fgu4 zA&1;v*W3oKtVqqHVwM zc5aIEsIyZ^dPG!i7-ALULH10Jk&KiKpZ}}Zz%p+yIYlD(swOMiFvMD=VY&6r{bV9X z9I(=2Ne~%hOk322Sg@VP2HVp=tHuEx!a`{_QLl88$j~NBK=y93$<8|rVF?hMsG>JX zbO!sgX*aq+?rKGKx_pIe*4niArs{Q23fXeC6{}eG38Ie-|D}){Fy+q9d7_*hTkN6}gWLC4|>wWvSvJ z>IDq3mQlFE6AqH{cOA5L1hL$~y6Twrl2{>; zL|^oj^_ytgX(W|;!cj<1i=RG(MKkQ^-{?-vYj^AApx6LJOxTewn?hWKA=Xk0H|Bgd zQo+ykJAFf~f=uTtXDYi5OY_-c?R|;8q!yR7YCW+upH1*=XOaNKvJurZ3`_Fa1jl>H z59os8s+nU+K1;i@E6E((^F>x^yoA^*KW_Yp45Op%Vl~5p1^R6EEAEG?ERPqXv}!Xw z1T6hLI4z$C_i~86_TnP?ZXq5hD|8E-zS^>6-Mk4&pi*$t22sb7JRRIUT^_X|-`ROn zNrj{Ij1%4bMm71;0W(W&A0L5M?1Q+|oxd~h-Y33Ocd@&7;Pu0*$&eEL`HVXgbvUA$ zq8^<%qF!Y=t?eapGU}KjJdS4lsIFxH0ydn+Uk)5oJr4UAsOCse1kWzQ&j2i6bm|0Q z#yXxbjwz<&$ z=V0Uq=i@jkc&U&}>E}0zEbX6~s{(c)zB{oT8k|4aQq*sMldhh!*$#nb{an?chLq=k zOA`_H1lQGrEL}bPIw>vvYi!thYfCjvv_$>51y|YtOKHV7=)eL~#fAIhYwk_3!@47r zHThrj)-rP(ms!5Z!?lgHy^0_D&pJjp^OXMXb;2-tJ6BsA;+^H1&8LW$=NQK)D^%0%D^;lcK!ejlX%hsdQ z?ZJ>QJJW4qL==B3OTukoq{AUHuVsQXw9tO|5b4B_0dDre7A9U3Gi_xjg8j=^=j=)0 zvFWj$SYJw7Q0uz$lB#JOW`Wtp)w7d-Cw-N8)SNpx_r5MJI;H1WWS zzo{ifN(AYF!U$^*U~~u6H?q)P8$<^GTTM+Mrd~Bo#qLws0v;Vo z3IJsk%WyQa&}P>n6GfNoOHHaN02=|b1&oO#t=$@FZmr87ZP1e2!R07Io8Cx_GHDk0 zu?rqH-*Y2K#oK0CD~_)zEbR=AjORhltg_?s<9i0CHR?d;QA$$0rm~|Z;h03kxs_private.h" if the file exists — it defines # the struct types referenced by the declarations below, and must not be diff --git a/automation/intellisense_fixer.py b/automation/intellisense_fixer.py index 5cc623d..bae94cb 100644 --- a/automation/intellisense_fixer.py +++ b/automation/intellisense_fixer.py @@ -218,6 +218,14 @@ def hoist_early_typedefs(content: str) -> Tuple[str, int]: def _is_extern_decl(line: str) -> bool: """Return True if the line is a top-level extern declaration (either style).""" stripped = line.strip() + # Skip declarations with m2c '?' unknown types — PSY-Q can't compile them + if '?' in stripped: + return False + # Skip extern declarations with initializers (e.g. m2c %gp annotations like + # `extern s32 D_80062F10 = 0; // %gp`). These define symbols, which will + # conflict with ASM BSS/sdata objects that already own those symbols. + if _EXTERN_KW_PAT.match(stripped) and '=' in stripped: + return False if _EXTERN_KW_PAT.match(stripped): return True # Forward-decl comment style: must also look like a prototype (has parens) diff --git a/automation/make build log.txt b/automation/make build log.txt index b90952f..e015799 100644 --- a/automation/make build log.txt +++ b/automation/make build log.txt @@ -1,28 +1,286 @@ calvin@Begemot:~/GitHub/ff7-decomp-armstrca$ make rebuild -[11/83] psx cc src/main/18B8.c +[10/85] psx cc src/main/1255C.c +src/main/1255C.c:66: parse error before `?' +src/main/1255C.c:71: parse error before `?' +src/main/1255C.c: In function `func_80022FE0': +src/main/1255C.c:86: warning: passing arg 1 of `PutDispEnv' from incompatible pointer type +src/main/1255C.c: In function `func_80025040': +src/main/1255C.c:269: incompatible types in assignment +src/main/1255C.c: In function `func_80025514': +src/main/1255C.c:457: request for member `unk473' in something not a structure or union +src/main/1255C.c:457: request for member `unk473' in something not a structure or union +src/main/1255C.c:460: request for member `unk473' in something not a structure or union +src/main/1255C.c:460: request for member `unk473' in something not a structure or union +src/main/1255C.c: In function `func_80025668': +src/main/1255C.c:510: subscripted value is neither array nor pointer +src/main/1255C.c:513: invalid operands to binary * +src/main/1255C.c: In function `func_800256DC': +src/main/1255C.c:523: subscripted value is neither array nor pointer +src/main/1255C.c:526: invalid operands to binary * +src/main/1255C.c: In function `func_80025800': +src/main/1255C.c:557: subscripted value is neither array nor pointer +src/main/1255C.c:569: incompatible types in assignment +src/main/1255C.c: In function `func_800258BC': +src/main/1255C.c:580: subscripted value is neither array nor pointer +src/main/1255C.c:589: incompatible types in assignment +src/main/1255C.c: In function `func_80025988': +src/main/1255C.c:601: subscripted value is neither array nor pointer +src/main/1255C.c:613: incompatible types in assignment +src/main/1255C.c: In function `func_80025A44': +src/main/1255C.c:624: subscripted value is neither array nor pointer +src/main/1255C.c:633: incompatible types in assignment +src/main/1255C.c: At top level: +src/main/1255C.c:764: warning: type mismatch with previous external decl +src/main/1255C.c:415: warning: previous external decl of `func_8002603C' +src/main/1255C.c:764: warning: type mismatch with previous implicit declaration +src/main/1255C.c:456: warning: previous implicit declaration of `func_8002603C' +src/main/1255C.c: In function `func_800260DC': +src/main/1255C.c:797: warning: passing arg 1 of `func_80025C14' from incompatible pointer type +src/main/1255C.c:802: subscripted value is neither array nor pointer +src/main/1255C.c:807: warning: passing arg 3 of `func_80033F40' from incompatible pointer type +src/main/1255C.c:808: warning: passing arg 1 of `func_80025D14' from incompatible pointer type +src/main/1255C.c:818: warning: passing arg 2 of `StoreImage' from incompatible pointer type +src/main/1255C.c:820: warning: passing arg 1 of `func_80025C54' from incompatible pointer type +src/main/1255C.c: In function `func_800262D8': +src/main/1255C.c:843: warning: assignment makes pointer from integer without a cast +src/main/1255C.c:847: invalid operands to binary + +src/main/1255C.c:853: invalid operands to binary & +src/main/1255C.c: In function `func_80026A00': +src/main/1255C.c:907: warning: assignment from incompatible pointer type +src/main/1255C.c: In function `func_80026A0C': +src/main/1255C.c:912: warning: assignment from incompatible pointer type +src/main/1255C.c: In function `func_80026A20': +src/main/1255C.c:917: warning: assignment from incompatible pointer type +src/main/1255C.c: In function `func_80028CA0': +src/main/1255C.c:969: warning: dereferencing `void *' pointer +src/main/1255C.c:969: request for member `unk3' in something not a structure or union +src/main/1255C.c:970: warning: dereferencing `void *' pointer +src/main/1255C.c:970: request for member `unk7' in something not a structure or union +src/main/1255C.c:975: warning: dereferencing `void *' pointer +src/main/1255C.c:975: request for member `unk8' in something not a structure or union +src/main/1255C.c:976: warning: dereferencing `void *' pointer +src/main/1255C.c:976: request for member `unkA' in something not a structure or union +src/main/1255C.c:977: warning: dereferencing `void *' pointer +src/main/1255C.c:977: request for member `unkC' in something not a structure or union +src/main/1255C.c:978: warning: dereferencing `void *' pointer +src/main/1255C.c:978: request for member `unkD' in something not a structure or union +src/main/1255C.c:979: warning: dereferencing `void *' pointer +src/main/1255C.c:979: request for member `unk10' in something not a structure or union +src/main/1255C.c:980: warning: dereferencing `void *' pointer +src/main/1255C.c:980: request for member `unk12' in something not a structure or union +src/main/1255C.c:981: warning: dereferencing `void *' pointer +src/main/1255C.c:981: request for member `unkE' in something not a structure or union +src/main/1255C.c: In function `func_80028E00': +src/main/1255C.c:1027: warning: dereferencing `void *' pointer +src/main/1255C.c:1027: request for member `unk3' in something not a structure or union +src/main/1255C.c:1028: warning: dereferencing `void *' pointer +src/main/1255C.c:1028: request for member `unk7' in something not a structure or union +src/main/1255C.c:1031: warning: dereferencing `void *' pointer +src/main/1255C.c:1031: request for member `unk8' in something not a structure or union +src/main/1255C.c:1032: warning: dereferencing `void *' pointer +src/main/1255C.c:1032: request for member `unkA' in something not a structure or union +src/main/1255C.c:1033: warning: dereferencing `void *' pointer +src/main/1255C.c:1033: request for member `unkC' in something not a structure or union +src/main/1255C.c:1034: warning: dereferencing `void *' pointer +src/main/1255C.c:1034: request for member `unkD' in something not a structure or union +src/main/1255C.c:1035: warning: dereferencing `void *' pointer +src/main/1255C.c:1035: request for member `unk10' in something not a structure or union +src/main/1255C.c:1036: warning: dereferencing `void *' pointer +src/main/1255C.c:1036: request for member `unk12' in something not a structure or union +src/main/1255C.c:1037: warning: dereferencing `void *' pointer +src/main/1255C.c:1037: request for member `unkE' in something not a structure or union +src/main/1255C.c:1050: warning: dereferencing `void *' pointer +src/main/1255C.c:1050: request for member `unk3' in something not a structure or union +src/main/1255C.c:1051: warning: dereferencing `void *' pointer +src/main/1255C.c:1051: request for member `unk7' in something not a structure or union +src/main/1255C.c:1053: warning: dereferencing `void *' pointer +src/main/1255C.c:1053: request for member `unk8' in something not a structure or union +src/main/1255C.c:1054: warning: dereferencing `void *' pointer +src/main/1255C.c:1054: request for member `unkA' in something not a structure or union +src/main/1255C.c:1055: warning: dereferencing `void *' pointer +src/main/1255C.c:1055: request for member `unkC' in something not a structure or union +src/main/1255C.c:1056: warning: dereferencing `void *' pointer +src/main/1255C.c:1056: request for member `unkD' in something not a structure or union +src/main/1255C.c:1057: warning: dereferencing `void *' pointer +src/main/1255C.c:1057: request for member `unk10' in something not a structure or union +src/main/1255C.c:1058: warning: dereferencing `void *' pointer +src/main/1255C.c:1058: request for member `unk12' in something not a structure or union +src/main/1255C.c:1059: warning: dereferencing `void *' pointer +src/main/1255C.c:1059: request for member `unkE' in something not a structure or union +[11/85] psx cc src/main/akao.c +src/main/akao.c:161: parse error before `?' +src/main/akao.c: In function `func_8002B1F8': +src/main/akao.c:370: warning: passing arg 1 of `func_80029B78' makes pointer from integer without a cast +src/main/akao.c: In function `func_8002B2F8': +src/main/akao.c:389: warning: passing arg 1 of `func_80029B78' makes pointer from integer without a cast +src/main/akao.c: In function `func_80033A90': +src/main/akao.c:1133: `Savemap' undeclared (first use this function) +src/main/akao.c:1133: (Each undeclared identifier is reported only once +src/main/akao.c:1133: for each function it appears in.) +[12/85] psx cc src/main/psxsdk.c +src/main/psxsdk.c:31: parse error before `?' +src/main/psxsdk.c:207: warning: type mismatch with previous external decl +src/main/psxsdk.c:73: warning: previous external decl of `func_80034D2C' +src/main/psxsdk.c:207: warning: type mismatch with previous implicit declaration +src/main/psxsdk.c:73: warning: previous implicit declaration of `func_80034D2C' +src/main/psxsdk.c:207: warning: `func_80034D2C' was previously implicitly declared to return `int' +src/main/psxsdk.c: In function `func_80034D2C': +src/main/psxsdk.c:211: `jtbl_80034D14' undeclared (first use this function) +src/main/psxsdk.c:211: (Each undeclared identifier is reported only once +src/main/psxsdk.c:211: for each function it appears in.) +[13/85] psx cc src/main/18B8.c +src/main/18B8.c:174: warning: `D_80062FFC' initialized and declared `extern' +src/main/18B8.c:175: warning: `D_80063020' initialized and declared `extern' +src/main/18B8.c:176: warning: `D_80062F7C' initialized and declared `extern' +src/main/18B8.c:177: warning: `D_80062F10' initialized and declared `extern' +src/main/18B8.c:178: warning: `D_80062FBC' initialized and declared `extern' +src/main/18B8.c:179: warning: `D_80063020' initialized and declared `extern' +src/main/18B8.c:179: redefinition of `D_80063020' +src/main/18B8.c:175: `D_80063020' previously defined here +src/main/18B8.c: In function `func_80014B70': +src/main/18B8.c:686: warning: assignment from incompatible pointer type +src/main/18B8.c: At top level: +src/main/18B8.c:743: warning: type mismatch with previous external decl +src/main/18B8.c:570: warning: previous external decl of `func_80014C80' +src/main/18B8.c:743: warning: type mismatch with previous implicit declaration +src/main/18B8.c:570: warning: previous implicit declaration of `func_80014C80' +src/main/18B8.c:743: warning: `func_80014C80' was previously implicitly declared to return `int' +src/main/18B8.c: In function `func_80015668': +src/main/18B8.c:832: parse error before `?' +src/main/18B8.c:857: warning: assignment from incompatible pointer type +src/main/18B8.c:861: `var_t8' undeclared (first use this function) +src/main/18B8.c:861: (Each undeclared identifier is reported only once +src/main/18B8.c:861: for each function it appears in.) +src/main/18B8.c:863: subscripted value is neither array nor pointer +src/main/18B8.c:872: invalid operands to binary + +src/main/18B8.c:908: incompatible types in assignment +src/main/18B8.c:909: incompatible types in assignment +src/main/18B8.c:910: incompatible types in assignment +src/main/18B8.c:911: incompatible types in assignment src/main/18B8.c: In function `func_800159B0': -src/main/18B8.c:1528: warning: comparison is always 1 due to limited range of data type -[64/83] psx cc src/field/field.c -src/field/field.c: In function `func_800C5CE8': -src/field/field.c:2512: warning: comparison is always 1 due to limited range of data type -src/field/field.c: In function `func_800C5E80': -src/field/field.c:2558: warning: comparison is always 1 due to limited range of data type -[83/83] check -FAILED: build/check.dummy -sha1sum -c build/us/check.sha1 -build/us/main.exe: FAILED -build/us/batini.exe: FAILED -build/us/battle.exe: FAILED -build/us/brom.exe: FAILED -build/us/dschange.exe: FAILED -build/us/ending.exe: FAILED -build/us/field.exe: FAILED -build/us/bginmenu.exe: FAILED -build/us/cnfgmenu.exe: FAILED -build/us/savemenu.exe: FAILED -build/us/world.exe: FAILED -build/us/barrier.exe: FAILED -sha1sum: WARNING: 12 computed checksums did NOT match +src/main/18B8.c:995: warning: comparison is always 1 due to limited range of data type +src/main/18B8.c: At top level: +src/main/18B8.c:1022: warning: type mismatch with previous external decl +src/main/18B8.c:562: warning: previous external decl of `func_80015B44' +src/main/18B8.c:1022: warning: type mismatch with previous implicit declaration +src/main/18B8.c:562: warning: previous implicit declaration of `func_80015B44' +src/main/18B8.c:1022: warning: `func_80015B44' was previously implicitly declared to return `int' +src/main/18B8.c: In function `func_80015B50': +src/main/18B8.c:1031: invalid type argument of `->' +src/main/18B8.c:1031: invalid type argument of `->' +src/main/18B8.c:1032: invalid type argument of `->' +src/main/18B8.c:1032: invalid type argument of `->' +src/main/18B8.c: In function `func_80015B88': +src/main/18B8.c:1042: invalid type argument of `->' +src/main/18B8.c:1042: invalid type argument of `->' +src/main/18B8.c:1043: invalid type argument of `->' +src/main/18B8.c:1043: invalid type argument of `->' +src/main/18B8.c: In function `func_800166C0': +src/main/18B8.c:1126: warning: assignment makes pointer from integer without a cast +src/main/18B8.c:1137: warning: assignment makes pointer from integer without a cast +src/main/18B8.c:1152: warning: assignment makes pointer from integer without a cast +src/main/18B8.c:1160: warning: assignment makes pointer from integer without a cast +src/main/18B8.c: In function `func_80018220': +src/main/18B8.c:1214: invalid type argument of `->' +src/main/18B8.c:1214: invalid type argument of `->' +src/main/18B8.c:1219: invalid type argument of `->' +src/main/18B8.c:1219: invalid type argument of `->' +src/main/18B8.c:1222: invalid type argument of `->' +src/main/18B8.c:1222: invalid type argument of `->' +src/main/18B8.c:1225: invalid type argument of `->' +src/main/18B8.c:1225: invalid type argument of `->' +src/main/18B8.c: In function `func_800182FC': +src/main/18B8.c:1239: invalid type argument of `->' +src/main/18B8.c:1239: invalid type argument of `->' +src/main/18B8.c:1242: invalid type argument of `->' +src/main/18B8.c:1242: invalid type argument of `->' +src/main/18B8.c: In function `func_80019338': +src/main/18B8.c:1350: warning: assignment from incompatible pointer type +src/main/18B8.c: In function `func_80019DA0': +src/main/18B8.c:1462: invalid type argument of `->' +src/main/18B8.c:1463: invalid type argument of `->' +src/main/18B8.c:1466: invalid type argument of `->' +src/main/18B8.c: In function `func_80019E84': +src/main/18B8.c:1490: warning: assignment from incompatible pointer type +src/main/18B8.c:1503: warning: assignment from incompatible pointer type +src/main/18B8.c:1509: structure has no member named `unk1B' +src/main/18B8.c:1510: structure has no member named `unk1A' +src/main/18B8.c:1518: structure has no member named `unk1B' +src/main/18B8.c: In function `func_8001AE08': +src/main/18B8.c:1746: request for member `unk0' in something not a structure or union +src/main/18B8.c:1747: request for member `unk0' in something not a structure or union +src/main/18B8.c:1752: request for member `unk2' in something not a structure or union +src/main/18B8.c:1753: request for member `unk2' in something not a structure or union +src/main/18B8.c:1758: invalid type argument of `->' +src/main/18B8.c:1758: invalid type argument of `->' +src/main/18B8.c:1758: request for member `unk0' in something not a structure or union +src/main/18B8.c:1759: invalid type argument of `->' +src/main/18B8.c:1759: invalid type argument of `->' +src/main/18B8.c:1759: request for member `unk2' in something not a structure or union +src/main/18B8.c:1760: invalid type argument of `->' +src/main/18B8.c:1760: invalid type argument of `->' +src/main/18B8.c:1761: invalid type argument of `->' +src/main/18B8.c:1761: invalid type argument of `->' +src/main/18B8.c:1762: invalid type argument of `->' +src/main/18B8.c:1762: invalid type argument of `->' +src/main/18B8.c: In function `func_8001BC18': +src/main/18B8.c:1859: invalid type argument of `->' +src/main/18B8.c:1860: invalid type argument of `->' +src/main/18B8.c:1861: invalid type argument of `->' +src/main/18B8.c:1862: invalid type argument of `->' +src/main/18B8.c: At top level: +src/main/18B8.c:1868: warning: type mismatch with previous external decl +src/main/18B8.c:1620: warning: previous external decl of `func_8001BCE8' +src/main/18B8.c:1868: warning: type mismatch with previous implicit declaration +src/main/18B8.c:1620: warning: previous implicit declaration of `func_8001BCE8' +src/main/18B8.c:1868: warning: `func_8001BCE8' was previously implicitly declared to return `int' +src/main/18B8.c: In function `func_8001BD50': +src/main/18B8.c:1896: invalid type argument of `->' +src/main/18B8.c:1897: invalid type argument of `->' +src/main/18B8.c:1898: invalid type argument of `->' +src/main/18B8.c: In function `func_8001C980': +src/main/18B8.c:1963: request for member `unk0' in something not a structure or union +src/main/18B8.c:1965: request for member `unk0' in something not a structure or union +src/main/18B8.c:1971: request for member `unk2' in something not a structure or union +src/main/18B8.c:1986: request for member `unk2' in something not a structure or union +src/main/18B8.c:1988: request for member `unk0' in something not a structure or union +src/main/18B8.c:1988: request for member `unk0' in something not a structure or union +src/main/18B8.c:1988: request for member `unk2' in something not a structure or union +src/main/18B8.c:1988: request for member `unk0' in something not a structure or union +src/main/18B8.c:1989: request for member `unk0' in something not a structure or union +src/main/18B8.c:1989: request for member `unk2' in something not a structure or union +src/main/18B8.c:1994: request for member `unk2' in something not a structure or union +src/main/18B8.c:1994: request for member `unk0' in something not a structure or union +src/main/18B8.c:2007: request for member `unk2' in something not a structure or union +src/main/18B8.c:2009: request for member `unk2' in something not a structure or union +src/main/18B8.c:2009: request for member `unk2' in something not a structure or union +src/main/18B8.c:2009: request for member `unk0' in something not a structure or union +src/main/18B8.c:2011: request for member `unk2' in something not a structure or union +src/main/18B8.c:2011: request for member `unk0' in something not a structure or union +src/main/18B8.c:2012: request for member `unk2' in something not a structure or union +src/main/18B8.c:2012: request for member `unk2' in something not a structure or union +src/main/18B8.c:2012: request for member `unk0' in something not a structure or union +src/main/18B8.c: In function `func_8001FBAC': +src/main/18B8.c:2335: subscripted value is neither array nor pointer +src/main/18B8.c:2341: invalid operands to binary * +src/main/18B8.c:2348: invalid operands to binary * +src/main/18B8.c: In function `func_800211C4': +src/main/18B8.c:2458: request for member `unk4' in something not a structure or union +src/main/18B8.c:2458: warning: passing arg 3 of `func_80033E34' from incompatible pointer type +[14/85] psx ld build/us/main.ld +FAILED: build/us/main.elf +mipsel-linux-gnu-ld -nostdlib --no-check-sections -Map build/us/main.map -T build/us/main.ld -T build/us/undefined_syms.main.txt -T config/sym_extern.us.txt -T config/sym_ovl_export.us.txt -o build/us/main.elf build/us/asm/us/main/header.s.o build/us/asm/us/main/data/800.rodata.s.o build/us/asm/us/main/data/AB4.rodata.s.o build/us/asm/us/main/data/B94.rodata.s.o build/us/src/main/18B8.c.o build/us/src/main/1255C.c.o build/us/src/main/akao.c.o build/us/src/main/psxsdk.c.o build/us/asm/us/main/data/394E0.data.s.o build/us/src/main/ovl.c.o build/us/asm/us/main/data/39C50.data.s.o build/us/asm/us/main/data/536C4.bss.s.o +mipsel-linux-gnu-ld: build/us/asm/us/main/data/536C4.bss.s.o: in function `D_80062F10': +(.bss+0x4c): multiple definition of `D_80062F10'; build/us/src/main/18B8.c.o:src/main/18B8.c:(.sdata+0x178): first defined here +mipsel-linux-gnu-ld: build/us/asm/us/main/data/536C4.bss.s.o: in function `D_80062F7C': +(.bss+0xb8): multiple definition of `D_80062F7C'; build/us/src/main/18B8.c.o:src/main/18B8.c:(.sdata+0x174): first defined here +mipsel-linux-gnu-ld: build/us/asm/us/main/data/536C4.bss.s.o: in function `D_80062FBC': +(.bss+0xf8): multiple definition of `D_80062FBC'; build/us/src/main/18B8.c.o:src/main/18B8.c:(.sdata+0x17c): first defined here +mipsel-linux-gnu-ld: build/us/asm/us/main/data/536C4.bss.s.o: in function `D_80062FFC': +(.bss+0x138): multiple definition of `D_80062FFC'; build/us/src/main/18B8.c.o:src/main/18B8.c:(.sdata+0x170): first defined here +mipsel-linux-gnu-ld: build/us/asm/us/main/data/536C4.bss.s.o: in function `D_80063020': +(.bss+0x15c): multiple definition of `D_80063020'; build/us/src/main/18B8.c.o:src/main/18B8.c:(.sdata+0x171): first defined here +mipsel-linux-gnu-ld: warning: build/us/main.elf has a LOAD segment with RWX permissions ninja: build stopped: subcommand failed. Usage: build [version] [flags] @@ -32,4 +290,74 @@ Flags: exit status 1 exit status 1 -make: *** [Makefile:43: rebuild] Error 1 \ No newline at end of file +make: *** [Makefile:43: rebuild] Error 1 +calvin@Begemot:~/GitHub/ff7-decomp-armstrca$ make build +wget -O bin/cc1-psx-26.gz https://github.com/Xeeynamo/ff7-decomp/releases/download/init/cc1-psx-26.gz +--2026-04-22 19:17:22-- https://github.com/Xeeynamo/ff7-decomp/releases/download/init/cc1-psx-26.gz +Resolving github.com (github.com)... 140.82.114.4 +Connecting to github.com (github.com)|140.82.114.4|:443... connected. +HTTP request sent, awaiting response... 302 Found +Location: https://release-assets.githubusercontent.com/github-production-release-asset/1060063534/420d0295-4a7d-4681-9a25-e9da0b499bf4?sp=r&sv=2018-11-09&sr=b&spr=https&se=2026-04-23T01%3A15%3A23Z&rscd=attachment%3B+filename%3Dcc1-psx-26.gz&rsct=application%2Foctet-stream&skoid=96c2d410-5711-43a1-aedd-ab1947aa7ab0&sktid=398a6654-997b-47e9-b12b-9515b896b4de&skt=2026-04-23T00%3A14%3A51Z&ske=2026-04-23T01%3A15%3A23Z&sks=b&skv=2018-11-09&sig=yA303xYATCN%2FH4GHiv3E6NaE%2FsMVdCbaSwdXCAZr5Lw%3D&jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmVsZWFzZS1hc3NldHMuZ2l0aHVidXNlcmNvbnRlbnQuY29tIiwia2V5Ijoia2V5MSIsImV4cCI6MTc3NjkwMzc0MiwibmJmIjoxNzc2OTAzNDQyLCJwYXRoIjoicmVsZWFzZWFzc2V0cHJvZHVjdGlvbi5ibG9iLmNvcmUud2luZG93cy5uZXQifQ.MttehX27NcgF2DYQp9bkQQTb7BhqXaDj5Wc082EQlXI&response-content-disposition=attachment%3B%20filename%3Dcc1-psx-26.gz&response-content-type=application%2Foctet-stream [following] +--2026-04-22 19:17:22-- https://release-assets.githubusercontent.com/github-production-release-asset/1060063534/420d0295-4a7d-4681-9a25-e9da0b499bf4?sp=r&sv=2018-11-09&sr=b&spr=https&se=2026-04-23T01%3A15%3A23Z&rscd=attachment%3B+filename%3Dcc1-psx-26.gz&rsct=application%2Foctet-stream&skoid=96c2d410-5711-43a1-aedd-ab1947aa7ab0&sktid=398a6654-997b-47e9-b12b-9515b896b4de&skt=2026-04-23T00%3A14%3A51Z&ske=2026-04-23T01%3A15%3A23Z&sks=b&skv=2018-11-09&sig=yA303xYATCN%2FH4GHiv3E6NaE%2FsMVdCbaSwdXCAZr5Lw%3D&jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmVsZWFzZS1hc3NldHMuZ2l0aHVidXNlcmNvbnRlbnQuY29tIiwia2V5Ijoia2V5MSIsImV4cCI6MTc3NjkwMzc0MiwibmJmIjoxNzc2OTAzNDQyLCJwYXRoIjoicmVsZWFzZWFzc2V0cHJvZHVjdGlvbi5ibG9iLmNvcmUud2luZG93cy5uZXQifQ.MttehX27NcgF2DYQp9bkQQTb7BhqXaDj5Wc082EQlXI&response-content-disposition=attachment%3B%20filename%3Dcc1-psx-26.gz&response-content-type=application%2Foctet-stream +Resolving release-assets.githubusercontent.com (release-assets.githubusercontent.com)... 185.199.108.133, 185.199.111.133, 185.199.109.133, ... +Connecting to release-assets.githubusercontent.com (release-assets.githubusercontent.com)|185.199.108.133|:443... connected. +HTTP request sent, awaiting response... 200 OK +Length: 1016568 (993K) [application/octet-stream] +Saving to: ‘bin/cc1-psx-26.gz’ + +bin/cc1-psx-26.gz 100%[=============================================>] 992.74K --.-KB/s in 0.02s + +2026-04-22 19:17:22 (39.2 MB/s) - ‘bin/cc1-psx-26.gz’ saved [1016568/1016568] + +sha256sum --check bin/cc1-psx-26.gz.sha256 +bin/cc1-psx-26.gz: OK +gzip -kcd bin/cc1-psx-26.gz > bin/cc1-psx-26 +touch bin/cc1-psx-26 +chmod +x bin/cc1-psx-26 +wget -O bin/cc1-psx-272.gz https://github.com/Xeeynamo/ff7-decomp/releases/download/init/cc1-psx-272.gz +--2026-04-22 19:17:22-- https://github.com/Xeeynamo/ff7-decomp/releases/download/init/cc1-psx-272.gz +Resolving github.com (github.com)... 140.82.114.4 +Connecting to github.com (github.com)|140.82.114.4|:443... connected. +HTTP request sent, awaiting response... 302 Found +Location: https://release-assets.githubusercontent.com/github-production-release-asset/1060063534/00f81ce4-4bc8-4bd0-ae45-19242fe2d056?sp=r&sv=2018-11-09&sr=b&spr=https&se=2026-04-23T01%3A13%3A34Z&rscd=attachment%3B+filename%3Dcc1-psx-272.gz&rsct=application%2Foctet-stream&skoid=96c2d410-5711-43a1-aedd-ab1947aa7ab0&sktid=398a6654-997b-47e9-b12b-9515b896b4de&skt=2026-04-23T00%3A12%3A42Z&ske=2026-04-23T01%3A13%3A34Z&sks=b&skv=2018-11-09&sig=1K4g0syjf6V6%2BSKLeLCW%2F%2BJ7tBuGAkb9%2BsmJZ1dSnso%3D&jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmVsZWFzZS1hc3NldHMuZ2l0aHVidXNlcmNvbnRlbnQuY29tIiwia2V5Ijoia2V5MSIsImV4cCI6MTc3NjkwMzc0MiwibmJmIjoxNzc2OTAzNDQyLCJwYXRoIjoicmVsZWFzZWFzc2V0cHJvZHVjdGlvbi5ibG9iLmNvcmUud2luZG93cy5uZXQifQ.MttehX27NcgF2DYQp9bkQQTb7BhqXaDj5Wc082EQlXI&response-content-disposition=attachment%3B%20filename%3Dcc1-psx-272.gz&response-content-type=application%2Foctet-stream [following] +--2026-04-22 19:17:22-- https://release-assets.githubusercontent.com/github-production-release-asset/1060063534/00f81ce4-4bc8-4bd0-ae45-19242fe2d056?sp=r&sv=2018-11-09&sr=b&spr=https&se=2026-04-23T01%3A13%3A34Z&rscd=attachment%3B+filename%3Dcc1-psx-272.gz&rsct=application%2Foctet-stream&skoid=96c2d410-5711-43a1-aedd-ab1947aa7ab0&sktid=398a6654-997b-47e9-b12b-9515b896b4de&skt=2026-04-23T00%3A12%3A42Z&ske=2026-04-23T01%3A13%3A34Z&sks=b&skv=2018-11-09&sig=1K4g0syjf6V6%2BSKLeLCW%2F%2BJ7tBuGAkb9%2BsmJZ1dSnso%3D&jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmVsZWFzZS1hc3NldHMuZ2l0aHVidXNlcmNvbnRlbnQuY29tIiwia2V5Ijoia2V5MSIsImV4cCI6MTc3NjkwMzc0MiwibmJmIjoxNzc2OTAzNDQyLCJwYXRoIjoicmVsZWFzZWFzc2V0cHJvZHVjdGlvbi5ibG9iLmNvcmUud2luZG93cy5uZXQifQ.MttehX27NcgF2DYQp9bkQQTb7BhqXaDj5Wc082EQlXI&response-content-disposition=attachment%3B%20filename%3Dcc1-psx-272.gz&response-content-type=application%2Foctet-stream +Resolving release-assets.githubusercontent.com (release-assets.githubusercontent.com)... 185.199.108.133, 185.199.111.133, 185.199.109.133, ... +Connecting to release-assets.githubusercontent.com (release-assets.githubusercontent.com)|185.199.108.133|:443... connected. +HTTP request sent, awaiting response... 200 OK +Length: 1039565 (1015K) [application/octet-stream] +Saving to: ‘bin/cc1-psx-272.gz’ + +bin/cc1-psx-272.gz 100%[=============================================>] 1015K --.-KB/s in 0.02s + +2026-04-22 19:17:22 (42.1 MB/s) - ‘bin/cc1-psx-272.gz’ saved [1039565/1039565] + +sha256sum --check bin/cc1-psx-272.gz.sha256 +bin/cc1-psx-272.gz: OK +gzip -kcd bin/cc1-psx-272.gz > bin/cc1-psx-272 +touch bin/cc1-psx-272 +chmod +x bin/cc1-psx-272 +[1/72] psx ld build/us/main.ld +FAILED: build/us/main.elf +mipsel-linux-gnu-ld -nostdlib --no-check-sections -Map build/us/main.map -T build/us/main.ld -T build/us/undefined_syms.main.txt -T config/sym_extern.us.txt -T config/sym_ovl_export.us.txt -o build/us/main.elf build/us/asm/us/main/header.s.o build/us/asm/us/main/data/800.rodata.s.o build/us/asm/us/main/data/AB4.rodata.s.o build/us/asm/us/main/data/B94.rodata.s.o build/us/src/main/18B8.c.o build/us/src/main/1255C.c.o build/us/src/main/akao.c.o build/us/src/main/psxsdk.c.o build/us/asm/us/main/data/394E0.data.s.o build/us/src/main/ovl.c.o build/us/asm/us/main/data/39C50.data.s.o build/us/asm/us/main/data/536C4.bss.s.o +mipsel-linux-gnu-ld: build/us/asm/us/main/data/536C4.bss.s.o: in function `D_80062F10': +(.bss+0x4c): multiple definition of `D_80062F10'; build/us/src/main/18B8.c.o:src/main/18B8.c:(.sdata+0x178): first defined here +mipsel-linux-gnu-ld: build/us/asm/us/main/data/536C4.bss.s.o: in function `D_80062F7C': +(.bss+0xb8): multiple definition of `D_80062F7C'; build/us/src/main/18B8.c.o:src/main/18B8.c:(.sdata+0x174): first defined here +mipsel-linux-gnu-ld: build/us/asm/us/main/data/536C4.bss.s.o: in function `D_80062FBC': +(.bss+0xf8): multiple definition of `D_80062FBC'; build/us/src/main/18B8.c.o:src/main/18B8.c:(.sdata+0x17c): first defined here +mipsel-linux-gnu-ld: build/us/asm/us/main/data/536C4.bss.s.o: in function `D_80062FFC': +(.bss+0x138): multiple definition of `D_80062FFC'; build/us/src/main/18B8.c.o:src/main/18B8.c:(.sdata+0x170): first defined here +mipsel-linux-gnu-ld: build/us/asm/us/main/data/536C4.bss.s.o: in function `D_80063020': +(.bss+0x15c): multiple definition of `D_80063020'; build/us/src/main/18B8.c.o:src/main/18B8.c:(.sdata+0x171): first defined here +mipsel-linux-gnu-ld: warning: build/us/main.elf has a LOAD segment with RWX permissions +ninja: build stopped: subcommand failed. +Usage: + build [version] [flags] + +Flags: + -h, --help help for build + +exit status 1 +exit status 1 +make: *** [Makefile:14: build] Error 1 +rm bin/cc1-psx-26.gz bin/cc1-psx-272.gz \ No newline at end of file diff --git a/automation/missing_types_reports.json b/automation/missing_types_reports.json index 966963b..d0f7b5e 100644 --- a/automation/missing_types_reports.json +++ b/automation/missing_types_reports.json @@ -1,149 +1,102 @@ [ { - "function_name": "func_8002B9AC", - "file": "src/main/akao.c", + "function_name": "func_800D4E24", + "file": "src/field/field.c", "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", "missing_items": [ { - "type": "extern_function", - "name": "SpuSetVoiceARAttr", - "return_type": "unknown", - "parameters": "s32, u16, s32", - "suggestion": "Define proper signature for SpuSetVoiceARAttr in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoiceDR", - "return_type": "unknown", - "parameters": "s32, u16", - "suggestion": "Define proper signature for SpuSetVoiceDR in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoiceLoopStartAddr", - "return_type": "unknown", - "parameters": "s32, s32", - "suggestion": "Define proper signature for SpuSetVoiceLoopStartAddr in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoicePitch", - "return_type": "unknown", - "parameters": "u16", - "suggestion": "Define proper signature for SpuSetVoicePitch in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoiceRRAttr", - "return_type": "unknown", - "parameters": "s32, u16, s32", - "suggestion": "Define proper signature for SpuSetVoiceRRAttr in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoiceSL", - "return_type": "unknown", - "parameters": "s32, u16", - "suggestion": "Define proper signature for SpuSetVoiceSL in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoiceSRAttr", - "return_type": "unknown", - "parameters": "s32, u16, s32", - "suggestion": "Define proper signature for SpuSetVoiceSRAttr in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoiceStartAddr", - "return_type": "unknown", - "parameters": "s32, s32", - "suggestion": "Define proper signature for SpuSetVoiceStartAddr in header" + "type": "extern_variable", + "name": "D_80074EB0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB0" }, { - "type": "extern_function", - "name": "SpuSetVoiceVolume", - "return_type": "unknown", - "parameters": "s32, s16, s16", - "suggestion": "Define proper signature for SpuSetVoiceVolume in header" + "type": "extern_variable", + "name": "D_80074EB4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB4" }, { "type": "extern_variable", - "name": "D_80049C40", + "name": "D_80074EB8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049C40" + "suggestion": "Unknown type for extern variable D_80074EB8" }, { "type": "extern_variable", - "name": "func_8002BD04", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002BD04" + "name": "D_800E0638", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0638" }, { "type": "extern_variable", - "name": "func_8002BFCC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002BFCC" + "name": "D_800E42D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42D8" }, { "type": "extern_variable", - "name": "func_8002C004", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002C004" + "name": "D_800E42DA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DA" }, { "type": "extern_variable", - "name": "func_8002C2CC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002C2CC" + "name": "D_800E42DC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DC" }, { "type": "extern_variable", - "name": "func_8002C300", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002C300" + "name": "D_800E42E0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E0" }, { "type": "extern_variable", - "name": "D_8007EBE4", + "name": "D_800E42E4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007EBE4" + "suggestion": "Unknown type for extern variable D_800E42E4" }, { "type": "extern_variable", - "name": "func_80030038", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80030038" + "name": "D_800E42E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E8" }, { "type": "extern_variable", - "name": "D_80081DC8", + "name": "D_800E42EA", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80081DC8" + "suggestion": "Unknown type for extern variable D_800E42EA" }, { "type": "extern_variable", - "name": "D_800499A8", + "name": "D_800E42EE", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800499A8" + "suggestion": "Unknown type for extern variable D_800E42EE" }, { "type": "extern_variable", - "name": "D_80096704", + "name": "D_800E48E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80096704" + "suggestion": "Unknown type for extern variable D_800E48E8" }, { - "type": "extern_variable", - "name": "func_800293D0", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800293D0" + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" } ], - "timestamp": "2026-04-18T12:35:20.792488" + "timestamp": "2026-04-22T19:48:54.738761" }, { - "function_name": "func_800BA534", + "function_name": "func_800AB2B4", "file": "src/field/field.c", "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", "missing_items": [ @@ -167,687 +120,741 @@ }, { "type": "extern_variable", - "name": "func_800A48B8", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800A48B8" - }, - { - "type": "extern_variable", - "name": "D_80074ED9", + "name": "D_800E0638", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074ED9" + "suggestion": "Unknown type for extern variable D_800E0638" }, { "type": "extern_variable", - "name": "D_800DF120", + "name": "D_800E42D8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DF120" + "suggestion": "Unknown type for extern variable D_800E42D8" }, { "type": "extern_variable", - "name": "D_800DF122", + "name": "D_800E42DA", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DF122" + "suggestion": "Unknown type for extern variable D_800E42DA" }, { "type": "extern_variable", - "name": "D_800DEF88", + "name": "D_800E42DC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DEF88" - }, - { - "type": "extern_variable", - "name": "func_800354CC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800354CC" - }, - { - "type": "extern_variable", - "name": "func_80035658", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80035658" + "suggestion": "Unknown type for extern variable D_800E42DC" }, { "type": "extern_variable", - "name": "D_800E0638", + "name": "D_800E42E0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0638" + "suggestion": "Unknown type for extern variable D_800E42E0" }, { "type": "extern_variable", - "name": "D_800E48F4", + "name": "D_800E42E4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48F4" + "suggestion": "Unknown type for extern variable D_800E42E4" }, { "type": "extern_variable", - "name": "D_800E48FC", + "name": "D_800E42E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48FC" + "suggestion": "Unknown type for extern variable D_800E42E8" }, { "type": "extern_variable", - "name": "D_800E48FE", + "name": "D_800E42EA", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48FE" + "suggestion": "Unknown type for extern variable D_800E42EA" }, { "type": "extern_variable", - "name": "D_800E4900", + "name": "D_800E42EE", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4900" + "suggestion": "Unknown type for extern variable D_800E42EE" }, { "type": "extern_variable", - "name": "D_800E4901", + "name": "D_800E48E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4901" + "suggestion": "Unknown type for extern variable D_800E48E8" }, { - "type": "extern_variable", - "name": "D_800E4904", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4904" + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" }, { - "type": "extern_variable", - "name": "D_800E4906", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4906" - }, + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-22T19:48:55.388138" + }, + { + "function_name": "func_800A310C", + "file": "src/ending/ending.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { - "type": "extern_variable", - "name": "D_800E4908", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4908" + "type": "extern_function", + "name": "InitGeom", + "return_type": "unknown", + "parameters": "", + "suggestion": "Define proper signature for InitGeom in header" }, { - "type": "extern_variable", - "name": "D_800E4909", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4909" + "type": "extern_function", + "name": "PadInit", + "return_type": "unknown", + "parameters": "?", + "suggestion": "Define proper signature for PadInit in header" }, { - "type": "extern_variable", - "name": "D_800E490C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E490C" + "type": "extern_function", + "name": "ResetCallback", + "return_type": "unknown", + "parameters": "", + "suggestion": "Define proper signature for ResetCallback in header" }, { - "type": "extern_variable", - "name": "D_800E490E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E490E" + "type": "extern_function", + "name": "ResetGraph", + "return_type": "unknown", + "parameters": "?", + "suggestion": "Define proper signature for ResetGraph in header" }, { - "type": "extern_variable", - "name": "D_800E4910", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4910" + "type": "extern_function", + "name": "StopCallback", + "return_type": "unknown", + "parameters": "", + "suggestion": "Define proper signature for StopCallback in header" }, { "type": "extern_variable", - "name": "D_800E4911", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4911" + "name": "func_80033B70", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80033B70" }, { "type": "extern_variable", - "name": "D_800E4914", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4914" - }, + "name": "func_80036298", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80036298" + } + ], + "timestamp": "2026-04-22T19:49:00.475376" + }, + { + "function_name": "func_800DA1D4", + "file": "src/field/field.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_800E4916", + "name": "D_80074EB0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4916" + "suggestion": "Unknown type for extern variable D_80074EB0" }, { "type": "extern_variable", - "name": "D_800E4918", + "name": "D_80074EB4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4918" + "suggestion": "Unknown type for extern variable D_80074EB4" }, { "type": "extern_variable", - "name": "D_800E4919", + "name": "D_80074EB8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4919" + "suggestion": "Unknown type for extern variable D_80074EB8" }, { "type": "extern_variable", - "name": "D_8007EB98", + "name": "D_800E0638", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007EB98" + "suggestion": "Unknown type for extern variable D_800E0638" }, { "type": "extern_variable", - "name": "func_8001786C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8001786C" + "name": "D_800E42D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42D8" }, { "type": "extern_variable", - "name": "func_80020058", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80020058" + "name": "D_800E42DA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DA" }, { "type": "extern_variable", - "name": "D_800491D0", + "name": "D_800E42DC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800491D0" + "suggestion": "Unknown type for extern variable D_800E42DC" }, { "type": "extern_variable", - "name": "D_8008328D", + "name": "D_800E42E0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328D" + "suggestion": "Unknown type for extern variable D_800E42E0" }, { "type": "extern_variable", - "name": "D_800832A2", + "name": "D_800E42E4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800832A2" + "suggestion": "Unknown type for extern variable D_800E42E4" }, { "type": "extern_variable", - "name": "D_8008326C", + "name": "D_800E42E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008326C" + "suggestion": "Unknown type for extern variable D_800E42E8" }, { "type": "extern_variable", - "name": "D_80083286", + "name": "D_800E42EA", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083286" + "suggestion": "Unknown type for extern variable D_800E42EA" }, { "type": "extern_variable", - "name": "D_80083278", + "name": "D_800E42EE", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083278" + "suggestion": "Unknown type for extern variable D_800E42EE" }, { "type": "extern_variable", - "name": "D_8008327A", + "name": "D_800E48E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327A" + "suggestion": "Unknown type for extern variable D_800E48E8" }, { - "type": "extern_variable", - "name": "D_8008327E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327E" + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" }, { - "type": "extern_variable", - "name": "D_80075E24", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075E24" + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-22T19:49:00.685281" + }, + { + "function_name": "func_80025A44", + "file": "src/main/1255C.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_80048540", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_80048540 in header" }, { - "type": "extern_variable", - "name": "D_80075E25", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075E25" + "type": "extern_function", + "name": "VSync", + "return_type": "unknown", + "parameters": "?", + "suggestion": "Define proper signature for VSync in header" }, { "type": "extern_variable", - "name": "D_800E4214", + "name": "D_80069800", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4214" + "suggestion": "Unknown type for extern variable D_80069800" }, { "type": "extern_variable", - "name": "D_800E4280", + "name": "D_80071E4D", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4280" + "suggestion": "Unknown type for extern variable D_80071E4D" }, { "type": "extern_variable", - "name": "D_800E4D48", + "name": "D_800738BC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4D48" + "suggestion": "Unknown type for extern variable D_800738BC" }, { "type": "extern_variable", - "name": "D_800E0748", + "name": "D_800491D0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0748" + "suggestion": "Unknown type for extern variable D_800491D0" }, { "type": "extern_variable", - "name": "D_800E074A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074A" + "name": "func_80017678", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80017678" }, { "type": "extern_variable", - "name": "D_800E074C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074C" + "name": "func_8001786C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001786C" }, { "type": "extern_variable", - "name": "D_800E08C0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08C0" + "name": "func_80020058", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80020058" }, { "type": "extern_variable", - "name": "D_800E074E", + "name": "D_8009D85C", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074E" + "suggestion": "Unknown type for extern variable D_8009D85C" }, { "type": "extern_variable", - "name": "D_800E0754", + "name": "D_8009D85E", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0754" - }, + "suggestion": "Unknown type for extern variable D_8009D85E" + } + ], + "timestamp": "2026-04-22T19:49:00.750255" + }, + { + "function_name": "func_800E58CC", + "file": "src/battle/battle3.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_800E0758", + "name": "D_800FB064", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0758" + "suggestion": "Unknown type for extern variable D_800FB064" }, { "type": "extern_variable", - "name": "D_800E08A8", + "name": "D_800FF060", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08A8" + "suggestion": "Unknown type for extern variable D_800FF060" }, { "type": "extern_variable", - "name": "D_800E0756", + "name": "D_800FF064", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0756" + "suggestion": "Unknown type for extern variable D_800FF064" }, { "type": "extern_variable", - "name": "D_800E0750", + "name": "D_800FF068", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0750" + "suggestion": "Unknown type for extern variable D_800FF068" }, { "type": "extern_variable", - "name": "D_800E0751", + "name": "D_800FF06C", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0751" + "suggestion": "Unknown type for extern variable D_800FF06C" }, { "type": "extern_variable", - "name": "D_800E0752", + "name": "D_800FF070", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0752" + "suggestion": "Unknown type for extern variable D_800FF070" }, { "type": "extern_variable", - "name": "func_800D5A60", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D5A60" + "name": "D_800FF074", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF074" }, { "type": "extern_variable", - "name": "func_800D5C9C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D5C9C" + "name": "D_800FF094", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF094" }, { "type": "extern_variable", - "name": "func_800D6D44", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6D44" + "name": "D_800FF098", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF098" }, { "type": "extern_variable", - "name": "func_800D6E0C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6E0C" + "name": "D_800FF0D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF0D8" }, { "type": "extern_variable", - "name": "func_800D6F6C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6F6C" + "name": "D_800FF0DC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800FF0DC" }, { "type": "extern_variable", - "name": "D_80083284", + "name": "D_800FF0E0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083284" + "suggestion": "Unknown type for extern variable D_800FF0E0" }, { "type": "extern_variable", - "name": "D_8008328A", + "name": "D_80103154", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328A" + "suggestion": "Unknown type for extern variable D_80103154" }, { "type": "extern_variable", - "name": "D_8008328E", + "name": "D_80103158", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328E" + "suggestion": "Unknown type for extern variable D_80103158" }, { "type": "extern_variable", - "name": "D_80083298", + "name": "D_80103160", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083298" + "suggestion": "Unknown type for extern variable D_80103160" }, { "type": "extern_variable", - "name": "D_8008329A", + "name": "D_80103188", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329A" + "suggestion": "Unknown type for extern variable D_80103188" }, { "type": "extern_variable", - "name": "D_800E424C", + "name": "D_801031CC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E424C" + "suggestion": "Unknown type for extern variable D_801031CC" }, { "type": "extern_variable", - "name": "D_801142CC", + "name": "D_801031D4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801142CC" + "suggestion": "Unknown type for extern variable D_801031D4" }, { "type": "extern_variable", - "name": "D_8009AD30", + "name": "D_800492FC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009AD30" + "suggestion": "Unknown type for extern variable D_800492FC" }, { "type": "extern_variable", - "name": "func_800C2E00", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C2E00" + "name": "D_800F55D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F55D8" }, { "type": "extern_variable", - "name": "func_800DA444", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800DA444" + "name": "D_800F1E58", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F1E58" }, { "type": "extern_variable", - "name": "func_800C8634", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C8634" + "name": "D_800F1E5A", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F1E5A" }, { "type": "extern_variable", - "name": "func_800CDC14", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800CDC14" + "name": "D_800F1E5C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F1E5C" }, { "type": "extern_variable", - "name": "D_80095DE0", + "name": "D_800F1E5E", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80095DE0" + "suggestion": "Unknown type for extern variable D_800F1E5E" }, { "type": "extern_variable", - "name": "func_80025B10", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80025B10" + "name": "D_800F1E60", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F1E60" }, { "type": "extern_variable", - "name": "func_800BEAD4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800BEAD4" + "name": "D_800F1E62", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F1E62" }, { "type": "extern_variable", - "name": "D_800E0208", + "name": "D_800F33B0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0208" + "suggestion": "Unknown type for extern variable D_800F33B0" }, { "type": "extern_variable", - "name": "D_800756E8", + "name": "D_80163778", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800756E8" + "suggestion": "Unknown type for extern variable D_80163778" }, { "type": "extern_variable", - "name": "D_80083291", + "name": "D_80163B70", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083291" + "suggestion": "Unknown type for extern variable D_80163B70" }, { - "type": "extern_variable", - "name": "D_80083294", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083294" + "type": "unknown_pointer", + "name": "var_v0", + "suggestion": "m2c could not determine type of pointer var_v0" }, { - "type": "extern_variable", - "name": "D_8007078C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007078C" + "type": "unknown_pointer", + "name": "var_v0_2", + "suggestion": "m2c could not determine type of pointer var_v0_2" }, { - "type": "extern_variable", - "name": "D_8007E7B8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B8" + "type": "unknown_pointer", + "name": "var_v0_3", + "suggestion": "m2c could not determine type of pointer var_v0_3" }, { - "type": "extern_variable", - "name": "D_8007E7BA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7BA" + "type": "unknown_pointer", + "name": "var_v0_4", + "suggestion": "m2c could not determine type of pointer var_v0_4" }, { - "type": "extern_variable", - "name": "D_8007E7AC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7AC" + "type": "unknown_pointer", + "name": "var_v0_5", + "suggestion": "m2c could not determine type of pointer var_v0_5" }, { - "type": "extern_variable", - "name": "D_8007E7AE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7AE" + "type": "unknown_pointer", + "name": "var_v0_6", + "suggestion": "m2c could not determine type of pointer var_v0_6" }, + { + "type": "unknown_pointer", + "name": "var_v0", + "suggestion": "m2c could not determine type of pointer var_v0" + } + ], + "timestamp": "2026-04-22T19:49:00.856699" + }, + { + "function_name": "func_800DA28C", + "file": "src/field/field.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_8007E7B0", + "name": "D_80074EB0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B0" + "suggestion": "Unknown type for extern variable D_80074EB0" }, { "type": "extern_variable", - "name": "D_8007E7B2", + "name": "D_80074EB4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B2" + "suggestion": "Unknown type for extern variable D_80074EB4" }, { "type": "extern_variable", - "name": "D_8007E7B4", + "name": "D_80074EB8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B4" + "suggestion": "Unknown type for extern variable D_80074EB8" }, { "type": "extern_variable", - "name": "D_8007E7B6", + "name": "D_800E0638", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B6" + "suggestion": "Unknown type for extern variable D_800E0638" }, { "type": "extern_variable", - "name": "D_80082248", + "name": "D_800E42D8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082248" + "suggestion": "Unknown type for extern variable D_800E42D8" }, { "type": "extern_variable", - "name": "D_8008325C", + "name": "D_800E42DA", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008325C" + "suggestion": "Unknown type for extern variable D_800E42DA" }, { "type": "extern_variable", - "name": "D_8009D828", + "name": "D_800E42DC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D828" + "suggestion": "Unknown type for extern variable D_800E42DC" }, { "type": "extern_variable", - "name": "D_800A0854", + "name": "D_800E42E0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A0854" + "suggestion": "Unknown type for extern variable D_800E42E0" }, { "type": "extern_variable", - "name": "D_800A0F38", + "name": "D_800E42E4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A0F38" + "suggestion": "Unknown type for extern variable D_800E42E4" }, { "type": "extern_variable", - "name": "D_8007E7C2", + "name": "D_800E42E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7C2" + "suggestion": "Unknown type for extern variable D_800E42E8" }, { "type": "extern_variable", - "name": "D_80049209", + "name": "D_800E42EA", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049209" + "suggestion": "Unknown type for extern variable D_800E42EA" }, { "type": "extern_variable", - "name": "D_8004920A", + "name": "D_800E42EE", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8004920A" + "suggestion": "Unknown type for extern variable D_800E42EE" }, { "type": "extern_variable", - "name": "func_80044064", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80044064" + "name": "D_800E48E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E48E8" }, { - "type": "extern_variable", - "name": "func_800C5B38", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C5B38" + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-22T19:49:01.314431" + }, + { + "function_name": "func_800AB9C8", + "file": "src/field/field.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_80081D90", + "name": "D_80074EB0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80081D90" + "suggestion": "Unknown type for extern variable D_80074EB0" }, { "type": "extern_variable", - "name": "D_80083288", + "name": "D_80074EB4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083288" + "suggestion": "Unknown type for extern variable D_80074EB4" }, { "type": "extern_variable", - "name": "D_800E4944", + "name": "D_80074EB8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4944" + "suggestion": "Unknown type for extern variable D_80074EB8" }, { "type": "extern_variable", - "name": "D_80114480", + "name": "D_800E0638", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80114480" + "suggestion": "Unknown type for extern variable D_800E0638" }, { "type": "extern_variable", - "name": "D_800E42A8", + "name": "D_800E42D8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42A8" + "suggestion": "Unknown type for extern variable D_800E42D8" }, { "type": "extern_variable", - "name": "D_8008327C", + "name": "D_800E42DA", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327C" + "suggestion": "Unknown type for extern variable D_800E42DA" }, { "type": "extern_variable", - "name": "D_80083280", + "name": "D_800E42DC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083280" + "suggestion": "Unknown type for extern variable D_800E42DC" }, { "type": "extern_variable", - "name": "D_80083282", + "name": "D_800E42E0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083282" + "suggestion": "Unknown type for extern variable D_800E42E0" }, { "type": "extern_variable", - "name": "D_8008328F", + "name": "D_800E42E4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328F" + "suggestion": "Unknown type for extern variable D_800E42E4" }, { "type": "extern_variable", - "name": "D_80083290", + "name": "D_800E42E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083290" + "suggestion": "Unknown type for extern variable D_800E42E8" }, { "type": "extern_variable", - "name": "D_8008329C", + "name": "D_800E42EA", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329C" + "suggestion": "Unknown type for extern variable D_800E42EA" }, { "type": "extern_variable", - "name": "D_8008329E", + "name": "D_800E42EE", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329E" + "suggestion": "Unknown type for extern variable D_800E42EE" }, { "type": "extern_variable", - "name": "D_80071748", + "name": "D_800E48E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071748" + "suggestion": "Unknown type for extern variable D_800E48E8" }, { - "type": "extern_variable", - "name": "D_800833F8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800833F8" + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-22T19:49:01.885812" + }, + { + "function_name": "func_800DA2CC", + "file": "src/field/field.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_8009A1C4", + "name": "D_80074EB0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009A1C4" + "suggestion": "Unknown type for extern variable D_80074EB0" }, { "type": "extern_variable", - "name": "D_800A06B0", + "name": "D_80074EB4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A06B0" + "suggestion": "Unknown type for extern variable D_80074EB4" }, { "type": "extern_variable", - "name": "D_80071A88", + "name": "D_80074EB8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071A88" + "suggestion": "Unknown type for extern variable D_80074EB8" }, { "type": "extern_variable", - "name": "D_801142D4", + "name": "D_800E0638", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801142D4" + "suggestion": "Unknown type for extern variable D_800E0638" }, { "type": "extern_variable", @@ -914,659 +921,800 @@ "suggestion": "m2c could not determine type of pointer var_t1" } ], - "timestamp": "2026-04-18T12:35:21.136530" + "timestamp": "2026-04-22T19:49:02.455098" }, { - "function_name": "func_80028484", - "file": "src/main/18B8.c", + "function_name": "func_800D4BFC", + "file": "src/field/field.c", "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", "missing_items": [ { "type": "extern_variable", - "name": "D_8007E7A0", + "name": "D_80074EB0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7A0" + "suggestion": "Unknown type for extern variable D_80074EB0" }, { "type": "extern_variable", - "name": "D_8007EB6A", + "name": "D_80074EB4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007EB6A" + "suggestion": "Unknown type for extern variable D_80074EB4" }, { "type": "extern_variable", - "name": "D_8009A078", + "name": "D_80074EB8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009A078" + "suggestion": "Unknown type for extern variable D_80074EB8" }, { "type": "extern_variable", - "name": "D_8009A079", + "name": "D_800E0638", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009A079" + "suggestion": "Unknown type for extern variable D_800E0638" }, { "type": "extern_variable", - "name": "D_8009A07A", + "name": "D_800E42D8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009A07A" + "suggestion": "Unknown type for extern variable D_800E42D8" }, { "type": "extern_variable", - "name": "D_80063048", + "name": "D_800E42DA", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80063048" + "suggestion": "Unknown type for extern variable D_800E42DA" }, { "type": "extern_variable", - "name": "D_80010118", + "name": "D_800E42DC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80010118" + "suggestion": "Unknown type for extern variable D_800E42DC" }, { "type": "extern_variable", - "name": "D_80010120", + "name": "D_800E42E0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80010120" + "suggestion": "Unknown type for extern variable D_800E42E0" }, { "type": "extern_variable", - "name": "D_80010124", + "name": "D_800E42E4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80010124" + "suggestion": "Unknown type for extern variable D_800E42E4" }, { "type": "extern_variable", - "name": "D_800F5BC7", + "name": "D_800E42E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5BC7" + "suggestion": "Unknown type for extern variable D_800E42E8" }, { "type": "extern_variable", - "name": "D_800F5BE1", + "name": "D_800E42EA", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5BE1" + "suggestion": "Unknown type for extern variable D_800E42EA" }, { "type": "extern_variable", - "name": "D_800F5BF4", + "name": "D_800E42EE", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5BF4" + "suggestion": "Unknown type for extern variable D_800E42EE" }, { "type": "extern_variable", - "name": "D_800F5F44", + "name": "D_800E48E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5F44" + "suggestion": "Unknown type for extern variable D_800E48E8" }, { - "type": "extern_variable", - "name": "D_800F652C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F652C" + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-22T19:49:03.013247" + }, + { + "function_name": "func_800134F4", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_800F83E4", + "name": "D_80075D24", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F83E4" + "suggestion": "Unknown type for extern variable D_80075D24" }, { "type": "extern_variable", - "name": "D_800F8410", + "name": "D_80075D28", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F8410" + "suggestion": "Unknown type for extern variable D_80075D28" }, { "type": "extern_variable", - "name": "D_80163658", + "name": "D_80075DE8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163658" + "suggestion": "Unknown type for extern variable D_80075DE8" }, { "type": "extern_variable", - "name": "D_8009D808", + "name": "D_8009D7E4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D808" + "suggestion": "Unknown type for extern variable D_8009D7E4" }, { "type": "extern_variable", - "name": "D_8009D80A", + "name": "D_8009D7E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D80A" + "suggestion": "Unknown type for extern variable D_8009D7E8" }, { "type": "extern_variable", - "name": "D_8009D80C", + "name": "D_8009D7EC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D80C" + "suggestion": "Unknown type for extern variable D_8009D7EC" }, { "type": "extern_variable", - "name": "func_80018028", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80018028" + "name": "D_8009D7ED", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7ED" }, { "type": "extern_variable", - "name": "D_800491B0", + "name": "D_80069508", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800491B0" + "suggestion": "Unknown type for extern variable D_80069508" }, { "type": "extern_variable", - "name": "D_800730D9", + "name": "D_800708C8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730D9" + "suggestion": "Unknown type for extern variable D_800708C8" }, { "type": "extern_variable", - "name": "D_800730DA", + "name": "D_800708D0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730DA" + "suggestion": "Unknown type for extern variable D_800708D0" }, { - "type": "extern_variable", - "name": "D_800730DB", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730DB" + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T19:49:04.245127" + }, + { + "function_name": "func_800DA214", + "file": "src/field/field.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_80062E53", + "name": "D_80074EB0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80062E53" + "suggestion": "Unknown type for extern variable D_80074EB0" }, { "type": "extern_variable", - "name": "D_8006950A", + "name": "D_80074EB4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8006950A" + "suggestion": "Unknown type for extern variable D_80074EB4" }, { "type": "extern_variable", - "name": "func_80019254", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80019254" + "name": "D_80074EB8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB8" }, { "type": "extern_variable", - "name": "func_8001937C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8001937C" + "name": "D_800E0638", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0638" }, { "type": "extern_variable", - "name": "func_800193F4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800193F4" + "name": "D_800E42D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42D8" }, { "type": "extern_variable", - "name": "func_80019544", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80019544" + "name": "D_800E42DA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DA" }, { "type": "extern_variable", - "name": "D_80049060", + "name": "D_800E42DC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049060" + "suggestion": "Unknown type for extern variable D_800E42DC" }, { "type": "extern_variable", - "name": "D_80049062", + "name": "D_800E42E0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049062" + "suggestion": "Unknown type for extern variable D_800E42E0" }, { "type": "extern_variable", - "name": "D_80049064", + "name": "D_800E42E4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049064" + "suggestion": "Unknown type for extern variable D_800E42E4" }, { "type": "extern_variable", - "name": "D_80049066", + "name": "D_800E42E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049066" + "suggestion": "Unknown type for extern variable D_800E42E8" }, { "type": "extern_variable", - "name": "D_80049068", + "name": "D_800E42EA", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049068" + "suggestion": "Unknown type for extern variable D_800E42EA" }, { "type": "extern_variable", - "name": "D_8004906A", + "name": "D_800E42EE", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8004906A" + "suggestion": "Unknown type for extern variable D_800E42EE" }, { "type": "extern_variable", - "name": "D_8004906C", + "name": "D_800E48E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8004906C" + "suggestion": "Unknown type for extern variable D_800E48E8" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-22T19:49:04.261830" + }, + { + "function_name": "func_80025040", + "file": "src/main/1255C.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_80048540", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_80048540 in header" + }, + { + "type": "extern_function", + "name": "VSync", + "return_type": "unknown", + "parameters": "?", + "suggestion": "Define proper signature for VSync in header" }, { "type": "extern_variable", - "name": "D_8004906E", + "name": "D_80069800", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8004906E" + "suggestion": "Unknown type for extern variable D_80069800" }, { "type": "extern_variable", - "name": "D_800730D8", + "name": "D_80071E4D", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730D8" + "suggestion": "Unknown type for extern variable D_80071E4D" }, { "type": "extern_variable", - "name": "D_800694E4", + "name": "D_800738BC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800694E4" + "suggestion": "Unknown type for extern variable D_800738BC" }, { "type": "extern_variable", - "name": "D_8006947C", + "name": "D_800491D0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8006947C" + "suggestion": "Unknown type for extern variable D_800491D0" }, { "type": "extern_variable", - "name": "D_800730DE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730DE" + "name": "func_80017678", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80017678" }, { "type": "extern_variable", - "name": "D_80069508", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069508" + "name": "func_8001786C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001786C" }, { "type": "extern_variable", - "name": "func_8001BB30", + "name": "func_80020058", "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8001BB30" + "suggestion": "Unknown type for extern variable func_80020058" }, { "type": "extern_variable", - "name": "D_80069538", + "name": "D_8009D85C", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069538" + "suggestion": "Unknown type for extern variable D_8009D85C" }, { "type": "extern_variable", - "name": "D_80069554", + "name": "D_8009D85E", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" - }, + "suggestion": "Unknown type for extern variable D_8009D85E" + } + ], + "timestamp": "2026-04-22T19:49:04.271785" + }, + { + "function_name": "func_800D4FF0", + "file": "src/battle/battle2.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_80069555", + "name": "D_800F4CEC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069555" + "suggestion": "Unknown type for extern variable D_800F4CEC" }, { "type": "extern_variable", - "name": "D_80069556", + "name": "D_800F4D2C", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069556" + "suggestion": "Unknown type for extern variable D_800F4D2C" }, { "type": "extern_variable", - "name": "D_80069558", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" + "name": "func_800D6998", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6998" }, { "type": "extern_variable", - "name": "D_800708C8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708C8" + "name": "func_800D6ACC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6ACC" }, { "type": "extern_variable", - "name": "D_800708D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708D0" + "name": "func_800D6C20", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6C20" }, + { + "type": "unaligned_cast", + "cast_type": "s32", + "suggestion": "Unaligned access to s32 - may need struct packing or alignment fix" + } + ], + "timestamp": "2026-04-22T19:49:04.680354" + }, + { + "function_name": "func_800D4B28", + "file": "src/field/field.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_800696F0", + "name": "D_80074EB0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" + "suggestion": "Unknown type for extern variable D_80074EB0" }, { "type": "extern_variable", - "name": "D_80071E46", + "name": "D_80074EB4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071E46" + "suggestion": "Unknown type for extern variable D_80074EB4" }, { "type": "extern_variable", - "name": "D_800738A4", + "name": "D_80074EB8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738A4" + "suggestion": "Unknown type for extern variable D_80074EB8" }, { "type": "extern_variable", - "name": "D_8009D888", + "name": "D_800E0638", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D888" + "suggestion": "Unknown type for extern variable D_800E0638" }, { "type": "extern_variable", - "name": "D_80069844", + "name": "D_800E42D8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069844" + "suggestion": "Unknown type for extern variable D_800E42D8" }, { "type": "extern_variable", - "name": "D_800494A4", + "name": "D_800E42DA", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800494A4" + "suggestion": "Unknown type for extern variable D_800E42DA" }, { "type": "extern_variable", - "name": "D_80071E4D", + "name": "D_800E42DC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071E4D" + "suggestion": "Unknown type for extern variable D_800E42DC" }, { "type": "extern_variable", - "name": "D_800738BC", + "name": "D_800E42E0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738BC" + "suggestion": "Unknown type for extern variable D_800E42E0" }, { "type": "extern_variable", - "name": "D_800491D0", + "name": "D_800E42E4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800491D0" + "suggestion": "Unknown type for extern variable D_800E42E4" }, { "type": "extern_variable", - "name": "D_8009D85C", + "name": "D_800E42E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85C" + "suggestion": "Unknown type for extern variable D_800E42E8" }, { "type": "extern_variable", - "name": "D_8009D85E", + "name": "D_800E42EA", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85E" + "suggestion": "Unknown type for extern variable D_800E42EA" }, { "type": "extern_variable", - "name": "D_8009D860", + "name": "D_800E42EE", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D860" + "suggestion": "Unknown type for extern variable D_800E42EE" }, { "type": "extern_variable", - "name": "D_8009D862", + "name": "D_800E48E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D862" + "suggestion": "Unknown type for extern variable D_800E48E8" }, { - "type": "extern_variable", - "name": "func_80026090", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80026090" + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" }, { - "type": "extern_variable", - "name": "func_800260DC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800260DC" + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-22T19:49:05.208506" + }, + { + "function_name": "func_80025380", + "file": "src/main/1255C.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_80048540", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_80048540 in header" + }, + { + "type": "extern_function", + "name": "VSync", + "return_type": "unknown", + "parameters": "?", + "suggestion": "Define proper signature for VSync in header" }, { "type": "extern_variable", - "name": "D_80083084", + "name": "D_80069800", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083084" + "suggestion": "Unknown type for extern variable D_80069800" }, { "type": "extern_variable", - "name": "D_80074EB0", + "name": "D_80071E4D", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB0" + "suggestion": "Unknown type for extern variable D_80071E4D" }, { "type": "extern_variable", - "name": "D_80074EB4", + "name": "D_800738BC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB4" + "suggestion": "Unknown type for extern variable D_800738BC" }, { "type": "extern_variable", - "name": "D_80074EDA", + "name": "D_800491D0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EDA" + "suggestion": "Unknown type for extern variable D_800491D0" }, { "type": "extern_variable", - "name": "D_80074F16", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074F16" + "name": "func_80017678", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80017678" }, { "type": "extern_variable", - "name": "D_80071C32", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071C32" + "name": "func_8001786C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001786C" }, { "type": "extern_variable", - "name": "D_80071E64", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071E64" + "name": "func_80020058", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80020058" }, { "type": "extern_variable", - "name": "D_800722D6", + "name": "D_8009D85C", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800722D6" + "suggestion": "Unknown type for extern variable D_8009D85C" }, { "type": "extern_variable", - "name": "D_800738CA", + "name": "D_8009D85E", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738CA" - }, + "suggestion": "Unknown type for extern variable D_8009D85E" + } + ], + "timestamp": "2026-04-22T19:49:05.220188" + }, + { + "function_name": "func_800182FC", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_8009D894", + "name": "D_80075D24", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" + "suggestion": "Unknown type for extern variable D_80075D24" }, { "type": "extern_variable", - "name": "D_8009D88A", + "name": "D_80075D28", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D88A" + "suggestion": "Unknown type for extern variable D_80075D28" }, { "type": "extern_variable", - "name": "D_8009D88C", + "name": "D_80075DE8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D88C" + "suggestion": "Unknown type for extern variable D_80075DE8" }, { "type": "extern_variable", - "name": "D_8009D88E", + "name": "D_8009D7E4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D88E" + "suggestion": "Unknown type for extern variable D_8009D7E4" }, { "type": "extern_variable", - "name": "func_80018630", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80018630" + "name": "D_8009D7E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E8" }, { "type": "extern_variable", - "name": "func_80018934", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80018934" + "name": "D_8009D7EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7EC" }, { "type": "extern_variable", - "name": "D_800730DF", + "name": "D_8009D7ED", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730DF" - } - ], - "timestamp": "2026-04-18T12:35:21.467747" - }, - { - "function_name": "func_8002B3B4", - "file": "src/main/akao.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "SpuSetVoiceARAttr", - "return_type": "unknown", - "parameters": "s32, u16, s32", - "suggestion": "Define proper signature for SpuSetVoiceARAttr in header" + "suggestion": "Unknown type for extern variable D_8009D7ED" }, { - "type": "extern_function", - "name": "SpuSetVoiceDR", - "return_type": "unknown", - "parameters": "s32, u16", - "suggestion": "Define proper signature for SpuSetVoiceDR in header" + "type": "extern_variable", + "name": "D_80069508", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069508" }, { - "type": "extern_function", - "name": "SpuSetVoiceLoopStartAddr", - "return_type": "unknown", - "parameters": "s32, s32", - "suggestion": "Define proper signature for SpuSetVoiceLoopStartAddr in header" + "type": "extern_variable", + "name": "D_800708C8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C8" }, { - "type": "extern_function", - "name": "SpuSetVoicePitch", - "return_type": "unknown", - "parameters": "u16", - "suggestion": "Define proper signature for SpuSetVoicePitch in header" + "type": "extern_variable", + "name": "D_800708D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708D0" }, { - "type": "extern_function", - "name": "SpuSetVoiceRRAttr", - "return_type": "unknown", - "parameters": "s32, u16, s32", - "suggestion": "Define proper signature for SpuSetVoiceRRAttr in header" + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" }, { - "type": "extern_function", - "name": "SpuSetVoiceSL", - "return_type": "unknown", - "parameters": "s32, u16", - "suggestion": "Define proper signature for SpuSetVoiceSL in header" - }, + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T19:49:05.328139" + }, + { + "function_name": "func_800D83A8", + "file": "src/field/field.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { - "type": "extern_function", - "name": "SpuSetVoiceSRAttr", - "return_type": "unknown", - "parameters": "s32, u16, s32", - "suggestion": "Define proper signature for SpuSetVoiceSRAttr in header" + "type": "extern_variable", + "name": "D_80074EB0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB0" }, { - "type": "extern_function", - "name": "SpuSetVoiceStartAddr", - "return_type": "unknown", - "parameters": "s32, s32", - "suggestion": "Define proper signature for SpuSetVoiceStartAddr in header" + "type": "extern_variable", + "name": "D_80074EB4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB4" }, { - "type": "extern_function", - "name": "SpuSetVoiceVolume", - "return_type": "unknown", - "parameters": "s32, s16, s16", - "suggestion": "Define proper signature for SpuSetVoiceVolume in header" + "type": "extern_variable", + "name": "D_80074EB8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB8" }, { "type": "extern_variable", - "name": "D_80049C40", + "name": "D_800E0638", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049C40" + "suggestion": "Unknown type for extern variable D_800E0638" }, { "type": "extern_variable", - "name": "func_8002BD04", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002BD04" + "name": "D_800E42D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42D8" }, { "type": "extern_variable", - "name": "func_8002BFCC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002BFCC" + "name": "D_800E42DA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DA" }, { "type": "extern_variable", - "name": "func_8002C004", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002C004" + "name": "D_800E42DC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DC" }, { "type": "extern_variable", - "name": "func_8002C2CC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002C2CC" + "name": "D_800E42E0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E0" }, { "type": "extern_variable", - "name": "func_8002C300", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002C300" + "name": "D_800E42E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E4" }, { "type": "extern_variable", - "name": "D_8007EBE4", + "name": "D_800E42E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007EBE4" + "suggestion": "Unknown type for extern variable D_800E42E8" }, { "type": "extern_variable", - "name": "func_80030038", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80030038" + "name": "D_800E42EA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EA" }, { "type": "extern_variable", - "name": "D_80081DC8", + "name": "D_800E42EE", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80081DC8" + "suggestion": "Unknown type for extern variable D_800E42EE" }, { "type": "extern_variable", - "name": "D_800499A8", + "name": "D_800E48E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800499A8" + "suggestion": "Unknown type for extern variable D_800E48E8" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-22T19:49:05.823841" + }, + { + "function_name": "func_800A21CC", + "file": "src/ending/ending.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "InitGeom", + "return_type": "unknown", + "parameters": "", + "suggestion": "Define proper signature for InitGeom in header" + }, + { + "type": "extern_function", + "name": "PadInit", + "return_type": "unknown", + "parameters": "?", + "suggestion": "Define proper signature for PadInit in header" + }, + { + "type": "extern_function", + "name": "ResetCallback", + "return_type": "unknown", + "parameters": "", + "suggestion": "Define proper signature for ResetCallback in header" + }, + { + "type": "extern_function", + "name": "ResetGraph", + "return_type": "unknown", + "parameters": "?", + "suggestion": "Define proper signature for ResetGraph in header" + }, + { + "type": "extern_function", + "name": "StopCallback", + "return_type": "unknown", + "parameters": "", + "suggestion": "Define proper signature for StopCallback in header" }, { "type": "extern_variable", - "name": "D_80096704", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80096704" + "name": "func_80033B70", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80033B70" }, { "type": "extern_variable", - "name": "func_800293D0", + "name": "func_80036298", "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800293D0" + "suggestion": "Unknown type for extern variable func_80036298" } ], - "timestamp": "2026-04-18T12:35:21.795852" + "timestamp": "2026-04-22T19:49:06.980643" }, { - "function_name": "func_800AA5E4", + "function_name": "func_800D8420", "file": "src/field/field.c", "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", "missing_items": [ @@ -1590,27828 +1738,3806 @@ }, { "type": "extern_variable", - "name": "func_800A48B8", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800A48B8" + "name": "D_800E0638", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0638" }, { "type": "extern_variable", - "name": "D_80074ED9", + "name": "D_800E42D8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074ED9" + "suggestion": "Unknown type for extern variable D_800E42D8" }, { "type": "extern_variable", - "name": "D_800DF120", + "name": "D_800E42DA", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DF120" + "suggestion": "Unknown type for extern variable D_800E42DA" }, { "type": "extern_variable", - "name": "D_800DF122", + "name": "D_800E42DC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DF122" + "suggestion": "Unknown type for extern variable D_800E42DC" }, { "type": "extern_variable", - "name": "D_800DEF88", + "name": "D_800E42E0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DEF88" + "suggestion": "Unknown type for extern variable D_800E42E0" }, { "type": "extern_variable", - "name": "func_800354CC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800354CC" + "name": "D_800E42E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E4" }, { "type": "extern_variable", - "name": "func_80035658", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80035658" + "name": "D_800E42E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E8" }, { "type": "extern_variable", - "name": "D_800E0638", + "name": "D_800E42EA", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0638" + "suggestion": "Unknown type for extern variable D_800E42EA" }, { "type": "extern_variable", - "name": "D_800E48F4", + "name": "D_800E42EE", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48F4" + "suggestion": "Unknown type for extern variable D_800E42EE" }, { "type": "extern_variable", - "name": "D_800E48FC", + "name": "D_800E48E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48FC" + "suggestion": "Unknown type for extern variable D_800E48E8" }, { - "type": "extern_variable", - "name": "D_800E48FE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48FE" + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-22T19:49:07.197448" + }, + { + "function_name": "func_800E1A2C", + "file": "src/battle/battle3.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_800E4900", + "name": "D_800FB064", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4900" + "suggestion": "Unknown type for extern variable D_800FB064" }, { "type": "extern_variable", - "name": "D_800E4901", + "name": "D_800FF060", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4901" + "suggestion": "Unknown type for extern variable D_800FF060" }, { "type": "extern_variable", - "name": "D_800E4904", + "name": "D_800FF064", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4904" + "suggestion": "Unknown type for extern variable D_800FF064" }, { "type": "extern_variable", - "name": "D_800E4906", + "name": "D_800FF068", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4906" + "suggestion": "Unknown type for extern variable D_800FF068" }, { "type": "extern_variable", - "name": "D_800E4908", + "name": "D_800FF06C", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4908" + "suggestion": "Unknown type for extern variable D_800FF06C" }, { "type": "extern_variable", - "name": "D_800E4909", + "name": "D_800FF070", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4909" + "suggestion": "Unknown type for extern variable D_800FF070" }, { "type": "extern_variable", - "name": "D_800E490C", + "name": "D_800FF074", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E490C" + "suggestion": "Unknown type for extern variable D_800FF074" }, { "type": "extern_variable", - "name": "D_800E490E", + "name": "D_800FF094", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E490E" + "suggestion": "Unknown type for extern variable D_800FF094" }, { "type": "extern_variable", - "name": "D_800E4910", + "name": "D_800FF098", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4910" + "suggestion": "Unknown type for extern variable D_800FF098" }, { "type": "extern_variable", - "name": "D_800E4911", + "name": "D_800FF0D8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4911" + "suggestion": "Unknown type for extern variable D_800FF0D8" }, { "type": "extern_variable", - "name": "D_800E4914", + "name": "D_800FF0DC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4914" + "suggestion": "Unknown type for extern variable D_800FF0DC" }, { "type": "extern_variable", - "name": "D_800E4916", + "name": "D_800FF0E0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4916" + "suggestion": "Unknown type for extern variable D_800FF0E0" }, { "type": "extern_variable", - "name": "D_800E4918", + "name": "D_80103154", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4918" + "suggestion": "Unknown type for extern variable D_80103154" }, { "type": "extern_variable", - "name": "D_800E4919", + "name": "D_80103158", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4919" + "suggestion": "Unknown type for extern variable D_80103158" }, { "type": "extern_variable", - "name": "D_8007EB98", + "name": "D_80103160", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007EB98" + "suggestion": "Unknown type for extern variable D_80103160" }, { "type": "extern_variable", - "name": "func_8001786C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8001786C" + "name": "D_80103188", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80103188" }, { "type": "extern_variable", - "name": "func_80020058", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80020058" + "name": "D_801031CC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_801031CC" }, { "type": "extern_variable", - "name": "D_800491D0", + "name": "D_801031D4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800491D0" + "suggestion": "Unknown type for extern variable D_801031D4" }, { "type": "extern_variable", - "name": "D_8008328D", + "name": "D_800492FC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328D" + "suggestion": "Unknown type for extern variable D_800492FC" }, { "type": "extern_variable", - "name": "D_800832A2", + "name": "D_800F55D8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800832A2" + "suggestion": "Unknown type for extern variable D_800F55D8" }, { "type": "extern_variable", - "name": "D_8008326C", + "name": "D_800F1E58", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008326C" + "suggestion": "Unknown type for extern variable D_800F1E58" }, { "type": "extern_variable", - "name": "D_80083286", + "name": "D_800F1E5A", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083286" + "suggestion": "Unknown type for extern variable D_800F1E5A" }, { "type": "extern_variable", - "name": "D_80083278", + "name": "D_800F1E5C", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083278" + "suggestion": "Unknown type for extern variable D_800F1E5C" }, { "type": "extern_variable", - "name": "D_8008327A", + "name": "D_800F1E5E", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327A" + "suggestion": "Unknown type for extern variable D_800F1E5E" }, { "type": "extern_variable", - "name": "D_8008327E", + "name": "D_800F1E60", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327E" + "suggestion": "Unknown type for extern variable D_800F1E60" }, { "type": "extern_variable", - "name": "D_80075E24", + "name": "D_800F1E62", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075E24" + "suggestion": "Unknown type for extern variable D_800F1E62" }, { "type": "extern_variable", - "name": "D_80075E25", + "name": "D_800F33B0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075E25" + "suggestion": "Unknown type for extern variable D_800F33B0" }, { "type": "extern_variable", - "name": "D_800E4214", + "name": "D_80163778", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4214" + "suggestion": "Unknown type for extern variable D_80163778" }, { "type": "extern_variable", - "name": "D_800E4280", + "name": "D_80163B70", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4280" + "suggestion": "Unknown type for extern variable D_80163B70" }, { - "type": "extern_variable", - "name": "D_800E4D48", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4D48" + "type": "unknown_pointer", + "name": "var_v0", + "suggestion": "m2c could not determine type of pointer var_v0" }, { - "type": "extern_variable", - "name": "D_800E0748", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0748" + "type": "unknown_pointer", + "name": "var_v0_2", + "suggestion": "m2c could not determine type of pointer var_v0_2" }, { - "type": "extern_variable", - "name": "D_800E074A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074A" + "type": "unknown_pointer", + "name": "var_v0_3", + "suggestion": "m2c could not determine type of pointer var_v0_3" }, { - "type": "extern_variable", - "name": "D_800E074C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074C" + "type": "unknown_pointer", + "name": "var_v0_4", + "suggestion": "m2c could not determine type of pointer var_v0_4" }, + { + "type": "unknown_pointer", + "name": "var_v0_5", + "suggestion": "m2c could not determine type of pointer var_v0_5" + }, + { + "type": "unknown_pointer", + "name": "var_v0_6", + "suggestion": "m2c could not determine type of pointer var_v0_6" + }, + { + "type": "unknown_pointer", + "name": "var_v0", + "suggestion": "m2c could not determine type of pointer var_v0" + } + ], + "timestamp": "2026-04-22T19:49:07.405004" + }, + { + "function_name": "func_8001B8A8", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_800E08C0", + "name": "D_80075D24", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08C0" + "suggestion": "Unknown type for extern variable D_80075D24" }, { "type": "extern_variable", - "name": "D_800E074E", + "name": "D_80075D28", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074E" + "suggestion": "Unknown type for extern variable D_80075D28" }, { "type": "extern_variable", - "name": "D_800E0754", + "name": "D_80075DE8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0754" + "suggestion": "Unknown type for extern variable D_80075DE8" }, { "type": "extern_variable", - "name": "D_800E0758", + "name": "D_8009D7E4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0758" + "suggestion": "Unknown type for extern variable D_8009D7E4" }, { "type": "extern_variable", - "name": "D_800E08A8", + "name": "D_8009D7E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08A8" + "suggestion": "Unknown type for extern variable D_8009D7E8" }, { "type": "extern_variable", - "name": "D_800E0756", + "name": "D_8009D7EC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0756" + "suggestion": "Unknown type for extern variable D_8009D7EC" }, { "type": "extern_variable", - "name": "D_800E0750", + "name": "D_8009D7ED", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0750" + "suggestion": "Unknown type for extern variable D_8009D7ED" }, { "type": "extern_variable", - "name": "D_800E0751", + "name": "D_80069508", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0751" + "suggestion": "Unknown type for extern variable D_80069508" }, { "type": "extern_variable", - "name": "D_800E0752", + "name": "D_800708C8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0752" + "suggestion": "Unknown type for extern variable D_800708C8" }, { "type": "extern_variable", - "name": "func_800D5A60", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D5A60" + "name": "D_800708D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708D0" }, { - "type": "extern_variable", - "name": "func_800D5C9C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D5C9C" + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" }, { - "type": "extern_variable", - "name": "func_800D6D44", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6D44" + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T19:49:07.497349" + }, + { + "function_name": "func_800A1E20", + "file": "src/ending/ending.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "InitGeom", + "return_type": "unknown", + "parameters": "", + "suggestion": "Define proper signature for InitGeom in header" }, { - "type": "extern_variable", - "name": "func_800D6E0C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6E0C" + "type": "extern_function", + "name": "PadInit", + "return_type": "unknown", + "parameters": "?", + "suggestion": "Define proper signature for PadInit in header" }, { - "type": "extern_variable", - "name": "func_800D6F6C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6F6C" + "type": "extern_function", + "name": "ResetCallback", + "return_type": "unknown", + "parameters": "", + "suggestion": "Define proper signature for ResetCallback in header" }, { - "type": "extern_variable", - "name": "D_80083284", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083284" + "type": "extern_function", + "name": "ResetGraph", + "return_type": "unknown", + "parameters": "?", + "suggestion": "Define proper signature for ResetGraph in header" }, { - "type": "extern_variable", - "name": "D_8008328A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328A" + "type": "extern_function", + "name": "StopCallback", + "return_type": "unknown", + "parameters": "", + "suggestion": "Define proper signature for StopCallback in header" }, { "type": "extern_variable", - "name": "D_8008328E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328E" + "name": "func_80033B70", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80033B70" }, { "type": "extern_variable", - "name": "D_80083298", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083298" - }, + "name": "func_80036298", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80036298" + } + ], + "timestamp": "2026-04-22T19:49:07.930788" + }, + { + "function_name": "func_800A635C", + "file": "src/field/field.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_8008329A", + "name": "D_80074EB0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329A" + "suggestion": "Unknown type for extern variable D_80074EB0" }, { "type": "extern_variable", - "name": "D_800E424C", + "name": "D_80074EB4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E424C" + "suggestion": "Unknown type for extern variable D_80074EB4" }, { "type": "extern_variable", - "name": "D_801142CC", + "name": "D_80074EB8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801142CC" + "suggestion": "Unknown type for extern variable D_80074EB8" }, { "type": "extern_variable", - "name": "D_8009AD30", + "name": "D_800E0638", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009AD30" + "suggestion": "Unknown type for extern variable D_800E0638" }, { "type": "extern_variable", - "name": "func_800C2E00", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C2E00" + "name": "D_800E42D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42D8" }, { "type": "extern_variable", - "name": "func_800DA444", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800DA444" + "name": "D_800E42DA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DA" }, { "type": "extern_variable", - "name": "func_800C8634", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C8634" + "name": "D_800E42DC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DC" }, { "type": "extern_variable", - "name": "func_800CDC14", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800CDC14" + "name": "D_800E42E0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E0" }, { "type": "extern_variable", - "name": "D_80095DE0", + "name": "D_800E42E4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80095DE0" + "suggestion": "Unknown type for extern variable D_800E42E4" }, { "type": "extern_variable", - "name": "func_80025B10", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80025B10" + "name": "D_800E42E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E8" }, { "type": "extern_variable", - "name": "func_800BEAD4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800BEAD4" + "name": "D_800E42EA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42EA" }, { "type": "extern_variable", - "name": "D_800E0208", + "name": "D_800E42EE", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0208" + "suggestion": "Unknown type for extern variable D_800E42EE" }, { "type": "extern_variable", - "name": "D_800756E8", + "name": "D_800E48E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800756E8" + "suggestion": "Unknown type for extern variable D_800E48E8" }, { - "type": "extern_variable", - "name": "D_80083291", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083291" + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-22T19:49:08.171220" + }, + { + "function_name": "func_80019DA0", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_80083294", + "name": "D_80075D24", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083294" + "suggestion": "Unknown type for extern variable D_80075D24" }, { "type": "extern_variable", - "name": "D_8007078C", + "name": "D_80075D28", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007078C" + "suggestion": "Unknown type for extern variable D_80075D28" }, { "type": "extern_variable", - "name": "D_8007E7B8", + "name": "D_80075DE8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B8" + "suggestion": "Unknown type for extern variable D_80075DE8" }, { "type": "extern_variable", - "name": "D_8007E7BA", + "name": "D_8009D7E4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7BA" + "suggestion": "Unknown type for extern variable D_8009D7E4" }, { "type": "extern_variable", - "name": "D_8007E7AC", + "name": "D_8009D7E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7AC" + "suggestion": "Unknown type for extern variable D_8009D7E8" }, { "type": "extern_variable", - "name": "D_8007E7AE", + "name": "D_8009D7EC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7AE" + "suggestion": "Unknown type for extern variable D_8009D7EC" }, { "type": "extern_variable", - "name": "D_8007E7B0", + "name": "D_8009D7ED", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B0" + "suggestion": "Unknown type for extern variable D_8009D7ED" }, { "type": "extern_variable", - "name": "D_8007E7B2", + "name": "D_80069508", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B2" + "suggestion": "Unknown type for extern variable D_80069508" }, { "type": "extern_variable", - "name": "D_8007E7B4", + "name": "D_800708C8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B4" + "suggestion": "Unknown type for extern variable D_800708C8" }, { "type": "extern_variable", - "name": "D_8007E7B6", + "name": "D_800708D0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B6" + "suggestion": "Unknown type for extern variable D_800708D0" }, { - "type": "extern_variable", - "name": "D_80082248", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082248" + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" }, { - "type": "extern_variable", - "name": "D_8008325C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008325C" + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T19:49:08.368108" + }, + { + "function_name": "func_80025800", + "file": "src/main/1255C.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_80048540", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_80048540 in header" }, { - "type": "extern_variable", - "name": "D_8009D828", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D828" + "type": "extern_function", + "name": "VSync", + "return_type": "unknown", + "parameters": "?", + "suggestion": "Define proper signature for VSync in header" }, { "type": "extern_variable", - "name": "D_800A0854", + "name": "D_80069800", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A0854" + "suggestion": "Unknown type for extern variable D_80069800" }, { "type": "extern_variable", - "name": "D_800A0F38", + "name": "D_80071E4D", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A0F38" + "suggestion": "Unknown type for extern variable D_80071E4D" }, { "type": "extern_variable", - "name": "D_8007E7C2", + "name": "D_800738BC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7C2" + "suggestion": "Unknown type for extern variable D_800738BC" }, { "type": "extern_variable", - "name": "D_80049209", + "name": "D_800491D0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049209" + "suggestion": "Unknown type for extern variable D_800491D0" }, { "type": "extern_variable", - "name": "D_8004920A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8004920A" + "name": "func_80017678", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80017678" }, { "type": "extern_variable", - "name": "func_80044064", + "name": "func_8001786C", "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80044064" + "suggestion": "Unknown type for extern variable func_8001786C" }, { "type": "extern_variable", - "name": "func_800C5B38", + "name": "func_80020058", "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C5B38" + "suggestion": "Unknown type for extern variable func_80020058" }, { "type": "extern_variable", - "name": "D_80081D90", + "name": "D_8009D85C", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80081D90" + "suggestion": "Unknown type for extern variable D_8009D85C" }, { "type": "extern_variable", - "name": "D_80083288", + "name": "D_8009D85E", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083288" - }, + "suggestion": "Unknown type for extern variable D_8009D85E" + } + ], + "timestamp": "2026-04-22T19:49:09.466345" + }, + { + "function_name": "func_800D84CC", + "file": "src/field/field.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_800E4944", + "name": "D_80074EB0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4944" + "suggestion": "Unknown type for extern variable D_80074EB0" }, { "type": "extern_variable", - "name": "D_80114480", + "name": "D_80074EB4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80114480" + "suggestion": "Unknown type for extern variable D_80074EB4" }, { "type": "extern_variable", - "name": "D_800E42A8", + "name": "D_80074EB8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42A8" + "suggestion": "Unknown type for extern variable D_80074EB8" }, { "type": "extern_variable", - "name": "D_8008327C", + "name": "D_800E0638", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327C" + "suggestion": "Unknown type for extern variable D_800E0638" }, { "type": "extern_variable", - "name": "D_80083280", + "name": "D_800E42D8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083280" + "suggestion": "Unknown type for extern variable D_800E42D8" }, { "type": "extern_variable", - "name": "D_80083282", + "name": "D_800E42DA", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083282" + "suggestion": "Unknown type for extern variable D_800E42DA" }, { "type": "extern_variable", - "name": "D_8008328F", + "name": "D_800E42DC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328F" + "suggestion": "Unknown type for extern variable D_800E42DC" }, { "type": "extern_variable", - "name": "D_80083290", + "name": "D_800E42E0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083290" + "suggestion": "Unknown type for extern variable D_800E42E0" }, { "type": "extern_variable", - "name": "D_8008329C", + "name": "D_800E42E4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329C" + "suggestion": "Unknown type for extern variable D_800E42E4" }, { "type": "extern_variable", - "name": "D_8008329E", + "name": "D_800E42E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329E" + "suggestion": "Unknown type for extern variable D_800E42E8" }, { "type": "extern_variable", - "name": "D_80071748", + "name": "D_800E42EA", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071748" + "suggestion": "Unknown type for extern variable D_800E42EA" }, { "type": "extern_variable", - "name": "D_800833F8", + "name": "D_800E42EE", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800833F8" + "suggestion": "Unknown type for extern variable D_800E42EE" }, { "type": "extern_variable", - "name": "D_8009A1C4", + "name": "D_800E48E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009A1C4" + "suggestion": "Unknown type for extern variable D_800E48E8" }, { - "type": "extern_variable", - "name": "D_800A06B0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A06B0" + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" }, { - "type": "extern_variable", - "name": "D_80071A88", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071A88" - }, + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-22T19:49:09.493200" + }, + { + "function_name": "func_80011AEC", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_801142D4", + "name": "D_80075D24", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801142D4" + "suggestion": "Unknown type for extern variable D_80075D24" }, { "type": "extern_variable", - "name": "D_800E42D8", + "name": "D_80075D28", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42D8" + "suggestion": "Unknown type for extern variable D_80075D28" }, { "type": "extern_variable", - "name": "D_800E42DA", + "name": "D_80075DE8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DA" + "suggestion": "Unknown type for extern variable D_80075DE8" }, { "type": "extern_variable", - "name": "D_800E42DC", + "name": "D_8009D7E4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DC" + "suggestion": "Unknown type for extern variable D_8009D7E4" }, { "type": "extern_variable", - "name": "D_800E42E0", + "name": "D_8009D7E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E0" + "suggestion": "Unknown type for extern variable D_8009D7E8" }, { "type": "extern_variable", - "name": "D_800E42E4", + "name": "D_8009D7EC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E4" + "suggestion": "Unknown type for extern variable D_8009D7EC" }, { "type": "extern_variable", - "name": "D_800E42E8", + "name": "D_8009D7ED", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E8" + "suggestion": "Unknown type for extern variable D_8009D7ED" }, { "type": "extern_variable", - "name": "D_800E42EA", + "name": "D_80069508", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EA" + "suggestion": "Unknown type for extern variable D_80069508" }, { "type": "extern_variable", - "name": "D_800E42EE", + "name": "D_800708C8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EE" + "suggestion": "Unknown type for extern variable D_800708C8" }, { "type": "extern_variable", - "name": "D_800E48E8", + "name": "D_800708D0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48E8" + "suggestion": "Unknown type for extern variable D_800708D0" }, { "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" }, { "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" } ], - "timestamp": "2026-04-18T12:35:22.692092" + "timestamp": "2026-04-22T19:49:09.657221" }, { - "function_name": "func_8002B7E0", - "file": "src/main/akao.c", + "function_name": "func_80025988", + "file": "src/main/1255C.c", "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", "missing_items": [ { "type": "extern_function", - "name": "SpuSetVoiceARAttr", - "return_type": "unknown", - "parameters": "s32, u16, s32", - "suggestion": "Define proper signature for SpuSetVoiceARAttr in header" + "name": "func_80048540", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_80048540 in header" }, { "type": "extern_function", - "name": "SpuSetVoiceDR", + "name": "VSync", "return_type": "unknown", - "parameters": "s32, u16", - "suggestion": "Define proper signature for SpuSetVoiceDR in header" + "parameters": "?", + "suggestion": "Define proper signature for VSync in header" }, { - "type": "extern_function", - "name": "SpuSetVoiceLoopStartAddr", - "return_type": "unknown", - "parameters": "s32, s32", - "suggestion": "Define proper signature for SpuSetVoiceLoopStartAddr in header" + "type": "extern_variable", + "name": "D_80069800", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069800" }, { - "type": "extern_function", - "name": "SpuSetVoicePitch", - "return_type": "unknown", - "parameters": "u16", - "suggestion": "Define proper signature for SpuSetVoicePitch in header" + "type": "extern_variable", + "name": "D_80071E4D", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80071E4D" }, { - "type": "extern_function", - "name": "SpuSetVoiceRRAttr", - "return_type": "unknown", - "parameters": "s32, u16, s32", - "suggestion": "Define proper signature for SpuSetVoiceRRAttr in header" + "type": "extern_variable", + "name": "D_800738BC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738BC" }, { - "type": "extern_function", - "name": "SpuSetVoiceSL", - "return_type": "unknown", - "parameters": "s32, u16", - "suggestion": "Define proper signature for SpuSetVoiceSL in header" + "type": "extern_variable", + "name": "D_800491D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800491D0" }, { - "type": "extern_function", - "name": "SpuSetVoiceSRAttr", - "return_type": "unknown", - "parameters": "s32, u16, s32", - "suggestion": "Define proper signature for SpuSetVoiceSRAttr in header" + "type": "extern_variable", + "name": "func_80017678", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80017678" }, { - "type": "extern_function", - "name": "SpuSetVoiceStartAddr", - "return_type": "unknown", - "parameters": "s32, s32", - "suggestion": "Define proper signature for SpuSetVoiceStartAddr in header" + "type": "extern_variable", + "name": "func_8001786C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001786C" }, { - "type": "extern_function", - "name": "SpuSetVoiceVolume", - "return_type": "unknown", - "parameters": "s32, s16, s16", - "suggestion": "Define proper signature for SpuSetVoiceVolume in header" + "type": "extern_variable", + "name": "func_80020058", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80020058" }, { "type": "extern_variable", - "name": "D_80049C40", + "name": "D_8009D85C", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049C40" + "suggestion": "Unknown type for extern variable D_8009D85C" }, { "type": "extern_variable", - "name": "func_8002BD04", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002BD04" - }, + "name": "D_8009D85E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85E" + } + ], + "timestamp": "2026-04-22T19:49:10.231507" + }, + { + "function_name": "func_8001FAF8", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "func_8002BFCC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002BFCC" + "name": "D_80075D24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D24" }, { "type": "extern_variable", - "name": "func_8002C004", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002C004" + "name": "D_80075D28", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D28" }, { "type": "extern_variable", - "name": "func_8002C2CC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002C2CC" + "name": "D_80075DE8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075DE8" }, { "type": "extern_variable", - "name": "func_8002C300", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002C300" + "name": "D_8009D7E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E4" }, { "type": "extern_variable", - "name": "D_8007EBE4", + "name": "D_8009D7E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007EBE4" + "suggestion": "Unknown type for extern variable D_8009D7E8" }, { "type": "extern_variable", - "name": "func_80030038", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80030038" + "name": "D_8009D7EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7EC" }, { "type": "extern_variable", - "name": "D_80081DC8", + "name": "D_8009D7ED", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80081DC8" + "suggestion": "Unknown type for extern variable D_8009D7ED" }, { "type": "extern_variable", - "name": "D_800499A8", + "name": "D_80069508", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800499A8" + "suggestion": "Unknown type for extern variable D_80069508" }, { "type": "extern_variable", - "name": "D_80096704", + "name": "D_800708C8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80096704" + "suggestion": "Unknown type for extern variable D_800708C8" }, { "type": "extern_variable", - "name": "func_800293D0", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800293D0" + "name": "D_800708D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708D0" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" } ], - "timestamp": "2026-04-18T12:35:22.926140" + "timestamp": "2026-04-22T19:49:10.453647" }, { - "function_name": "func_800B5E64", - "file": "src/battle/battle1.c", + "function_name": "func_8002382C", + "file": "src/main/1255C.c", "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", "missing_items": [ { - "type": "extern_variable", - "name": "func_800B5E64", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800B5E64" + "type": "extern_function", + "name": "func_80048540", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_80048540 in header" }, { - "type": "extern_variable", - "name": "D_800F8384", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F8384" + "type": "extern_function", + "name": "VSync", + "return_type": "unknown", + "parameters": "?", + "suggestion": "Define proper signature for VSync in header" }, { "type": "extern_variable", - "name": "D_80103200", + "name": "D_80069800", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80103200" + "suggestion": "Unknown type for extern variable D_80069800" }, { "type": "extern_variable", - "name": "D_800F7E10", + "name": "D_80071E4D", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7E10" + "suggestion": "Unknown type for extern variable D_80071E4D" }, { "type": "extern_variable", - "name": "D_800F8180", + "name": "D_800738BC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F8180" + "suggestion": "Unknown type for extern variable D_800738BC" }, { "type": "extern_variable", - "name": "D_800E8E88", + "name": "D_800491D0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E8E88" + "suggestion": "Unknown type for extern variable D_800491D0" }, { "type": "extern_variable", - "name": "D_800E8F94", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E8F94" + "name": "func_80017678", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80017678" }, { "type": "extern_variable", - "name": "func_800B7DB4", + "name": "func_8001786C", "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800B7DB4" + "suggestion": "Unknown type for extern variable func_8001786C" }, { "type": "extern_variable", - "name": "D_800FA9D1", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FA9D1" + "name": "func_80020058", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80020058" }, { "type": "extern_variable", - "name": "D_80163CC0", + "name": "D_8009D85C", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163CC0" + "suggestion": "Unknown type for extern variable D_8009D85C" }, { "type": "extern_variable", - "name": "D_80163CC2", + "name": "D_8009D85E", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163CC2" - }, + "suggestion": "Unknown type for extern variable D_8009D85E" + } + ], + "timestamp": "2026-04-22T19:49:10.938976" + }, + { + "function_name": "func_8001FE6C", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_80163CC4", + "name": "D_80075D24", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163CC4" + "suggestion": "Unknown type for extern variable D_80075D24" }, { "type": "extern_variable", - "name": "D_800F99EC", + "name": "D_80075D28", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F99EC" + "suggestion": "Unknown type for extern variable D_80075D28" }, { "type": "extern_variable", - "name": "D_800F99EE", + "name": "D_80075DE8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F99EE" + "suggestion": "Unknown type for extern variable D_80075DE8" }, { "type": "extern_variable", - "name": "D_800F99F0", + "name": "D_8009D7E4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F99F0" + "suggestion": "Unknown type for extern variable D_8009D7E4" }, { "type": "extern_variable", - "name": "D_800F99F2", + "name": "D_8009D7E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F99F2" + "suggestion": "Unknown type for extern variable D_8009D7E8" }, { "type": "extern_variable", - "name": "D_800F99F4", + "name": "D_8009D7EC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F99F4" + "suggestion": "Unknown type for extern variable D_8009D7EC" }, { "type": "extern_variable", - "name": "D_800F99F6", + "name": "D_8009D7ED", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F99F6" + "suggestion": "Unknown type for extern variable D_8009D7ED" }, { "type": "extern_variable", - "name": "D_800FA9D8", + "name": "D_80069508", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FA9D8" + "suggestion": "Unknown type for extern variable D_80069508" }, { "type": "extern_variable", - "name": "D_801517F0", + "name": "D_800708C8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801517F0" + "suggestion": "Unknown type for extern variable D_800708C8" }, { "type": "extern_variable", - "name": "D_800F7E08", + "name": "D_800708D0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7E08" + "suggestion": "Unknown type for extern variable D_800708D0" }, { - "type": "extern_variable", - "name": "D_801516FE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801516FE" + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T19:49:11.116506" + }, + { + "function_name": "func_80018220", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_80151700", + "name": "D_80075D24", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151700" + "suggestion": "Unknown type for extern variable D_80075D24" }, { "type": "extern_variable", - "name": "D_80151702", + "name": "D_80075D28", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151702" + "suggestion": "Unknown type for extern variable D_80075D28" }, { "type": "extern_variable", - "name": "D_800F8178", + "name": "D_80075DE8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F8178" + "suggestion": "Unknown type for extern variable D_80075DE8" }, { "type": "extern_variable", - "name": "D_800F8184", + "name": "D_8009D7E4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F8184" + "suggestion": "Unknown type for extern variable D_8009D7E4" }, { "type": "extern_variable", - "name": "D_80163B44", + "name": "D_8009D7E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163B44" + "suggestion": "Unknown type for extern variable D_8009D7E8" }, { "type": "extern_variable", - "name": "D_801590E4", + "name": "D_8009D7EC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801590E4" + "suggestion": "Unknown type for extern variable D_8009D7EC" }, { "type": "extern_variable", - "name": "D_801590E8", + "name": "D_8009D7ED", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801590E8" + "suggestion": "Unknown type for extern variable D_8009D7ED" }, { "type": "extern_variable", - "name": "D_800F7ED8", + "name": "D_80069508", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7ED8" + "suggestion": "Unknown type for extern variable D_80069508" }, { "type": "extern_variable", - "name": "D_800F7EDA", + "name": "D_800708C8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EDA" + "suggestion": "Unknown type for extern variable D_800708C8" }, { "type": "extern_variable", - "name": "D_80151844", + "name": "D_800708D0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151844" + "suggestion": "Unknown type for extern variable D_800708D0" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T19:49:11.707947" + }, + { + "function_name": "func_800BB1B4", + "file": "src/field/field.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_80151846", + "name": "D_80074EB0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151846" + "suggestion": "Unknown type for extern variable D_80074EB0" }, { "type": "extern_variable", - "name": "D_80151848", + "name": "D_80074EB4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151848" + "suggestion": "Unknown type for extern variable D_80074EB4" }, { "type": "extern_variable", - "name": "D_801518A4", + "name": "D_80074EB8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801518A4" + "suggestion": "Unknown type for extern variable D_80074EB8" }, { "type": "extern_variable", - "name": "D_801518A6", + "name": "D_800E0638", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801518A6" + "suggestion": "Unknown type for extern variable D_800E0638" }, { "type": "extern_variable", - "name": "D_801518A8", + "name": "D_800E42D8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801518A8" + "suggestion": "Unknown type for extern variable D_800E42D8" }, { "type": "extern_variable", - "name": "D_800F7EF0", + "name": "D_800E42DA", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EF0" + "suggestion": "Unknown type for extern variable D_800E42DA" }, { "type": "extern_variable", - "name": "D_800F7EDC", + "name": "D_800E42DC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EDC" + "suggestion": "Unknown type for extern variable D_800E42DC" }, { "type": "extern_variable", - "name": "D_800F7EDE", + "name": "D_800E42E0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EDE" + "suggestion": "Unknown type for extern variable D_800E42E0" }, { "type": "extern_variable", - "name": "D_800F7EE0", + "name": "D_800E42E4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EE0" + "suggestion": "Unknown type for extern variable D_800E42E4" }, { "type": "extern_variable", - "name": "D_800F7EE2", + "name": "D_800E42E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EE2" + "suggestion": "Unknown type for extern variable D_800E42E8" }, { "type": "extern_variable", - "name": "D_800F7EE4", + "name": "D_800E42EA", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EE4" + "suggestion": "Unknown type for extern variable D_800E42EA" }, { "type": "extern_variable", - "name": "D_800F7EE6", + "name": "D_800E42EE", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EE6" + "suggestion": "Unknown type for extern variable D_800E42EE" }, { "type": "extern_variable", - "name": "D_800F7EE8", + "name": "D_800E48E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EE8" + "suggestion": "Unknown type for extern variable D_800E48E8" }, { - "type": "extern_variable", - "name": "func_800C0480", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C0480" + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" }, { - "type": "extern_variable", - "name": "func_800C0630", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C0630" + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-22T19:49:12.738463" + }, + { + "function_name": "func_80023940", + "file": "src/main/1255C.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_80048540", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_80048540 in header" }, { - "type": "extern_variable", - "name": "func_800C0970", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C0970" + "type": "extern_function", + "name": "VSync", + "return_type": "unknown", + "parameters": "?", + "suggestion": "Define proper signature for VSync in header" }, { "type": "extern_variable", - "name": "func_800C0B20", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C0B20" + "name": "D_80069800", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069800" }, { "type": "extern_variable", - "name": "D_80151850", + "name": "D_80071E4D", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151850" + "suggestion": "Unknown type for extern variable D_80071E4D" }, { "type": "extern_variable", - "name": "func_800B5AAC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800B5AAC" + "name": "D_800738BC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738BC" }, { "type": "extern_variable", - "name": "func_800C36B4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C36B4" + "name": "D_800491D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800491D0" }, { "type": "extern_variable", - "name": "func_800B4E30", + "name": "func_80017678", "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800B4E30" + "suggestion": "Unknown type for extern variable func_80017678" }, { "type": "extern_variable", - "name": "func_800B54B8", + "name": "func_8001786C", "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800B54B8" + "suggestion": "Unknown type for extern variable func_8001786C" }, { "type": "extern_variable", - "name": "func_800D09D0", + "name": "func_80020058", "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D09D0" + "suggestion": "Unknown type for extern variable func_80020058" }, { "type": "extern_variable", - "name": "D_800F9DAA", + "name": "D_8009D85C", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9DAA" + "suggestion": "Unknown type for extern variable D_8009D85C" }, { "type": "extern_variable", - "name": "D_800F9DAC", + "name": "D_8009D85E", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9DAC" - }, + "suggestion": "Unknown type for extern variable D_8009D85E" + } + ], + "timestamp": "2026-04-22T19:49:12.814286" + }, + { + "function_name": "func_800119E4", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_800FA9C6", + "name": "D_80075D24", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FA9C6" + "suggestion": "Unknown type for extern variable D_80075D24" }, { "type": "extern_variable", - "name": "D_800F8CF4", + "name": "D_80075D28", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F8CF4" - }, - { - "type": "extern_variable", - "name": "func_801B0050", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_801B0050" + "suggestion": "Unknown type for extern variable D_80075D28" }, { "type": "extern_variable", - "name": "func_800C74E4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C74E4" + "name": "D_80075DE8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075DE8" }, { "type": "extern_variable", - "name": "D_800F4B0C", + "name": "D_8009D7E4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4B0C" + "suggestion": "Unknown type for extern variable D_8009D7E4" }, { "type": "extern_variable", - "name": "D_801AFFC0", + "name": "D_8009D7E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801AFFC0" + "suggestion": "Unknown type for extern variable D_8009D7E8" }, { "type": "extern_variable", - "name": "func_8003CEBC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8003CEBC" + "name": "D_8009D7EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7EC" }, { "type": "extern_variable", - "name": "func_8003D1B4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8003D1B4" + "name": "D_8009D7ED", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7ED" }, { "type": "extern_variable", - "name": "func_80043938", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80043938" + "name": "D_80069508", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069508" }, { "type": "extern_variable", - "name": "func_80046960", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80046960" + "name": "D_800708C8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C8" }, { "type": "extern_variable", - "name": "func_8003BC9C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8003BC9C" + "name": "D_800708D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708D0" }, { - "type": "extern_variable", - "name": "func_800468FC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800468FC" + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" }, { - "type": "extern_variable", - "name": "D_800EA264", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800EA264" + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" } ], - "timestamp": "2026-04-18T12:35:23.978022" + "timestamp": "2026-04-22T19:49:12.844308" }, { - "function_name": "func_8002CCDC", - "file": "src/main/akao.c", + "function_name": "func_80019E84", + "file": "src/main/18B8.c", "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", "missing_items": [ - { - "type": "extern_function", - "name": "SpuSetVoiceARAttr", - "return_type": "unknown", - "parameters": "s32, u16, s32", - "suggestion": "Define proper signature for SpuSetVoiceARAttr in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoiceDR", - "return_type": "unknown", - "parameters": "s32, u16", - "suggestion": "Define proper signature for SpuSetVoiceDR in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoiceLoopStartAddr", - "return_type": "unknown", - "parameters": "s32, s32", - "suggestion": "Define proper signature for SpuSetVoiceLoopStartAddr in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoicePitch", - "return_type": "unknown", - "parameters": "u16", - "suggestion": "Define proper signature for SpuSetVoicePitch in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoiceRRAttr", - "return_type": "unknown", - "parameters": "s32, u16, s32", - "suggestion": "Define proper signature for SpuSetVoiceRRAttr in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoiceSL", - "return_type": "unknown", - "parameters": "s32, u16", - "suggestion": "Define proper signature for SpuSetVoiceSL in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoiceSRAttr", - "return_type": "unknown", - "parameters": "s32, u16, s32", - "suggestion": "Define proper signature for SpuSetVoiceSRAttr in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoiceStartAddr", - "return_type": "unknown", - "parameters": "s32, s32", - "suggestion": "Define proper signature for SpuSetVoiceStartAddr in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoiceVolume", - "return_type": "unknown", - "parameters": "s32, s16, s16", - "suggestion": "Define proper signature for SpuSetVoiceVolume in header" - }, { "type": "extern_variable", - "name": "D_80049C40", + "name": "D_80075D24", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049C40" + "suggestion": "Unknown type for extern variable D_80075D24" }, { "type": "extern_variable", - "name": "func_8002BD04", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002BD04" + "name": "D_80075D28", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D28" }, { "type": "extern_variable", - "name": "func_8002BFCC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002BFCC" + "name": "D_80075DE8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075DE8" }, { "type": "extern_variable", - "name": "func_8002C004", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002C004" + "name": "D_8009D7E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E4" }, { "type": "extern_variable", - "name": "func_8002C2CC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002C2CC" + "name": "D_8009D7E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E8" }, { "type": "extern_variable", - "name": "func_8002C300", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002C300" + "name": "D_8009D7EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7EC" }, { "type": "extern_variable", - "name": "D_8007EBE4", + "name": "D_8009D7ED", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007EBE4" + "suggestion": "Unknown type for extern variable D_8009D7ED" }, { "type": "extern_variable", - "name": "func_80030038", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80030038" + "name": "D_80069508", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069508" }, { "type": "extern_variable", - "name": "D_80081DC8", + "name": "D_800708C8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80081DC8" + "suggestion": "Unknown type for extern variable D_800708C8" }, { "type": "extern_variable", - "name": "D_800499A8", + "name": "D_800708D0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800499A8" + "suggestion": "Unknown type for extern variable D_800708D0" }, { - "type": "extern_variable", - "name": "D_80096704", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80096704" + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" }, { - "type": "extern_variable", - "name": "func_800293D0", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800293D0" + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" } ], - "timestamp": "2026-04-18T12:35:24.736873" + "timestamp": "2026-04-22T19:49:13.441928" }, { - "function_name": "func_800A8968", - "file": "src/field/field.c", + "function_name": "func_8001FBAC", + "file": "src/main/18B8.c", "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", "missing_items": [ { "type": "extern_variable", - "name": "D_80074EB0", + "name": "D_80075D24", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB0" + "suggestion": "Unknown type for extern variable D_80075D24" }, { "type": "extern_variable", - "name": "D_80074EB4", + "name": "D_80075D28", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB4" + "suggestion": "Unknown type for extern variable D_80075D28" }, { "type": "extern_variable", - "name": "D_80074EB8", + "name": "D_80075DE8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB8" + "suggestion": "Unknown type for extern variable D_80075DE8" }, { "type": "extern_variable", - "name": "func_800A48B8", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800A48B8" + "name": "D_8009D7E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E4" }, { "type": "extern_variable", - "name": "D_80074ED9", + "name": "D_8009D7E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074ED9" + "suggestion": "Unknown type for extern variable D_8009D7E8" }, { "type": "extern_variable", - "name": "D_800DF120", + "name": "D_8009D7EC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DF120" + "suggestion": "Unknown type for extern variable D_8009D7EC" }, { "type": "extern_variable", - "name": "D_800DF122", + "name": "D_8009D7ED", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DF122" + "suggestion": "Unknown type for extern variable D_8009D7ED" }, { "type": "extern_variable", - "name": "D_800DEF88", + "name": "D_80069508", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DEF88" - }, - { - "type": "extern_variable", - "name": "func_800354CC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800354CC" - }, - { - "type": "extern_variable", - "name": "func_80035658", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80035658" + "suggestion": "Unknown type for extern variable D_80069508" }, { "type": "extern_variable", - "name": "D_800E0638", + "name": "D_800708C8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0638" + "suggestion": "Unknown type for extern variable D_800708C8" }, { "type": "extern_variable", - "name": "D_800E48F4", + "name": "D_800708D0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48F4" + "suggestion": "Unknown type for extern variable D_800708D0" }, { - "type": "extern_variable", - "name": "D_800E48FC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48FC" + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" }, { - "type": "extern_variable", - "name": "D_800E48FE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48FE" - }, + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T19:49:14.032060" + }, + { + "function_name": "func_800159B0", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_800E4900", + "name": "D_80075D24", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4900" + "suggestion": "Unknown type for extern variable D_80075D24" }, { "type": "extern_variable", - "name": "D_800E4901", + "name": "D_80075D28", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4901" + "suggestion": "Unknown type for extern variable D_80075D28" }, { "type": "extern_variable", - "name": "D_800E4904", + "name": "D_80075DE8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4904" + "suggestion": "Unknown type for extern variable D_80075DE8" }, { "type": "extern_variable", - "name": "D_800E4906", + "name": "D_8009D7E4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4906" + "suggestion": "Unknown type for extern variable D_8009D7E4" }, { "type": "extern_variable", - "name": "D_800E4908", + "name": "D_8009D7E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4908" + "suggestion": "Unknown type for extern variable D_8009D7E8" }, { "type": "extern_variable", - "name": "D_800E4909", + "name": "D_8009D7EC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4909" + "suggestion": "Unknown type for extern variable D_8009D7EC" }, { "type": "extern_variable", - "name": "D_800E490C", + "name": "D_8009D7ED", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E490C" + "suggestion": "Unknown type for extern variable D_8009D7ED" }, { "type": "extern_variable", - "name": "D_800E490E", + "name": "D_80069508", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E490E" + "suggestion": "Unknown type for extern variable D_80069508" }, { "type": "extern_variable", - "name": "D_800E4910", + "name": "D_800708C8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4910" + "suggestion": "Unknown type for extern variable D_800708C8" }, { "type": "extern_variable", - "name": "D_800E4911", + "name": "D_800708D0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4911" + "suggestion": "Unknown type for extern variable D_800708D0" }, { - "type": "extern_variable", - "name": "D_800E4914", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4914" + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" }, { - "type": "extern_variable", - "name": "D_800E4916", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4916" - }, + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T19:49:14.620242" + }, + { + "function_name": "func_8001C980", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_800E4918", + "name": "D_80075D24", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4918" + "suggestion": "Unknown type for extern variable D_80075D24" }, { "type": "extern_variable", - "name": "D_800E4919", + "name": "D_80075D28", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4919" + "suggestion": "Unknown type for extern variable D_80075D28" }, { "type": "extern_variable", - "name": "D_8007EB98", + "name": "D_80075DE8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007EB98" - }, - { - "type": "extern_variable", - "name": "func_8001786C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8001786C" - }, - { - "type": "extern_variable", - "name": "func_80020058", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80020058" + "suggestion": "Unknown type for extern variable D_80075DE8" }, { "type": "extern_variable", - "name": "D_800491D0", + "name": "D_8009D7E4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800491D0" + "suggestion": "Unknown type for extern variable D_8009D7E4" }, { "type": "extern_variable", - "name": "D_8008328D", + "name": "D_8009D7E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328D" + "suggestion": "Unknown type for extern variable D_8009D7E8" }, { "type": "extern_variable", - "name": "D_800832A2", + "name": "D_8009D7EC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800832A2" + "suggestion": "Unknown type for extern variable D_8009D7EC" }, { "type": "extern_variable", - "name": "D_8008326C", + "name": "D_8009D7ED", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008326C" + "suggestion": "Unknown type for extern variable D_8009D7ED" }, { "type": "extern_variable", - "name": "D_80083286", + "name": "D_80069508", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083286" + "suggestion": "Unknown type for extern variable D_80069508" }, { "type": "extern_variable", - "name": "D_80083278", + "name": "D_800708C8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083278" + "suggestion": "Unknown type for extern variable D_800708C8" }, { "type": "extern_variable", - "name": "D_8008327A", + "name": "D_800708D0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327A" + "suggestion": "Unknown type for extern variable D_800708D0" }, { - "type": "extern_variable", - "name": "D_8008327E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327E" + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" }, { - "type": "extern_variable", - "name": "D_80075E24", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075E24" - }, + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T19:49:15.231087" + }, + { + "function_name": "func_800211C4", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_80075E25", + "name": "D_80075D24", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075E25" + "suggestion": "Unknown type for extern variable D_80075D24" }, { "type": "extern_variable", - "name": "D_800E4214", + "name": "D_80075D28", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4214" + "suggestion": "Unknown type for extern variable D_80075D28" }, { "type": "extern_variable", - "name": "D_800E4280", + "name": "D_80075DE8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4280" + "suggestion": "Unknown type for extern variable D_80075DE8" }, { "type": "extern_variable", - "name": "D_800E4D48", + "name": "D_8009D7E4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4D48" + "suggestion": "Unknown type for extern variable D_8009D7E4" }, { "type": "extern_variable", - "name": "D_800E0748", + "name": "D_8009D7E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0748" + "suggestion": "Unknown type for extern variable D_8009D7E8" }, { "type": "extern_variable", - "name": "D_800E074A", + "name": "D_8009D7EC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074A" + "suggestion": "Unknown type for extern variable D_8009D7EC" }, { "type": "extern_variable", - "name": "D_800E074C", + "name": "D_8009D7ED", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074C" + "suggestion": "Unknown type for extern variable D_8009D7ED" }, { "type": "extern_variable", - "name": "D_800E08C0", + "name": "D_80069508", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08C0" + "suggestion": "Unknown type for extern variable D_80069508" }, { "type": "extern_variable", - "name": "D_800E074E", + "name": "D_800708C8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074E" + "suggestion": "Unknown type for extern variable D_800708C8" }, { "type": "extern_variable", - "name": "D_800E0754", + "name": "D_800708D0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0754" + "suggestion": "Unknown type for extern variable D_800708D0" }, { - "type": "extern_variable", - "name": "D_800E0758", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0758" + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" }, { - "type": "extern_variable", - "name": "D_800E08A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08A8" - }, + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T19:49:15.796230" + }, + { + "function_name": "func_80028CA0", + "file": "src/main/1255C.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { - "type": "extern_variable", - "name": "D_800E0756", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0756" + "type": "extern_function", + "name": "func_80048540", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_80048540 in header" }, { - "type": "extern_variable", - "name": "D_800E0750", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0750" + "type": "extern_function", + "name": "VSync", + "return_type": "unknown", + "parameters": "?", + "suggestion": "Define proper signature for VSync in header" }, { "type": "extern_variable", - "name": "D_800E0751", + "name": "D_80069800", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0751" + "suggestion": "Unknown type for extern variable D_80069800" }, { "type": "extern_variable", - "name": "D_800E0752", + "name": "D_80071E4D", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0752" + "suggestion": "Unknown type for extern variable D_80071E4D" }, { "type": "extern_variable", - "name": "func_800D5A60", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D5A60" + "name": "D_800738BC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800738BC" }, { "type": "extern_variable", - "name": "func_800D5C9C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D5C9C" + "name": "D_800491D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800491D0" }, { "type": "extern_variable", - "name": "func_800D6D44", + "name": "func_80017678", "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6D44" + "suggestion": "Unknown type for extern variable func_80017678" }, { "type": "extern_variable", - "name": "func_800D6E0C", + "name": "func_8001786C", "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6E0C" + "suggestion": "Unknown type for extern variable func_8001786C" }, { "type": "extern_variable", - "name": "func_800D6F6C", + "name": "func_80020058", "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6F6C" + "suggestion": "Unknown type for extern variable func_80020058" }, { "type": "extern_variable", - "name": "D_80083284", + "name": "D_8009D85C", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083284" + "suggestion": "Unknown type for extern variable D_8009D85C" }, { "type": "extern_variable", - "name": "D_8008328A", + "name": "D_8009D85E", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328A" - }, + "suggestion": "Unknown type for extern variable D_8009D85E" + } + ], + "timestamp": "2026-04-22T19:49:16.878011" + }, + { + "function_name": "func_800B11B4", + "file": "src/battle/battle.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { - "type": "extern_variable", - "name": "D_8008328E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328E" + "type": "extern_function", + "name": "func_800B13B0", + "return_type": "s32", + "parameters": "?, s32**", + "suggestion": "Define proper signature for func_800B13B0 in header" }, { "type": "extern_variable", - "name": "D_80083298", + "name": "D_800F3A40", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083298" + "suggestion": "Unknown type for extern variable D_800F3A40" }, { "type": "extern_variable", - "name": "D_8008329A", + "name": "D_800F3A20", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329A" + "suggestion": "Unknown type for extern variable D_800F3A20" }, { "type": "extern_variable", - "name": "D_800E424C", + "name": "D_800E7BEC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E424C" + "suggestion": "Unknown type for extern variable D_800E7BEC" }, { "type": "extern_variable", - "name": "D_801142CC", + "name": "D_800F49F8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801142CC" - }, + "suggestion": "Unknown type for extern variable D_800F49F8" + } + ], + "timestamp": "2026-04-22T19:49:17.133496" + }, + { + "function_name": "func_800CD400", + "file": "src/battle/battle2.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_8009AD30", + "name": "D_800F4CEC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009AD30" + "suggestion": "Unknown type for extern variable D_800F4CEC" }, { "type": "extern_variable", - "name": "func_800C2E00", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C2E00" + "name": "D_800F4D2C", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4D2C" }, { "type": "extern_variable", - "name": "func_800DA444", + "name": "func_800D6998", "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800DA444" + "suggestion": "Unknown type for extern variable func_800D6998" }, { "type": "extern_variable", - "name": "func_800C8634", + "name": "func_800D6ACC", "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C8634" + "suggestion": "Unknown type for extern variable func_800D6ACC" }, { "type": "extern_variable", - "name": "func_800CDC14", + "name": "func_800D6C20", "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800CDC14" + "suggestion": "Unknown type for extern variable func_800D6C20" }, { - "type": "extern_variable", - "name": "D_80095DE0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80095DE0" - }, + "type": "unaligned_cast", + "cast_type": "s32", + "suggestion": "Unaligned access to s32 - may need struct packing or alignment fix" + } + ], + "timestamp": "2026-04-22T19:49:17.291694" + }, + { + "function_name": "func_80025514", + "file": "src/main/1255C.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { - "type": "extern_variable", - "name": "func_80025B10", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80025B10" + "type": "extern_function", + "name": "func_80048540", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_80048540 in header" }, { - "type": "extern_variable", - "name": "func_800BEAD4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800BEAD4" + "type": "extern_function", + "name": "VSync", + "return_type": "unknown", + "parameters": "?", + "suggestion": "Define proper signature for VSync in header" }, { "type": "extern_variable", - "name": "D_800E0208", + "name": "D_80069800", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0208" + "suggestion": "Unknown type for extern variable D_80069800" }, { "type": "extern_variable", - "name": "D_800756E8", + "name": "D_80071E4D", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800756E8" + "suggestion": "Unknown type for extern variable D_80071E4D" }, { "type": "extern_variable", - "name": "D_80083291", + "name": "D_800738BC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083291" + "suggestion": "Unknown type for extern variable D_800738BC" }, { "type": "extern_variable", - "name": "D_80083294", + "name": "D_800491D0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083294" + "suggestion": "Unknown type for extern variable D_800491D0" }, { "type": "extern_variable", - "name": "D_8007078C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007078C" + "name": "func_80017678", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80017678" }, { "type": "extern_variable", - "name": "D_8007E7B8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B8" + "name": "func_8001786C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001786C" }, { "type": "extern_variable", - "name": "D_8007E7BA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7BA" + "name": "func_80020058", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80020058" }, { "type": "extern_variable", - "name": "D_8007E7AC", + "name": "D_8009D85C", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7AC" + "suggestion": "Unknown type for extern variable D_8009D85C" }, { "type": "extern_variable", - "name": "D_8007E7AE", + "name": "D_8009D85E", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7AE" - }, + "suggestion": "Unknown type for extern variable D_8009D85E" + } + ], + "timestamp": "2026-04-22T19:49:17.724565" + }, + { + "function_name": "func_800CD5E4", + "file": "src/battle/battle2.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_8007E7B0", + "name": "D_800F4CEC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B0" + "suggestion": "Unknown type for extern variable D_800F4CEC" }, { "type": "extern_variable", - "name": "D_8007E7B2", + "name": "D_800F4D2C", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B2" + "suggestion": "Unknown type for extern variable D_800F4D2C" }, { "type": "extern_variable", - "name": "D_8007E7B4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B4" + "name": "func_800D6998", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6998" }, { "type": "extern_variable", - "name": "D_8007E7B6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B6" + "name": "func_800D6ACC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6ACC" }, { "type": "extern_variable", - "name": "D_80082248", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082248" + "name": "func_800D6C20", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6C20" }, { - "type": "extern_variable", - "name": "D_8008325C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008325C" - }, + "type": "unaligned_cast", + "cast_type": "s32", + "suggestion": "Unaligned access to s32 - may need struct packing or alignment fix" + } + ], + "timestamp": "2026-04-22T19:49:18.365820" + }, + { + "function_name": "func_80026408", + "file": "src/main/1255C.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { - "type": "extern_variable", - "name": "D_8009D828", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D828" + "type": "extern_function", + "name": "func_80048540", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_80048540 in header" }, { - "type": "extern_variable", - "name": "D_800A0854", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A0854" + "type": "extern_function", + "name": "VSync", + "return_type": "unknown", + "parameters": "?", + "suggestion": "Define proper signature for VSync in header" }, { "type": "extern_variable", - "name": "D_800A0F38", + "name": "D_80069800", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A0F38" + "suggestion": "Unknown type for extern variable D_80069800" }, { "type": "extern_variable", - "name": "D_8007E7C2", + "name": "D_80071E4D", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7C2" + "suggestion": "Unknown type for extern variable D_80071E4D" }, { "type": "extern_variable", - "name": "D_80049209", + "name": "D_800738BC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049209" + "suggestion": "Unknown type for extern variable D_800738BC" }, { "type": "extern_variable", - "name": "D_8004920A", + "name": "D_800491D0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8004920A" + "suggestion": "Unknown type for extern variable D_800491D0" }, { "type": "extern_variable", - "name": "func_80044064", + "name": "func_80017678", "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80044064" + "suggestion": "Unknown type for extern variable func_80017678" }, { "type": "extern_variable", - "name": "func_800C5B38", + "name": "func_8001786C", "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C5B38" - }, - { - "type": "extern_variable", - "name": "D_80081D90", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80081D90" - }, - { - "type": "extern_variable", - "name": "D_80083288", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083288" + "suggestion": "Unknown type for extern variable func_8001786C" }, { "type": "extern_variable", - "name": "D_800E4944", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4944" + "name": "func_80020058", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80020058" }, { "type": "extern_variable", - "name": "D_80114480", + "name": "D_8009D85C", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80114480" + "suggestion": "Unknown type for extern variable D_8009D85C" }, { "type": "extern_variable", - "name": "D_800E42A8", + "name": "D_8009D85E", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42A8" - }, + "suggestion": "Unknown type for extern variable D_8009D85E" + } + ], + "timestamp": "2026-04-22T19:49:18.557635" + }, + { + "function_name": "func_80024A04", + "file": "src/main/1255C.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { - "type": "extern_variable", - "name": "D_8008327C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327C" + "type": "extern_function", + "name": "func_80048540", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_80048540 in header" }, { - "type": "extern_variable", - "name": "D_80083280", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083280" + "type": "extern_function", + "name": "VSync", + "return_type": "unknown", + "parameters": "?", + "suggestion": "Define proper signature for VSync in header" }, { "type": "extern_variable", - "name": "D_80083282", + "name": "D_80069800", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083282" + "suggestion": "Unknown type for extern variable D_80069800" }, { "type": "extern_variable", - "name": "D_8008328F", + "name": "D_80071E4D", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328F" + "suggestion": "Unknown type for extern variable D_80071E4D" }, { "type": "extern_variable", - "name": "D_80083290", + "name": "D_800738BC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083290" + "suggestion": "Unknown type for extern variable D_800738BC" }, { "type": "extern_variable", - "name": "D_8008329C", + "name": "D_800491D0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329C" + "suggestion": "Unknown type for extern variable D_800491D0" }, { "type": "extern_variable", - "name": "D_8008329E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329E" + "name": "func_80017678", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80017678" }, { "type": "extern_variable", - "name": "D_80071748", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071748" + "name": "func_8001786C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001786C" }, { "type": "extern_variable", - "name": "D_800833F8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800833F8" + "name": "func_80020058", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80020058" }, { "type": "extern_variable", - "name": "D_8009A1C4", + "name": "D_8009D85C", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009A1C4" + "suggestion": "Unknown type for extern variable D_8009D85C" }, { "type": "extern_variable", - "name": "D_800A06B0", + "name": "D_8009D85E", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A06B0" - }, + "suggestion": "Unknown type for extern variable D_8009D85E" + } + ], + "timestamp": "2026-04-22T19:49:19.110337" + }, + { + "function_name": "func_80022FE0", + "file": "src/main/1255C.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { - "type": "extern_variable", - "name": "D_80071A88", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071A88" + "type": "extern_function", + "name": "func_80048540", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_80048540 in header" }, { - "type": "extern_variable", - "name": "D_801142D4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801142D4" + "type": "extern_function", + "name": "VSync", + "return_type": "unknown", + "parameters": "?", + "suggestion": "Define proper signature for VSync in header" }, { "type": "extern_variable", - "name": "D_800E42D8", + "name": "D_80069800", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42D8" + "suggestion": "Unknown type for extern variable D_80069800" }, { "type": "extern_variable", - "name": "D_800E42DA", + "name": "D_80071E4D", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DA" + "suggestion": "Unknown type for extern variable D_80071E4D" }, { "type": "extern_variable", - "name": "D_800E42DC", + "name": "D_800738BC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DC" + "suggestion": "Unknown type for extern variable D_800738BC" }, { "type": "extern_variable", - "name": "D_800E42E0", + "name": "D_800491D0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E0" + "suggestion": "Unknown type for extern variable D_800491D0" }, { "type": "extern_variable", - "name": "D_800E42E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E4" + "name": "func_80017678", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80017678" }, { "type": "extern_variable", - "name": "D_800E42E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E8" + "name": "func_8001786C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001786C" }, { "type": "extern_variable", - "name": "D_800E42EA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EA" + "name": "func_80020058", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80020058" }, { "type": "extern_variable", - "name": "D_800E42EE", + "name": "D_8009D85C", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EE" + "suggestion": "Unknown type for extern variable D_8009D85C" }, { "type": "extern_variable", - "name": "D_800E48E8", + "name": "D_8009D85E", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48E8" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" + "suggestion": "Unknown type for extern variable D_8009D85E" } ], - "timestamp": "2026-04-18T12:35:24.899176" + "timestamp": "2026-04-22T19:49:20.169709" }, { - "function_name": "func_800A866C", - "file": "src/battle/battle.c", + "function_name": "func_8002120C", + "file": "src/main/18B8.c", "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", "missing_items": [ { "type": "extern_variable", - "name": "D_8009D954", + "name": "D_80075D24", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D954" + "suggestion": "Unknown type for extern variable D_80075D24" }, { "type": "extern_variable", - "name": "D_800FA9D0", + "name": "D_80075D28", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FA9D0" + "suggestion": "Unknown type for extern variable D_80075D28" }, { "type": "extern_variable", - "name": "D_800FA9D4", + "name": "D_80075DE8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FA9D4" + "suggestion": "Unknown type for extern variable D_80075DE8" }, { "type": "extern_variable", - "name": "D_800F9F3C", + "name": "D_8009D7E4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9F3C" + "suggestion": "Unknown type for extern variable D_8009D7E4" }, { "type": "extern_variable", - "name": "D_800F9F42", + "name": "D_8009D7E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9F42" + "suggestion": "Unknown type for extern variable D_8009D7E8" }, { "type": "extern_variable", - "name": "D_800F9F44", + "name": "D_8009D7EC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9F44" + "suggestion": "Unknown type for extern variable D_8009D7EC" }, { "type": "extern_variable", - "name": "D_800F87F4", + "name": "D_8009D7ED", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F87F4" + "suggestion": "Unknown type for extern variable D_8009D7ED" }, { "type": "extern_variable", - "name": "D_800F5E65", + "name": "D_80069508", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E65" + "suggestion": "Unknown type for extern variable D_80069508" }, { "type": "extern_variable", - "name": "D_800F3A40", + "name": "D_800708C8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F3A40" + "suggestion": "Unknown type for extern variable D_800708C8" }, { "type": "extern_variable", - "name": "D_80071C32", + "name": "D_800708D0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071C32" + "suggestion": "Unknown type for extern variable D_800708D0" }, { - "type": "extern_variable", - "name": "D_80071E64", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071E64" + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" }, { - "type": "extern_variable", - "name": "D_800722D6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800722D6" + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T19:49:20.263191" + }, + { + "function_name": "func_801D224C", + "file": "src/menu/savemenu.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "sprintf", + "return_type": "unknown", + "parameters": "s8*, s8*, s8*", + "suggestion": "Define proper signature for sprintf in header" }, { "type": "extern_variable", - "name": "D_800722D8", + "name": "D_801E6F38", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800722D8" + "suggestion": "Unknown type for extern variable D_801E6F38" }, { "type": "extern_variable", - "name": "D_800738A0", + "name": "D_801E7138", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738A0" + "suggestion": "Unknown type for extern variable D_801E7138" }, { - "type": "extern_variable", - "name": "D_800738CA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738CA" + "type": "unknown_pointer", + "name": "var_a2_2", + "suggestion": "m2c could not determine type of pointer var_a2_2" }, { - "type": "extern_variable", - "name": "D_801671B8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801671B8" + "type": "unknown_pointer", + "name": "var_a3", + "suggestion": "m2c could not determine type of pointer var_a3" }, + { + "type": "unaligned_cast", + "cast_type": "s32", + "suggestion": "Unaligned access to s32 - may need struct packing or alignment fix" + } + ], + "timestamp": "2026-04-22T19:49:20.475751" + }, + { + "function_name": "func_800D55F4", + "file": "src/battle/battle2.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_801671BA", + "name": "D_800F4CEC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801671BA" + "suggestion": "Unknown type for extern variable D_800F4CEC" }, { "type": "extern_variable", - "name": "D_801671BC", + "name": "D_800F4D2C", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801671BC" + "suggestion": "Unknown type for extern variable D_800F4D2C" }, { "type": "extern_variable", - "name": "D_8009D866", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D866" + "name": "func_800D6998", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6998" }, { "type": "extern_variable", - "name": "D_800F5E68", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E68" + "name": "func_800D6ACC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6ACC" }, { "type": "extern_variable", - "name": "D_800F5E6A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E6A" + "name": "func_800D6C20", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6C20" }, { - "type": "extern_variable", - "name": "D_800708D1", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708D1" - }, - { - "type": "extern_variable", - "name": "D_8009D85E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85E" - }, - { - "type": "extern_variable", - "name": "D_8009D862", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D862" - }, + "type": "unaligned_cast", + "cast_type": "s32", + "suggestion": "Unaligned access to s32 - may need struct packing or alignment fix" + } + ], + "timestamp": "2026-04-22T19:49:20.681711" + }, + { + "function_name": "func_8002368C", + "file": "src/main/1255C.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { - "type": "extern_variable", - "name": "D_800F5E70", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E70" + "type": "extern_function", + "name": "func_80048540", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_80048540 in header" }, { - "type": "extern_variable", - "name": "D_800F5E72", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E72" + "type": "extern_function", + "name": "VSync", + "return_type": "unknown", + "parameters": "?", + "suggestion": "Define proper signature for VSync in header" }, { "type": "extern_variable", - "name": "D_800738A4", + "name": "D_80069800", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738A4" + "suggestion": "Unknown type for extern variable D_80069800" }, { "type": "extern_variable", - "name": "D_800738C7", + "name": "D_80071E4D", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738C7" + "suggestion": "Unknown type for extern variable D_80071E4D" }, { "type": "extern_variable", - "name": "D_8009D84E", + "name": "D_800738BC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D84E" + "suggestion": "Unknown type for extern variable D_800738BC" }, { "type": "extern_variable", - "name": "D_800F5E64", + "name": "D_800491D0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E64" + "suggestion": "Unknown type for extern variable D_800491D0" }, { "type": "extern_variable", - "name": "D_800F5EFC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5EFC" + "name": "func_80017678", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80017678" }, { "type": "extern_variable", - "name": "func_800AA574", + "name": "func_8001786C", "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AA574" + "suggestion": "Unknown type for extern variable func_8001786C" }, { "type": "extern_variable", - "name": "func_800AA688", + "name": "func_80020058", "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AA688" + "suggestion": "Unknown type for extern variable func_80020058" }, { "type": "extern_variable", - "name": "D_80163778", + "name": "D_8009D85C", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163778" + "suggestion": "Unknown type for extern variable D_8009D85C" }, { "type": "extern_variable", - "name": "D_800E7BA4", + "name": "D_8009D85E", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BA4" - }, + "suggestion": "Unknown type for extern variable D_8009D85E" + } + ], + "timestamp": "2026-04-22T19:49:21.146988" + }, + { + "function_name": "func_8001A4A8", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_800E7BA5", + "name": "D_80075D24", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BA5" + "suggestion": "Unknown type for extern variable D_80075D24" }, { "type": "extern_variable", - "name": "D_800E7BA6", + "name": "D_80075D28", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BA6" + "suggestion": "Unknown type for extern variable D_80075D28" }, { "type": "extern_variable", - "name": "D_800F5E74", + "name": "D_80075DE8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E74" + "suggestion": "Unknown type for extern variable D_80075DE8" }, { "type": "extern_variable", - "name": "D_800F5E76", + "name": "D_8009D7E4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E76" + "suggestion": "Unknown type for extern variable D_8009D7E4" }, { "type": "extern_variable", - "name": "D_800730D0", + "name": "D_8009D7E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730D0" + "suggestion": "Unknown type for extern variable D_8009D7E8" }, { "type": "extern_variable", - "name": "D_800E7BBC", + "name": "D_8009D7EC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BBC" + "suggestion": "Unknown type for extern variable D_8009D7EC" }, { "type": "extern_variable", - "name": "D_800E7BBD", + "name": "D_8009D7ED", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BBD" + "suggestion": "Unknown type for extern variable D_8009D7ED" }, { "type": "extern_variable", - "name": "D_8009D86F", + "name": "D_80069508", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D86F" + "suggestion": "Unknown type for extern variable D_80069508" }, { "type": "extern_variable", - "name": "D_800E7BCC", + "name": "D_800708C8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BCC" + "suggestion": "Unknown type for extern variable D_800708C8" }, { "type": "extern_variable", - "name": "D_800E7BFC", + "name": "D_800708D0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BFC" + "suggestion": "Unknown type for extern variable D_800708D0" }, { - "type": "extern_variable", - "name": "D_800E7BEC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BEC" + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" }, { - "type": "extern_variable", - "name": "func_800AF264", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AF264" - }, + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T19:49:21.328318" + }, + { + "function_name": "func_800CD860", + "file": "src/battle/battle2.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "func_800AF3AC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AF3AC" + "name": "D_800F4CEC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F4CEC" }, { "type": "extern_variable", - "name": "D_800E7C7C", + "name": "D_800F4D2C", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7C7C" + "suggestion": "Unknown type for extern variable D_800F4D2C" }, { "type": "extern_variable", - "name": "D_800E7CBC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7CBC" + "name": "func_800D6998", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6998" }, { "type": "extern_variable", - "name": "D_800E7CDC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7CDC" + "name": "func_800D6ACC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6ACC" }, { "type": "extern_variable", - "name": "D_800F4A48", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4A48" + "name": "func_800D6C20", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6C20" }, { - "type": "extern_variable", - "name": "D_800F4A70", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4A70" + "type": "unaligned_cast", + "cast_type": "s32", + "suggestion": "Unaligned access to s32 - may need struct packing or alignment fix" + } + ], + "timestamp": "2026-04-22T19:49:21.759187" + }, + { + "function_name": "func_80028E00", + "file": "src/main/1255C.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_80048540", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_80048540 in header" }, { - "type": "extern_variable", - "name": "D_800F4A98", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4A98" + "type": "extern_function", + "name": "VSync", + "return_type": "unknown", + "parameters": "?", + "suggestion": "Define proper signature for VSync in header" }, { "type": "extern_variable", - "name": "D_800F49A0", + "name": "D_80069800", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F49A0" + "suggestion": "Unknown type for extern variable D_80069800" }, { "type": "extern_variable", - "name": "D_800F49A8", + "name": "D_80071E4D", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F49A8" + "suggestion": "Unknown type for extern variable D_80071E4D" }, { "type": "extern_variable", - "name": "D_8009D85C", + "name": "D_800738BC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85C" + "suggestion": "Unknown type for extern variable D_800738BC" }, { "type": "extern_variable", - "name": "D_8009D860", + "name": "D_800491D0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D860" + "suggestion": "Unknown type for extern variable D_800491D0" }, { "type": "extern_variable", - "name": "D_8009D868", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D868" + "name": "func_80017678", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80017678" }, { "type": "extern_variable", - "name": "D_8009D86A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D86A" + "name": "func_8001786C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001786C" }, { "type": "extern_variable", - "name": "D_800F5F01", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5F01" + "name": "func_80020058", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80020058" }, { "type": "extern_variable", - "name": "D_800F87F0", + "name": "D_8009D85C", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F87F0" + "suggestion": "Unknown type for extern variable D_8009D85C" }, { "type": "extern_variable", - "name": "func_800A5250", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800A5250" + "name": "D_8009D85E", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D85E" } ], - "timestamp": "2026-04-18T12:35:25.347403" + "timestamp": "2026-04-22T19:49:21.935678" }, { - "function_name": "func_8002A28C", - "file": "src/main/akao.c", + "function_name": "func_800A4134", + "file": "src/field/field.c", "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", "missing_items": [ { - "type": "extern_function", - "name": "SpuSetVoiceARAttr", - "return_type": "unknown", - "parameters": "s32, u16, s32", - "suggestion": "Define proper signature for SpuSetVoiceARAttr in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoiceDR", - "return_type": "unknown", - "parameters": "s32, u16", - "suggestion": "Define proper signature for SpuSetVoiceDR in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoiceLoopStartAddr", - "return_type": "unknown", - "parameters": "s32, s32", - "suggestion": "Define proper signature for SpuSetVoiceLoopStartAddr in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoicePitch", - "return_type": "unknown", - "parameters": "u16", - "suggestion": "Define proper signature for SpuSetVoicePitch in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoiceRRAttr", - "return_type": "unknown", - "parameters": "s32, u16, s32", - "suggestion": "Define proper signature for SpuSetVoiceRRAttr in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoiceSL", - "return_type": "unknown", - "parameters": "s32, u16", - "suggestion": "Define proper signature for SpuSetVoiceSL in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoiceSRAttr", - "return_type": "unknown", - "parameters": "s32, u16, s32", - "suggestion": "Define proper signature for SpuSetVoiceSRAttr in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoiceStartAddr", - "return_type": "unknown", - "parameters": "s32, s32", - "suggestion": "Define proper signature for SpuSetVoiceStartAddr in header" + "type": "extern_variable", + "name": "D_80074EB0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB0" }, { - "type": "extern_function", - "name": "SpuSetVoiceVolume", - "return_type": "unknown", - "parameters": "s32, s16, s16", - "suggestion": "Define proper signature for SpuSetVoiceVolume in header" + "type": "extern_variable", + "name": "D_80074EB4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB4" }, { "type": "extern_variable", - "name": "D_80049C40", + "name": "D_80074EB8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049C40" + "suggestion": "Unknown type for extern variable D_80074EB8" }, { "type": "extern_variable", - "name": "func_8002BD04", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002BD04" + "name": "D_800E0638", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0638" }, { "type": "extern_variable", - "name": "func_8002BFCC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002BFCC" + "name": "D_800E42D8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42D8" }, { "type": "extern_variable", - "name": "func_8002C004", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002C004" + "name": "D_800E42DA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DA" }, { "type": "extern_variable", - "name": "func_8002C2CC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002C2CC" + "name": "D_800E42DC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42DC" }, { "type": "extern_variable", - "name": "func_8002C300", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002C300" + "name": "D_800E42E0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E0" }, { "type": "extern_variable", - "name": "D_8007EBE4", + "name": "D_800E42E4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007EBE4" + "suggestion": "Unknown type for extern variable D_800E42E4" }, { "type": "extern_variable", - "name": "func_80030038", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80030038" + "name": "D_800E42E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E42E8" }, { "type": "extern_variable", - "name": "D_80081DC8", + "name": "D_800E42EA", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80081DC8" + "suggestion": "Unknown type for extern variable D_800E42EA" }, { "type": "extern_variable", - "name": "D_800499A8", + "name": "D_800E42EE", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800499A8" + "suggestion": "Unknown type for extern variable D_800E42EE" }, { "type": "extern_variable", - "name": "D_80096704", + "name": "D_800E48E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80096704" + "suggestion": "Unknown type for extern variable D_800E48E8" }, { - "type": "extern_variable", - "name": "func_800293D0", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800293D0" + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" } ], - "timestamp": "2026-04-18T12:35:25.858422" + "timestamp": "2026-04-22T19:49:22.995885" }, { - "function_name": "func_800B8B48", - "file": "src/battle/battle1.c", + "function_name": "func_80019064", + "file": "src/main/18B8.c", "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", "missing_items": [ { "type": "extern_variable", - "name": "func_800B5E64", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800B5E64" + "name": "D_80075D24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D24" }, { "type": "extern_variable", - "name": "D_800F8384", + "name": "D_80075D28", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F8384" + "suggestion": "Unknown type for extern variable D_80075D28" }, { "type": "extern_variable", - "name": "D_80103200", + "name": "D_80075DE8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80103200" + "suggestion": "Unknown type for extern variable D_80075DE8" }, { "type": "extern_variable", - "name": "D_800F7E10", + "name": "D_8009D7E4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7E10" + "suggestion": "Unknown type for extern variable D_8009D7E4" }, { "type": "extern_variable", - "name": "D_800F8180", + "name": "D_8009D7E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F8180" + "suggestion": "Unknown type for extern variable D_8009D7E8" }, { "type": "extern_variable", - "name": "D_800E8E88", + "name": "D_8009D7EC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E8E88" + "suggestion": "Unknown type for extern variable D_8009D7EC" }, { "type": "extern_variable", - "name": "D_800E8F94", + "name": "D_8009D7ED", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E8F94" + "suggestion": "Unknown type for extern variable D_8009D7ED" }, { "type": "extern_variable", - "name": "func_800B7DB4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800B7DB4" + "name": "D_80069508", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069508" }, { "type": "extern_variable", - "name": "D_800FA9D1", + "name": "D_800708C8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FA9D1" + "suggestion": "Unknown type for extern variable D_800708C8" }, { "type": "extern_variable", - "name": "D_80163CC0", + "name": "D_800708D0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163CC0" + "suggestion": "Unknown type for extern variable D_800708D0" }, { - "type": "extern_variable", - "name": "D_80163CC2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163CC2" + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" }, { - "type": "extern_variable", - "name": "D_80163CC4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163CC4" + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T19:49:23.043726" + }, + { + "function_name": "func_800A73F8", + "file": "src/battle/battle.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_function", + "name": "func_800B13B0", + "return_type": "s32", + "parameters": "?, s32**", + "suggestion": "Define proper signature for func_800B13B0 in header" }, { "type": "extern_variable", - "name": "D_800F99EC", + "name": "D_800F3A40", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F99EC" + "suggestion": "Unknown type for extern variable D_800F3A40" }, { "type": "extern_variable", - "name": "D_800F99EE", + "name": "D_800F3A20", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F99EE" + "suggestion": "Unknown type for extern variable D_800F3A20" }, { "type": "extern_variable", - "name": "D_800F99F0", + "name": "D_800E7BEC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F99F0" + "suggestion": "Unknown type for extern variable D_800E7BEC" }, { "type": "extern_variable", - "name": "D_800F99F2", + "name": "D_800F49F8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F99F2" - }, + "suggestion": "Unknown type for extern variable D_800F49F8" + } + ], + "timestamp": "2026-04-22T19:49:23.328645" + }, + { + "function_name": "func_800D7B1C", + "file": "src/battle/battle2.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_800F99F4", + "name": "D_800F4CEC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F99F4" + "suggestion": "Unknown type for extern variable D_800F4CEC" }, { "type": "extern_variable", - "name": "D_800F99F6", + "name": "D_800F4D2C", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F99F6" + "suggestion": "Unknown type for extern variable D_800F4D2C" }, { "type": "extern_variable", - "name": "D_800FA9D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FA9D8" + "name": "func_800D6998", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6998" }, { "type": "extern_variable", - "name": "D_801517F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801517F0" + "name": "func_800D6ACC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6ACC" }, { "type": "extern_variable", - "name": "D_800F7E08", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7E08" + "name": "func_800D6C20", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6C20" }, + { + "type": "unaligned_cast", + "cast_type": "s32", + "suggestion": "Unaligned access to s32 - may need struct packing or alignment fix" + } + ], + "timestamp": "2026-04-22T19:49:23.378987" + }, + { + "function_name": "func_800194BC", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_801516FE", + "name": "D_80075D24", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801516FE" + "suggestion": "Unknown type for extern variable D_80075D24" }, { "type": "extern_variable", - "name": "D_80151700", + "name": "D_80075D28", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151700" + "suggestion": "Unknown type for extern variable D_80075D28" }, { "type": "extern_variable", - "name": "D_80151702", + "name": "D_80075DE8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151702" + "suggestion": "Unknown type for extern variable D_80075DE8" }, { "type": "extern_variable", - "name": "D_800F8178", + "name": "D_8009D7E4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F8178" + "suggestion": "Unknown type for extern variable D_8009D7E4" }, { "type": "extern_variable", - "name": "D_800F8184", + "name": "D_8009D7E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F8184" + "suggestion": "Unknown type for extern variable D_8009D7E8" }, { "type": "extern_variable", - "name": "D_80163B44", + "name": "D_8009D7EC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163B44" + "suggestion": "Unknown type for extern variable D_8009D7EC" }, { "type": "extern_variable", - "name": "D_801590E4", + "name": "D_8009D7ED", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801590E4" + "suggestion": "Unknown type for extern variable D_8009D7ED" }, { "type": "extern_variable", - "name": "D_801590E8", + "name": "D_80069508", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801590E8" + "suggestion": "Unknown type for extern variable D_80069508" }, { "type": "extern_variable", - "name": "D_800F7ED8", + "name": "D_800708C8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7ED8" + "suggestion": "Unknown type for extern variable D_800708C8" }, { "type": "extern_variable", - "name": "D_800F7EDA", + "name": "D_800708D0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EDA" + "suggestion": "Unknown type for extern variable D_800708D0" }, { - "type": "extern_variable", - "name": "D_80151844", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151844" + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T19:49:23.904572" + }, + { + "function_name": "func_800D7BA4", + "file": "src/battle/battle2.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_80151846", + "name": "D_800F4CEC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151846" + "suggestion": "Unknown type for extern variable D_800F4CEC" }, { "type": "extern_variable", - "name": "D_80151848", + "name": "D_800F4D2C", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151848" + "suggestion": "Unknown type for extern variable D_800F4D2C" }, { "type": "extern_variable", - "name": "D_801518A4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801518A4" + "name": "func_800D6998", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6998" }, { "type": "extern_variable", - "name": "D_801518A6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801518A6" + "name": "func_800D6ACC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6ACC" }, { "type": "extern_variable", - "name": "D_801518A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801518A8" + "name": "func_800D6C20", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6C20" }, + { + "type": "unaligned_cast", + "cast_type": "s32", + "suggestion": "Unaligned access to s32 - may need struct packing or alignment fix" + } + ], + "timestamp": "2026-04-22T19:49:24.330746" + }, + { + "function_name": "func_80018FC0", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_800F7EF0", + "name": "D_80075D24", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EF0" + "suggestion": "Unknown type for extern variable D_80075D24" }, { "type": "extern_variable", - "name": "D_800F7EDC", + "name": "D_80075D28", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EDC" + "suggestion": "Unknown type for extern variable D_80075D28" }, { "type": "extern_variable", - "name": "D_800F7EDE", + "name": "D_80075DE8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EDE" + "suggestion": "Unknown type for extern variable D_80075DE8" }, { "type": "extern_variable", - "name": "D_800F7EE0", + "name": "D_8009D7E4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EE0" + "suggestion": "Unknown type for extern variable D_8009D7E4" }, { "type": "extern_variable", - "name": "D_800F7EE2", + "name": "D_8009D7E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EE2" + "suggestion": "Unknown type for extern variable D_8009D7E8" }, { "type": "extern_variable", - "name": "D_800F7EE4", + "name": "D_8009D7EC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EE4" + "suggestion": "Unknown type for extern variable D_8009D7EC" }, { "type": "extern_variable", - "name": "D_800F7EE6", + "name": "D_8009D7ED", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EE6" + "suggestion": "Unknown type for extern variable D_8009D7ED" }, { "type": "extern_variable", - "name": "D_800F7EE8", + "name": "D_80069508", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EE8" + "suggestion": "Unknown type for extern variable D_80069508" }, { "type": "extern_variable", - "name": "func_800C0480", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C0480" + "name": "D_800708C8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C8" }, { "type": "extern_variable", - "name": "func_800C0630", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C0630" + "name": "D_800708D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708D0" }, { - "type": "extern_variable", - "name": "func_800C0970", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C0970" + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" }, { - "type": "extern_variable", - "name": "func_800C0B20", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C0B20" - }, + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T19:49:24.574277" + }, + { + "function_name": "func_80018B14", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_80151850", + "name": "D_80075D24", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151850" + "suggestion": "Unknown type for extern variable D_80075D24" }, { "type": "extern_variable", - "name": "func_800B5AAC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800B5AAC" + "name": "D_80075D28", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D28" }, { "type": "extern_variable", - "name": "func_800C36B4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C36B4" + "name": "D_80075DE8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075DE8" }, { "type": "extern_variable", - "name": "func_800B4E30", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800B4E30" + "name": "D_8009D7E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E4" }, { "type": "extern_variable", - "name": "func_800B54B8", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800B54B8" + "name": "D_8009D7E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E8" }, { "type": "extern_variable", - "name": "func_800D09D0", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D09D0" + "name": "D_8009D7EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7EC" }, { "type": "extern_variable", - "name": "D_800F9DAA", + "name": "D_8009D7ED", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9DAA" + "suggestion": "Unknown type for extern variable D_8009D7ED" }, { "type": "extern_variable", - "name": "D_800F9DAC", + "name": "D_80069508", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9DAC" + "suggestion": "Unknown type for extern variable D_80069508" }, { "type": "extern_variable", - "name": "D_800FA9C6", + "name": "D_800708C8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FA9C6" + "suggestion": "Unknown type for extern variable D_800708C8" }, { "type": "extern_variable", - "name": "D_800F8CF4", + "name": "D_800708D0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F8CF4" + "suggestion": "Unknown type for extern variable D_800708D0" }, { - "type": "extern_variable", - "name": "func_801B0050", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_801B0050" + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T19:49:25.187217" + }, + { + "function_name": "func_80014BE4", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "func_800C74E4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C74E4" + "name": "D_80075D24", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80075D24" }, { "type": "extern_variable", - "name": "D_800F4B0C", + "name": "D_80075D28", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4B0C" + "suggestion": "Unknown type for extern variable D_80075D28" }, { "type": "extern_variable", - "name": "D_801AFFC0", + "name": "D_80075DE8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801AFFC0" + "suggestion": "Unknown type for extern variable D_80075DE8" }, { "type": "extern_variable", - "name": "func_8003CEBC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8003CEBC" + "name": "D_8009D7E4", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E4" }, { "type": "extern_variable", - "name": "func_8003D1B4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8003D1B4" + "name": "D_8009D7E8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7E8" }, { "type": "extern_variable", - "name": "func_80043938", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80043938" + "name": "D_8009D7EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7EC" }, { "type": "extern_variable", - "name": "func_80046960", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80046960" + "name": "D_8009D7ED", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7ED" }, { "type": "extern_variable", - "name": "func_8003BC9C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8003BC9C" + "name": "D_80069508", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069508" }, { "type": "extern_variable", - "name": "func_800468FC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800468FC" + "name": "D_800708C8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C8" }, { "type": "extern_variable", - "name": "D_800EA264", + "name": "D_800708D0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800EA264" - } - ], - "timestamp": "2026-04-18T12:35:26.205847" - }, - { - "function_name": "func_800E3FB4", - "file": "src/battle/battle3.c", - "primary_error": "Local variable 'temp_s0' is void* but used with -> (m2c struct type inference failure)", - "missing_items": [ - { - "type": "extern_function", - "name": "func_80026A34", - "return_type": "void", - "parameters": "?, ?, ?, ?", - "suggestion": "Define proper signature for func_80026A34 in header" + "suggestion": "Unknown type for extern variable D_800708D0" }, { - "type": "extern_function", - "name": "func_80028484", - "return_type": "void", - "parameters": "s16*, u16, ?", - "suggestion": "Define proper signature for func_80028484 in header" + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" }, { - "type": "extern_function", - "name": "func_800E368C", - "return_type": "void", - "parameters": "?, ?, ?", - "suggestion": "Define proper signature for func_800E368C in header" - }, + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T19:49:26.103628" + }, + { + "function_name": "func_800D828C", + "file": "src/field/field.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_800FB064", + "name": "D_80074EB0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FB064" + "suggestion": "Unknown type for extern variable D_80074EB0" }, { "type": "extern_variable", - "name": "D_800FF060", + "name": "D_80074EB4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FF060" + "suggestion": "Unknown type for extern variable D_80074EB4" }, { "type": "extern_variable", - "name": "D_800FF064", + "name": "D_80074EB8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FF064" + "suggestion": "Unknown type for extern variable D_80074EB8" }, { "type": "extern_variable", - "name": "D_800FF068", + "name": "D_800E0638", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FF068" + "suggestion": "Unknown type for extern variable D_800E0638" }, { "type": "extern_variable", - "name": "D_800FF06C", + "name": "D_800E42D8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FF06C" + "suggestion": "Unknown type for extern variable D_800E42D8" }, { "type": "extern_variable", - "name": "D_800FF070", + "name": "D_800E42DA", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FF070" + "suggestion": "Unknown type for extern variable D_800E42DA" }, { "type": "extern_variable", - "name": "D_800FF074", + "name": "D_800E42DC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FF074" + "suggestion": "Unknown type for extern variable D_800E42DC" }, { "type": "extern_variable", - "name": "D_800FF094", + "name": "D_800E42E0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FF094" + "suggestion": "Unknown type for extern variable D_800E42E0" }, { "type": "extern_variable", - "name": "D_800FF098", + "name": "D_800E42E4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FF098" + "suggestion": "Unknown type for extern variable D_800E42E4" }, { "type": "extern_variable", - "name": "D_800FF0D8", + "name": "D_800E42E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FF0D8" + "suggestion": "Unknown type for extern variable D_800E42E8" }, { "type": "extern_variable", - "name": "D_800FF0DC", + "name": "D_800E42EA", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FF0DC" + "suggestion": "Unknown type for extern variable D_800E42EA" }, { "type": "extern_variable", - "name": "D_800FF0E0", + "name": "D_800E42EE", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FF0E0" + "suggestion": "Unknown type for extern variable D_800E42EE" }, { "type": "extern_variable", - "name": "D_80103154", + "name": "D_800E48E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80103154" + "suggestion": "Unknown type for extern variable D_800E48E8" }, { - "type": "extern_variable", - "name": "D_80103158", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80103158" + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" }, { - "type": "extern_variable", - "name": "D_80103160", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80103160" - }, + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-22T19:49:26.143274" + }, + { + "function_name": "func_800D7C2C", + "file": "src/battle/battle2.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_80103188", + "name": "D_800F4CEC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80103188" + "suggestion": "Unknown type for extern variable D_800F4CEC" }, { "type": "extern_variable", - "name": "D_801031CC", + "name": "D_800F4D2C", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801031CC" + "suggestion": "Unknown type for extern variable D_800F4D2C" }, { "type": "extern_variable", - "name": "D_801031D4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801031D4" + "name": "func_800D6998", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6998" }, { "type": "extern_variable", - "name": "func_80044AC0", + "name": "func_800D6ACC", "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80044AC0" + "suggestion": "Unknown type for extern variable func_800D6ACC" }, { "type": "extern_variable", - "name": "func_80046794", + "name": "func_800D6C20", "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80046794" + "suggestion": "Unknown type for extern variable func_800D6C20" }, + { + "type": "unaligned_cast", + "cast_type": "s32", + "suggestion": "Unaligned access to s32 - may need struct packing or alignment fix" + } + ], + "timestamp": "2026-04-22T19:49:26.412679" + }, + { + "function_name": "func_80014A84", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_800F57F0", + "name": "D_80075D24", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F57F0" + "suggestion": "Unknown type for extern variable D_80075D24" }, { "type": "extern_variable", - "name": "D_800F1E54", + "name": "D_80075D28", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F1E54" + "suggestion": "Unknown type for extern variable D_80075D28" }, { "type": "extern_variable", - "name": "D_800F1E56", + "name": "D_80075DE8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F1E56" + "suggestion": "Unknown type for extern variable D_80075DE8" }, { "type": "extern_variable", - "name": "D_800F1E58", + "name": "D_8009D7E4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F1E58" + "suggestion": "Unknown type for extern variable D_8009D7E4" }, { "type": "extern_variable", - "name": "D_800F1E5A", + "name": "D_8009D7E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F1E5A" + "suggestion": "Unknown type for extern variable D_8009D7E8" }, { "type": "extern_variable", - "name": "D_800F1E5C", + "name": "D_8009D7EC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F1E5C" + "suggestion": "Unknown type for extern variable D_8009D7EC" }, { "type": "extern_variable", - "name": "D_800F1E5E", + "name": "D_8009D7ED", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F1E5E" + "suggestion": "Unknown type for extern variable D_8009D7ED" }, { "type": "extern_variable", - "name": "D_800F1E60", + "name": "D_80069508", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F1E60" + "suggestion": "Unknown type for extern variable D_80069508" }, { "type": "extern_variable", - "name": "D_800F1E62", + "name": "D_800708C8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F1E62" + "suggestion": "Unknown type for extern variable D_800708C8" }, { "type": "extern_variable", - "name": "D_800F2F8C", + "name": "D_800708D0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F2F8C" + "suggestion": "Unknown type for extern variable D_800708D0" }, { - "type": "extern_variable", - "name": "func_800DA380", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800DA380" + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" }, { - "type": "extern_variable", - "name": "D_801516FE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801516FE" - }, + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T19:49:26.893989" + }, + { + "function_name": "func_800D8194", + "file": "src/field/field.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_800492FC", + "name": "D_80074EB0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800492FC" + "suggestion": "Unknown type for extern variable D_80074EB0" }, { "type": "extern_variable", - "name": "D_800F55D8", + "name": "D_80074EB4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F55D8" + "suggestion": "Unknown type for extern variable D_80074EB4" }, { "type": "extern_variable", - "name": "func_800DDAD8", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800DDAD8" + "name": "D_80074EB8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80074EB8" }, { "type": "extern_variable", - "name": "func_800DDCE8", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800DDCE8" + "name": "D_800E0638", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800E0638" }, { "type": "extern_variable", - "name": "D_800F90C6", + "name": "D_800E42D8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F90C6" + "suggestion": "Unknown type for extern variable D_800E42D8" }, { "type": "extern_variable", - "name": "D_8009D8FE", + "name": "D_800E42DA", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D8FE" + "suggestion": "Unknown type for extern variable D_800E42DA" }, { "type": "extern_variable", - "name": "D_800F3168", + "name": "D_800E42DC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F3168" + "suggestion": "Unknown type for extern variable D_800E42DC" }, { "type": "extern_variable", - "name": "D_8009D85C", + "name": "D_800E42E0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85C" + "suggestion": "Unknown type for extern variable D_800E42E0" }, { "type": "extern_variable", - "name": "D_8009D85E", + "name": "D_800E42E4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85E" + "suggestion": "Unknown type for extern variable D_800E42E4" }, { "type": "extern_variable", - "name": "D_801031F4", + "name": "D_800E42E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801031F4" + "suggestion": "Unknown type for extern variable D_800E42E8" }, { "type": "extern_variable", - "name": "D_80151688", + "name": "D_800E42EA", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151688" + "suggestion": "Unknown type for extern variable D_800E42EA" }, { "type": "extern_variable", - "name": "D_8015174C", + "name": "D_800E42EE", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8015174C" + "suggestion": "Unknown type for extern variable D_800E42EE" }, { "type": "extern_variable", - "name": "D_8015178C", + "name": "D_800E48E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8015178C" + "suggestion": "Unknown type for extern variable D_800E48E8" }, { - "type": "extern_variable", - "name": "D_801517C8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801517C8" + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" }, + { + "type": "unknown_pointer", + "name": "var_t1", + "suggestion": "m2c could not determine type of pointer var_t1" + } + ], + "timestamp": "2026-04-22T19:49:26.913724" + }, + { + "function_name": "func_8001B834", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_8015187C", + "name": "D_80075D24", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8015187C" + "suggestion": "Unknown type for extern variable D_80075D24" }, { "type": "extern_variable", - "name": "D_800F33B0", + "name": "D_80075D28", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F33B0" + "suggestion": "Unknown type for extern variable D_80075D28" }, { "type": "extern_variable", - "name": "D_80163778", + "name": "D_80075DE8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163778" + "suggestion": "Unknown type for extern variable D_80075DE8" }, { "type": "extern_variable", - "name": "D_80163B70", + "name": "D_8009D7E4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163B70" + "suggestion": "Unknown type for extern variable D_8009D7E4" }, { "type": "extern_variable", - "name": "D_800F5778", + "name": "D_8009D7E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5778" + "suggestion": "Unknown type for extern variable D_8009D7E8" }, { "type": "extern_variable", - "name": "func_8001786C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8001786C" + "name": "D_8009D7EC", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7EC" }, { "type": "extern_variable", - "name": "func_80020058", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80020058" + "name": "D_8009D7ED", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_8009D7ED" }, { "type": "extern_variable", - "name": "D_8009D854", + "name": "D_80069508", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D854" + "suggestion": "Unknown type for extern variable D_80069508" }, { "type": "extern_variable", - "name": "D_8009D856", + "name": "D_800708C8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D856" + "suggestion": "Unknown type for extern variable D_800708C8" }, { "type": "extern_variable", - "name": "D_8009D860", + "name": "D_800708D0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D860" - }, - { - "type": "extern_variable", - "name": "D_8009DC5C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009DC5C" - }, - { - "type": "extern_variable", - "name": "D_800F577B", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F577B" - }, - { - "type": "extern_variable", - "name": "D_800F90BE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F90BE" - }, - { - "type": "extern_variable", - "name": "D_800F90BF", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F90BF" - }, - { - "type": "extern_variable", - "name": "D_801516A4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801516A4" - }, - { - "type": "extern_variable", - "name": "D_801516CC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801516CC" - }, - { - "type": "extern_variable", - "name": "D_800F90FC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F90FC" - }, - { - "type": "extern_variable", - "name": "D_800F90FE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F90FE" - }, - { - "type": "extern_variable", - "name": "D_800F9100", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9100" - }, - { - "type": "extern_variable", - "name": "D_800F9102", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9102" - }, - { - "type": "extern_variable", - "name": "D_800F9104", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9104" - }, - { - "type": "extern_variable", - "name": "D_800F9106", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9106" - }, - { - "type": "extern_variable", - "name": "D_800F9107", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9107" - }, - { - "type": "extern_variable", - "name": "D_800F9108", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9108" - }, - { - "type": "extern_variable", - "name": "D_800F9109", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9109" - }, - { - "type": "extern_variable", - "name": "D_800F910A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F910A" - }, - { - "type": "extern_variable", - "name": "D_800F910B", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F910B" - }, - { - "type": "extern_variable", - "name": "D_800F910C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F910C" - }, - { - "type": "extern_variable", - "name": "D_800F910D", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F910D" - }, - { - "type": "extern_variable", - "name": "D_800F32E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F32E4" - }, - { - "type": "extern_variable", - "name": "D_80166F78", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80166F78" - }, - { - "type": "extern_variable", - "name": "func_80046960", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80046960" - }, - { - "type": "extern_variable", - "name": "func_800468FC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800468FC" - }, - { - "type": "extern_variable", - "name": "D_800F335C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F335C" - }, - { - "type": "extern_variable", - "name": "D_800F335D", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F335D" - }, - { - "type": "extern_variable", - "name": "D_800F33AC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F33AC" - }, - { - "type": "extern_variable", - "name": "func_80028484", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80028484" - }, - { - "type": "extern_variable", - "name": "func_800E368C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800E368C" - }, - { - "type": "extern_variable", - "name": "D_8009DB94", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009DB94" - } - ], - "timestamp": "2026-04-18T12:35:26.335691" - }, - { - "function_name": "func_800D8710", - "file": "src/field/field.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80074EB0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB0" - }, - { - "type": "extern_variable", - "name": "D_80074EB4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB4" - }, - { - "type": "extern_variable", - "name": "D_80074EB8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB8" - }, - { - "type": "extern_variable", - "name": "func_800A48B8", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800A48B8" - }, - { - "type": "extern_variable", - "name": "D_80074ED9", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074ED9" - }, - { - "type": "extern_variable", - "name": "D_800DF120", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DF120" - }, - { - "type": "extern_variable", - "name": "D_800DF122", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DF122" - }, - { - "type": "extern_variable", - "name": "D_800DEF88", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DEF88" - }, - { - "type": "extern_variable", - "name": "func_800354CC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800354CC" - }, - { - "type": "extern_variable", - "name": "func_80035658", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80035658" - }, - { - "type": "extern_variable", - "name": "D_800E0638", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0638" - }, - { - "type": "extern_variable", - "name": "D_800E48F4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48F4" - }, - { - "type": "extern_variable", - "name": "D_800E48FC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48FC" - }, - { - "type": "extern_variable", - "name": "D_800E48FE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48FE" - }, - { - "type": "extern_variable", - "name": "D_800E4900", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4900" - }, - { - "type": "extern_variable", - "name": "D_800E4901", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4901" - }, - { - "type": "extern_variable", - "name": "D_800E4904", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4904" - }, - { - "type": "extern_variable", - "name": "D_800E4906", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4906" - }, - { - "type": "extern_variable", - "name": "D_800E4908", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4908" - }, - { - "type": "extern_variable", - "name": "D_800E4909", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4909" - }, - { - "type": "extern_variable", - "name": "D_800E490C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E490C" - }, - { - "type": "extern_variable", - "name": "D_800E490E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E490E" - }, - { - "type": "extern_variable", - "name": "D_800E4910", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4910" - }, - { - "type": "extern_variable", - "name": "D_800E4911", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4911" - }, - { - "type": "extern_variable", - "name": "D_800E4914", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4914" - }, - { - "type": "extern_variable", - "name": "D_800E4916", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4916" - }, - { - "type": "extern_variable", - "name": "D_800E4918", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4918" - }, - { - "type": "extern_variable", - "name": "D_800E4919", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4919" - }, - { - "type": "extern_variable", - "name": "D_8007EB98", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007EB98" - }, - { - "type": "extern_variable", - "name": "func_8001786C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8001786C" - }, - { - "type": "extern_variable", - "name": "func_80020058", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80020058" - }, - { - "type": "extern_variable", - "name": "D_800491D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800491D0" - }, - { - "type": "extern_variable", - "name": "D_8008328D", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328D" - }, - { - "type": "extern_variable", - "name": "D_800832A2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800832A2" - }, - { - "type": "extern_variable", - "name": "D_8008326C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008326C" - }, - { - "type": "extern_variable", - "name": "D_80083286", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083286" - }, - { - "type": "extern_variable", - "name": "D_80083278", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083278" - }, - { - "type": "extern_variable", - "name": "D_8008327A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327A" - }, - { - "type": "extern_variable", - "name": "D_8008327E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327E" - }, - { - "type": "extern_variable", - "name": "D_80075E24", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075E24" - }, - { - "type": "extern_variable", - "name": "D_80075E25", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075E25" - }, - { - "type": "extern_variable", - "name": "D_800E4214", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4214" - }, - { - "type": "extern_variable", - "name": "D_800E4280", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4280" - }, - { - "type": "extern_variable", - "name": "D_800E4D48", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4D48" - }, - { - "type": "extern_variable", - "name": "D_800E0748", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0748" - }, - { - "type": "extern_variable", - "name": "D_800E074A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074A" - }, - { - "type": "extern_variable", - "name": "D_800E074C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074C" - }, - { - "type": "extern_variable", - "name": "D_800E08C0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08C0" - }, - { - "type": "extern_variable", - "name": "D_800E074E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074E" - }, - { - "type": "extern_variable", - "name": "D_800E0754", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0754" - }, - { - "type": "extern_variable", - "name": "D_800E0758", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0758" - }, - { - "type": "extern_variable", - "name": "D_800E08A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08A8" - }, - { - "type": "extern_variable", - "name": "D_800E0756", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0756" - }, - { - "type": "extern_variable", - "name": "D_800E0750", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0750" - }, - { - "type": "extern_variable", - "name": "D_800E0751", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0751" - }, - { - "type": "extern_variable", - "name": "D_800E0752", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0752" - }, - { - "type": "extern_variable", - "name": "func_800D5A60", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D5A60" - }, - { - "type": "extern_variable", - "name": "func_800D5C9C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D5C9C" - }, - { - "type": "extern_variable", - "name": "func_800D6D44", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6D44" - }, - { - "type": "extern_variable", - "name": "func_800D6E0C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6E0C" - }, - { - "type": "extern_variable", - "name": "func_800D6F6C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6F6C" - }, - { - "type": "extern_variable", - "name": "D_80083284", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083284" - }, - { - "type": "extern_variable", - "name": "D_8008328A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328A" - }, - { - "type": "extern_variable", - "name": "D_8008328E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328E" - }, - { - "type": "extern_variable", - "name": "D_80083298", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083298" - }, - { - "type": "extern_variable", - "name": "D_8008329A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329A" - }, - { - "type": "extern_variable", - "name": "D_800E424C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E424C" - }, - { - "type": "extern_variable", - "name": "D_801142CC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801142CC" - }, - { - "type": "extern_variable", - "name": "D_8009AD30", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009AD30" - }, - { - "type": "extern_variable", - "name": "func_800C2E00", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C2E00" - }, - { - "type": "extern_variable", - "name": "func_800DA444", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800DA444" - }, - { - "type": "extern_variable", - "name": "func_800C8634", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C8634" - }, - { - "type": "extern_variable", - "name": "func_800CDC14", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800CDC14" - }, - { - "type": "extern_variable", - "name": "D_80095DE0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80095DE0" - }, - { - "type": "extern_variable", - "name": "func_80025B10", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80025B10" - }, - { - "type": "extern_variable", - "name": "func_800BEAD4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800BEAD4" - }, - { - "type": "extern_variable", - "name": "D_800E0208", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0208" - }, - { - "type": "extern_variable", - "name": "D_800756E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800756E8" - }, - { - "type": "extern_variable", - "name": "D_80083291", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083291" - }, - { - "type": "extern_variable", - "name": "D_80083294", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083294" - }, - { - "type": "extern_variable", - "name": "D_8007078C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007078C" - }, - { - "type": "extern_variable", - "name": "D_8007E7B8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B8" - }, - { - "type": "extern_variable", - "name": "D_8007E7BA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7BA" - }, - { - "type": "extern_variable", - "name": "D_8007E7AC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7AC" - }, - { - "type": "extern_variable", - "name": "D_8007E7AE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7AE" - }, - { - "type": "extern_variable", - "name": "D_8007E7B0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B0" - }, - { - "type": "extern_variable", - "name": "D_8007E7B2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B2" - }, - { - "type": "extern_variable", - "name": "D_8007E7B4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B4" - }, - { - "type": "extern_variable", - "name": "D_8007E7B6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B6" - }, - { - "type": "extern_variable", - "name": "D_80082248", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082248" - }, - { - "type": "extern_variable", - "name": "D_8008325C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008325C" - }, - { - "type": "extern_variable", - "name": "D_8009D828", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D828" - }, - { - "type": "extern_variable", - "name": "D_800A0854", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A0854" - }, - { - "type": "extern_variable", - "name": "D_800A0F38", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A0F38" - }, - { - "type": "extern_variable", - "name": "D_8007E7C2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7C2" - }, - { - "type": "extern_variable", - "name": "D_80049209", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049209" - }, - { - "type": "extern_variable", - "name": "D_8004920A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8004920A" - }, - { - "type": "extern_variable", - "name": "func_80044064", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80044064" - }, - { - "type": "extern_variable", - "name": "func_800C5B38", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C5B38" - }, - { - "type": "extern_variable", - "name": "D_80081D90", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80081D90" - }, - { - "type": "extern_variable", - "name": "D_80083288", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083288" - }, - { - "type": "extern_variable", - "name": "D_800E4944", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4944" - }, - { - "type": "extern_variable", - "name": "D_80114480", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80114480" - }, - { - "type": "extern_variable", - "name": "D_800E42A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42A8" - }, - { - "type": "extern_variable", - "name": "D_8008327C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327C" - }, - { - "type": "extern_variable", - "name": "D_80083280", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083280" - }, - { - "type": "extern_variable", - "name": "D_80083282", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083282" - }, - { - "type": "extern_variable", - "name": "D_8008328F", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328F" - }, - { - "type": "extern_variable", - "name": "D_80083290", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083290" - }, - { - "type": "extern_variable", - "name": "D_8008329C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329C" - }, - { - "type": "extern_variable", - "name": "D_8008329E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329E" - }, - { - "type": "extern_variable", - "name": "D_80071748", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071748" - }, - { - "type": "extern_variable", - "name": "D_800833F8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800833F8" - }, - { - "type": "extern_variable", - "name": "D_8009A1C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009A1C4" - }, - { - "type": "extern_variable", - "name": "D_800A06B0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A06B0" - }, - { - "type": "extern_variable", - "name": "D_80071A88", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071A88" - }, - { - "type": "extern_variable", - "name": "D_801142D4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801142D4" - }, - { - "type": "extern_variable", - "name": "D_800E42D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42D8" - }, - { - "type": "extern_variable", - "name": "D_800E42DA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DA" - }, - { - "type": "extern_variable", - "name": "D_800E42DC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DC" - }, - { - "type": "extern_variable", - "name": "D_800E42E0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E0" - }, - { - "type": "extern_variable", - "name": "D_800E42E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E4" - }, - { - "type": "extern_variable", - "name": "D_800E42E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E8" - }, - { - "type": "extern_variable", - "name": "D_800E42EA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EA" - }, - { - "type": "extern_variable", - "name": "D_800E42EE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EE" - }, - { - "type": "extern_variable", - "name": "D_800E48E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48E8" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - } - ], - "timestamp": "2026-04-18T12:35:26.854381" - }, - { - "function_name": "func_8002F848", - "file": "src/main/akao.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "SpuSetVoiceARAttr", - "return_type": "unknown", - "parameters": "s32, u16, s32", - "suggestion": "Define proper signature for SpuSetVoiceARAttr in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoiceDR", - "return_type": "unknown", - "parameters": "s32, u16", - "suggestion": "Define proper signature for SpuSetVoiceDR in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoiceLoopStartAddr", - "return_type": "unknown", - "parameters": "s32, s32", - "suggestion": "Define proper signature for SpuSetVoiceLoopStartAddr in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoicePitch", - "return_type": "unknown", - "parameters": "u16", - "suggestion": "Define proper signature for SpuSetVoicePitch in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoiceRRAttr", - "return_type": "unknown", - "parameters": "s32, u16, s32", - "suggestion": "Define proper signature for SpuSetVoiceRRAttr in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoiceSL", - "return_type": "unknown", - "parameters": "s32, u16", - "suggestion": "Define proper signature for SpuSetVoiceSL in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoiceSRAttr", - "return_type": "unknown", - "parameters": "s32, u16, s32", - "suggestion": "Define proper signature for SpuSetVoiceSRAttr in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoiceStartAddr", - "return_type": "unknown", - "parameters": "s32, s32", - "suggestion": "Define proper signature for SpuSetVoiceStartAddr in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoiceVolume", - "return_type": "unknown", - "parameters": "s32, s16, s16", - "suggestion": "Define proper signature for SpuSetVoiceVolume in header" - }, - { - "type": "extern_variable", - "name": "D_80049C40", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049C40" - }, - { - "type": "extern_variable", - "name": "func_8002BD04", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002BD04" - }, - { - "type": "extern_variable", - "name": "func_8002BFCC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002BFCC" - }, - { - "type": "extern_variable", - "name": "func_8002C004", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002C004" - }, - { - "type": "extern_variable", - "name": "func_8002C2CC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002C2CC" - }, - { - "type": "extern_variable", - "name": "func_8002C300", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002C300" - }, - { - "type": "extern_variable", - "name": "D_8007EBE4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007EBE4" - }, - { - "type": "extern_variable", - "name": "func_80030038", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80030038" - }, - { - "type": "extern_variable", - "name": "D_80081DC8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80081DC8" - }, - { - "type": "extern_variable", - "name": "D_800499A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800499A8" - }, - { - "type": "extern_variable", - "name": "D_80096704", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80096704" - }, - { - "type": "extern_variable", - "name": "func_800293D0", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800293D0" - } - ], - "timestamp": "2026-04-18T12:35:27.369979" - }, - { - "function_name": "func_800D4710", - "file": "src/battle/battle2.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "func_8003BD7C", - "return_type": "s32", - "parameters": "?*, ?*, ?*, ?*, u32*, void*, DR_MODE*, void*, ?*, ?*", - "suggestion": "Define proper signature for func_8003BD7C in header" - }, - { - "type": "extern_variable", - "name": "func_8003B51C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8003B51C" - }, - { - "type": "extern_variable", - "name": "func_800D4284", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D4284" - }, - { - "type": "extern_variable", - "name": "D_800F0C44", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F0C44" - }, - { - "type": "extern_variable", - "name": "func_800D6840", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6840" - }, - { - "type": "extern_variable", - "name": "D_800F15AC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F15AC" - }, - { - "type": "extern_variable", - "name": "func_8003C21C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8003C21C" - }, - { - "type": "extern_variable", - "name": "func_80046794", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80046794" - }, - { - "type": "extern_variable", - "name": "D_800F1914", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F1914" - }, - { - "type": "extern_variable", - "name": "D_800F191C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F191C" - }, - { - "type": "extern_variable", - "name": "D_800F1924", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F1924" - }, - { - "type": "extern_variable", - "name": "D_800F192C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F192C" - }, - { - "type": "unknown_variable", - "name": "sp48", - "suggestion": "m2c could not determine type of variable sp48" - }, - { - "type": "unknown_variable", - "name": "sp4C", - "suggestion": "m2c could not determine type of variable sp4C" - } - ], - "timestamp": "2026-04-18T12:35:27.410742" - }, - { - "function_name": "func_800A17C0", - "file": "src/ending/ending.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "func_8004656C", - "return_type": "s16", - "parameters": "s32, ?, s16, s16", - "suggestion": "Define proper signature for func_8004656C in header" - }, - { - "type": "extern_variable", - "name": "func_80043D3C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80043D3C" - }, - { - "type": "extern_variable", - "name": "func_800443B0", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800443B0" - }, - { - "type": "extern_variable", - "name": "func_800444AC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800444AC" - }, - { - "type": "extern_variable", - "name": "D_800AF2E0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800AF2E0" - }, - { - "type": "extern_variable", - "name": "D_800AF398", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800AF398" - }, - { - "type": "extern_variable", - "name": "func_80039EDC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80039EDC" - }, - { - "type": "extern_variable", - "name": "func_8003D0C0", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8003D0C0" - }, - { - "type": "extern_variable", - "name": "func_8003D1B4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8003D1B4" - }, - { - "type": "extern_variable", - "name": "func_80036244", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80036244" - }, - { - "type": "extern_variable", - "name": "func_80044000", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80044000" - }, - { - "type": "extern_variable", - "name": "func_80046CFC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80046CFC" - }, - { - "type": "extern_variable", - "name": "func_80046D0C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80046D0C" - } - ], - "timestamp": "2026-04-18T12:35:27.498718" - }, - { - "function_name": "func_800AAB24", - "file": "src/field/field.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80074EB0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB0" - }, - { - "type": "extern_variable", - "name": "D_80074EB4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB4" - }, - { - "type": "extern_variable", - "name": "D_80074EB8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB8" - }, - { - "type": "extern_variable", - "name": "func_800A48B8", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800A48B8" - }, - { - "type": "extern_variable", - "name": "D_80074ED9", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074ED9" - }, - { - "type": "extern_variable", - "name": "D_800DF120", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DF120" - }, - { - "type": "extern_variable", - "name": "D_800DF122", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DF122" - }, - { - "type": "extern_variable", - "name": "D_800DEF88", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DEF88" - }, - { - "type": "extern_variable", - "name": "func_800354CC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800354CC" - }, - { - "type": "extern_variable", - "name": "func_80035658", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80035658" - }, - { - "type": "extern_variable", - "name": "D_800E0638", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0638" - }, - { - "type": "extern_variable", - "name": "D_800E48F4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48F4" - }, - { - "type": "extern_variable", - "name": "D_800E48FC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48FC" - }, - { - "type": "extern_variable", - "name": "D_800E48FE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48FE" - }, - { - "type": "extern_variable", - "name": "D_800E4900", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4900" - }, - { - "type": "extern_variable", - "name": "D_800E4901", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4901" - }, - { - "type": "extern_variable", - "name": "D_800E4904", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4904" - }, - { - "type": "extern_variable", - "name": "D_800E4906", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4906" - }, - { - "type": "extern_variable", - "name": "D_800E4908", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4908" - }, - { - "type": "extern_variable", - "name": "D_800E4909", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4909" - }, - { - "type": "extern_variable", - "name": "D_800E490C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E490C" - }, - { - "type": "extern_variable", - "name": "D_800E490E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E490E" - }, - { - "type": "extern_variable", - "name": "D_800E4910", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4910" - }, - { - "type": "extern_variable", - "name": "D_800E4911", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4911" - }, - { - "type": "extern_variable", - "name": "D_800E4914", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4914" - }, - { - "type": "extern_variable", - "name": "D_800E4916", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4916" - }, - { - "type": "extern_variable", - "name": "D_800E4918", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4918" - }, - { - "type": "extern_variable", - "name": "D_800E4919", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4919" - }, - { - "type": "extern_variable", - "name": "D_8007EB98", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007EB98" - }, - { - "type": "extern_variable", - "name": "func_8001786C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8001786C" - }, - { - "type": "extern_variable", - "name": "func_80020058", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80020058" - }, - { - "type": "extern_variable", - "name": "D_800491D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800491D0" - }, - { - "type": "extern_variable", - "name": "D_8008328D", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328D" - }, - { - "type": "extern_variable", - "name": "D_800832A2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800832A2" - }, - { - "type": "extern_variable", - "name": "D_8008326C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008326C" - }, - { - "type": "extern_variable", - "name": "D_80083286", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083286" - }, - { - "type": "extern_variable", - "name": "D_80083278", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083278" - }, - { - "type": "extern_variable", - "name": "D_8008327A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327A" - }, - { - "type": "extern_variable", - "name": "D_8008327E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327E" - }, - { - "type": "extern_variable", - "name": "D_80075E24", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075E24" - }, - { - "type": "extern_variable", - "name": "D_80075E25", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075E25" - }, - { - "type": "extern_variable", - "name": "D_800E4214", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4214" - }, - { - "type": "extern_variable", - "name": "D_800E4280", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4280" - }, - { - "type": "extern_variable", - "name": "D_800E4D48", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4D48" - }, - { - "type": "extern_variable", - "name": "D_800E0748", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0748" - }, - { - "type": "extern_variable", - "name": "D_800E074A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074A" - }, - { - "type": "extern_variable", - "name": "D_800E074C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074C" - }, - { - "type": "extern_variable", - "name": "D_800E08C0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08C0" - }, - { - "type": "extern_variable", - "name": "D_800E074E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074E" - }, - { - "type": "extern_variable", - "name": "D_800E0754", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0754" - }, - { - "type": "extern_variable", - "name": "D_800E0758", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0758" - }, - { - "type": "extern_variable", - "name": "D_800E08A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08A8" - }, - { - "type": "extern_variable", - "name": "D_800E0756", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0756" - }, - { - "type": "extern_variable", - "name": "D_800E0750", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0750" - }, - { - "type": "extern_variable", - "name": "D_800E0751", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0751" - }, - { - "type": "extern_variable", - "name": "D_800E0752", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0752" - }, - { - "type": "extern_variable", - "name": "func_800D5A60", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D5A60" - }, - { - "type": "extern_variable", - "name": "func_800D5C9C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D5C9C" - }, - { - "type": "extern_variable", - "name": "func_800D6D44", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6D44" - }, - { - "type": "extern_variable", - "name": "func_800D6E0C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6E0C" - }, - { - "type": "extern_variable", - "name": "func_800D6F6C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6F6C" - }, - { - "type": "extern_variable", - "name": "D_80083284", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083284" - }, - { - "type": "extern_variable", - "name": "D_8008328A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328A" - }, - { - "type": "extern_variable", - "name": "D_8008328E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328E" - }, - { - "type": "extern_variable", - "name": "D_80083298", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083298" - }, - { - "type": "extern_variable", - "name": "D_8008329A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329A" - }, - { - "type": "extern_variable", - "name": "D_800E424C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E424C" - }, - { - "type": "extern_variable", - "name": "D_801142CC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801142CC" - }, - { - "type": "extern_variable", - "name": "D_8009AD30", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009AD30" - }, - { - "type": "extern_variable", - "name": "func_800C2E00", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C2E00" - }, - { - "type": "extern_variable", - "name": "func_800DA444", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800DA444" - }, - { - "type": "extern_variable", - "name": "func_800C8634", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C8634" - }, - { - "type": "extern_variable", - "name": "func_800CDC14", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800CDC14" - }, - { - "type": "extern_variable", - "name": "D_80095DE0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80095DE0" - }, - { - "type": "extern_variable", - "name": "func_80025B10", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80025B10" - }, - { - "type": "extern_variable", - "name": "func_800BEAD4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800BEAD4" - }, - { - "type": "extern_variable", - "name": "D_800E0208", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0208" - }, - { - "type": "extern_variable", - "name": "D_800756E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800756E8" - }, - { - "type": "extern_variable", - "name": "D_80083291", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083291" - }, - { - "type": "extern_variable", - "name": "D_80083294", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083294" - }, - { - "type": "extern_variable", - "name": "D_8007078C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007078C" - }, - { - "type": "extern_variable", - "name": "D_8007E7B8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B8" - }, - { - "type": "extern_variable", - "name": "D_8007E7BA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7BA" - }, - { - "type": "extern_variable", - "name": "D_8007E7AC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7AC" - }, - { - "type": "extern_variable", - "name": "D_8007E7AE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7AE" - }, - { - "type": "extern_variable", - "name": "D_8007E7B0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B0" - }, - { - "type": "extern_variable", - "name": "D_8007E7B2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B2" - }, - { - "type": "extern_variable", - "name": "D_8007E7B4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B4" - }, - { - "type": "extern_variable", - "name": "D_8007E7B6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B6" - }, - { - "type": "extern_variable", - "name": "D_80082248", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082248" - }, - { - "type": "extern_variable", - "name": "D_8008325C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008325C" - }, - { - "type": "extern_variable", - "name": "D_8009D828", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D828" - }, - { - "type": "extern_variable", - "name": "D_800A0854", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A0854" - }, - { - "type": "extern_variable", - "name": "D_800A0F38", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A0F38" - }, - { - "type": "extern_variable", - "name": "D_8007E7C2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7C2" - }, - { - "type": "extern_variable", - "name": "D_80049209", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049209" - }, - { - "type": "extern_variable", - "name": "D_8004920A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8004920A" - }, - { - "type": "extern_variable", - "name": "func_80044064", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80044064" - }, - { - "type": "extern_variable", - "name": "func_800C5B38", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C5B38" - }, - { - "type": "extern_variable", - "name": "D_80081D90", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80081D90" - }, - { - "type": "extern_variable", - "name": "D_80083288", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083288" - }, - { - "type": "extern_variable", - "name": "D_800E4944", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4944" - }, - { - "type": "extern_variable", - "name": "D_80114480", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80114480" - }, - { - "type": "extern_variable", - "name": "D_800E42A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42A8" - }, - { - "type": "extern_variable", - "name": "D_8008327C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327C" - }, - { - "type": "extern_variable", - "name": "D_80083280", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083280" - }, - { - "type": "extern_variable", - "name": "D_80083282", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083282" - }, - { - "type": "extern_variable", - "name": "D_8008328F", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328F" - }, - { - "type": "extern_variable", - "name": "D_80083290", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083290" - }, - { - "type": "extern_variable", - "name": "D_8008329C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329C" - }, - { - "type": "extern_variable", - "name": "D_8008329E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329E" - }, - { - "type": "extern_variable", - "name": "D_80071748", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071748" - }, - { - "type": "extern_variable", - "name": "D_800833F8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800833F8" - }, - { - "type": "extern_variable", - "name": "D_8009A1C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009A1C4" - }, - { - "type": "extern_variable", - "name": "D_800A06B0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A06B0" - }, - { - "type": "extern_variable", - "name": "D_80071A88", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071A88" - }, - { - "type": "extern_variable", - "name": "D_801142D4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801142D4" - }, - { - "type": "extern_variable", - "name": "D_800E42D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42D8" - }, - { - "type": "extern_variable", - "name": "D_800E42DA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DA" - }, - { - "type": "extern_variable", - "name": "D_800E42DC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DC" - }, - { - "type": "extern_variable", - "name": "D_800E42E0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E0" - }, - { - "type": "extern_variable", - "name": "D_800E42E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E4" - }, - { - "type": "extern_variable", - "name": "D_800E42E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E8" - }, - { - "type": "extern_variable", - "name": "D_800E42EA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EA" - }, - { - "type": "extern_variable", - "name": "D_800E42EE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EE" - }, - { - "type": "extern_variable", - "name": "D_800E48E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48E8" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - } - ], - "timestamp": "2026-04-18T12:35:28.281213" - }, - { - "function_name": "func_800B33A4", - "file": "src/battle/battle1.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "func_800B5E64", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800B5E64" - }, - { - "type": "extern_variable", - "name": "D_800F8384", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F8384" - }, - { - "type": "extern_variable", - "name": "D_80103200", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80103200" - }, - { - "type": "extern_variable", - "name": "D_800F7E10", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7E10" - }, - { - "type": "extern_variable", - "name": "D_800F8180", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F8180" - }, - { - "type": "extern_variable", - "name": "D_800E8E88", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E8E88" - }, - { - "type": "extern_variable", - "name": "D_800E8F94", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E8F94" - }, - { - "type": "extern_variable", - "name": "func_800B7DB4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800B7DB4" - }, - { - "type": "extern_variable", - "name": "D_800FA9D1", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FA9D1" - }, - { - "type": "extern_variable", - "name": "D_80163CC0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163CC0" - }, - { - "type": "extern_variable", - "name": "D_80163CC2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163CC2" - }, - { - "type": "extern_variable", - "name": "D_80163CC4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163CC4" - }, - { - "type": "extern_variable", - "name": "D_800F99EC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F99EC" - }, - { - "type": "extern_variable", - "name": "D_800F99EE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F99EE" - }, - { - "type": "extern_variable", - "name": "D_800F99F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F99F0" - }, - { - "type": "extern_variable", - "name": "D_800F99F2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F99F2" - }, - { - "type": "extern_variable", - "name": "D_800F99F4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F99F4" - }, - { - "type": "extern_variable", - "name": "D_800F99F6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F99F6" - }, - { - "type": "extern_variable", - "name": "D_800FA9D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FA9D8" - }, - { - "type": "extern_variable", - "name": "D_801517F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801517F0" - }, - { - "type": "extern_variable", - "name": "D_800F7E08", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7E08" - }, - { - "type": "extern_variable", - "name": "D_801516FE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801516FE" - }, - { - "type": "extern_variable", - "name": "D_80151700", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151700" - }, - { - "type": "extern_variable", - "name": "D_80151702", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151702" - }, - { - "type": "extern_variable", - "name": "D_800F8178", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F8178" - }, - { - "type": "extern_variable", - "name": "D_800F8184", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F8184" - }, - { - "type": "extern_variable", - "name": "D_80163B44", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163B44" - }, - { - "type": "extern_variable", - "name": "D_801590E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801590E4" - }, - { - "type": "extern_variable", - "name": "D_801590E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801590E8" - }, - { - "type": "extern_variable", - "name": "D_800F7ED8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7ED8" - }, - { - "type": "extern_variable", - "name": "D_800F7EDA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EDA" - }, - { - "type": "extern_variable", - "name": "D_80151844", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151844" - }, - { - "type": "extern_variable", - "name": "D_80151846", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151846" - }, - { - "type": "extern_variable", - "name": "D_80151848", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151848" - }, - { - "type": "extern_variable", - "name": "D_801518A4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801518A4" - }, - { - "type": "extern_variable", - "name": "D_801518A6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801518A6" - }, - { - "type": "extern_variable", - "name": "D_801518A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801518A8" - }, - { - "type": "extern_variable", - "name": "D_800F7EF0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EF0" - }, - { - "type": "extern_variable", - "name": "D_800F7EDC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EDC" - }, - { - "type": "extern_variable", - "name": "D_800F7EDE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EDE" - }, - { - "type": "extern_variable", - "name": "D_800F7EE0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EE0" - }, - { - "type": "extern_variable", - "name": "D_800F7EE2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EE2" - }, - { - "type": "extern_variable", - "name": "D_800F7EE4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EE4" - }, - { - "type": "extern_variable", - "name": "D_800F7EE6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EE6" - }, - { - "type": "extern_variable", - "name": "D_800F7EE8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EE8" - }, - { - "type": "extern_variable", - "name": "func_800C0480", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C0480" - }, - { - "type": "extern_variable", - "name": "func_800C0630", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C0630" - }, - { - "type": "extern_variable", - "name": "func_800C0970", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C0970" - }, - { - "type": "extern_variable", - "name": "func_800C0B20", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C0B20" - }, - { - "type": "extern_variable", - "name": "D_80151850", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151850" - }, - { - "type": "extern_variable", - "name": "func_800B5AAC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800B5AAC" - }, - { - "type": "extern_variable", - "name": "func_800C36B4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C36B4" - }, - { - "type": "extern_variable", - "name": "func_800B4E30", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800B4E30" - }, - { - "type": "extern_variable", - "name": "func_800B54B8", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800B54B8" - }, - { - "type": "extern_variable", - "name": "func_800D09D0", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D09D0" - }, - { - "type": "extern_variable", - "name": "D_800F9DAA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9DAA" - }, - { - "type": "extern_variable", - "name": "D_800F9DAC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9DAC" - }, - { - "type": "extern_variable", - "name": "D_800FA9C6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FA9C6" - }, - { - "type": "extern_variable", - "name": "D_800F8CF4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F8CF4" - }, - { - "type": "extern_variable", - "name": "func_801B0050", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_801B0050" - }, - { - "type": "extern_variable", - "name": "func_800C74E4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C74E4" - }, - { - "type": "extern_variable", - "name": "D_800F4B0C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4B0C" - }, - { - "type": "extern_variable", - "name": "D_801AFFC0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801AFFC0" - }, - { - "type": "extern_variable", - "name": "func_8003CEBC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8003CEBC" - }, - { - "type": "extern_variable", - "name": "func_8003D1B4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8003D1B4" - }, - { - "type": "extern_variable", - "name": "func_80043938", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80043938" - }, - { - "type": "extern_variable", - "name": "func_80046960", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80046960" - }, - { - "type": "extern_variable", - "name": "func_8003BC9C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8003BC9C" - }, - { - "type": "extern_variable", - "name": "func_800468FC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800468FC" - }, - { - "type": "extern_variable", - "name": "D_800EA264", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800EA264" - } - ], - "timestamp": "2026-04-18T12:35:29.106671" - }, - { - "function_name": "func_800B9B0C", - "file": "src/field/field.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80074EB0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB0" - }, - { - "type": "extern_variable", - "name": "D_80074EB4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB4" - }, - { - "type": "extern_variable", - "name": "D_80074EB8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB8" - }, - { - "type": "extern_variable", - "name": "func_800A48B8", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800A48B8" - }, - { - "type": "extern_variable", - "name": "D_80074ED9", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074ED9" - }, - { - "type": "extern_variable", - "name": "D_800DF120", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DF120" - }, - { - "type": "extern_variable", - "name": "D_800DF122", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DF122" - }, - { - "type": "extern_variable", - "name": "D_800DEF88", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DEF88" - }, - { - "type": "extern_variable", - "name": "func_800354CC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800354CC" - }, - { - "type": "extern_variable", - "name": "func_80035658", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80035658" - }, - { - "type": "extern_variable", - "name": "D_800E0638", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0638" - }, - { - "type": "extern_variable", - "name": "D_800E48F4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48F4" - }, - { - "type": "extern_variable", - "name": "D_800E48FC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48FC" - }, - { - "type": "extern_variable", - "name": "D_800E48FE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48FE" - }, - { - "type": "extern_variable", - "name": "D_800E4900", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4900" - }, - { - "type": "extern_variable", - "name": "D_800E4901", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4901" - }, - { - "type": "extern_variable", - "name": "D_800E4904", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4904" - }, - { - "type": "extern_variable", - "name": "D_800E4906", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4906" - }, - { - "type": "extern_variable", - "name": "D_800E4908", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4908" - }, - { - "type": "extern_variable", - "name": "D_800E4909", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4909" - }, - { - "type": "extern_variable", - "name": "D_800E490C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E490C" - }, - { - "type": "extern_variable", - "name": "D_800E490E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E490E" - }, - { - "type": "extern_variable", - "name": "D_800E4910", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4910" - }, - { - "type": "extern_variable", - "name": "D_800E4911", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4911" - }, - { - "type": "extern_variable", - "name": "D_800E4914", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4914" - }, - { - "type": "extern_variable", - "name": "D_800E4916", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4916" - }, - { - "type": "extern_variable", - "name": "D_800E4918", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4918" - }, - { - "type": "extern_variable", - "name": "D_800E4919", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4919" - }, - { - "type": "extern_variable", - "name": "D_8007EB98", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007EB98" - }, - { - "type": "extern_variable", - "name": "func_8001786C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8001786C" - }, - { - "type": "extern_variable", - "name": "func_80020058", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80020058" - }, - { - "type": "extern_variable", - "name": "D_800491D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800491D0" - }, - { - "type": "extern_variable", - "name": "D_8008328D", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328D" - }, - { - "type": "extern_variable", - "name": "D_800832A2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800832A2" - }, - { - "type": "extern_variable", - "name": "D_8008326C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008326C" - }, - { - "type": "extern_variable", - "name": "D_80083286", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083286" - }, - { - "type": "extern_variable", - "name": "D_80083278", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083278" - }, - { - "type": "extern_variable", - "name": "D_8008327A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327A" - }, - { - "type": "extern_variable", - "name": "D_8008327E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327E" - }, - { - "type": "extern_variable", - "name": "D_80075E24", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075E24" - }, - { - "type": "extern_variable", - "name": "D_80075E25", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075E25" - }, - { - "type": "extern_variable", - "name": "D_800E4214", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4214" - }, - { - "type": "extern_variable", - "name": "D_800E4280", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4280" - }, - { - "type": "extern_variable", - "name": "D_800E4D48", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4D48" - }, - { - "type": "extern_variable", - "name": "D_800E0748", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0748" - }, - { - "type": "extern_variable", - "name": "D_800E074A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074A" - }, - { - "type": "extern_variable", - "name": "D_800E074C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074C" - }, - { - "type": "extern_variable", - "name": "D_800E08C0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08C0" - }, - { - "type": "extern_variable", - "name": "D_800E074E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074E" - }, - { - "type": "extern_variable", - "name": "D_800E0754", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0754" - }, - { - "type": "extern_variable", - "name": "D_800E0758", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0758" - }, - { - "type": "extern_variable", - "name": "D_800E08A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08A8" - }, - { - "type": "extern_variable", - "name": "D_800E0756", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0756" - }, - { - "type": "extern_variable", - "name": "D_800E0750", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0750" - }, - { - "type": "extern_variable", - "name": "D_800E0751", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0751" - }, - { - "type": "extern_variable", - "name": "D_800E0752", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0752" - }, - { - "type": "extern_variable", - "name": "func_800D5A60", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D5A60" - }, - { - "type": "extern_variable", - "name": "func_800D5C9C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D5C9C" - }, - { - "type": "extern_variable", - "name": "func_800D6D44", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6D44" - }, - { - "type": "extern_variable", - "name": "func_800D6E0C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6E0C" - }, - { - "type": "extern_variable", - "name": "func_800D6F6C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6F6C" - }, - { - "type": "extern_variable", - "name": "D_80083284", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083284" - }, - { - "type": "extern_variable", - "name": "D_8008328A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328A" - }, - { - "type": "extern_variable", - "name": "D_8008328E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328E" - }, - { - "type": "extern_variable", - "name": "D_80083298", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083298" - }, - { - "type": "extern_variable", - "name": "D_8008329A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329A" - }, - { - "type": "extern_variable", - "name": "D_800E424C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E424C" - }, - { - "type": "extern_variable", - "name": "D_801142CC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801142CC" - }, - { - "type": "extern_variable", - "name": "D_8009AD30", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009AD30" - }, - { - "type": "extern_variable", - "name": "func_800C2E00", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C2E00" - }, - { - "type": "extern_variable", - "name": "func_800DA444", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800DA444" - }, - { - "type": "extern_variable", - "name": "func_800C8634", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C8634" - }, - { - "type": "extern_variable", - "name": "func_800CDC14", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800CDC14" - }, - { - "type": "extern_variable", - "name": "D_80095DE0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80095DE0" - }, - { - "type": "extern_variable", - "name": "func_80025B10", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80025B10" - }, - { - "type": "extern_variable", - "name": "func_800BEAD4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800BEAD4" - }, - { - "type": "extern_variable", - "name": "D_800E0208", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0208" - }, - { - "type": "extern_variable", - "name": "D_800756E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800756E8" - }, - { - "type": "extern_variable", - "name": "D_80083291", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083291" - }, - { - "type": "extern_variable", - "name": "D_80083294", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083294" - }, - { - "type": "extern_variable", - "name": "D_8007078C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007078C" - }, - { - "type": "extern_variable", - "name": "D_8007E7B8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B8" - }, - { - "type": "extern_variable", - "name": "D_8007E7BA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7BA" - }, - { - "type": "extern_variable", - "name": "D_8007E7AC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7AC" - }, - { - "type": "extern_variable", - "name": "D_8007E7AE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7AE" - }, - { - "type": "extern_variable", - "name": "D_8007E7B0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B0" - }, - { - "type": "extern_variable", - "name": "D_8007E7B2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B2" - }, - { - "type": "extern_variable", - "name": "D_8007E7B4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B4" - }, - { - "type": "extern_variable", - "name": "D_8007E7B6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B6" - }, - { - "type": "extern_variable", - "name": "D_80082248", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082248" - }, - { - "type": "extern_variable", - "name": "D_8008325C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008325C" - }, - { - "type": "extern_variable", - "name": "D_8009D828", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D828" - }, - { - "type": "extern_variable", - "name": "D_800A0854", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A0854" - }, - { - "type": "extern_variable", - "name": "D_800A0F38", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A0F38" - }, - { - "type": "extern_variable", - "name": "D_8007E7C2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7C2" - }, - { - "type": "extern_variable", - "name": "D_80049209", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049209" - }, - { - "type": "extern_variable", - "name": "D_8004920A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8004920A" - }, - { - "type": "extern_variable", - "name": "func_80044064", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80044064" - }, - { - "type": "extern_variable", - "name": "func_800C5B38", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C5B38" - }, - { - "type": "extern_variable", - "name": "D_80081D90", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80081D90" - }, - { - "type": "extern_variable", - "name": "D_80083288", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083288" - }, - { - "type": "extern_variable", - "name": "D_800E4944", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4944" - }, - { - "type": "extern_variable", - "name": "D_80114480", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80114480" - }, - { - "type": "extern_variable", - "name": "D_800E42A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42A8" - }, - { - "type": "extern_variable", - "name": "D_8008327C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327C" - }, - { - "type": "extern_variable", - "name": "D_80083280", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083280" - }, - { - "type": "extern_variable", - "name": "D_80083282", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083282" - }, - { - "type": "extern_variable", - "name": "D_8008328F", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328F" - }, - { - "type": "extern_variable", - "name": "D_80083290", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083290" - }, - { - "type": "extern_variable", - "name": "D_8008329C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329C" - }, - { - "type": "extern_variable", - "name": "D_8008329E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329E" - }, - { - "type": "extern_variable", - "name": "D_80071748", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071748" - }, - { - "type": "extern_variable", - "name": "D_800833F8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800833F8" - }, - { - "type": "extern_variable", - "name": "D_8009A1C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009A1C4" - }, - { - "type": "extern_variable", - "name": "D_800A06B0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A06B0" - }, - { - "type": "extern_variable", - "name": "D_80071A88", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071A88" - }, - { - "type": "extern_variable", - "name": "D_801142D4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801142D4" - }, - { - "type": "extern_variable", - "name": "D_800E42D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42D8" - }, - { - "type": "extern_variable", - "name": "D_800E42DA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DA" - }, - { - "type": "extern_variable", - "name": "D_800E42DC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DC" - }, - { - "type": "extern_variable", - "name": "D_800E42E0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E0" - }, - { - "type": "extern_variable", - "name": "D_800E42E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E4" - }, - { - "type": "extern_variable", - "name": "D_800E42E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E8" - }, - { - "type": "extern_variable", - "name": "D_800E42EA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EA" - }, - { - "type": "extern_variable", - "name": "D_800E42EE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EE" - }, - { - "type": "extern_variable", - "name": "D_800E48E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48E8" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - } - ], - "timestamp": "2026-04-18T12:35:29.305029" - }, - { - "function_name": "func_800A4BEC", - "file": "src/field/field.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80074EB0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB0" - }, - { - "type": "extern_variable", - "name": "D_80074EB4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB4" - }, - { - "type": "extern_variable", - "name": "D_80074EB8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB8" - }, - { - "type": "extern_variable", - "name": "func_800A48B8", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800A48B8" - }, - { - "type": "extern_variable", - "name": "D_80074ED9", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074ED9" - }, - { - "type": "extern_variable", - "name": "D_800DF120", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DF120" - }, - { - "type": "extern_variable", - "name": "D_800DF122", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DF122" - }, - { - "type": "extern_variable", - "name": "D_800DEF88", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DEF88" - }, - { - "type": "extern_variable", - "name": "func_800354CC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800354CC" - }, - { - "type": "extern_variable", - "name": "func_80035658", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80035658" - }, - { - "type": "extern_variable", - "name": "D_800E0638", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0638" - }, - { - "type": "extern_variable", - "name": "D_800E48F4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48F4" - }, - { - "type": "extern_variable", - "name": "D_800E48FC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48FC" - }, - { - "type": "extern_variable", - "name": "D_800E48FE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48FE" - }, - { - "type": "extern_variable", - "name": "D_800E4900", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4900" - }, - { - "type": "extern_variable", - "name": "D_800E4901", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4901" - }, - { - "type": "extern_variable", - "name": "D_800E4904", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4904" - }, - { - "type": "extern_variable", - "name": "D_800E4906", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4906" - }, - { - "type": "extern_variable", - "name": "D_800E4908", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4908" - }, - { - "type": "extern_variable", - "name": "D_800E4909", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4909" - }, - { - "type": "extern_variable", - "name": "D_800E490C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E490C" - }, - { - "type": "extern_variable", - "name": "D_800E490E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E490E" - }, - { - "type": "extern_variable", - "name": "D_800E4910", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4910" - }, - { - "type": "extern_variable", - "name": "D_800E4911", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4911" - }, - { - "type": "extern_variable", - "name": "D_800E4914", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4914" - }, - { - "type": "extern_variable", - "name": "D_800E4916", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4916" - }, - { - "type": "extern_variable", - "name": "D_800E4918", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4918" - }, - { - "type": "extern_variable", - "name": "D_800E4919", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4919" - }, - { - "type": "extern_variable", - "name": "D_8007EB98", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007EB98" - }, - { - "type": "extern_variable", - "name": "func_8001786C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8001786C" - }, - { - "type": "extern_variable", - "name": "func_80020058", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80020058" - }, - { - "type": "extern_variable", - "name": "D_800491D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800491D0" - }, - { - "type": "extern_variable", - "name": "D_8008328D", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328D" - }, - { - "type": "extern_variable", - "name": "D_800832A2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800832A2" - }, - { - "type": "extern_variable", - "name": "D_8008326C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008326C" - }, - { - "type": "extern_variable", - "name": "D_80083286", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083286" - }, - { - "type": "extern_variable", - "name": "D_80083278", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083278" - }, - { - "type": "extern_variable", - "name": "D_8008327A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327A" - }, - { - "type": "extern_variable", - "name": "D_8008327E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327E" - }, - { - "type": "extern_variable", - "name": "D_80075E24", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075E24" - }, - { - "type": "extern_variable", - "name": "D_80075E25", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075E25" - }, - { - "type": "extern_variable", - "name": "D_800E4214", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4214" - }, - { - "type": "extern_variable", - "name": "D_800E4280", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4280" - }, - { - "type": "extern_variable", - "name": "D_800E4D48", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4D48" - }, - { - "type": "extern_variable", - "name": "D_800E0748", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0748" - }, - { - "type": "extern_variable", - "name": "D_800E074A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074A" - }, - { - "type": "extern_variable", - "name": "D_800E074C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074C" - }, - { - "type": "extern_variable", - "name": "D_800E08C0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08C0" - }, - { - "type": "extern_variable", - "name": "D_800E074E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074E" - }, - { - "type": "extern_variable", - "name": "D_800E0754", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0754" - }, - { - "type": "extern_variable", - "name": "D_800E0758", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0758" - }, - { - "type": "extern_variable", - "name": "D_800E08A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08A8" - }, - { - "type": "extern_variable", - "name": "D_800E0756", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0756" - }, - { - "type": "extern_variable", - "name": "D_800E0750", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0750" - }, - { - "type": "extern_variable", - "name": "D_800E0751", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0751" - }, - { - "type": "extern_variable", - "name": "D_800E0752", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0752" - }, - { - "type": "extern_variable", - "name": "func_800D5A60", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D5A60" - }, - { - "type": "extern_variable", - "name": "func_800D5C9C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D5C9C" - }, - { - "type": "extern_variable", - "name": "func_800D6D44", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6D44" - }, - { - "type": "extern_variable", - "name": "func_800D6E0C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6E0C" - }, - { - "type": "extern_variable", - "name": "func_800D6F6C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6F6C" - }, - { - "type": "extern_variable", - "name": "D_80083284", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083284" - }, - { - "type": "extern_variable", - "name": "D_8008328A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328A" - }, - { - "type": "extern_variable", - "name": "D_8008328E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328E" - }, - { - "type": "extern_variable", - "name": "D_80083298", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083298" - }, - { - "type": "extern_variable", - "name": "D_8008329A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329A" - }, - { - "type": "extern_variable", - "name": "D_800E424C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E424C" - }, - { - "type": "extern_variable", - "name": "D_801142CC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801142CC" - }, - { - "type": "extern_variable", - "name": "D_8009AD30", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009AD30" - }, - { - "type": "extern_variable", - "name": "func_800C2E00", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C2E00" - }, - { - "type": "extern_variable", - "name": "func_800DA444", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800DA444" - }, - { - "type": "extern_variable", - "name": "func_800C8634", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C8634" - }, - { - "type": "extern_variable", - "name": "func_800CDC14", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800CDC14" - }, - { - "type": "extern_variable", - "name": "D_80095DE0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80095DE0" - }, - { - "type": "extern_variable", - "name": "func_80025B10", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80025B10" - }, - { - "type": "extern_variable", - "name": "func_800BEAD4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800BEAD4" - }, - { - "type": "extern_variable", - "name": "D_800E0208", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0208" - }, - { - "type": "extern_variable", - "name": "D_800756E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800756E8" - }, - { - "type": "extern_variable", - "name": "D_80083291", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083291" - }, - { - "type": "extern_variable", - "name": "D_80083294", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083294" - }, - { - "type": "extern_variable", - "name": "D_8007078C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007078C" - }, - { - "type": "extern_variable", - "name": "D_8007E7B8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B8" - }, - { - "type": "extern_variable", - "name": "D_8007E7BA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7BA" - }, - { - "type": "extern_variable", - "name": "D_8007E7AC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7AC" - }, - { - "type": "extern_variable", - "name": "D_8007E7AE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7AE" - }, - { - "type": "extern_variable", - "name": "D_8007E7B0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B0" - }, - { - "type": "extern_variable", - "name": "D_8007E7B2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B2" - }, - { - "type": "extern_variable", - "name": "D_8007E7B4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B4" - }, - { - "type": "extern_variable", - "name": "D_8007E7B6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B6" - }, - { - "type": "extern_variable", - "name": "D_80082248", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082248" - }, - { - "type": "extern_variable", - "name": "D_8008325C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008325C" - }, - { - "type": "extern_variable", - "name": "D_8009D828", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D828" - }, - { - "type": "extern_variable", - "name": "D_800A0854", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A0854" - }, - { - "type": "extern_variable", - "name": "D_800A0F38", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A0F38" - }, - { - "type": "extern_variable", - "name": "D_8007E7C2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7C2" - }, - { - "type": "extern_variable", - "name": "D_80049209", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049209" - }, - { - "type": "extern_variable", - "name": "D_8004920A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8004920A" - }, - { - "type": "extern_variable", - "name": "func_80044064", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80044064" - }, - { - "type": "extern_variable", - "name": "func_800C5B38", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C5B38" - }, - { - "type": "extern_variable", - "name": "D_80081D90", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80081D90" - }, - { - "type": "extern_variable", - "name": "D_80083288", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083288" - }, - { - "type": "extern_variable", - "name": "D_800E4944", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4944" - }, - { - "type": "extern_variable", - "name": "D_80114480", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80114480" - }, - { - "type": "extern_variable", - "name": "D_800E42A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42A8" - }, - { - "type": "extern_variable", - "name": "D_8008327C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327C" - }, - { - "type": "extern_variable", - "name": "D_80083280", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083280" - }, - { - "type": "extern_variable", - "name": "D_80083282", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083282" - }, - { - "type": "extern_variable", - "name": "D_8008328F", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328F" - }, - { - "type": "extern_variable", - "name": "D_80083290", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083290" - }, - { - "type": "extern_variable", - "name": "D_8008329C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329C" - }, - { - "type": "extern_variable", - "name": "D_8008329E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329E" - }, - { - "type": "extern_variable", - "name": "D_80071748", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071748" - }, - { - "type": "extern_variable", - "name": "D_800833F8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800833F8" - }, - { - "type": "extern_variable", - "name": "D_8009A1C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009A1C4" - }, - { - "type": "extern_variable", - "name": "D_800A06B0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A06B0" - }, - { - "type": "extern_variable", - "name": "D_80071A88", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071A88" - }, - { - "type": "extern_variable", - "name": "D_801142D4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801142D4" - }, - { - "type": "extern_variable", - "name": "D_800E42D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42D8" - }, - { - "type": "extern_variable", - "name": "D_800E42DA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DA" - }, - { - "type": "extern_variable", - "name": "D_800E42DC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DC" - }, - { - "type": "extern_variable", - "name": "D_800E42E0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E0" - }, - { - "type": "extern_variable", - "name": "D_800E42E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E4" - }, - { - "type": "extern_variable", - "name": "D_800E42E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E8" - }, - { - "type": "extern_variable", - "name": "D_800E42EA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EA" - }, - { - "type": "extern_variable", - "name": "D_800E42EE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EE" - }, - { - "type": "extern_variable", - "name": "D_800E48E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48E8" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - } - ], - "timestamp": "2026-04-18T12:35:30.146017" - }, - { - "function_name": "func_800D5C9C", - "file": "src/field/field.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80074EB0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB0" - }, - { - "type": "extern_variable", - "name": "D_80074EB4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB4" - }, - { - "type": "extern_variable", - "name": "D_80074EB8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB8" - }, - { - "type": "extern_variable", - "name": "func_800A48B8", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800A48B8" - }, - { - "type": "extern_variable", - "name": "D_80074ED9", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074ED9" - }, - { - "type": "extern_variable", - "name": "D_800DF120", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DF120" - }, - { - "type": "extern_variable", - "name": "D_800DF122", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DF122" - }, - { - "type": "extern_variable", - "name": "D_800DEF88", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DEF88" - }, - { - "type": "extern_variable", - "name": "func_800354CC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800354CC" - }, - { - "type": "extern_variable", - "name": "func_80035658", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80035658" - }, - { - "type": "extern_variable", - "name": "D_800E0638", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0638" - }, - { - "type": "extern_variable", - "name": "D_800E48F4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48F4" - }, - { - "type": "extern_variable", - "name": "D_800E48FC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48FC" - }, - { - "type": "extern_variable", - "name": "D_800E48FE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48FE" - }, - { - "type": "extern_variable", - "name": "D_800E4900", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4900" - }, - { - "type": "extern_variable", - "name": "D_800E4901", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4901" - }, - { - "type": "extern_variable", - "name": "D_800E4904", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4904" - }, - { - "type": "extern_variable", - "name": "D_800E4906", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4906" - }, - { - "type": "extern_variable", - "name": "D_800E4908", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4908" - }, - { - "type": "extern_variable", - "name": "D_800E4909", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4909" - }, - { - "type": "extern_variable", - "name": "D_800E490C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E490C" - }, - { - "type": "extern_variable", - "name": "D_800E490E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E490E" - }, - { - "type": "extern_variable", - "name": "D_800E4910", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4910" - }, - { - "type": "extern_variable", - "name": "D_800E4911", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4911" - }, - { - "type": "extern_variable", - "name": "D_800E4914", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4914" - }, - { - "type": "extern_variable", - "name": "D_800E4916", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4916" - }, - { - "type": "extern_variable", - "name": "D_800E4918", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4918" - }, - { - "type": "extern_variable", - "name": "D_800E4919", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4919" - }, - { - "type": "extern_variable", - "name": "D_8007EB98", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007EB98" - }, - { - "type": "extern_variable", - "name": "func_8001786C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8001786C" - }, - { - "type": "extern_variable", - "name": "func_80020058", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80020058" - }, - { - "type": "extern_variable", - "name": "D_800491D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800491D0" - }, - { - "type": "extern_variable", - "name": "D_8008328D", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328D" - }, - { - "type": "extern_variable", - "name": "D_800832A2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800832A2" - }, - { - "type": "extern_variable", - "name": "D_8008326C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008326C" - }, - { - "type": "extern_variable", - "name": "D_80083286", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083286" - }, - { - "type": "extern_variable", - "name": "D_80083278", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083278" - }, - { - "type": "extern_variable", - "name": "D_8008327A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327A" - }, - { - "type": "extern_variable", - "name": "D_8008327E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327E" - }, - { - "type": "extern_variable", - "name": "D_80075E24", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075E24" - }, - { - "type": "extern_variable", - "name": "D_80075E25", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075E25" - }, - { - "type": "extern_variable", - "name": "D_800E4214", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4214" - }, - { - "type": "extern_variable", - "name": "D_800E4280", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4280" - }, - { - "type": "extern_variable", - "name": "D_800E4D48", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4D48" - }, - { - "type": "extern_variable", - "name": "D_800E0748", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0748" - }, - { - "type": "extern_variable", - "name": "D_800E074A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074A" - }, - { - "type": "extern_variable", - "name": "D_800E074C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074C" - }, - { - "type": "extern_variable", - "name": "D_800E08C0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08C0" - }, - { - "type": "extern_variable", - "name": "D_800E074E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074E" - }, - { - "type": "extern_variable", - "name": "D_800E0754", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0754" - }, - { - "type": "extern_variable", - "name": "D_800E0758", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0758" - }, - { - "type": "extern_variable", - "name": "D_800E08A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08A8" - }, - { - "type": "extern_variable", - "name": "D_800E0756", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0756" - }, - { - "type": "extern_variable", - "name": "D_800E0750", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0750" - }, - { - "type": "extern_variable", - "name": "D_800E0751", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0751" - }, - { - "type": "extern_variable", - "name": "D_800E0752", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0752" - }, - { - "type": "extern_variable", - "name": "func_800D5A60", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D5A60" - }, - { - "type": "extern_variable", - "name": "func_800D5C9C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D5C9C" - }, - { - "type": "extern_variable", - "name": "func_800D6D44", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6D44" - }, - { - "type": "extern_variable", - "name": "func_800D6E0C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6E0C" - }, - { - "type": "extern_variable", - "name": "func_800D6F6C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6F6C" - }, - { - "type": "extern_variable", - "name": "D_80083284", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083284" - }, - { - "type": "extern_variable", - "name": "D_8008328A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328A" - }, - { - "type": "extern_variable", - "name": "D_8008328E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328E" - }, - { - "type": "extern_variable", - "name": "D_80083298", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083298" - }, - { - "type": "extern_variable", - "name": "D_8008329A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329A" - }, - { - "type": "extern_variable", - "name": "D_800E424C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E424C" - }, - { - "type": "extern_variable", - "name": "D_801142CC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801142CC" - }, - { - "type": "extern_variable", - "name": "D_8009AD30", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009AD30" - }, - { - "type": "extern_variable", - "name": "func_800C2E00", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C2E00" - }, - { - "type": "extern_variable", - "name": "func_800DA444", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800DA444" - }, - { - "type": "extern_variable", - "name": "func_800C8634", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C8634" - }, - { - "type": "extern_variable", - "name": "func_800CDC14", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800CDC14" - }, - { - "type": "extern_variable", - "name": "D_80095DE0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80095DE0" - }, - { - "type": "extern_variable", - "name": "func_80025B10", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80025B10" - }, - { - "type": "extern_variable", - "name": "func_800BEAD4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800BEAD4" - }, - { - "type": "extern_variable", - "name": "D_800E0208", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0208" - }, - { - "type": "extern_variable", - "name": "D_800756E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800756E8" - }, - { - "type": "extern_variable", - "name": "D_80083291", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083291" - }, - { - "type": "extern_variable", - "name": "D_80083294", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083294" - }, - { - "type": "extern_variable", - "name": "D_8007078C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007078C" - }, - { - "type": "extern_variable", - "name": "D_8007E7B8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B8" - }, - { - "type": "extern_variable", - "name": "D_8007E7BA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7BA" - }, - { - "type": "extern_variable", - "name": "D_8007E7AC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7AC" - }, - { - "type": "extern_variable", - "name": "D_8007E7AE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7AE" - }, - { - "type": "extern_variable", - "name": "D_8007E7B0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B0" - }, - { - "type": "extern_variable", - "name": "D_8007E7B2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B2" - }, - { - "type": "extern_variable", - "name": "D_8007E7B4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B4" - }, - { - "type": "extern_variable", - "name": "D_8007E7B6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B6" - }, - { - "type": "extern_variable", - "name": "D_80082248", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082248" - }, - { - "type": "extern_variable", - "name": "D_8008325C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008325C" - }, - { - "type": "extern_variable", - "name": "D_8009D828", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D828" - }, - { - "type": "extern_variable", - "name": "D_800A0854", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A0854" - }, - { - "type": "extern_variable", - "name": "D_800A0F38", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A0F38" - }, - { - "type": "extern_variable", - "name": "D_8007E7C2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7C2" - }, - { - "type": "extern_variable", - "name": "D_80049209", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049209" - }, - { - "type": "extern_variable", - "name": "D_8004920A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8004920A" - }, - { - "type": "extern_variable", - "name": "func_80044064", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80044064" - }, - { - "type": "extern_variable", - "name": "func_800C5B38", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C5B38" - }, - { - "type": "extern_variable", - "name": "D_80081D90", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80081D90" - }, - { - "type": "extern_variable", - "name": "D_80083288", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083288" - }, - { - "type": "extern_variable", - "name": "D_800E4944", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4944" - }, - { - "type": "extern_variable", - "name": "D_80114480", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80114480" - }, - { - "type": "extern_variable", - "name": "D_800E42A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42A8" - }, - { - "type": "extern_variable", - "name": "D_8008327C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327C" - }, - { - "type": "extern_variable", - "name": "D_80083280", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083280" - }, - { - "type": "extern_variable", - "name": "D_80083282", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083282" - }, - { - "type": "extern_variable", - "name": "D_8008328F", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328F" - }, - { - "type": "extern_variable", - "name": "D_80083290", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083290" - }, - { - "type": "extern_variable", - "name": "D_8008329C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329C" - }, - { - "type": "extern_variable", - "name": "D_8008329E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329E" - }, - { - "type": "extern_variable", - "name": "D_80071748", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071748" - }, - { - "type": "extern_variable", - "name": "D_800833F8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800833F8" - }, - { - "type": "extern_variable", - "name": "D_8009A1C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009A1C4" - }, - { - "type": "extern_variable", - "name": "D_800A06B0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A06B0" - }, - { - "type": "extern_variable", - "name": "D_80071A88", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071A88" - }, - { - "type": "extern_variable", - "name": "D_801142D4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801142D4" - }, - { - "type": "extern_variable", - "name": "D_800E42D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42D8" - }, - { - "type": "extern_variable", - "name": "D_800E42DA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DA" - }, - { - "type": "extern_variable", - "name": "D_800E42DC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DC" - }, - { - "type": "extern_variable", - "name": "D_800E42E0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E0" - }, - { - "type": "extern_variable", - "name": "D_800E42E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E4" - }, - { - "type": "extern_variable", - "name": "D_800E42E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E8" - }, - { - "type": "extern_variable", - "name": "D_800E42EA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EA" - }, - { - "type": "extern_variable", - "name": "D_800E42EE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EE" - }, - { - "type": "extern_variable", - "name": "D_800E48E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48E8" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - } - ], - "timestamp": "2026-04-18T12:35:30.997931" - }, - { - "function_name": "func_800AA930", - "file": "src/field/field.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80074EB0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB0" - }, - { - "type": "extern_variable", - "name": "D_80074EB4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB4" - }, - { - "type": "extern_variable", - "name": "D_80074EB8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB8" - }, - { - "type": "extern_variable", - "name": "func_800A48B8", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800A48B8" - }, - { - "type": "extern_variable", - "name": "D_80074ED9", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074ED9" - }, - { - "type": "extern_variable", - "name": "D_800DF120", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DF120" - }, - { - "type": "extern_variable", - "name": "D_800DF122", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DF122" - }, - { - "type": "extern_variable", - "name": "D_800DEF88", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DEF88" - }, - { - "type": "extern_variable", - "name": "func_800354CC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800354CC" - }, - { - "type": "extern_variable", - "name": "func_80035658", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80035658" - }, - { - "type": "extern_variable", - "name": "D_800E0638", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0638" - }, - { - "type": "extern_variable", - "name": "D_800E48F4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48F4" - }, - { - "type": "extern_variable", - "name": "D_800E48FC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48FC" - }, - { - "type": "extern_variable", - "name": "D_800E48FE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48FE" - }, - { - "type": "extern_variable", - "name": "D_800E4900", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4900" - }, - { - "type": "extern_variable", - "name": "D_800E4901", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4901" - }, - { - "type": "extern_variable", - "name": "D_800E4904", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4904" - }, - { - "type": "extern_variable", - "name": "D_800E4906", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4906" - }, - { - "type": "extern_variable", - "name": "D_800E4908", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4908" - }, - { - "type": "extern_variable", - "name": "D_800E4909", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4909" - }, - { - "type": "extern_variable", - "name": "D_800E490C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E490C" - }, - { - "type": "extern_variable", - "name": "D_800E490E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E490E" - }, - { - "type": "extern_variable", - "name": "D_800E4910", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4910" - }, - { - "type": "extern_variable", - "name": "D_800E4911", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4911" - }, - { - "type": "extern_variable", - "name": "D_800E4914", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4914" - }, - { - "type": "extern_variable", - "name": "D_800E4916", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4916" - }, - { - "type": "extern_variable", - "name": "D_800E4918", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4918" - }, - { - "type": "extern_variable", - "name": "D_800E4919", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4919" - }, - { - "type": "extern_variable", - "name": "D_8007EB98", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007EB98" - }, - { - "type": "extern_variable", - "name": "func_8001786C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8001786C" - }, - { - "type": "extern_variable", - "name": "func_80020058", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80020058" - }, - { - "type": "extern_variable", - "name": "D_800491D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800491D0" - }, - { - "type": "extern_variable", - "name": "D_8008328D", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328D" - }, - { - "type": "extern_variable", - "name": "D_800832A2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800832A2" - }, - { - "type": "extern_variable", - "name": "D_8008326C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008326C" - }, - { - "type": "extern_variable", - "name": "D_80083286", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083286" - }, - { - "type": "extern_variable", - "name": "D_80083278", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083278" - }, - { - "type": "extern_variable", - "name": "D_8008327A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327A" - }, - { - "type": "extern_variable", - "name": "D_8008327E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327E" - }, - { - "type": "extern_variable", - "name": "D_80075E24", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075E24" - }, - { - "type": "extern_variable", - "name": "D_80075E25", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075E25" - }, - { - "type": "extern_variable", - "name": "D_800E4214", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4214" - }, - { - "type": "extern_variable", - "name": "D_800E4280", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4280" - }, - { - "type": "extern_variable", - "name": "D_800E4D48", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4D48" - }, - { - "type": "extern_variable", - "name": "D_800E0748", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0748" - }, - { - "type": "extern_variable", - "name": "D_800E074A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074A" - }, - { - "type": "extern_variable", - "name": "D_800E074C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074C" - }, - { - "type": "extern_variable", - "name": "D_800E08C0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08C0" - }, - { - "type": "extern_variable", - "name": "D_800E074E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074E" - }, - { - "type": "extern_variable", - "name": "D_800E0754", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0754" - }, - { - "type": "extern_variable", - "name": "D_800E0758", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0758" - }, - { - "type": "extern_variable", - "name": "D_800E08A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08A8" - }, - { - "type": "extern_variable", - "name": "D_800E0756", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0756" - }, - { - "type": "extern_variable", - "name": "D_800E0750", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0750" - }, - { - "type": "extern_variable", - "name": "D_800E0751", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0751" - }, - { - "type": "extern_variable", - "name": "D_800E0752", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0752" - }, - { - "type": "extern_variable", - "name": "func_800D5A60", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D5A60" - }, - { - "type": "extern_variable", - "name": "func_800D5C9C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D5C9C" - }, - { - "type": "extern_variable", - "name": "func_800D6D44", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6D44" - }, - { - "type": "extern_variable", - "name": "func_800D6E0C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6E0C" - }, - { - "type": "extern_variable", - "name": "func_800D6F6C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6F6C" - }, - { - "type": "extern_variable", - "name": "D_80083284", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083284" - }, - { - "type": "extern_variable", - "name": "D_8008328A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328A" - }, - { - "type": "extern_variable", - "name": "D_8008328E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328E" - }, - { - "type": "extern_variable", - "name": "D_80083298", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083298" - }, - { - "type": "extern_variable", - "name": "D_8008329A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329A" - }, - { - "type": "extern_variable", - "name": "D_800E424C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E424C" - }, - { - "type": "extern_variable", - "name": "D_801142CC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801142CC" - }, - { - "type": "extern_variable", - "name": "D_8009AD30", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009AD30" - }, - { - "type": "extern_variable", - "name": "func_800C2E00", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C2E00" - }, - { - "type": "extern_variable", - "name": "func_800DA444", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800DA444" - }, - { - "type": "extern_variable", - "name": "func_800C8634", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C8634" - }, - { - "type": "extern_variable", - "name": "func_800CDC14", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800CDC14" - }, - { - "type": "extern_variable", - "name": "D_80095DE0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80095DE0" - }, - { - "type": "extern_variable", - "name": "func_80025B10", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80025B10" - }, - { - "type": "extern_variable", - "name": "func_800BEAD4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800BEAD4" - }, - { - "type": "extern_variable", - "name": "D_800E0208", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0208" - }, - { - "type": "extern_variable", - "name": "D_800756E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800756E8" - }, - { - "type": "extern_variable", - "name": "D_80083291", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083291" - }, - { - "type": "extern_variable", - "name": "D_80083294", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083294" - }, - { - "type": "extern_variable", - "name": "D_8007078C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007078C" - }, - { - "type": "extern_variable", - "name": "D_8007E7B8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B8" - }, - { - "type": "extern_variable", - "name": "D_8007E7BA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7BA" - }, - { - "type": "extern_variable", - "name": "D_8007E7AC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7AC" - }, - { - "type": "extern_variable", - "name": "D_8007E7AE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7AE" - }, - { - "type": "extern_variable", - "name": "D_8007E7B0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B0" - }, - { - "type": "extern_variable", - "name": "D_8007E7B2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B2" - }, - { - "type": "extern_variable", - "name": "D_8007E7B4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B4" - }, - { - "type": "extern_variable", - "name": "D_8007E7B6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B6" - }, - { - "type": "extern_variable", - "name": "D_80082248", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082248" - }, - { - "type": "extern_variable", - "name": "D_8008325C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008325C" - }, - { - "type": "extern_variable", - "name": "D_8009D828", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D828" - }, - { - "type": "extern_variable", - "name": "D_800A0854", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A0854" - }, - { - "type": "extern_variable", - "name": "D_800A0F38", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A0F38" - }, - { - "type": "extern_variable", - "name": "D_8007E7C2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7C2" - }, - { - "type": "extern_variable", - "name": "D_80049209", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049209" - }, - { - "type": "extern_variable", - "name": "D_8004920A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8004920A" - }, - { - "type": "extern_variable", - "name": "func_80044064", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80044064" - }, - { - "type": "extern_variable", - "name": "func_800C5B38", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C5B38" - }, - { - "type": "extern_variable", - "name": "D_80081D90", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80081D90" - }, - { - "type": "extern_variable", - "name": "D_80083288", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083288" - }, - { - "type": "extern_variable", - "name": "D_800E4944", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4944" - }, - { - "type": "extern_variable", - "name": "D_80114480", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80114480" - }, - { - "type": "extern_variable", - "name": "D_800E42A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42A8" - }, - { - "type": "extern_variable", - "name": "D_8008327C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327C" - }, - { - "type": "extern_variable", - "name": "D_80083280", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083280" - }, - { - "type": "extern_variable", - "name": "D_80083282", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083282" - }, - { - "type": "extern_variable", - "name": "D_8008328F", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328F" - }, - { - "type": "extern_variable", - "name": "D_80083290", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083290" - }, - { - "type": "extern_variable", - "name": "D_8008329C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329C" - }, - { - "type": "extern_variable", - "name": "D_8008329E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329E" - }, - { - "type": "extern_variable", - "name": "D_80071748", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071748" - }, - { - "type": "extern_variable", - "name": "D_800833F8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800833F8" - }, - { - "type": "extern_variable", - "name": "D_8009A1C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009A1C4" - }, - { - "type": "extern_variable", - "name": "D_800A06B0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A06B0" - }, - { - "type": "extern_variable", - "name": "D_80071A88", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071A88" - }, - { - "type": "extern_variable", - "name": "D_801142D4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801142D4" - }, - { - "type": "extern_variable", - "name": "D_800E42D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42D8" - }, - { - "type": "extern_variable", - "name": "D_800E42DA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DA" - }, - { - "type": "extern_variable", - "name": "D_800E42DC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DC" - }, - { - "type": "extern_variable", - "name": "D_800E42E0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E0" - }, - { - "type": "extern_variable", - "name": "D_800E42E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E4" - }, - { - "type": "extern_variable", - "name": "D_800E42E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E8" - }, - { - "type": "extern_variable", - "name": "D_800E42EA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EA" - }, - { - "type": "extern_variable", - "name": "D_800E42EE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EE" - }, - { - "type": "extern_variable", - "name": "D_800E48E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48E8" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - } - ], - "timestamp": "2026-04-18T12:35:31.839433" - }, - { - "function_name": "func_800BA65C", - "file": "src/field/field.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80074EB0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB0" - }, - { - "type": "extern_variable", - "name": "D_80074EB4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB4" - }, - { - "type": "extern_variable", - "name": "D_80074EB8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB8" - }, - { - "type": "extern_variable", - "name": "func_800A48B8", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800A48B8" - }, - { - "type": "extern_variable", - "name": "D_80074ED9", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074ED9" - }, - { - "type": "extern_variable", - "name": "D_800DF120", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DF120" - }, - { - "type": "extern_variable", - "name": "D_800DF122", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DF122" - }, - { - "type": "extern_variable", - "name": "D_800DEF88", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DEF88" - }, - { - "type": "extern_variable", - "name": "func_800354CC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800354CC" - }, - { - "type": "extern_variable", - "name": "func_80035658", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80035658" - }, - { - "type": "extern_variable", - "name": "D_800E0638", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0638" - }, - { - "type": "extern_variable", - "name": "D_800E48F4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48F4" - }, - { - "type": "extern_variable", - "name": "D_800E48FC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48FC" - }, - { - "type": "extern_variable", - "name": "D_800E48FE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48FE" - }, - { - "type": "extern_variable", - "name": "D_800E4900", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4900" - }, - { - "type": "extern_variable", - "name": "D_800E4901", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4901" - }, - { - "type": "extern_variable", - "name": "D_800E4904", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4904" - }, - { - "type": "extern_variable", - "name": "D_800E4906", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4906" - }, - { - "type": "extern_variable", - "name": "D_800E4908", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4908" - }, - { - "type": "extern_variable", - "name": "D_800E4909", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4909" - }, - { - "type": "extern_variable", - "name": "D_800E490C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E490C" - }, - { - "type": "extern_variable", - "name": "D_800E490E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E490E" - }, - { - "type": "extern_variable", - "name": "D_800E4910", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4910" - }, - { - "type": "extern_variable", - "name": "D_800E4911", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4911" - }, - { - "type": "extern_variable", - "name": "D_800E4914", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4914" - }, - { - "type": "extern_variable", - "name": "D_800E4916", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4916" - }, - { - "type": "extern_variable", - "name": "D_800E4918", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4918" - }, - { - "type": "extern_variable", - "name": "D_800E4919", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4919" - }, - { - "type": "extern_variable", - "name": "D_8007EB98", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007EB98" - }, - { - "type": "extern_variable", - "name": "func_8001786C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8001786C" - }, - { - "type": "extern_variable", - "name": "func_80020058", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80020058" - }, - { - "type": "extern_variable", - "name": "D_800491D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800491D0" - }, - { - "type": "extern_variable", - "name": "D_8008328D", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328D" - }, - { - "type": "extern_variable", - "name": "D_800832A2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800832A2" - }, - { - "type": "extern_variable", - "name": "D_8008326C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008326C" - }, - { - "type": "extern_variable", - "name": "D_80083286", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083286" - }, - { - "type": "extern_variable", - "name": "D_80083278", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083278" - }, - { - "type": "extern_variable", - "name": "D_8008327A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327A" - }, - { - "type": "extern_variable", - "name": "D_8008327E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327E" - }, - { - "type": "extern_variable", - "name": "D_80075E24", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075E24" - }, - { - "type": "extern_variable", - "name": "D_80075E25", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075E25" - }, - { - "type": "extern_variable", - "name": "D_800E4214", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4214" - }, - { - "type": "extern_variable", - "name": "D_800E4280", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4280" - }, - { - "type": "extern_variable", - "name": "D_800E4D48", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4D48" - }, - { - "type": "extern_variable", - "name": "D_800E0748", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0748" - }, - { - "type": "extern_variable", - "name": "D_800E074A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074A" - }, - { - "type": "extern_variable", - "name": "D_800E074C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074C" - }, - { - "type": "extern_variable", - "name": "D_800E08C0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08C0" - }, - { - "type": "extern_variable", - "name": "D_800E074E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074E" - }, - { - "type": "extern_variable", - "name": "D_800E0754", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0754" - }, - { - "type": "extern_variable", - "name": "D_800E0758", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0758" - }, - { - "type": "extern_variable", - "name": "D_800E08A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08A8" - }, - { - "type": "extern_variable", - "name": "D_800E0756", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0756" - }, - { - "type": "extern_variable", - "name": "D_800E0750", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0750" - }, - { - "type": "extern_variable", - "name": "D_800E0751", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0751" - }, - { - "type": "extern_variable", - "name": "D_800E0752", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0752" - }, - { - "type": "extern_variable", - "name": "func_800D5A60", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D5A60" - }, - { - "type": "extern_variable", - "name": "func_800D5C9C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D5C9C" - }, - { - "type": "extern_variable", - "name": "func_800D6D44", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6D44" - }, - { - "type": "extern_variable", - "name": "func_800D6E0C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6E0C" - }, - { - "type": "extern_variable", - "name": "func_800D6F6C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6F6C" - }, - { - "type": "extern_variable", - "name": "D_80083284", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083284" - }, - { - "type": "extern_variable", - "name": "D_8008328A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328A" - }, - { - "type": "extern_variable", - "name": "D_8008328E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328E" - }, - { - "type": "extern_variable", - "name": "D_80083298", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083298" - }, - { - "type": "extern_variable", - "name": "D_8008329A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329A" - }, - { - "type": "extern_variable", - "name": "D_800E424C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E424C" - }, - { - "type": "extern_variable", - "name": "D_801142CC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801142CC" - }, - { - "type": "extern_variable", - "name": "D_8009AD30", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009AD30" - }, - { - "type": "extern_variable", - "name": "func_800C2E00", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C2E00" - }, - { - "type": "extern_variable", - "name": "func_800DA444", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800DA444" - }, - { - "type": "extern_variable", - "name": "func_800C8634", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C8634" - }, - { - "type": "extern_variable", - "name": "func_800CDC14", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800CDC14" - }, - { - "type": "extern_variable", - "name": "D_80095DE0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80095DE0" - }, - { - "type": "extern_variable", - "name": "func_80025B10", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80025B10" - }, - { - "type": "extern_variable", - "name": "func_800BEAD4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800BEAD4" - }, - { - "type": "extern_variable", - "name": "D_800E0208", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0208" - }, - { - "type": "extern_variable", - "name": "D_800756E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800756E8" - }, - { - "type": "extern_variable", - "name": "D_80083291", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083291" - }, - { - "type": "extern_variable", - "name": "D_80083294", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083294" - }, - { - "type": "extern_variable", - "name": "D_8007078C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007078C" - }, - { - "type": "extern_variable", - "name": "D_8007E7B8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B8" - }, - { - "type": "extern_variable", - "name": "D_8007E7BA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7BA" - }, - { - "type": "extern_variable", - "name": "D_8007E7AC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7AC" - }, - { - "type": "extern_variable", - "name": "D_8007E7AE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7AE" - }, - { - "type": "extern_variable", - "name": "D_8007E7B0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B0" - }, - { - "type": "extern_variable", - "name": "D_8007E7B2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B2" - }, - { - "type": "extern_variable", - "name": "D_8007E7B4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B4" - }, - { - "type": "extern_variable", - "name": "D_8007E7B6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B6" - }, - { - "type": "extern_variable", - "name": "D_80082248", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082248" - }, - { - "type": "extern_variable", - "name": "D_8008325C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008325C" - }, - { - "type": "extern_variable", - "name": "D_8009D828", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D828" - }, - { - "type": "extern_variable", - "name": "D_800A0854", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A0854" - }, - { - "type": "extern_variable", - "name": "D_800A0F38", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A0F38" - }, - { - "type": "extern_variable", - "name": "D_8007E7C2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7C2" - }, - { - "type": "extern_variable", - "name": "D_80049209", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049209" - }, - { - "type": "extern_variable", - "name": "D_8004920A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8004920A" - }, - { - "type": "extern_variable", - "name": "func_80044064", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80044064" - }, - { - "type": "extern_variable", - "name": "func_800C5B38", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C5B38" - }, - { - "type": "extern_variable", - "name": "D_80081D90", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80081D90" - }, - { - "type": "extern_variable", - "name": "D_80083288", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083288" - }, - { - "type": "extern_variable", - "name": "D_800E4944", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4944" - }, - { - "type": "extern_variable", - "name": "D_80114480", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80114480" - }, - { - "type": "extern_variable", - "name": "D_800E42A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42A8" - }, - { - "type": "extern_variable", - "name": "D_8008327C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327C" - }, - { - "type": "extern_variable", - "name": "D_80083280", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083280" - }, - { - "type": "extern_variable", - "name": "D_80083282", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083282" - }, - { - "type": "extern_variable", - "name": "D_8008328F", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328F" - }, - { - "type": "extern_variable", - "name": "D_80083290", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083290" - }, - { - "type": "extern_variable", - "name": "D_8008329C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329C" - }, - { - "type": "extern_variable", - "name": "D_8008329E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329E" - }, - { - "type": "extern_variable", - "name": "D_80071748", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071748" - }, - { - "type": "extern_variable", - "name": "D_800833F8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800833F8" - }, - { - "type": "extern_variable", - "name": "D_8009A1C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009A1C4" - }, - { - "type": "extern_variable", - "name": "D_800A06B0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A06B0" - }, - { - "type": "extern_variable", - "name": "D_80071A88", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071A88" - }, - { - "type": "extern_variable", - "name": "D_801142D4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801142D4" - }, - { - "type": "extern_variable", - "name": "D_800E42D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42D8" - }, - { - "type": "extern_variable", - "name": "D_800E42DA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DA" - }, - { - "type": "extern_variable", - "name": "D_800E42DC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DC" - }, - { - "type": "extern_variable", - "name": "D_800E42E0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E0" - }, - { - "type": "extern_variable", - "name": "D_800E42E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E4" - }, - { - "type": "extern_variable", - "name": "D_800E42E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E8" - }, - { - "type": "extern_variable", - "name": "D_800E42EA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EA" - }, - { - "type": "extern_variable", - "name": "D_800E42EE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EE" - }, - { - "type": "extern_variable", - "name": "D_800E48E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48E8" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - } - ], - "timestamp": "2026-04-18T12:35:32.631636" - }, - { - "function_name": "func_800BC9FC", - "file": "src/field/field.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80074EB0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB0" - }, - { - "type": "extern_variable", - "name": "D_80074EB4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB4" - }, - { - "type": "extern_variable", - "name": "D_80074EB8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB8" - }, - { - "type": "extern_variable", - "name": "func_800A48B8", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800A48B8" - }, - { - "type": "extern_variable", - "name": "D_80074ED9", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074ED9" - }, - { - "type": "extern_variable", - "name": "D_800DF120", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DF120" - }, - { - "type": "extern_variable", - "name": "D_800DF122", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DF122" - }, - { - "type": "extern_variable", - "name": "D_800DEF88", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DEF88" - }, - { - "type": "extern_variable", - "name": "func_800354CC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800354CC" - }, - { - "type": "extern_variable", - "name": "func_80035658", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80035658" - }, - { - "type": "extern_variable", - "name": "D_800E0638", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0638" - }, - { - "type": "extern_variable", - "name": "D_800E48F4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48F4" - }, - { - "type": "extern_variable", - "name": "D_800E48FC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48FC" - }, - { - "type": "extern_variable", - "name": "D_800E48FE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48FE" - }, - { - "type": "extern_variable", - "name": "D_800E4900", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4900" - }, - { - "type": "extern_variable", - "name": "D_800E4901", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4901" - }, - { - "type": "extern_variable", - "name": "D_800E4904", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4904" - }, - { - "type": "extern_variable", - "name": "D_800E4906", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4906" - }, - { - "type": "extern_variable", - "name": "D_800E4908", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4908" - }, - { - "type": "extern_variable", - "name": "D_800E4909", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4909" - }, - { - "type": "extern_variable", - "name": "D_800E490C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E490C" - }, - { - "type": "extern_variable", - "name": "D_800E490E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E490E" - }, - { - "type": "extern_variable", - "name": "D_800E4910", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4910" - }, - { - "type": "extern_variable", - "name": "D_800E4911", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4911" - }, - { - "type": "extern_variable", - "name": "D_800E4914", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4914" - }, - { - "type": "extern_variable", - "name": "D_800E4916", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4916" - }, - { - "type": "extern_variable", - "name": "D_800E4918", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4918" - }, - { - "type": "extern_variable", - "name": "D_800E4919", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4919" - }, - { - "type": "extern_variable", - "name": "D_8007EB98", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007EB98" - }, - { - "type": "extern_variable", - "name": "func_8001786C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8001786C" - }, - { - "type": "extern_variable", - "name": "func_80020058", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80020058" - }, - { - "type": "extern_variable", - "name": "D_800491D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800491D0" - }, - { - "type": "extern_variable", - "name": "D_8008328D", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328D" - }, - { - "type": "extern_variable", - "name": "D_800832A2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800832A2" - }, - { - "type": "extern_variable", - "name": "D_8008326C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008326C" - }, - { - "type": "extern_variable", - "name": "D_80083286", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083286" - }, - { - "type": "extern_variable", - "name": "D_80083278", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083278" - }, - { - "type": "extern_variable", - "name": "D_8008327A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327A" - }, - { - "type": "extern_variable", - "name": "D_8008327E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327E" - }, - { - "type": "extern_variable", - "name": "D_80075E24", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075E24" - }, - { - "type": "extern_variable", - "name": "D_80075E25", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075E25" - }, - { - "type": "extern_variable", - "name": "D_800E4214", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4214" - }, - { - "type": "extern_variable", - "name": "D_800E4280", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4280" - }, - { - "type": "extern_variable", - "name": "D_800E4D48", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4D48" - }, - { - "type": "extern_variable", - "name": "D_800E0748", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0748" - }, - { - "type": "extern_variable", - "name": "D_800E074A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074A" - }, - { - "type": "extern_variable", - "name": "D_800E074C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074C" - }, - { - "type": "extern_variable", - "name": "D_800E08C0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08C0" - }, - { - "type": "extern_variable", - "name": "D_800E074E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074E" - }, - { - "type": "extern_variable", - "name": "D_800E0754", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0754" - }, - { - "type": "extern_variable", - "name": "D_800E0758", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0758" - }, - { - "type": "extern_variable", - "name": "D_800E08A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08A8" - }, - { - "type": "extern_variable", - "name": "D_800E0756", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0756" - }, - { - "type": "extern_variable", - "name": "D_800E0750", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0750" - }, - { - "type": "extern_variable", - "name": "D_800E0751", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0751" - }, - { - "type": "extern_variable", - "name": "D_800E0752", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0752" - }, - { - "type": "extern_variable", - "name": "func_800D5A60", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D5A60" - }, - { - "type": "extern_variable", - "name": "func_800D5C9C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D5C9C" - }, - { - "type": "extern_variable", - "name": "func_800D6D44", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6D44" - }, - { - "type": "extern_variable", - "name": "func_800D6E0C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6E0C" - }, - { - "type": "extern_variable", - "name": "func_800D6F6C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6F6C" - }, - { - "type": "extern_variable", - "name": "D_80083284", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083284" - }, - { - "type": "extern_variable", - "name": "D_8008328A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328A" - }, - { - "type": "extern_variable", - "name": "D_8008328E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328E" - }, - { - "type": "extern_variable", - "name": "D_80083298", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083298" - }, - { - "type": "extern_variable", - "name": "D_8008329A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329A" - }, - { - "type": "extern_variable", - "name": "D_800E424C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E424C" - }, - { - "type": "extern_variable", - "name": "D_801142CC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801142CC" - }, - { - "type": "extern_variable", - "name": "D_8009AD30", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009AD30" - }, - { - "type": "extern_variable", - "name": "func_800C2E00", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C2E00" - }, - { - "type": "extern_variable", - "name": "func_800DA444", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800DA444" - }, - { - "type": "extern_variable", - "name": "func_800C8634", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C8634" - }, - { - "type": "extern_variable", - "name": "func_800CDC14", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800CDC14" - }, - { - "type": "extern_variable", - "name": "D_80095DE0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80095DE0" - }, - { - "type": "extern_variable", - "name": "func_80025B10", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80025B10" - }, - { - "type": "extern_variable", - "name": "func_800BEAD4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800BEAD4" - }, - { - "type": "extern_variable", - "name": "D_800E0208", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0208" - }, - { - "type": "extern_variable", - "name": "D_800756E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800756E8" - }, - { - "type": "extern_variable", - "name": "D_80083291", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083291" - }, - { - "type": "extern_variable", - "name": "D_80083294", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083294" - }, - { - "type": "extern_variable", - "name": "D_8007078C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007078C" - }, - { - "type": "extern_variable", - "name": "D_8007E7B8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B8" - }, - { - "type": "extern_variable", - "name": "D_8007E7BA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7BA" - }, - { - "type": "extern_variable", - "name": "D_8007E7AC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7AC" - }, - { - "type": "extern_variable", - "name": "D_8007E7AE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7AE" - }, - { - "type": "extern_variable", - "name": "D_8007E7B0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B0" - }, - { - "type": "extern_variable", - "name": "D_8007E7B2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B2" - }, - { - "type": "extern_variable", - "name": "D_8007E7B4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B4" - }, - { - "type": "extern_variable", - "name": "D_8007E7B6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B6" - }, - { - "type": "extern_variable", - "name": "D_80082248", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082248" - }, - { - "type": "extern_variable", - "name": "D_8008325C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008325C" - }, - { - "type": "extern_variable", - "name": "D_8009D828", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D828" - }, - { - "type": "extern_variable", - "name": "D_800A0854", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A0854" - }, - { - "type": "extern_variable", - "name": "D_800A0F38", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A0F38" - }, - { - "type": "extern_variable", - "name": "D_8007E7C2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7C2" - }, - { - "type": "extern_variable", - "name": "D_80049209", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049209" - }, - { - "type": "extern_variable", - "name": "D_8004920A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8004920A" - }, - { - "type": "extern_variable", - "name": "func_80044064", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80044064" - }, - { - "type": "extern_variable", - "name": "func_800C5B38", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C5B38" - }, - { - "type": "extern_variable", - "name": "D_80081D90", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80081D90" - }, - { - "type": "extern_variable", - "name": "D_80083288", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083288" - }, - { - "type": "extern_variable", - "name": "D_800E4944", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4944" - }, - { - "type": "extern_variable", - "name": "D_80114480", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80114480" - }, - { - "type": "extern_variable", - "name": "D_800E42A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42A8" - }, - { - "type": "extern_variable", - "name": "D_8008327C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327C" - }, - { - "type": "extern_variable", - "name": "D_80083280", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083280" - }, - { - "type": "extern_variable", - "name": "D_80083282", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083282" - }, - { - "type": "extern_variable", - "name": "D_8008328F", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328F" - }, - { - "type": "extern_variable", - "name": "D_80083290", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083290" - }, - { - "type": "extern_variable", - "name": "D_8008329C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329C" - }, - { - "type": "extern_variable", - "name": "D_8008329E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329E" - }, - { - "type": "extern_variable", - "name": "D_80071748", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071748" - }, - { - "type": "extern_variable", - "name": "D_800833F8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800833F8" - }, - { - "type": "extern_variable", - "name": "D_8009A1C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009A1C4" - }, - { - "type": "extern_variable", - "name": "D_800A06B0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A06B0" - }, - { - "type": "extern_variable", - "name": "D_80071A88", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071A88" - }, - { - "type": "extern_variable", - "name": "D_801142D4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801142D4" - }, - { - "type": "extern_variable", - "name": "D_800E42D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42D8" - }, - { - "type": "extern_variable", - "name": "D_800E42DA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DA" - }, - { - "type": "extern_variable", - "name": "D_800E42DC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DC" - }, - { - "type": "extern_variable", - "name": "D_800E42E0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E0" - }, - { - "type": "extern_variable", - "name": "D_800E42E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E4" - }, - { - "type": "extern_variable", - "name": "D_800E42E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E8" - }, - { - "type": "extern_variable", - "name": "D_800E42EA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EA" - }, - { - "type": "extern_variable", - "name": "D_800E42EE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EE" - }, - { - "type": "extern_variable", - "name": "D_800E48E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48E8" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - } - ], - "timestamp": "2026-04-18T12:35:33.533875" - }, - { - "function_name": "func_800A19A4", - "file": "src/ending/ending.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "func_8004656C", - "return_type": "s16", - "parameters": "s32, ?, s16, s16", - "suggestion": "Define proper signature for func_8004656C in header" - }, - { - "type": "extern_variable", - "name": "func_80043D3C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80043D3C" - }, - { - "type": "extern_variable", - "name": "func_800443B0", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800443B0" - }, - { - "type": "extern_variable", - "name": "func_800444AC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800444AC" - }, - { - "type": "extern_variable", - "name": "D_800AF2E0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800AF2E0" - }, - { - "type": "extern_variable", - "name": "D_800AF398", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800AF398" - }, - { - "type": "extern_variable", - "name": "func_80039EDC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80039EDC" - }, - { - "type": "extern_variable", - "name": "func_8003D0C0", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8003D0C0" - }, - { - "type": "extern_variable", - "name": "func_8003D1B4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8003D1B4" - }, - { - "type": "extern_variable", - "name": "func_80036244", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80036244" - }, - { - "type": "extern_variable", - "name": "func_80044000", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80044000" - }, - { - "type": "extern_variable", - "name": "func_80046CFC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80046CFC" - }, - { - "type": "extern_variable", - "name": "func_80046D0C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80046D0C" - } - ], - "timestamp": "2026-04-18T12:35:35.128596" - }, - { - "function_name": "func_80034150", - "file": "src/main/psxsdk.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "_SpuInit", - "return_type": "unknown", - "parameters": "?", - "suggestion": "Define proper signature for _SpuInit in header" - }, - { - "type": "extern_variable", - "name": "func_8003DD84", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8003DD84" - }, - { - "type": "extern_variable", - "name": "func_80034350", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable func_80034350" - }, - { - "type": "extern_variable", - "name": "D_7FFFFF", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_7FFFFF" - }, - { - "type": "extern_variable", - "name": "D_80095DB4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80095DB4" - } - ], - "timestamp": "2026-04-18T12:35:35.282730" - }, - { - "function_name": "func_800D650C", - "file": "src/battle/battle2.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "func_8003BD7C", - "return_type": "s32", - "parameters": "?*, ?*, ?*, ?*, u32*, void*, DR_MODE*, void*, ?*, ?*", - "suggestion": "Define proper signature for func_8003BD7C in header" - }, - { - "type": "extern_variable", - "name": "func_8003B51C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8003B51C" - }, - { - "type": "extern_variable", - "name": "func_800D4284", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D4284" - }, - { - "type": "extern_variable", - "name": "D_800F0C44", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F0C44" - }, - { - "type": "extern_variable", - "name": "func_800D6840", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6840" - }, - { - "type": "extern_variable", - "name": "D_800F15AC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F15AC" - }, - { - "type": "extern_variable", - "name": "func_8003C21C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8003C21C" - }, - { - "type": "extern_variable", - "name": "func_80046794", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80046794" - }, - { - "type": "extern_variable", - "name": "D_800F1914", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F1914" - }, - { - "type": "extern_variable", - "name": "D_800F191C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F191C" - }, - { - "type": "extern_variable", - "name": "D_800F1924", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F1924" - }, - { - "type": "extern_variable", - "name": "D_800F192C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F192C" - }, - { - "type": "unknown_variable", - "name": "sp48", - "suggestion": "m2c could not determine type of variable sp48" - }, - { - "type": "unknown_variable", - "name": "sp4C", - "suggestion": "m2c could not determine type of variable sp4C" - } - ], - "timestamp": "2026-04-18T12:35:35.802047" - }, - { - "function_name": "func_800A3ED0", - "file": "src/battle/battle.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_8009D954", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D954" - }, - { - "type": "extern_variable", - "name": "D_800FA9D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FA9D0" - }, - { - "type": "extern_variable", - "name": "D_800FA9D4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FA9D4" - }, - { - "type": "extern_variable", - "name": "D_800F9F3C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9F3C" - }, - { - "type": "extern_variable", - "name": "D_800F9F42", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9F42" - }, - { - "type": "extern_variable", - "name": "D_800F9F44", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9F44" - }, - { - "type": "extern_variable", - "name": "D_800F87F4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F87F4" - }, - { - "type": "extern_variable", - "name": "D_800F5E65", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E65" - }, - { - "type": "extern_variable", - "name": "D_800F3A40", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F3A40" - }, - { - "type": "extern_variable", - "name": "D_80071C32", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071C32" - }, - { - "type": "extern_variable", - "name": "D_80071E64", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071E64" - }, - { - "type": "extern_variable", - "name": "D_800722D6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800722D6" - }, - { - "type": "extern_variable", - "name": "D_800722D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800722D8" - }, - { - "type": "extern_variable", - "name": "D_800738A0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738A0" - }, - { - "type": "extern_variable", - "name": "D_800738CA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738CA" - }, - { - "type": "extern_variable", - "name": "D_801671B8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801671B8" - }, - { - "type": "extern_variable", - "name": "D_801671BA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801671BA" - }, - { - "type": "extern_variable", - "name": "D_801671BC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801671BC" - }, - { - "type": "extern_variable", - "name": "D_8009D866", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D866" - }, - { - "type": "extern_variable", - "name": "D_800F5E68", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E68" - }, - { - "type": "extern_variable", - "name": "D_800F5E6A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E6A" - }, - { - "type": "extern_variable", - "name": "D_800708D1", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708D1" - }, - { - "type": "extern_variable", - "name": "D_8009D85E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85E" - }, - { - "type": "extern_variable", - "name": "D_8009D862", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D862" - }, - { - "type": "extern_variable", - "name": "D_800F5E70", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E70" - }, - { - "type": "extern_variable", - "name": "D_800F5E72", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E72" - }, - { - "type": "extern_variable", - "name": "D_800738A4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738A4" - }, - { - "type": "extern_variable", - "name": "D_800738C7", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738C7" - }, - { - "type": "extern_variable", - "name": "D_8009D84E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D84E" - }, - { - "type": "extern_variable", - "name": "D_800F5E64", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E64" - }, - { - "type": "extern_variable", - "name": "D_800F5EFC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5EFC" - }, - { - "type": "extern_variable", - "name": "func_800AA574", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AA574" - }, - { - "type": "extern_variable", - "name": "func_800AA688", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AA688" - }, - { - "type": "extern_variable", - "name": "D_80163778", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163778" - }, - { - "type": "extern_variable", - "name": "D_800E7BA4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BA4" - }, - { - "type": "extern_variable", - "name": "D_800E7BA5", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BA5" - }, - { - "type": "extern_variable", - "name": "D_800E7BA6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BA6" - }, - { - "type": "extern_variable", - "name": "D_800F5E74", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E74" - }, - { - "type": "extern_variable", - "name": "D_800F5E76", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E76" - }, - { - "type": "extern_variable", - "name": "D_800730D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730D0" - }, - { - "type": "extern_variable", - "name": "D_800E7BBC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BBC" - }, - { - "type": "extern_variable", - "name": "D_800E7BBD", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BBD" - }, - { - "type": "extern_variable", - "name": "D_8009D86F", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D86F" - }, - { - "type": "extern_variable", - "name": "D_800E7BCC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BCC" - }, - { - "type": "extern_variable", - "name": "D_800E7BFC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BFC" - }, - { - "type": "extern_variable", - "name": "D_800E7BEC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BEC" - }, - { - "type": "extern_variable", - "name": "func_800AF264", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AF264" - }, - { - "type": "extern_variable", - "name": "func_800AF3AC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AF3AC" - }, - { - "type": "extern_variable", - "name": "D_800E7C7C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7C7C" - }, - { - "type": "extern_variable", - "name": "D_800E7CBC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7CBC" - }, - { - "type": "extern_variable", - "name": "D_800E7CDC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7CDC" - }, - { - "type": "extern_variable", - "name": "D_800F4A48", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4A48" - }, - { - "type": "extern_variable", - "name": "D_800F4A70", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4A70" - }, - { - "type": "extern_variable", - "name": "D_800F4A98", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4A98" - }, - { - "type": "extern_variable", - "name": "D_800F49A0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F49A0" - }, - { - "type": "extern_variable", - "name": "D_800F49A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F49A8" - }, - { - "type": "extern_variable", - "name": "D_8009D85C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85C" - }, - { - "type": "extern_variable", - "name": "D_8009D860", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D860" - }, - { - "type": "extern_variable", - "name": "D_8009D868", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D868" - }, - { - "type": "extern_variable", - "name": "D_8009D86A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D86A" - }, - { - "type": "extern_variable", - "name": "D_800F5F01", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5F01" - }, - { - "type": "extern_variable", - "name": "D_800F87F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F87F0" - }, - { - "type": "extern_variable", - "name": "func_800A5250", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800A5250" - } - ], - "timestamp": "2026-04-18T12:35:36.221072" - }, - { - "function_name": "func_800BA598", - "file": "src/battle/battle1.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "func_800B5E64", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800B5E64" - }, - { - "type": "extern_variable", - "name": "D_800F8384", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F8384" - }, - { - "type": "extern_variable", - "name": "D_80103200", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80103200" - }, - { - "type": "extern_variable", - "name": "D_800F7E10", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7E10" - }, - { - "type": "extern_variable", - "name": "D_800F8180", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F8180" - }, - { - "type": "extern_variable", - "name": "D_800E8E88", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E8E88" - }, - { - "type": "extern_variable", - "name": "D_800E8F94", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E8F94" - }, - { - "type": "extern_variable", - "name": "func_800B7DB4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800B7DB4" - }, - { - "type": "extern_variable", - "name": "D_800FA9D1", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FA9D1" - }, - { - "type": "extern_variable", - "name": "D_80163CC0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163CC0" - }, - { - "type": "extern_variable", - "name": "D_80163CC2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163CC2" - }, - { - "type": "extern_variable", - "name": "D_80163CC4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163CC4" - }, - { - "type": "extern_variable", - "name": "D_800F99EC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F99EC" - }, - { - "type": "extern_variable", - "name": "D_800F99EE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F99EE" - }, - { - "type": "extern_variable", - "name": "D_800F99F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F99F0" - }, - { - "type": "extern_variable", - "name": "D_800F99F2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F99F2" - }, - { - "type": "extern_variable", - "name": "D_800F99F4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F99F4" - }, - { - "type": "extern_variable", - "name": "D_800F99F6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F99F6" - }, - { - "type": "extern_variable", - "name": "D_800FA9D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FA9D8" - }, - { - "type": "extern_variable", - "name": "D_801517F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801517F0" - }, - { - "type": "extern_variable", - "name": "D_800F7E08", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7E08" - }, - { - "type": "extern_variable", - "name": "D_801516FE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801516FE" - }, - { - "type": "extern_variable", - "name": "D_80151700", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151700" - }, - { - "type": "extern_variable", - "name": "D_80151702", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151702" - }, - { - "type": "extern_variable", - "name": "D_800F8178", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F8178" - }, - { - "type": "extern_variable", - "name": "D_800F8184", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F8184" - }, - { - "type": "extern_variable", - "name": "D_80163B44", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163B44" - }, - { - "type": "extern_variable", - "name": "D_801590E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801590E4" - }, - { - "type": "extern_variable", - "name": "D_801590E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801590E8" - }, - { - "type": "extern_variable", - "name": "D_800F7ED8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7ED8" - }, - { - "type": "extern_variable", - "name": "D_800F7EDA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EDA" - }, - { - "type": "extern_variable", - "name": "D_80151844", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151844" - }, - { - "type": "extern_variable", - "name": "D_80151846", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151846" - }, - { - "type": "extern_variable", - "name": "D_80151848", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151848" - }, - { - "type": "extern_variable", - "name": "D_801518A4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801518A4" - }, - { - "type": "extern_variable", - "name": "D_801518A6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801518A6" - }, - { - "type": "extern_variable", - "name": "D_801518A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801518A8" - }, - { - "type": "extern_variable", - "name": "D_800F7EF0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EF0" - }, - { - "type": "extern_variable", - "name": "D_800F7EDC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EDC" - }, - { - "type": "extern_variable", - "name": "D_800F7EDE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EDE" - }, - { - "type": "extern_variable", - "name": "D_800F7EE0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EE0" - }, - { - "type": "extern_variable", - "name": "D_800F7EE2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EE2" - }, - { - "type": "extern_variable", - "name": "D_800F7EE4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EE4" - }, - { - "type": "extern_variable", - "name": "D_800F7EE6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EE6" - }, - { - "type": "extern_variable", - "name": "D_800F7EE8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EE8" - }, - { - "type": "extern_variable", - "name": "func_800C0480", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C0480" - }, - { - "type": "extern_variable", - "name": "func_800C0630", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C0630" - }, - { - "type": "extern_variable", - "name": "func_800C0970", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C0970" - }, - { - "type": "extern_variable", - "name": "func_800C0B20", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C0B20" - }, - { - "type": "extern_variable", - "name": "D_80151850", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151850" - }, - { - "type": "extern_variable", - "name": "func_800B5AAC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800B5AAC" - }, - { - "type": "extern_variable", - "name": "func_800C36B4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C36B4" - }, - { - "type": "extern_variable", - "name": "func_800B4E30", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800B4E30" - }, - { - "type": "extern_variable", - "name": "func_800B54B8", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800B54B8" - }, - { - "type": "extern_variable", - "name": "func_800D09D0", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D09D0" - }, - { - "type": "extern_variable", - "name": "D_800F9DAA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9DAA" - }, - { - "type": "extern_variable", - "name": "D_800F9DAC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9DAC" - }, - { - "type": "extern_variable", - "name": "D_800FA9C6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FA9C6" - }, - { - "type": "extern_variable", - "name": "D_800F8CF4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F8CF4" - }, - { - "type": "extern_variable", - "name": "func_801B0050", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_801B0050" - }, - { - "type": "extern_variable", - "name": "func_800C74E4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C74E4" - }, - { - "type": "extern_variable", - "name": "D_800F4B0C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4B0C" - }, - { - "type": "extern_variable", - "name": "D_801AFFC0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801AFFC0" - }, - { - "type": "extern_variable", - "name": "func_8003CEBC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8003CEBC" - }, - { - "type": "extern_variable", - "name": "func_8003D1B4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8003D1B4" - }, - { - "type": "extern_variable", - "name": "func_80043938", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80043938" - }, - { - "type": "extern_variable", - "name": "func_80046960", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80046960" - }, - { - "type": "extern_variable", - "name": "func_8003BC9C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8003BC9C" - }, - { - "type": "extern_variable", - "name": "func_800468FC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800468FC" - }, - { - "type": "extern_variable", - "name": "D_800EA264", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800EA264" - } - ], - "timestamp": "2026-04-18T12:35:36.601061" - }, - { - "function_name": "func_800308D4", - "file": "src/main/akao.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "SpuSetVoiceARAttr", - "return_type": "unknown", - "parameters": "s32, u16, s32", - "suggestion": "Define proper signature for SpuSetVoiceARAttr in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoiceDR", - "return_type": "unknown", - "parameters": "s32, u16", - "suggestion": "Define proper signature for SpuSetVoiceDR in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoiceLoopStartAddr", - "return_type": "unknown", - "parameters": "s32, s32", - "suggestion": "Define proper signature for SpuSetVoiceLoopStartAddr in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoicePitch", - "return_type": "unknown", - "parameters": "u16", - "suggestion": "Define proper signature for SpuSetVoicePitch in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoiceRRAttr", - "return_type": "unknown", - "parameters": "s32, u16, s32", - "suggestion": "Define proper signature for SpuSetVoiceRRAttr in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoiceSL", - "return_type": "unknown", - "parameters": "s32, u16", - "suggestion": "Define proper signature for SpuSetVoiceSL in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoiceSRAttr", - "return_type": "unknown", - "parameters": "s32, u16, s32", - "suggestion": "Define proper signature for SpuSetVoiceSRAttr in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoiceStartAddr", - "return_type": "unknown", - "parameters": "s32, s32", - "suggestion": "Define proper signature for SpuSetVoiceStartAddr in header" - }, - { - "type": "extern_function", - "name": "SpuSetVoiceVolume", - "return_type": "unknown", - "parameters": "s32, s16, s16", - "suggestion": "Define proper signature for SpuSetVoiceVolume in header" - }, - { - "type": "extern_variable", - "name": "D_80049C40", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049C40" - }, - { - "type": "extern_variable", - "name": "func_8002BD04", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002BD04" - }, - { - "type": "extern_variable", - "name": "func_8002BFCC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002BFCC" - }, - { - "type": "extern_variable", - "name": "func_8002C004", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002C004" - }, - { - "type": "extern_variable", - "name": "func_8002C2CC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002C2CC" - }, - { - "type": "extern_variable", - "name": "func_8002C300", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8002C300" - }, - { - "type": "extern_variable", - "name": "D_8007EBE4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007EBE4" - }, - { - "type": "extern_variable", - "name": "func_80030038", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80030038" - }, - { - "type": "extern_variable", - "name": "D_80081DC8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80081DC8" - }, - { - "type": "extern_variable", - "name": "D_800499A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800499A8" - }, - { - "type": "extern_variable", - "name": "D_80096704", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80096704" - }, - { - "type": "extern_variable", - "name": "func_800293D0", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800293D0" - } - ], - "timestamp": "2026-04-18T12:35:36.882132" - }, - { - "function_name": "func_8001786C", - "file": "src/main/18B8.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_8007E7A0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7A0" - }, - { - "type": "extern_variable", - "name": "D_8007EB6A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007EB6A" - }, - { - "type": "extern_variable", - "name": "D_8009A078", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009A078" - }, - { - "type": "extern_variable", - "name": "D_8009A079", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009A079" - }, - { - "type": "extern_variable", - "name": "D_8009A07A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009A07A" - }, - { - "type": "extern_variable", - "name": "D_80063048", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80063048" - }, - { - "type": "extern_variable", - "name": "D_80010118", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80010118" - }, - { - "type": "extern_variable", - "name": "D_80010120", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80010120" - }, - { - "type": "extern_variable", - "name": "D_80010124", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80010124" - }, - { - "type": "extern_variable", - "name": "D_800F5BC7", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5BC7" - }, - { - "type": "extern_variable", - "name": "D_800F5BE1", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5BE1" - }, - { - "type": "extern_variable", - "name": "D_800F5BF4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5BF4" - }, - { - "type": "extern_variable", - "name": "D_800F5F44", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5F44" - }, - { - "type": "extern_variable", - "name": "D_800F652C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F652C" - }, - { - "type": "extern_variable", - "name": "D_800F83E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F83E4" - }, - { - "type": "extern_variable", - "name": "D_800F8410", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F8410" - }, - { - "type": "extern_variable", - "name": "D_80163658", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163658" - }, - { - "type": "extern_variable", - "name": "D_8009D808", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D808" - }, - { - "type": "extern_variable", - "name": "D_8009D80A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D80A" - }, - { - "type": "extern_variable", - "name": "D_8009D80C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D80C" - }, - { - "type": "extern_variable", - "name": "func_80018028", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80018028" - }, - { - "type": "extern_variable", - "name": "D_800491B0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800491B0" - }, - { - "type": "extern_variable", - "name": "D_800730D9", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730D9" - }, - { - "type": "extern_variable", - "name": "D_800730DA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730DA" - }, - { - "type": "extern_variable", - "name": "D_800730DB", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730DB" - }, - { - "type": "extern_variable", - "name": "D_80062E53", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80062E53" - }, - { - "type": "extern_variable", - "name": "D_8006950A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8006950A" - }, - { - "type": "extern_variable", - "name": "func_80019254", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80019254" - }, - { - "type": "extern_variable", - "name": "func_8001937C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8001937C" - }, - { - "type": "extern_variable", - "name": "func_800193F4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800193F4" - }, - { - "type": "extern_variable", - "name": "func_80019544", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80019544" - }, - { - "type": "extern_variable", - "name": "D_80049060", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049060" - }, - { - "type": "extern_variable", - "name": "D_80049062", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049062" - }, - { - "type": "extern_variable", - "name": "D_80049064", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049064" - }, - { - "type": "extern_variable", - "name": "D_80049066", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049066" - }, - { - "type": "extern_variable", - "name": "D_80049068", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049068" - }, - { - "type": "extern_variable", - "name": "D_8004906A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8004906A" - }, - { - "type": "extern_variable", - "name": "D_8004906C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8004906C" - }, - { - "type": "extern_variable", - "name": "D_8004906E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8004906E" - }, - { - "type": "extern_variable", - "name": "D_800730D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730D8" - }, - { - "type": "extern_variable", - "name": "D_800694E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800694E4" - }, - { - "type": "extern_variable", - "name": "D_8006947C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8006947C" - }, - { - "type": "extern_variable", - "name": "D_800730DE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730DE" - }, - { - "type": "extern_variable", - "name": "D_80069508", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069508" - }, - { - "type": "extern_variable", - "name": "func_8001BB30", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8001BB30" - }, - { - "type": "extern_variable", - "name": "D_80069538", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069538" - }, - { - "type": "extern_variable", - "name": "D_80069554", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" - }, - { - "type": "extern_variable", - "name": "D_80069555", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069555" - }, - { - "type": "extern_variable", - "name": "D_80069556", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069556" - }, - { - "type": "extern_variable", - "name": "D_80069558", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" - }, - { - "type": "extern_variable", - "name": "D_800708C8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708C8" - }, - { - "type": "extern_variable", - "name": "D_800708D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708D0" - }, - { - "type": "extern_variable", - "name": "D_800696F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" - }, - { - "type": "extern_variable", - "name": "D_80071E46", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071E46" - }, - { - "type": "extern_variable", - "name": "D_800738A4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738A4" - }, - { - "type": "extern_variable", - "name": "D_8009D888", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D888" - }, - { - "type": "extern_variable", - "name": "D_80069844", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069844" - }, - { - "type": "extern_variable", - "name": "D_800494A4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800494A4" - }, - { - "type": "extern_variable", - "name": "D_80071E4D", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071E4D" - }, - { - "type": "extern_variable", - "name": "D_800738BC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738BC" - }, - { - "type": "extern_variable", - "name": "D_800491D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800491D0" - }, - { - "type": "extern_variable", - "name": "D_8009D85C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85C" - }, - { - "type": "extern_variable", - "name": "D_8009D85E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85E" - }, - { - "type": "extern_variable", - "name": "D_8009D860", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D860" - }, - { - "type": "extern_variable", - "name": "D_8009D862", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D862" - }, - { - "type": "extern_variable", - "name": "func_80026090", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80026090" - }, - { - "type": "extern_variable", - "name": "func_800260DC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800260DC" - }, - { - "type": "extern_variable", - "name": "D_80083084", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083084" - }, - { - "type": "extern_variable", - "name": "D_80074EB0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB0" - }, - { - "type": "extern_variable", - "name": "D_80074EB4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB4" - }, - { - "type": "extern_variable", - "name": "D_80074EDA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EDA" - }, - { - "type": "extern_variable", - "name": "D_80074F16", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074F16" - }, - { - "type": "extern_variable", - "name": "D_80071C32", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071C32" - }, - { - "type": "extern_variable", - "name": "D_80071E64", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071E64" - }, - { - "type": "extern_variable", - "name": "D_800722D6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800722D6" - }, - { - "type": "extern_variable", - "name": "D_800738CA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738CA" - }, - { - "type": "extern_variable", - "name": "D_8009D894", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" - }, - { - "type": "extern_variable", - "name": "D_8009D88A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D88A" - }, - { - "type": "extern_variable", - "name": "D_8009D88C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D88C" - }, - { - "type": "extern_variable", - "name": "D_8009D88E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D88E" - }, - { - "type": "extern_variable", - "name": "func_80018630", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80018630" - }, - { - "type": "extern_variable", - "name": "func_80018934", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80018934" - }, - { - "type": "extern_variable", - "name": "D_800730DF", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730DF" - } - ], - "timestamp": "2026-04-18T12:35:38.024166" - }, - { - "function_name": "func_800E3E10", - "file": "src/battle/battle3.c", - "primary_error": "Local variable 'temp_s0' is void* but used with -> (m2c struct type inference failure)", - "missing_items": [ - { - "type": "extern_function", - "name": "func_80026A34", - "return_type": "void", - "parameters": "?, ?, ?, ?", - "suggestion": "Define proper signature for func_80026A34 in header" - }, - { - "type": "extern_function", - "name": "func_80028484", - "return_type": "void", - "parameters": "s16*, u16, ?", - "suggestion": "Define proper signature for func_80028484 in header" - }, - { - "type": "extern_function", - "name": "func_800E368C", - "return_type": "void", - "parameters": "?, ?, ?", - "suggestion": "Define proper signature for func_800E368C in header" - }, - { - "type": "extern_variable", - "name": "D_800FB064", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FB064" - }, - { - "type": "extern_variable", - "name": "D_800FF060", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FF060" - }, - { - "type": "extern_variable", - "name": "D_800FF064", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FF064" - }, - { - "type": "extern_variable", - "name": "D_800FF068", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FF068" - }, - { - "type": "extern_variable", - "name": "D_800FF06C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FF06C" - }, - { - "type": "extern_variable", - "name": "D_800FF070", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FF070" - }, - { - "type": "extern_variable", - "name": "D_800FF074", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FF074" - }, - { - "type": "extern_variable", - "name": "D_800FF094", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FF094" - }, - { - "type": "extern_variable", - "name": "D_800FF098", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FF098" - }, - { - "type": "extern_variable", - "name": "D_800FF0D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FF0D8" - }, - { - "type": "extern_variable", - "name": "D_800FF0DC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FF0DC" - }, - { - "type": "extern_variable", - "name": "D_800FF0E0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FF0E0" - }, - { - "type": "extern_variable", - "name": "D_80103154", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80103154" - }, - { - "type": "extern_variable", - "name": "D_80103158", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80103158" - }, - { - "type": "extern_variable", - "name": "D_80103160", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80103160" - }, - { - "type": "extern_variable", - "name": "D_80103188", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80103188" - }, - { - "type": "extern_variable", - "name": "D_801031CC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801031CC" - }, - { - "type": "extern_variable", - "name": "D_801031D4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801031D4" - }, - { - "type": "extern_variable", - "name": "func_80044AC0", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80044AC0" - }, - { - "type": "extern_variable", - "name": "func_80046794", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80046794" - }, - { - "type": "extern_variable", - "name": "D_800F57F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F57F0" - }, - { - "type": "extern_variable", - "name": "D_800F1E54", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F1E54" - }, - { - "type": "extern_variable", - "name": "D_800F1E56", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F1E56" - }, - { - "type": "extern_variable", - "name": "D_800F1E58", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F1E58" - }, - { - "type": "extern_variable", - "name": "D_800F1E5A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F1E5A" - }, - { - "type": "extern_variable", - "name": "D_800F1E5C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F1E5C" - }, - { - "type": "extern_variable", - "name": "D_800F1E5E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F1E5E" - }, - { - "type": "extern_variable", - "name": "D_800F1E60", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F1E60" - }, - { - "type": "extern_variable", - "name": "D_800F1E62", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F1E62" - }, - { - "type": "extern_variable", - "name": "D_800F2F8C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F2F8C" - }, - { - "type": "extern_variable", - "name": "func_800DA380", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800DA380" - }, - { - "type": "extern_variable", - "name": "D_801516FE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801516FE" - }, - { - "type": "extern_variable", - "name": "D_800492FC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800492FC" - }, - { - "type": "extern_variable", - "name": "D_800F55D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F55D8" - }, - { - "type": "extern_variable", - "name": "func_800DDAD8", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800DDAD8" - }, - { - "type": "extern_variable", - "name": "func_800DDCE8", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800DDCE8" - }, - { - "type": "extern_variable", - "name": "D_800F90C6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F90C6" - }, - { - "type": "extern_variable", - "name": "D_8009D8FE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D8FE" - }, - { - "type": "extern_variable", - "name": "D_800F3168", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F3168" - }, - { - "type": "extern_variable", - "name": "D_8009D85C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85C" - }, - { - "type": "extern_variable", - "name": "D_8009D85E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85E" - }, - { - "type": "extern_variable", - "name": "D_801031F4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801031F4" - }, - { - "type": "extern_variable", - "name": "D_80151688", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151688" - }, - { - "type": "extern_variable", - "name": "D_8015174C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8015174C" - }, - { - "type": "extern_variable", - "name": "D_8015178C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8015178C" - }, - { - "type": "extern_variable", - "name": "D_801517C8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801517C8" - }, - { - "type": "extern_variable", - "name": "D_8015187C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8015187C" - }, - { - "type": "extern_variable", - "name": "D_800F33B0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F33B0" - }, - { - "type": "extern_variable", - "name": "D_80163778", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163778" - }, - { - "type": "extern_variable", - "name": "D_80163B70", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163B70" - }, - { - "type": "extern_variable", - "name": "D_800F5778", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5778" - }, - { - "type": "extern_variable", - "name": "func_8001786C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8001786C" - }, - { - "type": "extern_variable", - "name": "func_80020058", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80020058" - }, - { - "type": "extern_variable", - "name": "D_8009D854", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D854" - }, - { - "type": "extern_variable", - "name": "D_8009D856", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D856" - }, - { - "type": "extern_variable", - "name": "D_8009D860", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D860" - }, - { - "type": "extern_variable", - "name": "D_8009DC5C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009DC5C" - }, - { - "type": "extern_variable", - "name": "D_800F577B", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F577B" - }, - { - "type": "extern_variable", - "name": "D_800F90BE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F90BE" - }, - { - "type": "extern_variable", - "name": "D_800F90BF", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F90BF" - }, - { - "type": "extern_variable", - "name": "D_801516A4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801516A4" - }, - { - "type": "extern_variable", - "name": "D_801516CC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801516CC" - }, - { - "type": "extern_variable", - "name": "D_800F90FC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F90FC" - }, - { - "type": "extern_variable", - "name": "D_800F90FE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F90FE" - }, - { - "type": "extern_variable", - "name": "D_800F9100", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9100" - }, - { - "type": "extern_variable", - "name": "D_800F9102", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9102" - }, - { - "type": "extern_variable", - "name": "D_800F9104", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9104" - }, - { - "type": "extern_variable", - "name": "D_800F9106", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9106" - }, - { - "type": "extern_variable", - "name": "D_800F9107", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9107" - }, - { - "type": "extern_variable", - "name": "D_800F9108", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9108" - }, - { - "type": "extern_variable", - "name": "D_800F9109", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9109" - }, - { - "type": "extern_variable", - "name": "D_800F910A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F910A" - }, - { - "type": "extern_variable", - "name": "D_800F910B", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F910B" - }, - { - "type": "extern_variable", - "name": "D_800F910C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F910C" - }, - { - "type": "extern_variable", - "name": "D_800F910D", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F910D" - }, - { - "type": "extern_variable", - "name": "D_800F32E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F32E4" - }, - { - "type": "extern_variable", - "name": "D_80166F78", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80166F78" - }, - { - "type": "extern_variable", - "name": "func_80046960", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80046960" - }, - { - "type": "extern_variable", - "name": "func_800468FC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800468FC" - }, - { - "type": "extern_variable", - "name": "D_800F335C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F335C" - }, - { - "type": "extern_variable", - "name": "D_800F335D", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F335D" - }, - { - "type": "extern_variable", - "name": "D_800F33AC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F33AC" - }, - { - "type": "extern_variable", - "name": "func_80028484", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80028484" - }, - { - "type": "extern_variable", - "name": "func_800E368C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800E368C" - }, - { - "type": "extern_variable", - "name": "D_8009DB14", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009DB14" - }, - { - "type": "extern_variable", - "name": "D_800F90EA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F90EA" - } - ], - "timestamp": "2026-04-18T12:35:38.386296" - }, - { - "function_name": "func_80035744", - "file": "src/main/psxsdk.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "_SpuInit", - "return_type": "unknown", - "parameters": "?", - "suggestion": "Define proper signature for _SpuInit in header" - }, - { - "type": "extern_variable", - "name": "func_8003DD84", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8003DD84" - }, - { - "type": "extern_variable", - "name": "func_80034350", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable func_80034350" - }, - { - "type": "extern_variable", - "name": "D_7FFFFF", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_7FFFFF" - }, - { - "type": "extern_variable", - "name": "D_80095DB4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80095DB4" - } - ], - "timestamp": "2026-04-18T12:35:38.546795" - }, - { - "function_name": "func_800A38FC", - "file": "src/battle/battle.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_8009D954", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D954" - }, - { - "type": "extern_variable", - "name": "D_800FA9D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FA9D0" - }, - { - "type": "extern_variable", - "name": "D_800FA9D4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FA9D4" - }, - { - "type": "extern_variable", - "name": "D_800F9F3C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9F3C" - }, - { - "type": "extern_variable", - "name": "D_800F9F42", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9F42" - }, - { - "type": "extern_variable", - "name": "D_800F9F44", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9F44" - }, - { - "type": "extern_variable", - "name": "D_800F87F4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F87F4" - }, - { - "type": "extern_variable", - "name": "D_800F5E65", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E65" - }, - { - "type": "extern_variable", - "name": "D_800F3A40", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F3A40" - }, - { - "type": "extern_variable", - "name": "D_80071C32", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071C32" - }, - { - "type": "extern_variable", - "name": "D_80071E64", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071E64" - }, - { - "type": "extern_variable", - "name": "D_800722D6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800722D6" - }, - { - "type": "extern_variable", - "name": "D_800722D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800722D8" - }, - { - "type": "extern_variable", - "name": "D_800738A0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738A0" - }, - { - "type": "extern_variable", - "name": "D_800738CA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738CA" - }, - { - "type": "extern_variable", - "name": "D_801671B8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801671B8" - }, - { - "type": "extern_variable", - "name": "D_801671BA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801671BA" - }, - { - "type": "extern_variable", - "name": "D_801671BC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801671BC" - }, - { - "type": "extern_variable", - "name": "D_8009D866", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D866" - }, - { - "type": "extern_variable", - "name": "D_800F5E68", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E68" - }, - { - "type": "extern_variable", - "name": "D_800F5E6A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E6A" - }, - { - "type": "extern_variable", - "name": "D_800708D1", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708D1" - }, - { - "type": "extern_variable", - "name": "D_8009D85E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85E" - }, - { - "type": "extern_variable", - "name": "D_8009D862", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D862" - }, - { - "type": "extern_variable", - "name": "D_800F5E70", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E70" - }, - { - "type": "extern_variable", - "name": "D_800F5E72", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E72" - }, - { - "type": "extern_variable", - "name": "D_800738A4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738A4" - }, - { - "type": "extern_variable", - "name": "D_800738C7", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738C7" - }, - { - "type": "extern_variable", - "name": "D_8009D84E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D84E" - }, - { - "type": "extern_variable", - "name": "D_800F5E64", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E64" - }, - { - "type": "extern_variable", - "name": "D_800F5EFC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5EFC" - }, - { - "type": "extern_variable", - "name": "func_800AA574", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AA574" - }, - { - "type": "extern_variable", - "name": "func_800AA688", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AA688" - }, - { - "type": "extern_variable", - "name": "D_80163778", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163778" - }, - { - "type": "extern_variable", - "name": "D_800E7BA4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BA4" - }, - { - "type": "extern_variable", - "name": "D_800E7BA5", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BA5" - }, - { - "type": "extern_variable", - "name": "D_800E7BA6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BA6" - }, - { - "type": "extern_variable", - "name": "D_800F5E74", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E74" - }, - { - "type": "extern_variable", - "name": "D_800F5E76", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E76" - }, - { - "type": "extern_variable", - "name": "D_800730D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730D0" - }, - { - "type": "extern_variable", - "name": "D_800E7BBC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BBC" - }, - { - "type": "extern_variable", - "name": "D_800E7BBD", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BBD" - }, - { - "type": "extern_variable", - "name": "D_8009D86F", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D86F" - }, - { - "type": "extern_variable", - "name": "D_800E7BCC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BCC" - }, - { - "type": "extern_variable", - "name": "D_800E7BFC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BFC" - }, - { - "type": "extern_variable", - "name": "D_800E7BEC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BEC" - }, - { - "type": "extern_variable", - "name": "func_800AF264", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AF264" - }, - { - "type": "extern_variable", - "name": "func_800AF3AC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AF3AC" - }, - { - "type": "extern_variable", - "name": "D_800E7C7C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7C7C" - }, - { - "type": "extern_variable", - "name": "D_800E7CBC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7CBC" - }, - { - "type": "extern_variable", - "name": "D_800E7CDC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7CDC" - }, - { - "type": "extern_variable", - "name": "D_800F4A48", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4A48" - }, - { - "type": "extern_variable", - "name": "D_800F4A70", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4A70" - }, - { - "type": "extern_variable", - "name": "D_800F4A98", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4A98" - }, - { - "type": "extern_variable", - "name": "D_800F49A0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F49A0" - }, - { - "type": "extern_variable", - "name": "D_800F49A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F49A8" - }, - { - "type": "extern_variable", - "name": "D_8009D85C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85C" - }, - { - "type": "extern_variable", - "name": "D_8009D860", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D860" - }, - { - "type": "extern_variable", - "name": "D_8009D868", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D868" - }, - { - "type": "extern_variable", - "name": "D_8009D86A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D86A" - }, - { - "type": "extern_variable", - "name": "D_800F5F01", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5F01" - }, - { - "type": "extern_variable", - "name": "D_800F87F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F87F0" - }, - { - "type": "extern_variable", - "name": "func_800A5250", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800A5250" - } - ], - "timestamp": "2026-04-18T12:35:38.812163" - }, - { - "function_name": "func_800A8F88", - "file": "src/field/field.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80074EB0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB0" - }, - { - "type": "extern_variable", - "name": "D_80074EB4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB4" - }, - { - "type": "extern_variable", - "name": "D_80074EB8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB8" - }, - { - "type": "extern_variable", - "name": "func_800A48B8", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800A48B8" - }, - { - "type": "extern_variable", - "name": "D_80074ED9", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074ED9" - }, - { - "type": "extern_variable", - "name": "D_800DF120", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DF120" - }, - { - "type": "extern_variable", - "name": "D_800DF122", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DF122" - }, - { - "type": "extern_variable", - "name": "D_800DEF88", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DEF88" - }, - { - "type": "extern_variable", - "name": "func_800354CC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800354CC" - }, - { - "type": "extern_variable", - "name": "func_80035658", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80035658" - }, - { - "type": "extern_variable", - "name": "D_800E0638", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0638" - }, - { - "type": "extern_variable", - "name": "D_800E48F4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48F4" - }, - { - "type": "extern_variable", - "name": "D_800E48FC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48FC" - }, - { - "type": "extern_variable", - "name": "D_800E48FE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48FE" - }, - { - "type": "extern_variable", - "name": "D_800E4900", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4900" - }, - { - "type": "extern_variable", - "name": "D_800E4901", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4901" - }, - { - "type": "extern_variable", - "name": "D_800E4904", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4904" - }, - { - "type": "extern_variable", - "name": "D_800E4906", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4906" - }, - { - "type": "extern_variable", - "name": "D_800E4908", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4908" - }, - { - "type": "extern_variable", - "name": "D_800E4909", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4909" - }, - { - "type": "extern_variable", - "name": "D_800E490C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E490C" - }, - { - "type": "extern_variable", - "name": "D_800E490E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E490E" - }, - { - "type": "extern_variable", - "name": "D_800E4910", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4910" - }, - { - "type": "extern_variable", - "name": "D_800E4911", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4911" - }, - { - "type": "extern_variable", - "name": "D_800E4914", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4914" - }, - { - "type": "extern_variable", - "name": "D_800E4916", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4916" - }, - { - "type": "extern_variable", - "name": "D_800E4918", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4918" - }, - { - "type": "extern_variable", - "name": "D_800E4919", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4919" - }, - { - "type": "extern_variable", - "name": "D_8007EB98", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007EB98" - }, - { - "type": "extern_variable", - "name": "func_8001786C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8001786C" - }, - { - "type": "extern_variable", - "name": "func_80020058", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80020058" - }, - { - "type": "extern_variable", - "name": "D_800491D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800491D0" - }, - { - "type": "extern_variable", - "name": "D_8008328D", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328D" - }, - { - "type": "extern_variable", - "name": "D_800832A2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800832A2" - }, - { - "type": "extern_variable", - "name": "D_8008326C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008326C" - }, - { - "type": "extern_variable", - "name": "D_80083286", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083286" - }, - { - "type": "extern_variable", - "name": "D_80083278", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083278" - }, - { - "type": "extern_variable", - "name": "D_8008327A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327A" - }, - { - "type": "extern_variable", - "name": "D_8008327E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327E" - }, - { - "type": "extern_variable", - "name": "D_80075E24", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075E24" - }, - { - "type": "extern_variable", - "name": "D_80075E25", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075E25" - }, - { - "type": "extern_variable", - "name": "D_800E4214", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4214" - }, - { - "type": "extern_variable", - "name": "D_800E4280", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4280" - }, - { - "type": "extern_variable", - "name": "D_800E4D48", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4D48" - }, - { - "type": "extern_variable", - "name": "D_800E0748", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0748" - }, - { - "type": "extern_variable", - "name": "D_800E074A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074A" - }, - { - "type": "extern_variable", - "name": "D_800E074C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074C" - }, - { - "type": "extern_variable", - "name": "D_800E08C0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08C0" - }, - { - "type": "extern_variable", - "name": "D_800E074E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074E" - }, - { - "type": "extern_variable", - "name": "D_800E0754", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0754" - }, - { - "type": "extern_variable", - "name": "D_800E0758", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0758" - }, - { - "type": "extern_variable", - "name": "D_800E08A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08A8" - }, - { - "type": "extern_variable", - "name": "D_800E0756", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0756" - }, - { - "type": "extern_variable", - "name": "D_800E0750", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0750" - }, - { - "type": "extern_variable", - "name": "D_800E0751", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0751" - }, - { - "type": "extern_variable", - "name": "D_800E0752", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0752" - }, - { - "type": "extern_variable", - "name": "func_800D5A60", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D5A60" - }, - { - "type": "extern_variable", - "name": "func_800D5C9C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D5C9C" - }, - { - "type": "extern_variable", - "name": "func_800D6D44", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6D44" - }, - { - "type": "extern_variable", - "name": "func_800D6E0C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6E0C" - }, - { - "type": "extern_variable", - "name": "func_800D6F6C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6F6C" - }, - { - "type": "extern_variable", - "name": "D_80083284", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083284" - }, - { - "type": "extern_variable", - "name": "D_8008328A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328A" - }, - { - "type": "extern_variable", - "name": "D_8008328E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328E" - }, - { - "type": "extern_variable", - "name": "D_80083298", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083298" - }, - { - "type": "extern_variable", - "name": "D_8008329A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329A" - }, - { - "type": "extern_variable", - "name": "D_800E424C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E424C" - }, - { - "type": "extern_variable", - "name": "D_801142CC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801142CC" - }, - { - "type": "extern_variable", - "name": "D_8009AD30", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009AD30" - }, - { - "type": "extern_variable", - "name": "func_800C2E00", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C2E00" - }, - { - "type": "extern_variable", - "name": "func_800DA444", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800DA444" - }, - { - "type": "extern_variable", - "name": "func_800C8634", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C8634" - }, - { - "type": "extern_variable", - "name": "func_800CDC14", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800CDC14" - }, - { - "type": "extern_variable", - "name": "D_80095DE0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80095DE0" - }, - { - "type": "extern_variable", - "name": "func_80025B10", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80025B10" - }, - { - "type": "extern_variable", - "name": "func_800BEAD4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800BEAD4" - }, - { - "type": "extern_variable", - "name": "D_800E0208", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0208" - }, - { - "type": "extern_variable", - "name": "D_800756E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800756E8" - }, - { - "type": "extern_variable", - "name": "D_80083291", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083291" - }, - { - "type": "extern_variable", - "name": "D_80083294", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083294" - }, - { - "type": "extern_variable", - "name": "D_8007078C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007078C" - }, - { - "type": "extern_variable", - "name": "D_8007E7B8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B8" - }, - { - "type": "extern_variable", - "name": "D_8007E7BA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7BA" - }, - { - "type": "extern_variable", - "name": "D_8007E7AC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7AC" - }, - { - "type": "extern_variable", - "name": "D_8007E7AE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7AE" - }, - { - "type": "extern_variable", - "name": "D_8007E7B0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B0" - }, - { - "type": "extern_variable", - "name": "D_8007E7B2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B2" - }, - { - "type": "extern_variable", - "name": "D_8007E7B4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B4" - }, - { - "type": "extern_variable", - "name": "D_8007E7B6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B6" - }, - { - "type": "extern_variable", - "name": "D_80082248", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082248" - }, - { - "type": "extern_variable", - "name": "D_8008325C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008325C" - }, - { - "type": "extern_variable", - "name": "D_8009D828", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D828" - }, - { - "type": "extern_variable", - "name": "D_800A0854", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A0854" - }, - { - "type": "extern_variable", - "name": "D_800A0F38", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A0F38" - }, - { - "type": "extern_variable", - "name": "D_8007E7C2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7C2" - }, - { - "type": "extern_variable", - "name": "D_80049209", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049209" - }, - { - "type": "extern_variable", - "name": "D_8004920A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8004920A" - }, - { - "type": "extern_variable", - "name": "func_80044064", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80044064" - }, - { - "type": "extern_variable", - "name": "func_800C5B38", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C5B38" - }, - { - "type": "extern_variable", - "name": "D_80081D90", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80081D90" - }, - { - "type": "extern_variable", - "name": "D_80083288", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083288" - }, - { - "type": "extern_variable", - "name": "D_800E4944", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4944" - }, - { - "type": "extern_variable", - "name": "D_80114480", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80114480" - }, - { - "type": "extern_variable", - "name": "D_800E42A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42A8" - }, - { - "type": "extern_variable", - "name": "D_8008327C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327C" - }, - { - "type": "extern_variable", - "name": "D_80083280", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083280" - }, - { - "type": "extern_variable", - "name": "D_80083282", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083282" - }, - { - "type": "extern_variable", - "name": "D_8008328F", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328F" - }, - { - "type": "extern_variable", - "name": "D_80083290", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083290" - }, - { - "type": "extern_variable", - "name": "D_8008329C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329C" - }, - { - "type": "extern_variable", - "name": "D_8008329E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329E" - }, - { - "type": "extern_variable", - "name": "D_80071748", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071748" - }, - { - "type": "extern_variable", - "name": "D_800833F8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800833F8" - }, - { - "type": "extern_variable", - "name": "D_8009A1C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009A1C4" - }, - { - "type": "extern_variable", - "name": "D_800A06B0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A06B0" - }, - { - "type": "extern_variable", - "name": "D_80071A88", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071A88" - }, - { - "type": "extern_variable", - "name": "D_801142D4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801142D4" - }, - { - "type": "extern_variable", - "name": "D_800E42D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42D8" - }, - { - "type": "extern_variable", - "name": "D_800E42DA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DA" - }, - { - "type": "extern_variable", - "name": "D_800E42DC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DC" - }, - { - "type": "extern_variable", - "name": "D_800E42E0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E0" - }, - { - "type": "extern_variable", - "name": "D_800E42E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E4" - }, - { - "type": "extern_variable", - "name": "D_800E42E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E8" - }, - { - "type": "extern_variable", - "name": "D_800E42EA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EA" - }, - { - "type": "extern_variable", - "name": "D_800E42EE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EE" - }, - { - "type": "extern_variable", - "name": "D_800E48E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48E8" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - } - ], - "timestamp": "2026-04-18T12:35:38.936529" - }, - { - "function_name": "func_800BCB1C", - "file": "src/battle/battle1.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "func_800B5E64", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800B5E64" - }, - { - "type": "extern_variable", - "name": "D_800F8384", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F8384" - }, - { - "type": "extern_variable", - "name": "D_80103200", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80103200" - }, - { - "type": "extern_variable", - "name": "D_800F7E10", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7E10" - }, - { - "type": "extern_variable", - "name": "D_800F8180", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F8180" - }, - { - "type": "extern_variable", - "name": "D_800E8E88", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E8E88" - }, - { - "type": "extern_variable", - "name": "D_800E8F94", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E8F94" - }, - { - "type": "extern_variable", - "name": "func_800B7DB4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800B7DB4" - }, - { - "type": "extern_variable", - "name": "D_800FA9D1", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FA9D1" - }, - { - "type": "extern_variable", - "name": "D_80163CC0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163CC0" - }, - { - "type": "extern_variable", - "name": "D_80163CC2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163CC2" - }, - { - "type": "extern_variable", - "name": "D_80163CC4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163CC4" - }, - { - "type": "extern_variable", - "name": "D_800F99EC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F99EC" - }, - { - "type": "extern_variable", - "name": "D_800F99EE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F99EE" - }, - { - "type": "extern_variable", - "name": "D_800F99F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F99F0" - }, - { - "type": "extern_variable", - "name": "D_800F99F2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F99F2" - }, - { - "type": "extern_variable", - "name": "D_800F99F4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F99F4" - }, - { - "type": "extern_variable", - "name": "D_800F99F6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F99F6" - }, - { - "type": "extern_variable", - "name": "D_800FA9D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FA9D8" - }, - { - "type": "extern_variable", - "name": "D_801517F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801517F0" - }, - { - "type": "extern_variable", - "name": "D_800F7E08", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7E08" - }, - { - "type": "extern_variable", - "name": "D_801516FE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801516FE" - }, - { - "type": "extern_variable", - "name": "D_80151700", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151700" - }, - { - "type": "extern_variable", - "name": "D_80151702", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151702" - }, - { - "type": "extern_variable", - "name": "D_800F8178", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F8178" - }, - { - "type": "extern_variable", - "name": "D_800F8184", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F8184" - }, - { - "type": "extern_variable", - "name": "D_80163B44", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163B44" - }, - { - "type": "extern_variable", - "name": "D_801590E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801590E4" - }, - { - "type": "extern_variable", - "name": "D_801590E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801590E8" - }, - { - "type": "extern_variable", - "name": "D_800F7ED8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7ED8" - }, - { - "type": "extern_variable", - "name": "D_800F7EDA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EDA" - }, - { - "type": "extern_variable", - "name": "D_80151844", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151844" - }, - { - "type": "extern_variable", - "name": "D_80151846", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151846" - }, - { - "type": "extern_variable", - "name": "D_80151848", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151848" - }, - { - "type": "extern_variable", - "name": "D_801518A4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801518A4" - }, - { - "type": "extern_variable", - "name": "D_801518A6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801518A6" - }, - { - "type": "extern_variable", - "name": "D_801518A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801518A8" - }, - { - "type": "extern_variable", - "name": "D_800F7EF0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EF0" - }, - { - "type": "extern_variable", - "name": "D_800F7EDC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EDC" - }, - { - "type": "extern_variable", - "name": "D_800F7EDE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EDE" - }, - { - "type": "extern_variable", - "name": "D_800F7EE0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EE0" - }, - { - "type": "extern_variable", - "name": "D_800F7EE2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EE2" - }, - { - "type": "extern_variable", - "name": "D_800F7EE4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EE4" - }, - { - "type": "extern_variable", - "name": "D_800F7EE6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EE6" - }, - { - "type": "extern_variable", - "name": "D_800F7EE8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F7EE8" - }, - { - "type": "extern_variable", - "name": "func_800C0480", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C0480" - }, - { - "type": "extern_variable", - "name": "func_800C0630", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C0630" - }, - { - "type": "extern_variable", - "name": "func_800C0970", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C0970" - }, - { - "type": "extern_variable", - "name": "func_800C0B20", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C0B20" - }, - { - "type": "extern_variable", - "name": "D_80151850", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151850" - }, - { - "type": "extern_variable", - "name": "func_800B5AAC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800B5AAC" - }, - { - "type": "extern_variable", - "name": "func_800C36B4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C36B4" - }, - { - "type": "extern_variable", - "name": "func_800B4E30", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800B4E30" - }, - { - "type": "extern_variable", - "name": "func_800B54B8", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800B54B8" - }, - { - "type": "extern_variable", - "name": "func_800D09D0", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D09D0" - }, - { - "type": "extern_variable", - "name": "D_800F9DAA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9DAA" - }, - { - "type": "extern_variable", - "name": "D_800F9DAC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9DAC" - }, - { - "type": "extern_variable", - "name": "D_800FA9C6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FA9C6" - }, - { - "type": "extern_variable", - "name": "D_800F8CF4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F8CF4" - }, - { - "type": "extern_variable", - "name": "func_801B0050", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_801B0050" - }, - { - "type": "extern_variable", - "name": "func_800C74E4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C74E4" - }, - { - "type": "extern_variable", - "name": "D_800F4B0C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4B0C" - }, - { - "type": "extern_variable", - "name": "D_801AFFC0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801AFFC0" - }, - { - "type": "extern_variable", - "name": "func_8003CEBC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8003CEBC" - }, - { - "type": "extern_variable", - "name": "func_8003D1B4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8003D1B4" - }, - { - "type": "extern_variable", - "name": "func_80043938", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80043938" - }, - { - "type": "extern_variable", - "name": "func_80046960", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80046960" - }, - { - "type": "extern_variable", - "name": "func_8003BC9C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8003BC9C" - }, - { - "type": "extern_variable", - "name": "func_800468FC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800468FC" - }, - { - "type": "extern_variable", - "name": "D_800EA264", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800EA264" - } - ], - "timestamp": "2026-04-18T12:35:39.525916" - }, - { - "function_name": "func_800260DC", - "file": "src/main/18B8.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_8007E7A0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7A0" - }, - { - "type": "extern_variable", - "name": "D_8007EB6A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007EB6A" - }, - { - "type": "extern_variable", - "name": "D_8009A078", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009A078" - }, - { - "type": "extern_variable", - "name": "D_8009A079", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009A079" - }, - { - "type": "extern_variable", - "name": "D_8009A07A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009A07A" - }, - { - "type": "extern_variable", - "name": "D_80063048", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80063048" - }, - { - "type": "extern_variable", - "name": "D_80010118", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80010118" - }, - { - "type": "extern_variable", - "name": "D_80010120", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80010120" - }, - { - "type": "extern_variable", - "name": "D_80010124", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80010124" - }, - { - "type": "extern_variable", - "name": "D_800F5BC7", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5BC7" - }, - { - "type": "extern_variable", - "name": "D_800F5BE1", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5BE1" - }, - { - "type": "extern_variable", - "name": "D_800F5BF4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5BF4" - }, - { - "type": "extern_variable", - "name": "D_800F5F44", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5F44" - }, - { - "type": "extern_variable", - "name": "D_800F652C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F652C" - }, - { - "type": "extern_variable", - "name": "D_800F83E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F83E4" - }, - { - "type": "extern_variable", - "name": "D_800F8410", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F8410" - }, - { - "type": "extern_variable", - "name": "D_80163658", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163658" - }, - { - "type": "extern_variable", - "name": "D_8009D808", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D808" - }, - { - "type": "extern_variable", - "name": "D_8009D80A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D80A" - }, - { - "type": "extern_variable", - "name": "D_8009D80C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D80C" - }, - { - "type": "extern_variable", - "name": "func_80018028", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80018028" - }, - { - "type": "extern_variable", - "name": "D_800491B0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800491B0" - }, - { - "type": "extern_variable", - "name": "D_800730D9", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730D9" - }, - { - "type": "extern_variable", - "name": "D_800730DA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730DA" - }, - { - "type": "extern_variable", - "name": "D_800730DB", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730DB" - }, - { - "type": "extern_variable", - "name": "D_80062E53", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80062E53" - }, - { - "type": "extern_variable", - "name": "D_8006950A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8006950A" - }, - { - "type": "extern_variable", - "name": "func_80019254", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80019254" - }, - { - "type": "extern_variable", - "name": "func_8001937C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8001937C" - }, - { - "type": "extern_variable", - "name": "func_800193F4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800193F4" - }, - { - "type": "extern_variable", - "name": "func_80019544", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80019544" - }, - { - "type": "extern_variable", - "name": "D_80049060", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049060" - }, - { - "type": "extern_variable", - "name": "D_80049062", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049062" - }, - { - "type": "extern_variable", - "name": "D_80049064", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049064" - }, - { - "type": "extern_variable", - "name": "D_80049066", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049066" - }, - { - "type": "extern_variable", - "name": "D_80049068", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049068" - }, - { - "type": "extern_variable", - "name": "D_8004906A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8004906A" - }, - { - "type": "extern_variable", - "name": "D_8004906C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8004906C" - }, - { - "type": "extern_variable", - "name": "D_8004906E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8004906E" - }, - { - "type": "extern_variable", - "name": "D_800730D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730D8" - }, - { - "type": "extern_variable", - "name": "D_800694E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800694E4" - }, - { - "type": "extern_variable", - "name": "D_8006947C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8006947C" - }, - { - "type": "extern_variable", - "name": "D_800730DE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730DE" - }, - { - "type": "extern_variable", - "name": "D_80069508", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069508" - }, - { - "type": "extern_variable", - "name": "func_8001BB30", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8001BB30" - }, - { - "type": "extern_variable", - "name": "D_80069538", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069538" - }, - { - "type": "extern_variable", - "name": "D_80069554", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" - }, - { - "type": "extern_variable", - "name": "D_80069555", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069555" - }, - { - "type": "extern_variable", - "name": "D_80069556", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069556" - }, - { - "type": "extern_variable", - "name": "D_80069558", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" - }, - { - "type": "extern_variable", - "name": "D_800708C8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708C8" - }, - { - "type": "extern_variable", - "name": "D_800708D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708D0" - }, - { - "type": "extern_variable", - "name": "D_800696F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" - }, - { - "type": "extern_variable", - "name": "D_80071E46", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071E46" - }, - { - "type": "extern_variable", - "name": "D_800738A4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738A4" - }, - { - "type": "extern_variable", - "name": "D_8009D888", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D888" - }, - { - "type": "extern_variable", - "name": "D_80069844", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069844" - }, - { - "type": "extern_variable", - "name": "D_800494A4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800494A4" - }, - { - "type": "extern_variable", - "name": "D_80071E4D", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071E4D" - }, - { - "type": "extern_variable", - "name": "D_800738BC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738BC" - }, - { - "type": "extern_variable", - "name": "D_800491D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800491D0" - }, - { - "type": "extern_variable", - "name": "D_8009D85C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85C" - }, - { - "type": "extern_variable", - "name": "D_8009D85E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85E" - }, - { - "type": "extern_variable", - "name": "D_8009D860", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D860" - }, - { - "type": "extern_variable", - "name": "D_8009D862", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D862" - }, - { - "type": "extern_variable", - "name": "func_80026090", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80026090" - }, - { - "type": "extern_variable", - "name": "func_800260DC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800260DC" - }, - { - "type": "extern_variable", - "name": "D_80083084", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083084" - }, - { - "type": "extern_variable", - "name": "D_80074EB0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB0" - }, - { - "type": "extern_variable", - "name": "D_80074EB4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB4" - }, - { - "type": "extern_variable", - "name": "D_80074EDA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EDA" - }, - { - "type": "extern_variable", - "name": "D_80074F16", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074F16" - }, - { - "type": "extern_variable", - "name": "D_80071C32", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071C32" - }, - { - "type": "extern_variable", - "name": "D_80071E64", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071E64" - }, - { - "type": "extern_variable", - "name": "D_800722D6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800722D6" - }, - { - "type": "extern_variable", - "name": "D_800738CA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738CA" - }, - { - "type": "extern_variable", - "name": "D_8009D894", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" - }, - { - "type": "extern_variable", - "name": "D_8009D88A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D88A" - }, - { - "type": "extern_variable", - "name": "D_8009D88C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D88C" - }, - { - "type": "extern_variable", - "name": "D_8009D88E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D88E" - }, - { - "type": "extern_variable", - "name": "func_80018630", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80018630" - }, - { - "type": "extern_variable", - "name": "func_80018934", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80018934" - }, - { - "type": "extern_variable", - "name": "D_800730DF", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730DF" - } - ], - "timestamp": "2026-04-18T12:35:40.580513" - }, - { - "function_name": "func_800AC35C", - "file": "src/field/field.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80074EB0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB0" - }, - { - "type": "extern_variable", - "name": "D_80074EB4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB4" - }, - { - "type": "extern_variable", - "name": "D_80074EB8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB8" - }, - { - "type": "extern_variable", - "name": "func_800A48B8", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800A48B8" - }, - { - "type": "extern_variable", - "name": "D_80074ED9", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074ED9" - }, - { - "type": "extern_variable", - "name": "D_800DF120", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DF120" - }, - { - "type": "extern_variable", - "name": "D_800DF122", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DF122" - }, - { - "type": "extern_variable", - "name": "D_800DEF88", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DEF88" - }, - { - "type": "extern_variable", - "name": "func_800354CC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800354CC" - }, - { - "type": "extern_variable", - "name": "func_80035658", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80035658" - }, - { - "type": "extern_variable", - "name": "D_800E0638", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0638" - }, - { - "type": "extern_variable", - "name": "D_800E48F4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48F4" - }, - { - "type": "extern_variable", - "name": "D_800E48FC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48FC" - }, - { - "type": "extern_variable", - "name": "D_800E48FE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48FE" - }, - { - "type": "extern_variable", - "name": "D_800E4900", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4900" - }, - { - "type": "extern_variable", - "name": "D_800E4901", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4901" - }, - { - "type": "extern_variable", - "name": "D_800E4904", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4904" - }, - { - "type": "extern_variable", - "name": "D_800E4906", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4906" - }, - { - "type": "extern_variable", - "name": "D_800E4908", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4908" - }, - { - "type": "extern_variable", - "name": "D_800E4909", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4909" - }, - { - "type": "extern_variable", - "name": "D_800E490C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E490C" - }, - { - "type": "extern_variable", - "name": "D_800E490E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E490E" - }, - { - "type": "extern_variable", - "name": "D_800E4910", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4910" - }, - { - "type": "extern_variable", - "name": "D_800E4911", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4911" - }, - { - "type": "extern_variable", - "name": "D_800E4914", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4914" - }, - { - "type": "extern_variable", - "name": "D_800E4916", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4916" - }, - { - "type": "extern_variable", - "name": "D_800E4918", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4918" - }, - { - "type": "extern_variable", - "name": "D_800E4919", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4919" - }, - { - "type": "extern_variable", - "name": "D_8007EB98", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007EB98" - }, - { - "type": "extern_variable", - "name": "func_8001786C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8001786C" - }, - { - "type": "extern_variable", - "name": "func_80020058", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80020058" - }, - { - "type": "extern_variable", - "name": "D_800491D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800491D0" - }, - { - "type": "extern_variable", - "name": "D_8008328D", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328D" - }, - { - "type": "extern_variable", - "name": "D_800832A2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800832A2" - }, - { - "type": "extern_variable", - "name": "D_8008326C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008326C" - }, - { - "type": "extern_variable", - "name": "D_80083286", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083286" - }, - { - "type": "extern_variable", - "name": "D_80083278", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083278" - }, - { - "type": "extern_variable", - "name": "D_8008327A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327A" - }, - { - "type": "extern_variable", - "name": "D_8008327E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327E" - }, - { - "type": "extern_variable", - "name": "D_80075E24", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075E24" - }, - { - "type": "extern_variable", - "name": "D_80075E25", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075E25" - }, - { - "type": "extern_variable", - "name": "D_800E4214", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4214" - }, - { - "type": "extern_variable", - "name": "D_800E4280", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4280" - }, - { - "type": "extern_variable", - "name": "D_800E4D48", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4D48" - }, - { - "type": "extern_variable", - "name": "D_800E0748", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0748" - }, - { - "type": "extern_variable", - "name": "D_800E074A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074A" - }, - { - "type": "extern_variable", - "name": "D_800E074C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074C" - }, - { - "type": "extern_variable", - "name": "D_800E08C0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08C0" - }, - { - "type": "extern_variable", - "name": "D_800E074E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074E" - }, - { - "type": "extern_variable", - "name": "D_800E0754", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0754" - }, - { - "type": "extern_variable", - "name": "D_800E0758", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0758" - }, - { - "type": "extern_variable", - "name": "D_800E08A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08A8" - }, - { - "type": "extern_variable", - "name": "D_800E0756", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0756" - }, - { - "type": "extern_variable", - "name": "D_800E0750", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0750" - }, - { - "type": "extern_variable", - "name": "D_800E0751", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0751" - }, - { - "type": "extern_variable", - "name": "D_800E0752", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0752" - }, - { - "type": "extern_variable", - "name": "func_800D5A60", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D5A60" - }, - { - "type": "extern_variable", - "name": "func_800D5C9C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D5C9C" - }, - { - "type": "extern_variable", - "name": "func_800D6D44", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6D44" - }, - { - "type": "extern_variable", - "name": "func_800D6E0C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6E0C" - }, - { - "type": "extern_variable", - "name": "func_800D6F6C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6F6C" - }, - { - "type": "extern_variable", - "name": "D_80083284", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083284" - }, - { - "type": "extern_variable", - "name": "D_8008328A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328A" - }, - { - "type": "extern_variable", - "name": "D_8008328E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328E" - }, - { - "type": "extern_variable", - "name": "D_80083298", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083298" - }, - { - "type": "extern_variable", - "name": "D_8008329A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329A" - }, - { - "type": "extern_variable", - "name": "D_800E424C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E424C" - }, - { - "type": "extern_variable", - "name": "D_801142CC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801142CC" - }, - { - "type": "extern_variable", - "name": "D_8009AD30", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009AD30" - }, - { - "type": "extern_variable", - "name": "func_800C2E00", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C2E00" - }, - { - "type": "extern_variable", - "name": "func_800DA444", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800DA444" - }, - { - "type": "extern_variable", - "name": "func_800C8634", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C8634" - }, - { - "type": "extern_variable", - "name": "func_800CDC14", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800CDC14" - }, - { - "type": "extern_variable", - "name": "D_80095DE0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80095DE0" - }, - { - "type": "extern_variable", - "name": "func_80025B10", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80025B10" - }, - { - "type": "extern_variable", - "name": "func_800BEAD4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800BEAD4" - }, - { - "type": "extern_variable", - "name": "D_800E0208", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0208" - }, - { - "type": "extern_variable", - "name": "D_800756E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800756E8" - }, - { - "type": "extern_variable", - "name": "D_80083291", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083291" - }, - { - "type": "extern_variable", - "name": "D_80083294", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083294" - }, - { - "type": "extern_variable", - "name": "D_8007078C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007078C" - }, - { - "type": "extern_variable", - "name": "D_8007E7B8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B8" - }, - { - "type": "extern_variable", - "name": "D_8007E7BA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7BA" - }, - { - "type": "extern_variable", - "name": "D_8007E7AC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7AC" - }, - { - "type": "extern_variable", - "name": "D_8007E7AE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7AE" - }, - { - "type": "extern_variable", - "name": "D_8007E7B0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B0" - }, - { - "type": "extern_variable", - "name": "D_8007E7B2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B2" - }, - { - "type": "extern_variable", - "name": "D_8007E7B4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B4" - }, - { - "type": "extern_variable", - "name": "D_8007E7B6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B6" - }, - { - "type": "extern_variable", - "name": "D_80082248", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082248" - }, - { - "type": "extern_variable", - "name": "D_8008325C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008325C" - }, - { - "type": "extern_variable", - "name": "D_8009D828", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D828" - }, - { - "type": "extern_variable", - "name": "D_800A0854", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A0854" - }, - { - "type": "extern_variable", - "name": "D_800A0F38", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A0F38" - }, - { - "type": "extern_variable", - "name": "D_8007E7C2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7C2" - }, - { - "type": "extern_variable", - "name": "D_80049209", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049209" - }, - { - "type": "extern_variable", - "name": "D_8004920A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8004920A" - }, - { - "type": "extern_variable", - "name": "func_80044064", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80044064" - }, - { - "type": "extern_variable", - "name": "func_800C5B38", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C5B38" - }, - { - "type": "extern_variable", - "name": "D_80081D90", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80081D90" - }, - { - "type": "extern_variable", - "name": "D_80083288", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083288" - }, - { - "type": "extern_variable", - "name": "D_800E4944", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4944" - }, - { - "type": "extern_variable", - "name": "D_80114480", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80114480" - }, - { - "type": "extern_variable", - "name": "D_800E42A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42A8" - }, - { - "type": "extern_variable", - "name": "D_8008327C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327C" - }, - { - "type": "extern_variable", - "name": "D_80083280", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083280" - }, - { - "type": "extern_variable", - "name": "D_80083282", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083282" - }, - { - "type": "extern_variable", - "name": "D_8008328F", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328F" - }, - { - "type": "extern_variable", - "name": "D_80083290", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083290" - }, - { - "type": "extern_variable", - "name": "D_8008329C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329C" - }, - { - "type": "extern_variable", - "name": "D_8008329E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329E" - }, - { - "type": "extern_variable", - "name": "D_80071748", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071748" - }, - { - "type": "extern_variable", - "name": "D_800833F8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800833F8" - }, - { - "type": "extern_variable", - "name": "D_8009A1C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009A1C4" - }, - { - "type": "extern_variable", - "name": "D_800A06B0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A06B0" - }, - { - "type": "extern_variable", - "name": "D_80071A88", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071A88" - }, - { - "type": "extern_variable", - "name": "D_801142D4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801142D4" - }, - { - "type": "extern_variable", - "name": "D_800E42D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42D8" - }, - { - "type": "extern_variable", - "name": "D_800E42DA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DA" - }, - { - "type": "extern_variable", - "name": "D_800E42DC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DC" - }, - { - "type": "extern_variable", - "name": "D_800E42E0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E0" - }, - { - "type": "extern_variable", - "name": "D_800E42E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E4" - }, - { - "type": "extern_variable", - "name": "D_800E42E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E8" - }, - { - "type": "extern_variable", - "name": "D_800E42EA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EA" - }, - { - "type": "extern_variable", - "name": "D_800E42EE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EE" - }, - { - "type": "extern_variable", - "name": "D_800E48E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48E8" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - } - ], - "timestamp": "2026-04-18T12:35:40.714554" - }, - { - "function_name": "func_800A23E0", - "file": "src/battle/battle.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_8009D954", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D954" - }, - { - "type": "extern_variable", - "name": "D_800FA9D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FA9D0" - }, - { - "type": "extern_variable", - "name": "D_800FA9D4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FA9D4" - }, - { - "type": "extern_variable", - "name": "D_800F9F3C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9F3C" - }, - { - "type": "extern_variable", - "name": "D_800F9F42", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9F42" - }, - { - "type": "extern_variable", - "name": "D_800F9F44", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9F44" - }, - { - "type": "extern_variable", - "name": "D_800F87F4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F87F4" - }, - { - "type": "extern_variable", - "name": "D_800F5E65", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E65" - }, - { - "type": "extern_variable", - "name": "D_800F3A40", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F3A40" - }, - { - "type": "extern_variable", - "name": "D_80071C32", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071C32" - }, - { - "type": "extern_variable", - "name": "D_80071E64", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071E64" - }, - { - "type": "extern_variable", - "name": "D_800722D6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800722D6" - }, - { - "type": "extern_variable", - "name": "D_800722D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800722D8" - }, - { - "type": "extern_variable", - "name": "D_800738A0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738A0" - }, - { - "type": "extern_variable", - "name": "D_800738CA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738CA" - }, - { - "type": "extern_variable", - "name": "D_801671B8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801671B8" - }, - { - "type": "extern_variable", - "name": "D_801671BA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801671BA" - }, - { - "type": "extern_variable", - "name": "D_801671BC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801671BC" - }, - { - "type": "extern_variable", - "name": "D_8009D866", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D866" - }, - { - "type": "extern_variable", - "name": "D_800F5E68", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E68" - }, - { - "type": "extern_variable", - "name": "D_800F5E6A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E6A" - }, - { - "type": "extern_variable", - "name": "D_800708D1", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708D1" - }, - { - "type": "extern_variable", - "name": "D_8009D85E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85E" - }, - { - "type": "extern_variable", - "name": "D_8009D862", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D862" - }, - { - "type": "extern_variable", - "name": "D_800F5E70", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E70" - }, - { - "type": "extern_variable", - "name": "D_800F5E72", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E72" - }, - { - "type": "extern_variable", - "name": "D_800738A4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738A4" - }, - { - "type": "extern_variable", - "name": "D_800738C7", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738C7" - }, - { - "type": "extern_variable", - "name": "D_8009D84E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D84E" - }, - { - "type": "extern_variable", - "name": "D_800F5E64", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E64" - }, - { - "type": "extern_variable", - "name": "D_800F5EFC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5EFC" - }, - { - "type": "extern_variable", - "name": "func_800AA574", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AA574" - }, - { - "type": "extern_variable", - "name": "func_800AA688", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AA688" - }, - { - "type": "extern_variable", - "name": "D_80163778", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163778" - }, - { - "type": "extern_variable", - "name": "D_800E7BA4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BA4" - }, - { - "type": "extern_variable", - "name": "D_800E7BA5", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BA5" - }, - { - "type": "extern_variable", - "name": "D_800E7BA6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BA6" - }, - { - "type": "extern_variable", - "name": "D_800F5E74", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E74" - }, - { - "type": "extern_variable", - "name": "D_800F5E76", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E76" - }, - { - "type": "extern_variable", - "name": "D_800730D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730D0" - }, - { - "type": "extern_variable", - "name": "D_800E7BBC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BBC" - }, - { - "type": "extern_variable", - "name": "D_800E7BBD", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BBD" - }, - { - "type": "extern_variable", - "name": "D_8009D86F", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D86F" - }, - { - "type": "extern_variable", - "name": "D_800E7BCC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BCC" - }, - { - "type": "extern_variable", - "name": "D_800E7BFC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BFC" - }, - { - "type": "extern_variable", - "name": "D_800E7BEC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BEC" - }, - { - "type": "extern_variable", - "name": "func_800AF264", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AF264" - }, - { - "type": "extern_variable", - "name": "func_800AF3AC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AF3AC" - }, - { - "type": "extern_variable", - "name": "D_800E7C7C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7C7C" - }, - { - "type": "extern_variable", - "name": "D_800E7CBC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7CBC" - }, - { - "type": "extern_variable", - "name": "D_800E7CDC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7CDC" - }, - { - "type": "extern_variable", - "name": "D_800F4A48", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4A48" - }, - { - "type": "extern_variable", - "name": "D_800F4A70", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4A70" - }, - { - "type": "extern_variable", - "name": "D_800F4A98", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4A98" - }, - { - "type": "extern_variable", - "name": "D_800F49A0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F49A0" - }, - { - "type": "extern_variable", - "name": "D_800F49A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F49A8" - }, - { - "type": "extern_variable", - "name": "D_8009D85C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85C" - }, - { - "type": "extern_variable", - "name": "D_8009D860", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D860" - }, - { - "type": "extern_variable", - "name": "D_8009D868", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D868" - }, - { - "type": "extern_variable", - "name": "D_8009D86A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D86A" - }, - { - "type": "extern_variable", - "name": "D_800F5F01", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5F01" - }, - { - "type": "extern_variable", - "name": "D_800F87F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F87F0" - }, - { - "type": "extern_variable", - "name": "func_800A5250", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800A5250" - } - ], - "timestamp": "2026-04-18T12:35:40.917485" - }, - { - "function_name": "func_800E3B64", - "file": "src/battle/battle3.c", - "primary_error": "Local variable 'temp_a0' is void* but used with -> (m2c struct type inference failure)", - "missing_items": [ - { - "type": "extern_function", - "name": "func_80028484", - "return_type": "void", - "parameters": "s16*, u16, ?", - "suggestion": "Define proper signature for func_80028484 in header" - }, - { - "type": "extern_function", - "name": "func_800E368C", - "return_type": "void", - "parameters": "?, ?, ?", - "suggestion": "Define proper signature for func_800E368C in header" - }, - { - "type": "extern_variable", - "name": "D_800FB064", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FB064" - }, - { - "type": "extern_variable", - "name": "D_800FF060", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FF060" - }, - { - "type": "extern_variable", - "name": "D_800FF064", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FF064" - }, - { - "type": "extern_variable", - "name": "D_800FF068", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FF068" - }, - { - "type": "extern_variable", - "name": "D_800FF06C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FF06C" - }, - { - "type": "extern_variable", - "name": "D_800FF070", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FF070" - }, - { - "type": "extern_variable", - "name": "D_800FF074", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FF074" - }, - { - "type": "extern_variable", - "name": "D_800FF094", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FF094" - }, - { - "type": "extern_variable", - "name": "D_800FF098", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FF098" - }, - { - "type": "extern_variable", - "name": "D_800FF0D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FF0D8" - }, - { - "type": "extern_variable", - "name": "D_800FF0DC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FF0DC" - }, - { - "type": "extern_variable", - "name": "D_800FF0E0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FF0E0" - }, - { - "type": "extern_variable", - "name": "D_80103154", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80103154" - }, - { - "type": "extern_variable", - "name": "D_80103158", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80103158" - }, - { - "type": "extern_variable", - "name": "D_80103160", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80103160" - }, - { - "type": "extern_variable", - "name": "D_80103188", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80103188" - }, - { - "type": "extern_variable", - "name": "D_801031CC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801031CC" - }, - { - "type": "extern_variable", - "name": "D_801031D4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801031D4" - }, - { - "type": "extern_variable", - "name": "func_80044AC0", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80044AC0" - }, - { - "type": "extern_variable", - "name": "func_80046794", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80046794" - }, - { - "type": "extern_variable", - "name": "D_800F57F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F57F0" - }, - { - "type": "extern_variable", - "name": "D_800F1E54", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F1E54" - }, - { - "type": "extern_variable", - "name": "D_800F1E56", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F1E56" - }, - { - "type": "extern_variable", - "name": "D_800F1E58", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F1E58" - }, - { - "type": "extern_variable", - "name": "D_800F1E5A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F1E5A" - }, - { - "type": "extern_variable", - "name": "D_800F1E5C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F1E5C" - }, - { - "type": "extern_variable", - "name": "D_800F1E5E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F1E5E" - }, - { - "type": "extern_variable", - "name": "D_800F1E60", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F1E60" - }, - { - "type": "extern_variable", - "name": "D_800F1E62", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F1E62" - }, - { - "type": "extern_variable", - "name": "D_800F2F8C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F2F8C" - }, - { - "type": "extern_variable", - "name": "func_800DA380", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800DA380" - }, - { - "type": "extern_variable", - "name": "D_801516FE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801516FE" - }, - { - "type": "extern_variable", - "name": "D_800492FC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800492FC" - }, - { - "type": "extern_variable", - "name": "D_800F55D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F55D8" - }, - { - "type": "extern_variable", - "name": "func_800DDAD8", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800DDAD8" - }, - { - "type": "extern_variable", - "name": "func_800DDCE8", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800DDCE8" - }, - { - "type": "extern_variable", - "name": "D_800F90C6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F90C6" - }, - { - "type": "extern_variable", - "name": "D_8009D8FE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D8FE" - }, - { - "type": "extern_variable", - "name": "D_800F3168", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F3168" - }, - { - "type": "extern_variable", - "name": "D_8009D85C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85C" - }, - { - "type": "extern_variable", - "name": "D_8009D85E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85E" - }, - { - "type": "extern_variable", - "name": "D_801031F4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801031F4" - }, - { - "type": "extern_variable", - "name": "D_80151688", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151688" - }, - { - "type": "extern_variable", - "name": "D_8015174C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8015174C" - }, - { - "type": "extern_variable", - "name": "D_8015178C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8015178C" - }, - { - "type": "extern_variable", - "name": "D_801517C8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801517C8" - }, - { - "type": "extern_variable", - "name": "D_8015187C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8015187C" - }, - { - "type": "extern_variable", - "name": "D_800F33B0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F33B0" - }, - { - "type": "extern_variable", - "name": "D_80163778", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163778" - }, - { - "type": "extern_variable", - "name": "D_80163B70", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163B70" - }, - { - "type": "extern_variable", - "name": "D_800F5778", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5778" - }, - { - "type": "extern_variable", - "name": "func_8001786C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8001786C" - }, - { - "type": "extern_variable", - "name": "func_80020058", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80020058" - }, - { - "type": "extern_variable", - "name": "D_8009D854", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D854" - }, - { - "type": "extern_variable", - "name": "D_8009D856", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D856" - }, - { - "type": "extern_variable", - "name": "D_8009D860", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D860" - }, - { - "type": "extern_variable", - "name": "D_8009DC5C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009DC5C" - }, - { - "type": "extern_variable", - "name": "D_800F577B", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F577B" - }, - { - "type": "extern_variable", - "name": "D_800F90BE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F90BE" - }, - { - "type": "extern_variable", - "name": "D_800F90BF", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F90BF" - }, - { - "type": "extern_variable", - "name": "D_801516A4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801516A4" - }, - { - "type": "extern_variable", - "name": "D_801516CC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801516CC" - }, - { - "type": "extern_variable", - "name": "D_800F90FC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F90FC" - }, - { - "type": "extern_variable", - "name": "D_800F90FE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F90FE" - }, - { - "type": "extern_variable", - "name": "D_800F9100", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9100" - }, - { - "type": "extern_variable", - "name": "D_800F9102", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9102" - }, - { - "type": "extern_variable", - "name": "D_800F9104", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9104" - }, - { - "type": "extern_variable", - "name": "D_800F9106", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9106" - }, - { - "type": "extern_variable", - "name": "D_800F9107", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9107" - }, - { - "type": "extern_variable", - "name": "D_800F9108", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9108" - }, - { - "type": "extern_variable", - "name": "D_800F9109", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9109" - }, - { - "type": "extern_variable", - "name": "D_800F910A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F910A" - }, - { - "type": "extern_variable", - "name": "D_800F910B", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F910B" - }, - { - "type": "extern_variable", - "name": "D_800F910C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F910C" - }, - { - "type": "extern_variable", - "name": "D_800F910D", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F910D" - }, - { - "type": "extern_variable", - "name": "D_800F32E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F32E4" - }, - { - "type": "extern_variable", - "name": "D_80166F78", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80166F78" - }, - { - "type": "extern_variable", - "name": "func_80046960", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80046960" - }, - { - "type": "extern_variable", - "name": "func_800468FC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800468FC" - }, - { - "type": "extern_variable", - "name": "D_800F335C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F335C" - }, - { - "type": "extern_variable", - "name": "D_800F335D", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F335D" - }, - { - "type": "extern_variable", - "name": "D_800F33AC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F33AC" - }, - { - "type": "extern_variable", - "name": "func_800E368C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800E368C" - }, - { - "type": "extern_variable", - "name": "D_8009D954", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D954" - }, - { - "type": "extern_variable", - "name": "D_800F90D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F90D8" - } - ], - "timestamp": "2026-04-18T12:35:42.137705" - }, - { - "function_name": "func_80021F58", - "file": "src/main/18B8.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_8007E7A0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7A0" - }, - { - "type": "extern_variable", - "name": "D_8007EB6A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007EB6A" - }, - { - "type": "extern_variable", - "name": "D_8009A078", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009A078" - }, - { - "type": "extern_variable", - "name": "D_8009A079", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009A079" - }, - { - "type": "extern_variable", - "name": "D_8009A07A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009A07A" - }, - { - "type": "extern_variable", - "name": "D_80063048", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80063048" - }, - { - "type": "extern_variable", - "name": "D_80010118", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80010118" - }, - { - "type": "extern_variable", - "name": "D_80010120", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80010120" - }, - { - "type": "extern_variable", - "name": "D_80010124", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80010124" - }, - { - "type": "extern_variable", - "name": "D_800F5BC7", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5BC7" - }, - { - "type": "extern_variable", - "name": "D_800F5BE1", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5BE1" - }, - { - "type": "extern_variable", - "name": "D_800F5BF4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5BF4" - }, - { - "type": "extern_variable", - "name": "D_800F5F44", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5F44" - }, - { - "type": "extern_variable", - "name": "D_800F652C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F652C" - }, - { - "type": "extern_variable", - "name": "D_800F83E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F83E4" - }, - { - "type": "extern_variable", - "name": "D_800F8410", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F8410" - }, - { - "type": "extern_variable", - "name": "D_80163658", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163658" - }, - { - "type": "extern_variable", - "name": "D_8009D808", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D808" - }, - { - "type": "extern_variable", - "name": "D_8009D80A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D80A" - }, - { - "type": "extern_variable", - "name": "D_8009D80C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D80C" - }, - { - "type": "extern_variable", - "name": "func_80018028", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80018028" - }, - { - "type": "extern_variable", - "name": "D_800491B0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800491B0" - }, - { - "type": "extern_variable", - "name": "D_800730D9", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730D9" - }, - { - "type": "extern_variable", - "name": "D_800730DA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730DA" - }, - { - "type": "extern_variable", - "name": "D_800730DB", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730DB" - }, - { - "type": "extern_variable", - "name": "D_80062E53", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80062E53" - }, - { - "type": "extern_variable", - "name": "D_8006950A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8006950A" - }, - { - "type": "extern_variable", - "name": "func_80019254", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80019254" - }, - { - "type": "extern_variable", - "name": "func_8001937C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8001937C" - }, - { - "type": "extern_variable", - "name": "func_800193F4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800193F4" - }, - { - "type": "extern_variable", - "name": "func_80019544", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80019544" - }, - { - "type": "extern_variable", - "name": "D_80049060", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049060" - }, - { - "type": "extern_variable", - "name": "D_80049062", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049062" - }, - { - "type": "extern_variable", - "name": "D_80049064", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049064" - }, - { - "type": "extern_variable", - "name": "D_80049066", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049066" - }, - { - "type": "extern_variable", - "name": "D_80049068", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049068" - }, - { - "type": "extern_variable", - "name": "D_8004906A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8004906A" - }, - { - "type": "extern_variable", - "name": "D_8004906C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8004906C" - }, - { - "type": "extern_variable", - "name": "D_8004906E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8004906E" - }, - { - "type": "extern_variable", - "name": "D_800730D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730D8" - }, - { - "type": "extern_variable", - "name": "D_800694E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800694E4" - }, - { - "type": "extern_variable", - "name": "D_8006947C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8006947C" - }, - { - "type": "extern_variable", - "name": "D_800730DE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730DE" - }, - { - "type": "extern_variable", - "name": "D_80069508", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069508" - }, - { - "type": "extern_variable", - "name": "func_8001BB30", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8001BB30" - }, - { - "type": "extern_variable", - "name": "D_80069538", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069538" - }, - { - "type": "extern_variable", - "name": "D_80069554", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" - }, - { - "type": "extern_variable", - "name": "D_80069555", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069555" - }, - { - "type": "extern_variable", - "name": "D_80069556", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069556" - }, - { - "type": "extern_variable", - "name": "D_80069558", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" - }, - { - "type": "extern_variable", - "name": "D_800708C8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708C8" - }, - { - "type": "extern_variable", - "name": "D_800708D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708D0" - }, - { - "type": "extern_variable", - "name": "D_800696F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" - }, - { - "type": "extern_variable", - "name": "D_80071E46", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071E46" - }, - { - "type": "extern_variable", - "name": "D_800738A4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738A4" - }, - { - "type": "extern_variable", - "name": "D_8009D888", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D888" - }, - { - "type": "extern_variable", - "name": "D_80069844", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069844" - }, - { - "type": "extern_variable", - "name": "D_800494A4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800494A4" - }, - { - "type": "extern_variable", - "name": "D_80071E4D", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071E4D" - }, - { - "type": "extern_variable", - "name": "D_800738BC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738BC" - }, - { - "type": "extern_variable", - "name": "D_800491D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800491D0" - }, - { - "type": "extern_variable", - "name": "D_8009D85C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85C" - }, - { - "type": "extern_variable", - "name": "D_8009D85E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85E" - }, - { - "type": "extern_variable", - "name": "D_8009D860", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D860" - }, - { - "type": "extern_variable", - "name": "D_8009D862", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D862" - }, - { - "type": "extern_variable", - "name": "func_80026090", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80026090" - }, - { - "type": "extern_variable", - "name": "func_800260DC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800260DC" - }, - { - "type": "extern_variable", - "name": "D_80083084", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083084" - }, - { - "type": "extern_variable", - "name": "D_80074EB0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB0" - }, - { - "type": "extern_variable", - "name": "D_80074EB4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB4" - }, - { - "type": "extern_variable", - "name": "D_80074EDA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EDA" - }, - { - "type": "extern_variable", - "name": "D_80074F16", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074F16" - }, - { - "type": "extern_variable", - "name": "D_80071C32", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071C32" - }, - { - "type": "extern_variable", - "name": "D_80071E64", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071E64" - }, - { - "type": "extern_variable", - "name": "D_800722D6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800722D6" - }, - { - "type": "extern_variable", - "name": "D_800738CA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738CA" - }, - { - "type": "extern_variable", - "name": "D_8009D894", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" - }, - { - "type": "extern_variable", - "name": "D_8009D88A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D88A" - }, - { - "type": "extern_variable", - "name": "D_8009D88C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D88C" - }, - { - "type": "extern_variable", - "name": "D_8009D88E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D88E" - }, - { - "type": "extern_variable", - "name": "func_80018630", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80018630" - }, - { - "type": "extern_variable", - "name": "func_80018934", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80018934" - }, - { - "type": "extern_variable", - "name": "D_800730DF", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730DF" - } - ], - "timestamp": "2026-04-18T12:35:42.402628" - }, - { - "function_name": "func_800B1D48", - "file": "src/battle/battle.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_8009D954", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D954" - }, - { - "type": "extern_variable", - "name": "D_800FA9D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FA9D0" - }, - { - "type": "extern_variable", - "name": "D_800FA9D4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FA9D4" - }, - { - "type": "extern_variable", - "name": "D_800F9F3C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9F3C" - }, - { - "type": "extern_variable", - "name": "D_800F9F42", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9F42" - }, - { - "type": "extern_variable", - "name": "D_800F9F44", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9F44" - }, - { - "type": "extern_variable", - "name": "D_800F87F4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F87F4" - }, - { - "type": "extern_variable", - "name": "D_800F5E65", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E65" - }, - { - "type": "extern_variable", - "name": "D_800F3A40", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F3A40" - }, - { - "type": "extern_variable", - "name": "D_80071C32", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071C32" - }, - { - "type": "extern_variable", - "name": "D_80071E64", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071E64" - }, - { - "type": "extern_variable", - "name": "D_800722D6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800722D6" - }, - { - "type": "extern_variable", - "name": "D_800722D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800722D8" - }, - { - "type": "extern_variable", - "name": "D_800738A0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738A0" - }, - { - "type": "extern_variable", - "name": "D_800738CA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738CA" - }, - { - "type": "extern_variable", - "name": "D_801671B8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801671B8" - }, - { - "type": "extern_variable", - "name": "D_801671BA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801671BA" - }, - { - "type": "extern_variable", - "name": "D_801671BC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801671BC" - }, - { - "type": "extern_variable", - "name": "D_8009D866", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D866" - }, - { - "type": "extern_variable", - "name": "D_800F5E68", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E68" - }, - { - "type": "extern_variable", - "name": "D_800F5E6A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E6A" - }, - { - "type": "extern_variable", - "name": "D_800708D1", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708D1" - }, - { - "type": "extern_variable", - "name": "D_8009D85E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85E" - }, - { - "type": "extern_variable", - "name": "D_8009D862", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D862" - }, - { - "type": "extern_variable", - "name": "D_800F5E70", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E70" - }, - { - "type": "extern_variable", - "name": "D_800F5E72", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E72" - }, - { - "type": "extern_variable", - "name": "D_800738A4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738A4" - }, - { - "type": "extern_variable", - "name": "D_800738C7", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738C7" - }, - { - "type": "extern_variable", - "name": "D_8009D84E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D84E" - }, - { - "type": "extern_variable", - "name": "D_800F5E64", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E64" - }, - { - "type": "extern_variable", - "name": "D_800F5EFC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5EFC" - }, - { - "type": "extern_variable", - "name": "func_800AA574", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AA574" - }, - { - "type": "extern_variable", - "name": "func_800AA688", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AA688" - }, - { - "type": "extern_variable", - "name": "D_80163778", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163778" - }, - { - "type": "extern_variable", - "name": "D_800E7BA4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BA4" - }, - { - "type": "extern_variable", - "name": "D_800E7BA5", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BA5" - }, - { - "type": "extern_variable", - "name": "D_800E7BA6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BA6" - }, - { - "type": "extern_variable", - "name": "D_800F5E74", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E74" - }, - { - "type": "extern_variable", - "name": "D_800F5E76", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E76" - }, - { - "type": "extern_variable", - "name": "D_800730D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730D0" - }, - { - "type": "extern_variable", - "name": "D_800E7BBC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BBC" - }, - { - "type": "extern_variable", - "name": "D_800E7BBD", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BBD" - }, - { - "type": "extern_variable", - "name": "D_8009D86F", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D86F" - }, - { - "type": "extern_variable", - "name": "D_800E7BCC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BCC" - }, - { - "type": "extern_variable", - "name": "D_800E7BFC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BFC" - }, - { - "type": "extern_variable", - "name": "D_800E7BEC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BEC" - }, - { - "type": "extern_variable", - "name": "func_800AF264", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AF264" - }, - { - "type": "extern_variable", - "name": "func_800AF3AC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AF3AC" - }, - { - "type": "extern_variable", - "name": "D_800E7C7C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7C7C" - }, - { - "type": "extern_variable", - "name": "D_800E7CBC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7CBC" - }, - { - "type": "extern_variable", - "name": "D_800E7CDC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7CDC" - }, - { - "type": "extern_variable", - "name": "D_800F4A48", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4A48" - }, - { - "type": "extern_variable", - "name": "D_800F4A70", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4A70" - }, - { - "type": "extern_variable", - "name": "D_800F4A98", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4A98" - }, - { - "type": "extern_variable", - "name": "D_800F49A0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F49A0" - }, - { - "type": "extern_variable", - "name": "D_800F49A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F49A8" - }, - { - "type": "extern_variable", - "name": "D_8009D85C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85C" - }, - { - "type": "extern_variable", - "name": "D_8009D860", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D860" - }, - { - "type": "extern_variable", - "name": "D_8009D868", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D868" - }, - { - "type": "extern_variable", - "name": "D_8009D86A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D86A" - }, - { - "type": "extern_variable", - "name": "D_800F5F01", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5F01" - }, - { - "type": "extern_variable", - "name": "D_800F87F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F87F0" - }, - { - "type": "extern_variable", - "name": "func_800A5250", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800A5250" - } - ], - "timestamp": "2026-04-18T12:35:42.693792" - }, - { - "function_name": "func_800A16CC", - "file": "src/field/field.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80074EB0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB0" - }, - { - "type": "extern_variable", - "name": "D_80074EB4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB4" - }, - { - "type": "extern_variable", - "name": "D_80074EB8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB8" - }, - { - "type": "extern_variable", - "name": "func_800A48B8", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800A48B8" - }, - { - "type": "extern_variable", - "name": "D_80074ED9", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074ED9" - }, - { - "type": "extern_variable", - "name": "D_800DF120", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DF120" - }, - { - "type": "extern_variable", - "name": "D_800DF122", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DF122" - }, - { - "type": "extern_variable", - "name": "D_800DEF88", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DEF88" - }, - { - "type": "extern_variable", - "name": "func_800354CC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800354CC" - }, - { - "type": "extern_variable", - "name": "func_80035658", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80035658" - }, - { - "type": "extern_variable", - "name": "D_800E0638", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0638" - }, - { - "type": "extern_variable", - "name": "D_800E48F4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48F4" - }, - { - "type": "extern_variable", - "name": "D_800E48FC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48FC" - }, - { - "type": "extern_variable", - "name": "D_800E48FE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48FE" - }, - { - "type": "extern_variable", - "name": "D_800E4900", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4900" - }, - { - "type": "extern_variable", - "name": "D_800E4901", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4901" - }, - { - "type": "extern_variable", - "name": "D_800E4904", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4904" - }, - { - "type": "extern_variable", - "name": "D_800E4906", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4906" - }, - { - "type": "extern_variable", - "name": "D_800E4908", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4908" - }, - { - "type": "extern_variable", - "name": "D_800E4909", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4909" - }, - { - "type": "extern_variable", - "name": "D_800E490C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E490C" - }, - { - "type": "extern_variable", - "name": "D_800E490E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E490E" - }, - { - "type": "extern_variable", - "name": "D_800E4910", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4910" - }, - { - "type": "extern_variable", - "name": "D_800E4911", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4911" - }, - { - "type": "extern_variable", - "name": "D_800E4914", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4914" - }, - { - "type": "extern_variable", - "name": "D_800E4916", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4916" - }, - { - "type": "extern_variable", - "name": "D_800E4918", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4918" - }, - { - "type": "extern_variable", - "name": "D_800E4919", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4919" - }, - { - "type": "extern_variable", - "name": "D_8007EB98", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007EB98" - }, - { - "type": "extern_variable", - "name": "func_8001786C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8001786C" - }, - { - "type": "extern_variable", - "name": "func_80020058", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80020058" - }, - { - "type": "extern_variable", - "name": "D_800491D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800491D0" - }, - { - "type": "extern_variable", - "name": "D_8008328D", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328D" - }, - { - "type": "extern_variable", - "name": "D_800832A2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800832A2" - }, - { - "type": "extern_variable", - "name": "D_8008326C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008326C" - }, - { - "type": "extern_variable", - "name": "D_80083286", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083286" - }, - { - "type": "extern_variable", - "name": "D_80083278", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083278" - }, - { - "type": "extern_variable", - "name": "D_8008327A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327A" - }, - { - "type": "extern_variable", - "name": "D_8008327E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327E" - }, - { - "type": "extern_variable", - "name": "D_80075E24", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075E24" - }, - { - "type": "extern_variable", - "name": "D_80075E25", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075E25" - }, - { - "type": "extern_variable", - "name": "D_800E4214", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4214" - }, - { - "type": "extern_variable", - "name": "D_800E4280", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4280" - }, - { - "type": "extern_variable", - "name": "D_800E4D48", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4D48" - }, - { - "type": "extern_variable", - "name": "D_800E0748", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0748" - }, - { - "type": "extern_variable", - "name": "D_800E074A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074A" - }, - { - "type": "extern_variable", - "name": "D_800E074C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074C" - }, - { - "type": "extern_variable", - "name": "D_800E08C0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08C0" - }, - { - "type": "extern_variable", - "name": "D_800E074E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074E" - }, - { - "type": "extern_variable", - "name": "D_800E0754", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0754" - }, - { - "type": "extern_variable", - "name": "D_800E0758", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0758" - }, - { - "type": "extern_variable", - "name": "D_800E08A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08A8" - }, - { - "type": "extern_variable", - "name": "D_800E0756", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0756" - }, - { - "type": "extern_variable", - "name": "D_800E0750", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0750" - }, - { - "type": "extern_variable", - "name": "D_800E0751", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0751" - }, - { - "type": "extern_variable", - "name": "D_800E0752", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0752" - }, - { - "type": "extern_variable", - "name": "func_800D5A60", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D5A60" - }, - { - "type": "extern_variable", - "name": "func_800D5C9C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D5C9C" - }, - { - "type": "extern_variable", - "name": "func_800D6D44", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6D44" - }, - { - "type": "extern_variable", - "name": "func_800D6E0C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6E0C" - }, - { - "type": "extern_variable", - "name": "func_800D6F6C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6F6C" - }, - { - "type": "extern_variable", - "name": "D_80083284", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083284" - }, - { - "type": "extern_variable", - "name": "D_8008328A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328A" - }, - { - "type": "extern_variable", - "name": "D_8008328E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328E" - }, - { - "type": "extern_variable", - "name": "D_80083298", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083298" - }, - { - "type": "extern_variable", - "name": "D_8008329A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329A" - }, - { - "type": "extern_variable", - "name": "D_800E424C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E424C" - }, - { - "type": "extern_variable", - "name": "D_801142CC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801142CC" - }, - { - "type": "extern_variable", - "name": "D_8009AD30", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009AD30" - }, - { - "type": "extern_variable", - "name": "func_800C2E00", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C2E00" - }, - { - "type": "extern_variable", - "name": "func_800DA444", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800DA444" - }, - { - "type": "extern_variable", - "name": "func_800C8634", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C8634" - }, - { - "type": "extern_variable", - "name": "func_800CDC14", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800CDC14" - }, - { - "type": "extern_variable", - "name": "D_80095DE0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80095DE0" - }, - { - "type": "extern_variable", - "name": "func_80025B10", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80025B10" - }, - { - "type": "extern_variable", - "name": "func_800BEAD4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800BEAD4" - }, - { - "type": "extern_variable", - "name": "D_800E0208", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0208" - }, - { - "type": "extern_variable", - "name": "D_800756E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800756E8" - }, - { - "type": "extern_variable", - "name": "D_80083291", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083291" - }, - { - "type": "extern_variable", - "name": "D_80083294", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083294" - }, - { - "type": "extern_variable", - "name": "D_8007078C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007078C" - }, - { - "type": "extern_variable", - "name": "D_8007E7B8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B8" - }, - { - "type": "extern_variable", - "name": "D_8007E7BA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7BA" - }, - { - "type": "extern_variable", - "name": "D_8007E7AC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7AC" - }, - { - "type": "extern_variable", - "name": "D_8007E7AE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7AE" - }, - { - "type": "extern_variable", - "name": "D_8007E7B0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B0" - }, - { - "type": "extern_variable", - "name": "D_8007E7B2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B2" - }, - { - "type": "extern_variable", - "name": "D_8007E7B4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B4" - }, - { - "type": "extern_variable", - "name": "D_8007E7B6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B6" - }, - { - "type": "extern_variable", - "name": "D_80082248", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082248" - }, - { - "type": "extern_variable", - "name": "D_8008325C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008325C" - }, - { - "type": "extern_variable", - "name": "D_8009D828", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D828" - }, - { - "type": "extern_variable", - "name": "D_800A0854", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A0854" - }, - { - "type": "extern_variable", - "name": "D_800A0F38", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A0F38" - }, - { - "type": "extern_variable", - "name": "D_8007E7C2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7C2" - }, - { - "type": "extern_variable", - "name": "D_80049209", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049209" - }, - { - "type": "extern_variable", - "name": "D_8004920A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8004920A" - }, - { - "type": "extern_variable", - "name": "func_80044064", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80044064" - }, - { - "type": "extern_variable", - "name": "func_800C5B38", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C5B38" - }, - { - "type": "extern_variable", - "name": "D_80081D90", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80081D90" - }, - { - "type": "extern_variable", - "name": "D_80083288", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083288" - }, - { - "type": "extern_variable", - "name": "D_800E4944", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4944" - }, - { - "type": "extern_variable", - "name": "D_80114480", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80114480" - }, - { - "type": "extern_variable", - "name": "D_800E42A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42A8" - }, - { - "type": "extern_variable", - "name": "D_8008327C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327C" - }, - { - "type": "extern_variable", - "name": "D_80083280", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083280" - }, - { - "type": "extern_variable", - "name": "D_80083282", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083282" - }, - { - "type": "extern_variable", - "name": "D_8008328F", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328F" - }, - { - "type": "extern_variable", - "name": "D_80083290", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083290" - }, - { - "type": "extern_variable", - "name": "D_8008329C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329C" - }, - { - "type": "extern_variable", - "name": "D_8008329E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329E" - }, - { - "type": "extern_variable", - "name": "D_80071748", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071748" - }, - { - "type": "extern_variable", - "name": "D_800833F8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800833F8" - }, - { - "type": "extern_variable", - "name": "D_8009A1C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009A1C4" - }, - { - "type": "extern_variable", - "name": "D_800A06B0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A06B0" - }, - { - "type": "extern_variable", - "name": "D_80071A88", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071A88" - }, - { - "type": "extern_variable", - "name": "D_801142D4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801142D4" - }, - { - "type": "extern_variable", - "name": "D_800E42D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42D8" - }, - { - "type": "extern_variable", - "name": "D_800E42DA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DA" - }, - { - "type": "extern_variable", - "name": "D_800E42DC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DC" - }, - { - "type": "extern_variable", - "name": "D_800E42E0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E0" - }, - { - "type": "extern_variable", - "name": "D_800E42E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E4" - }, - { - "type": "extern_variable", - "name": "D_800E42E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E8" - }, - { - "type": "extern_variable", - "name": "D_800E42EA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EA" - }, - { - "type": "extern_variable", - "name": "D_800E42EE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EE" - }, - { - "type": "extern_variable", - "name": "D_800E48E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48E8" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - } - ], - "timestamp": "2026-04-18T12:35:43.736163" - }, - { - "function_name": "func_800140F4", - "file": "src/main/18B8.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_8007E7A0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7A0" - }, - { - "type": "extern_variable", - "name": "D_8007EB6A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007EB6A" - }, - { - "type": "extern_variable", - "name": "D_8009A078", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009A078" - }, - { - "type": "extern_variable", - "name": "D_8009A079", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009A079" - }, - { - "type": "extern_variable", - "name": "D_8009A07A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009A07A" - }, - { - "type": "extern_variable", - "name": "D_80063048", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80063048" - }, - { - "type": "extern_variable", - "name": "D_80010118", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80010118" - }, - { - "type": "extern_variable", - "name": "D_80010120", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80010120" - }, - { - "type": "extern_variable", - "name": "D_80010124", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80010124" - }, - { - "type": "extern_variable", - "name": "D_800F5BC7", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5BC7" - }, - { - "type": "extern_variable", - "name": "D_800F5BE1", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5BE1" - }, - { - "type": "extern_variable", - "name": "D_800F5BF4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5BF4" - }, - { - "type": "extern_variable", - "name": "D_800F5F44", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5F44" - }, - { - "type": "extern_variable", - "name": "D_800F652C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F652C" - }, - { - "type": "extern_variable", - "name": "D_800F83E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F83E4" - }, - { - "type": "extern_variable", - "name": "D_800F8410", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F8410" - }, - { - "type": "extern_variable", - "name": "D_80163658", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163658" - }, - { - "type": "extern_variable", - "name": "D_8009D808", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D808" - }, - { - "type": "extern_variable", - "name": "D_8009D80A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D80A" - }, - { - "type": "extern_variable", - "name": "D_8009D80C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D80C" - }, - { - "type": "extern_variable", - "name": "func_80018028", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80018028" - }, - { - "type": "extern_variable", - "name": "D_800491B0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800491B0" - }, - { - "type": "extern_variable", - "name": "D_800730D9", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730D9" - }, - { - "type": "extern_variable", - "name": "D_800730DA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730DA" - }, - { - "type": "extern_variable", - "name": "D_800730DB", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730DB" - }, - { - "type": "extern_variable", - "name": "D_80062E53", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80062E53" - }, - { - "type": "extern_variable", - "name": "D_8006950A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8006950A" - }, - { - "type": "extern_variable", - "name": "func_80019254", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80019254" - }, - { - "type": "extern_variable", - "name": "func_8001937C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8001937C" - }, - { - "type": "extern_variable", - "name": "func_800193F4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800193F4" - }, - { - "type": "extern_variable", - "name": "func_80019544", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80019544" - }, - { - "type": "extern_variable", - "name": "D_80049060", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049060" - }, - { - "type": "extern_variable", - "name": "D_80049062", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049062" - }, - { - "type": "extern_variable", - "name": "D_80049064", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049064" - }, - { - "type": "extern_variable", - "name": "D_80049066", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049066" - }, - { - "type": "extern_variable", - "name": "D_80049068", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049068" - }, - { - "type": "extern_variable", - "name": "D_8004906A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8004906A" - }, - { - "type": "extern_variable", - "name": "D_8004906C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8004906C" - }, - { - "type": "extern_variable", - "name": "D_8004906E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8004906E" - }, - { - "type": "extern_variable", - "name": "D_800730D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730D8" - }, - { - "type": "extern_variable", - "name": "D_800694E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800694E4" - }, - { - "type": "extern_variable", - "name": "D_8006947C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8006947C" - }, - { - "type": "extern_variable", - "name": "D_800730DE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730DE" - }, - { - "type": "extern_variable", - "name": "D_80069508", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069508" - }, - { - "type": "extern_variable", - "name": "func_8001BB30", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8001BB30" - }, - { - "type": "extern_variable", - "name": "D_80069538", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069538" - }, - { - "type": "extern_variable", - "name": "D_80069554", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" - }, - { - "type": "extern_variable", - "name": "D_80069555", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069555" - }, - { - "type": "extern_variable", - "name": "D_80069556", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069556" - }, - { - "type": "extern_variable", - "name": "D_80069558", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" - }, - { - "type": "extern_variable", - "name": "D_800708C8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708C8" - }, - { - "type": "extern_variable", - "name": "D_800708D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708D0" - }, - { - "type": "extern_variable", - "name": "D_800696F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" - }, - { - "type": "extern_variable", - "name": "D_80071E46", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071E46" - }, - { - "type": "extern_variable", - "name": "D_800738A4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738A4" - }, - { - "type": "extern_variable", - "name": "D_8009D888", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D888" - }, - { - "type": "extern_variable", - "name": "D_80069844", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069844" - }, - { - "type": "extern_variable", - "name": "D_800494A4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800494A4" - }, - { - "type": "extern_variable", - "name": "D_80071E4D", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071E4D" - }, - { - "type": "extern_variable", - "name": "D_800738BC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738BC" - }, - { - "type": "extern_variable", - "name": "D_800491D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800491D0" - }, - { - "type": "extern_variable", - "name": "D_8009D85C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85C" - }, - { - "type": "extern_variable", - "name": "D_8009D85E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85E" - }, - { - "type": "extern_variable", - "name": "D_8009D860", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D860" - }, - { - "type": "extern_variable", - "name": "D_8009D862", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D862" - }, - { - "type": "extern_variable", - "name": "func_80026090", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80026090" - }, - { - "type": "extern_variable", - "name": "func_800260DC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800260DC" - }, - { - "type": "extern_variable", - "name": "D_80083084", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083084" - }, - { - "type": "extern_variable", - "name": "D_80074EB0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB0" - }, - { - "type": "extern_variable", - "name": "D_80074EB4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB4" - }, - { - "type": "extern_variable", - "name": "D_80074EDA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EDA" - }, - { - "type": "extern_variable", - "name": "D_80074F16", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074F16" - }, - { - "type": "extern_variable", - "name": "D_80071C32", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071C32" - }, - { - "type": "extern_variable", - "name": "D_80071E64", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071E64" - }, - { - "type": "extern_variable", - "name": "D_800722D6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800722D6" - }, - { - "type": "extern_variable", - "name": "D_800738CA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738CA" - }, - { - "type": "extern_variable", - "name": "D_8009D894", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" - }, - { - "type": "extern_variable", - "name": "D_8009D88A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D88A" - }, - { - "type": "extern_variable", - "name": "D_8009D88C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D88C" - }, - { - "type": "extern_variable", - "name": "D_8009D88E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D88E" - }, - { - "type": "extern_variable", - "name": "func_80018630", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80018630" - }, - { - "type": "extern_variable", - "name": "func_80018934", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80018934" - }, - { - "type": "extern_variable", - "name": "D_800730DF", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730DF" - } - ], - "timestamp": "2026-04-18T12:35:44.167037" - }, - { - "function_name": "func_800A1798", - "file": "src/battle/battle.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_8009D954", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D954" - }, - { - "type": "extern_variable", - "name": "D_800FA9D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FA9D0" - }, - { - "type": "extern_variable", - "name": "D_800FA9D4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FA9D4" - }, - { - "type": "extern_variable", - "name": "D_800F9F3C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9F3C" - }, - { - "type": "extern_variable", - "name": "D_800F9F42", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9F42" - }, - { - "type": "extern_variable", - "name": "D_800F9F44", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9F44" - }, - { - "type": "extern_variable", - "name": "D_800F87F4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F87F4" - }, - { - "type": "extern_variable", - "name": "D_800F5E65", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E65" - }, - { - "type": "extern_variable", - "name": "D_800F3A40", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F3A40" - }, - { - "type": "extern_variable", - "name": "D_80071C32", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071C32" - }, - { - "type": "extern_variable", - "name": "D_80071E64", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071E64" - }, - { - "type": "extern_variable", - "name": "D_800722D6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800722D6" - }, - { - "type": "extern_variable", - "name": "D_800722D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800722D8" - }, - { - "type": "extern_variable", - "name": "D_800738A0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738A0" - }, - { - "type": "extern_variable", - "name": "D_800738CA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738CA" - }, - { - "type": "extern_variable", - "name": "D_801671B8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801671B8" - }, - { - "type": "extern_variable", - "name": "D_801671BA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801671BA" - }, - { - "type": "extern_variable", - "name": "D_801671BC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801671BC" - }, - { - "type": "extern_variable", - "name": "D_8009D866", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D866" - }, - { - "type": "extern_variable", - "name": "D_800F5E68", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E68" - }, - { - "type": "extern_variable", - "name": "D_800F5E6A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E6A" - }, - { - "type": "extern_variable", - "name": "D_800708D1", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708D1" - }, - { - "type": "extern_variable", - "name": "D_8009D85E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85E" - }, - { - "type": "extern_variable", - "name": "D_8009D862", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D862" - }, - { - "type": "extern_variable", - "name": "D_800F5E70", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E70" - }, - { - "type": "extern_variable", - "name": "D_800F5E72", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E72" - }, - { - "type": "extern_variable", - "name": "D_800738A4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738A4" - }, - { - "type": "extern_variable", - "name": "D_800738C7", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738C7" - }, - { - "type": "extern_variable", - "name": "D_8009D84E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D84E" - }, - { - "type": "extern_variable", - "name": "D_800F5E64", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E64" - }, - { - "type": "extern_variable", - "name": "D_800F5EFC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5EFC" - }, - { - "type": "extern_variable", - "name": "func_800AA574", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AA574" - }, - { - "type": "extern_variable", - "name": "func_800AA688", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AA688" - }, - { - "type": "extern_variable", - "name": "D_80163778", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163778" - }, - { - "type": "extern_variable", - "name": "D_800E7BA4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BA4" - }, - { - "type": "extern_variable", - "name": "D_800E7BA5", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BA5" - }, - { - "type": "extern_variable", - "name": "D_800E7BA6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BA6" - }, - { - "type": "extern_variable", - "name": "D_800F5E74", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E74" - }, - { - "type": "extern_variable", - "name": "D_800F5E76", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E76" - }, - { - "type": "extern_variable", - "name": "D_800730D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730D0" - }, - { - "type": "extern_variable", - "name": "D_800E7BBC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BBC" - }, - { - "type": "extern_variable", - "name": "D_800E7BBD", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BBD" - }, - { - "type": "extern_variable", - "name": "D_8009D86F", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D86F" - }, - { - "type": "extern_variable", - "name": "D_800E7BCC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BCC" - }, - { - "type": "extern_variable", - "name": "D_800E7BFC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BFC" - }, - { - "type": "extern_variable", - "name": "D_800E7BEC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BEC" - }, - { - "type": "extern_variable", - "name": "func_800AF264", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AF264" - }, - { - "type": "extern_variable", - "name": "func_800AF3AC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AF3AC" - }, - { - "type": "extern_variable", - "name": "D_800E7C7C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7C7C" - }, - { - "type": "extern_variable", - "name": "D_800E7CBC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7CBC" - }, - { - "type": "extern_variable", - "name": "D_800E7CDC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7CDC" - }, - { - "type": "extern_variable", - "name": "D_800F4A48", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4A48" - }, - { - "type": "extern_variable", - "name": "D_800F4A70", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4A70" - }, - { - "type": "extern_variable", - "name": "D_800F4A98", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4A98" - }, - { - "type": "extern_variable", - "name": "D_800F49A0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F49A0" - }, - { - "type": "extern_variable", - "name": "D_800F49A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F49A8" - }, - { - "type": "extern_variable", - "name": "D_8009D85C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85C" - }, - { - "type": "extern_variable", - "name": "D_8009D860", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D860" - }, - { - "type": "extern_variable", - "name": "D_8009D868", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D868" - }, - { - "type": "extern_variable", - "name": "D_8009D86A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D86A" - }, - { - "type": "extern_variable", - "name": "D_800F5F01", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5F01" - }, - { - "type": "extern_variable", - "name": "D_800F87F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F87F0" - }, - { - "type": "extern_variable", - "name": "func_800A5250", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800A5250" - } - ], - "timestamp": "2026-04-18T12:35:44.567054" - }, - { - "function_name": "func_800A2314", - "file": "src/field/field.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80074EB0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB0" - }, - { - "type": "extern_variable", - "name": "D_80074EB4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB4" - }, - { - "type": "extern_variable", - "name": "D_80074EB8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB8" - }, - { - "type": "extern_variable", - "name": "func_800A48B8", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800A48B8" - }, - { - "type": "extern_variable", - "name": "D_80074ED9", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074ED9" - }, - { - "type": "extern_variable", - "name": "D_800DF120", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DF120" - }, - { - "type": "extern_variable", - "name": "D_800DF122", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DF122" - }, - { - "type": "extern_variable", - "name": "D_800DEF88", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800DEF88" - }, - { - "type": "extern_variable", - "name": "func_800354CC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800354CC" - }, - { - "type": "extern_variable", - "name": "func_80035658", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80035658" - }, - { - "type": "extern_variable", - "name": "D_800E0638", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0638" - }, - { - "type": "extern_variable", - "name": "D_800E48F4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48F4" - }, - { - "type": "extern_variable", - "name": "D_800E48FC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48FC" - }, - { - "type": "extern_variable", - "name": "D_800E48FE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48FE" - }, - { - "type": "extern_variable", - "name": "D_800E4900", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4900" - }, - { - "type": "extern_variable", - "name": "D_800E4901", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4901" - }, - { - "type": "extern_variable", - "name": "D_800E4904", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4904" - }, - { - "type": "extern_variable", - "name": "D_800E4906", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4906" - }, - { - "type": "extern_variable", - "name": "D_800E4908", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4908" - }, - { - "type": "extern_variable", - "name": "D_800E4909", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4909" - }, - { - "type": "extern_variable", - "name": "D_800E490C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E490C" - }, - { - "type": "extern_variable", - "name": "D_800E490E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E490E" - }, - { - "type": "extern_variable", - "name": "D_800E4910", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4910" - }, - { - "type": "extern_variable", - "name": "D_800E4911", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4911" - }, - { - "type": "extern_variable", - "name": "D_800E4914", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4914" - }, - { - "type": "extern_variable", - "name": "D_800E4916", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4916" - }, - { - "type": "extern_variable", - "name": "D_800E4918", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4918" - }, - { - "type": "extern_variable", - "name": "D_800E4919", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4919" - }, - { - "type": "extern_variable", - "name": "D_8007EB98", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007EB98" - }, - { - "type": "extern_variable", - "name": "func_8001786C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8001786C" - }, - { - "type": "extern_variable", - "name": "func_80020058", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80020058" - }, - { - "type": "extern_variable", - "name": "D_800491D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800491D0" - }, - { - "type": "extern_variable", - "name": "D_8008328D", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328D" - }, - { - "type": "extern_variable", - "name": "D_800832A2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800832A2" - }, - { - "type": "extern_variable", - "name": "D_8008326C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008326C" - }, - { - "type": "extern_variable", - "name": "D_80083286", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083286" - }, - { - "type": "extern_variable", - "name": "D_80083278", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083278" - }, - { - "type": "extern_variable", - "name": "D_8008327A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327A" - }, - { - "type": "extern_variable", - "name": "D_8008327E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327E" - }, - { - "type": "extern_variable", - "name": "D_80075E24", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075E24" - }, - { - "type": "extern_variable", - "name": "D_80075E25", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075E25" - }, - { - "type": "extern_variable", - "name": "D_800E4214", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4214" - }, - { - "type": "extern_variable", - "name": "D_800E4280", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4280" - }, - { - "type": "extern_variable", - "name": "D_800E4D48", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4D48" - }, - { - "type": "extern_variable", - "name": "D_800E0748", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0748" - }, - { - "type": "extern_variable", - "name": "D_800E074A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074A" - }, - { - "type": "extern_variable", - "name": "D_800E074C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074C" - }, - { - "type": "extern_variable", - "name": "D_800E08C0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08C0" - }, - { - "type": "extern_variable", - "name": "D_800E074E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E074E" - }, - { - "type": "extern_variable", - "name": "D_800E0754", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0754" - }, - { - "type": "extern_variable", - "name": "D_800E0758", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0758" - }, - { - "type": "extern_variable", - "name": "D_800E08A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08A8" - }, - { - "type": "extern_variable", - "name": "D_800E0756", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0756" - }, - { - "type": "extern_variable", - "name": "D_800E0750", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0750" - }, - { - "type": "extern_variable", - "name": "D_800E0751", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0751" - }, - { - "type": "extern_variable", - "name": "D_800E0752", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0752" - }, - { - "type": "extern_variable", - "name": "func_800D5A60", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D5A60" - }, - { - "type": "extern_variable", - "name": "func_800D5C9C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D5C9C" - }, - { - "type": "extern_variable", - "name": "func_800D6D44", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6D44" - }, - { - "type": "extern_variable", - "name": "func_800D6E0C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6E0C" - }, - { - "type": "extern_variable", - "name": "func_800D6F6C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800D6F6C" - }, - { - "type": "extern_variable", - "name": "D_80083284", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083284" - }, - { - "type": "extern_variable", - "name": "D_8008328A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328A" - }, - { - "type": "extern_variable", - "name": "D_8008328E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328E" - }, - { - "type": "extern_variable", - "name": "D_80083298", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083298" - }, - { - "type": "extern_variable", - "name": "D_8008329A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329A" - }, - { - "type": "extern_variable", - "name": "D_800E424C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E424C" - }, - { - "type": "extern_variable", - "name": "D_801142CC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801142CC" - }, - { - "type": "extern_variable", - "name": "D_8009AD30", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009AD30" - }, - { - "type": "extern_variable", - "name": "func_800C2E00", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C2E00" - }, - { - "type": "extern_variable", - "name": "func_800DA444", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800DA444" - }, - { - "type": "extern_variable", - "name": "func_800C8634", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C8634" - }, - { - "type": "extern_variable", - "name": "func_800CDC14", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800CDC14" - }, - { - "type": "extern_variable", - "name": "D_80095DE0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80095DE0" - }, - { - "type": "extern_variable", - "name": "func_80025B10", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80025B10" - }, - { - "type": "extern_variable", - "name": "func_800BEAD4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800BEAD4" - }, - { - "type": "extern_variable", - "name": "D_800E0208", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0208" - }, - { - "type": "extern_variable", - "name": "D_800756E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800756E8" - }, - { - "type": "extern_variable", - "name": "D_80083291", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083291" - }, - { - "type": "extern_variable", - "name": "D_80083294", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083294" - }, - { - "type": "extern_variable", - "name": "D_8007078C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007078C" - }, - { - "type": "extern_variable", - "name": "D_8007E7B8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B8" - }, - { - "type": "extern_variable", - "name": "D_8007E7BA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7BA" - }, - { - "type": "extern_variable", - "name": "D_8007E7AC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7AC" - }, - { - "type": "extern_variable", - "name": "D_8007E7AE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7AE" - }, - { - "type": "extern_variable", - "name": "D_8007E7B0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B0" - }, - { - "type": "extern_variable", - "name": "D_8007E7B2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B2" - }, - { - "type": "extern_variable", - "name": "D_8007E7B4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B4" - }, - { - "type": "extern_variable", - "name": "D_8007E7B6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7B6" - }, - { - "type": "extern_variable", - "name": "D_80082248", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082248" - }, - { - "type": "extern_variable", - "name": "D_8008325C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008325C" - }, - { - "type": "extern_variable", - "name": "D_8009D828", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D828" - }, - { - "type": "extern_variable", - "name": "D_800A0854", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A0854" - }, - { - "type": "extern_variable", - "name": "D_800A0F38", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A0F38" - }, - { - "type": "extern_variable", - "name": "D_8007E7C2", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7C2" - }, - { - "type": "extern_variable", - "name": "D_80049209", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049209" - }, - { - "type": "extern_variable", - "name": "D_8004920A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8004920A" - }, - { - "type": "extern_variable", - "name": "func_80044064", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80044064" - }, - { - "type": "extern_variable", - "name": "func_800C5B38", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800C5B38" - }, - { - "type": "extern_variable", - "name": "D_80081D90", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80081D90" - }, - { - "type": "extern_variable", - "name": "D_80083288", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083288" - }, - { - "type": "extern_variable", - "name": "D_800E4944", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E4944" - }, - { - "type": "extern_variable", - "name": "D_80114480", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80114480" - }, - { - "type": "extern_variable", - "name": "D_800E42A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42A8" - }, - { - "type": "extern_variable", - "name": "D_8008327C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008327C" - }, - { - "type": "extern_variable", - "name": "D_80083280", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083280" - }, - { - "type": "extern_variable", - "name": "D_80083282", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083282" - }, - { - "type": "extern_variable", - "name": "D_8008328F", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008328F" - }, - { - "type": "extern_variable", - "name": "D_80083290", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083290" - }, - { - "type": "extern_variable", - "name": "D_8008329C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329C" - }, - { - "type": "extern_variable", - "name": "D_8008329E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8008329E" - }, - { - "type": "extern_variable", - "name": "D_80071748", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071748" - }, - { - "type": "extern_variable", - "name": "D_800833F8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800833F8" - }, - { - "type": "extern_variable", - "name": "D_8009A1C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009A1C4" - }, - { - "type": "extern_variable", - "name": "D_800A06B0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A06B0" - }, - { - "type": "extern_variable", - "name": "D_80071A88", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071A88" - }, - { - "type": "extern_variable", - "name": "D_801142D4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801142D4" - }, - { - "type": "extern_variable", - "name": "D_800E42D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42D8" - }, - { - "type": "extern_variable", - "name": "D_800E42DA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DA" - }, - { - "type": "extern_variable", - "name": "D_800E42DC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DC" - }, - { - "type": "extern_variable", - "name": "D_800E42E0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E0" - }, - { - "type": "extern_variable", - "name": "D_800E42E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E4" - }, - { - "type": "extern_variable", - "name": "D_800E42E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E8" - }, - { - "type": "extern_variable", - "name": "D_800E42EA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EA" - }, - { - "type": "extern_variable", - "name": "D_800E42EE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EE" - }, - { - "type": "extern_variable", - "name": "D_800E48E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48E8" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - } - ], - "timestamp": "2026-04-18T12:35:45.141699" - }, - { - "function_name": "func_80023AD4", - "file": "src/main/18B8.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_8007E7A0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007E7A0" - }, - { - "type": "extern_variable", - "name": "D_8007EB6A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8007EB6A" - }, - { - "type": "extern_variable", - "name": "D_8009A078", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009A078" - }, - { - "type": "extern_variable", - "name": "D_8009A079", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009A079" - }, - { - "type": "extern_variable", - "name": "D_8009A07A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009A07A" - }, - { - "type": "extern_variable", - "name": "D_80063048", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80063048" - }, - { - "type": "extern_variable", - "name": "D_80010118", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80010118" - }, - { - "type": "extern_variable", - "name": "D_80010120", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80010120" - }, - { - "type": "extern_variable", - "name": "D_80010124", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80010124" - }, - { - "type": "extern_variable", - "name": "D_800F5BC7", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5BC7" - }, - { - "type": "extern_variable", - "name": "D_800F5BE1", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5BE1" - }, - { - "type": "extern_variable", - "name": "D_800F5BF4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5BF4" - }, - { - "type": "extern_variable", - "name": "D_800F5F44", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5F44" - }, - { - "type": "extern_variable", - "name": "D_800F652C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F652C" - }, - { - "type": "extern_variable", - "name": "D_800F83E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F83E4" - }, - { - "type": "extern_variable", - "name": "D_800F8410", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F8410" - }, - { - "type": "extern_variable", - "name": "D_80163658", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163658" - }, - { - "type": "extern_variable", - "name": "D_8009D808", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D808" - }, - { - "type": "extern_variable", - "name": "D_8009D80A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D80A" - }, - { - "type": "extern_variable", - "name": "D_8009D80C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D80C" - }, - { - "type": "extern_variable", - "name": "func_80018028", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80018028" - }, - { - "type": "extern_variable", - "name": "D_800491B0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800491B0" - }, - { - "type": "extern_variable", - "name": "D_800730D9", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730D9" - }, - { - "type": "extern_variable", - "name": "D_800730DA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730DA" - }, - { - "type": "extern_variable", - "name": "D_800730DB", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730DB" - }, - { - "type": "extern_variable", - "name": "D_80062E53", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80062E53" - }, - { - "type": "extern_variable", - "name": "D_8006950A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8006950A" - }, - { - "type": "extern_variable", - "name": "func_80019254", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80019254" - }, - { - "type": "extern_variable", - "name": "func_8001937C", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8001937C" - }, - { - "type": "extern_variable", - "name": "func_800193F4", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800193F4" - }, - { - "type": "extern_variable", - "name": "func_80019544", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80019544" - }, - { - "type": "extern_variable", - "name": "D_80049060", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049060" - }, - { - "type": "extern_variable", - "name": "D_80049062", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049062" - }, - { - "type": "extern_variable", - "name": "D_80049064", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049064" - }, - { - "type": "extern_variable", - "name": "D_80049066", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049066" - }, - { - "type": "extern_variable", - "name": "D_80049068", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80049068" - }, - { - "type": "extern_variable", - "name": "D_8004906A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8004906A" - }, - { - "type": "extern_variable", - "name": "D_8004906C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8004906C" - }, - { - "type": "extern_variable", - "name": "D_8004906E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8004906E" - }, - { - "type": "extern_variable", - "name": "D_800730D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730D8" - }, - { - "type": "extern_variable", - "name": "D_800694E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800694E4" - }, - { - "type": "extern_variable", - "name": "D_8006947C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8006947C" - }, - { - "type": "extern_variable", - "name": "D_800730DE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730DE" - }, - { - "type": "extern_variable", - "name": "D_80069508", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069508" - }, - { - "type": "extern_variable", - "name": "func_8001BB30", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8001BB30" - }, - { - "type": "extern_variable", - "name": "D_80069538", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069538" - }, - { - "type": "extern_variable", - "name": "D_80069554", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" - }, - { - "type": "extern_variable", - "name": "D_80069555", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069555" - }, - { - "type": "extern_variable", - "name": "D_80069556", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069556" - }, - { - "type": "extern_variable", - "name": "D_80069558", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" - }, - { - "type": "extern_variable", - "name": "D_800708C8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708C8" - }, - { - "type": "extern_variable", - "name": "D_800708D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708D0" - }, - { - "type": "extern_variable", - "name": "D_800696F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" - }, - { - "type": "extern_variable", - "name": "D_80071E46", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071E46" - }, - { - "type": "extern_variable", - "name": "D_800738A4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738A4" - }, - { - "type": "extern_variable", - "name": "D_8009D888", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D888" - }, - { - "type": "extern_variable", - "name": "D_80069844", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069844" - }, - { - "type": "extern_variable", - "name": "D_800494A4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800494A4" - }, - { - "type": "extern_variable", - "name": "D_80071E4D", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071E4D" - }, - { - "type": "extern_variable", - "name": "D_800738BC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738BC" - }, - { - "type": "extern_variable", - "name": "D_800491D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800491D0" - }, - { - "type": "extern_variable", - "name": "D_8009D85C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85C" - }, - { - "type": "extern_variable", - "name": "D_8009D85E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85E" - }, - { - "type": "extern_variable", - "name": "D_8009D860", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D860" - }, - { - "type": "extern_variable", - "name": "D_8009D862", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D862" - }, - { - "type": "extern_variable", - "name": "func_80026090", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80026090" - }, - { - "type": "extern_variable", - "name": "func_800260DC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800260DC" - }, - { - "type": "extern_variable", - "name": "D_80083084", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80083084" - }, - { - "type": "extern_variable", - "name": "D_80074EB0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB0" - }, - { - "type": "extern_variable", - "name": "D_80074EB4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB4" - }, - { - "type": "extern_variable", - "name": "D_80074EDA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EDA" - }, - { - "type": "extern_variable", - "name": "D_80074F16", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074F16" - }, - { - "type": "extern_variable", - "name": "D_80071C32", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071C32" - }, - { - "type": "extern_variable", - "name": "D_80071E64", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071E64" - }, - { - "type": "extern_variable", - "name": "D_800722D6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800722D6" - }, - { - "type": "extern_variable", - "name": "D_800738CA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738CA" - }, - { - "type": "extern_variable", - "name": "D_8009D894", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" - }, - { - "type": "extern_variable", - "name": "D_8009D88A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D88A" - }, - { - "type": "extern_variable", - "name": "D_8009D88C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D88C" - }, - { - "type": "extern_variable", - "name": "D_8009D88E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D88E" - }, - { - "type": "extern_variable", - "name": "func_80018630", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80018630" - }, - { - "type": "extern_variable", - "name": "func_80018934", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80018934" - }, - { - "type": "extern_variable", - "name": "D_800730DF", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730DF" - } - ], - "timestamp": "2026-04-18T12:35:45.663920" - }, - { - "function_name": "func_800AABBC", - "file": "src/battle/battle.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_8009D954", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D954" - }, - { - "type": "extern_variable", - "name": "D_800FA9D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FA9D0" - }, - { - "type": "extern_variable", - "name": "D_800FA9D4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FA9D4" - }, - { - "type": "extern_variable", - "name": "D_800F9F3C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9F3C" - }, - { - "type": "extern_variable", - "name": "D_800F9F42", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9F42" - }, - { - "type": "extern_variable", - "name": "D_800F9F44", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9F44" - }, - { - "type": "extern_variable", - "name": "D_800F87F4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F87F4" - }, - { - "type": "extern_variable", - "name": "D_800F5E65", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E65" - }, - { - "type": "extern_variable", - "name": "D_800F3A40", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F3A40" - }, - { - "type": "extern_variable", - "name": "D_80071C32", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071C32" - }, - { - "type": "extern_variable", - "name": "D_80071E64", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071E64" - }, - { - "type": "extern_variable", - "name": "D_800722D6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800722D6" - }, - { - "type": "extern_variable", - "name": "D_800722D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800722D8" - }, - { - "type": "extern_variable", - "name": "D_800738A0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738A0" - }, - { - "type": "extern_variable", - "name": "D_800738CA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738CA" - }, - { - "type": "extern_variable", - "name": "D_801671B8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801671B8" - }, - { - "type": "extern_variable", - "name": "D_801671BA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801671BA" - }, - { - "type": "extern_variable", - "name": "D_801671BC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801671BC" - }, - { - "type": "extern_variable", - "name": "D_8009D866", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D866" - }, - { - "type": "extern_variable", - "name": "D_800F5E68", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E68" - }, - { - "type": "extern_variable", - "name": "D_800F5E6A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E6A" - }, - { - "type": "extern_variable", - "name": "D_800708D1", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708D1" - }, - { - "type": "extern_variable", - "name": "D_8009D85E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85E" - }, - { - "type": "extern_variable", - "name": "D_8009D862", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D862" - }, - { - "type": "extern_variable", - "name": "D_800F5E70", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E70" - }, - { - "type": "extern_variable", - "name": "D_800F5E72", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E72" - }, - { - "type": "extern_variable", - "name": "D_800738A4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738A4" - }, - { - "type": "extern_variable", - "name": "D_800738C7", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738C7" - }, - { - "type": "extern_variable", - "name": "D_8009D84E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D84E" - }, - { - "type": "extern_variable", - "name": "D_800F5E64", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E64" - }, - { - "type": "extern_variable", - "name": "D_800F5EFC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5EFC" - }, - { - "type": "extern_variable", - "name": "func_800AA574", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AA574" - }, - { - "type": "extern_variable", - "name": "func_800AA688", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AA688" - }, - { - "type": "extern_variable", - "name": "D_80163778", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163778" - }, - { - "type": "extern_variable", - "name": "D_800E7BA4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BA4" - }, - { - "type": "extern_variable", - "name": "D_800E7BA5", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BA5" - }, - { - "type": "extern_variable", - "name": "D_800E7BA6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BA6" - }, - { - "type": "extern_variable", - "name": "D_800F5E74", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E74" - }, - { - "type": "extern_variable", - "name": "D_800F5E76", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E76" - }, - { - "type": "extern_variable", - "name": "D_800730D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730D0" - }, - { - "type": "extern_variable", - "name": "D_800E7BBC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BBC" - }, - { - "type": "extern_variable", - "name": "D_800E7BBD", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BBD" - }, - { - "type": "extern_variable", - "name": "D_8009D86F", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D86F" - }, - { - "type": "extern_variable", - "name": "D_800E7BCC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BCC" - }, - { - "type": "extern_variable", - "name": "D_800E7BFC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BFC" - }, - { - "type": "extern_variable", - "name": "D_800E7BEC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BEC" - }, - { - "type": "extern_variable", - "name": "func_800AF264", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AF264" - }, - { - "type": "extern_variable", - "name": "func_800AF3AC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AF3AC" - }, - { - "type": "extern_variable", - "name": "D_800E7C7C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7C7C" - }, - { - "type": "extern_variable", - "name": "D_800E7CBC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7CBC" - }, - { - "type": "extern_variable", - "name": "D_800E7CDC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7CDC" - }, - { - "type": "extern_variable", - "name": "D_800F4A48", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4A48" - }, - { - "type": "extern_variable", - "name": "D_800F4A70", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4A70" - }, - { - "type": "extern_variable", - "name": "D_800F4A98", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4A98" - }, - { - "type": "extern_variable", - "name": "D_800F49A0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F49A0" - }, - { - "type": "extern_variable", - "name": "D_800F49A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F49A8" - }, - { - "type": "extern_variable", - "name": "D_8009D85C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85C" - }, - { - "type": "extern_variable", - "name": "D_8009D860", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D860" - }, - { - "type": "extern_variable", - "name": "D_8009D868", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D868" - }, - { - "type": "extern_variable", - "name": "D_8009D86A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D86A" - }, - { - "type": "extern_variable", - "name": "D_800F5F01", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5F01" - }, - { - "type": "extern_variable", - "name": "D_800F87F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F87F0" - }, - { - "type": "extern_variable", - "name": "func_800A5250", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800A5250" - } - ], - "timestamp": "2026-04-18T12:35:45.939659" - }, - { - "function_name": "func_800ABB0C", - "file": "src/battle/battle.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_8009D954", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D954" - }, - { - "type": "extern_variable", - "name": "D_800FA9D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FA9D0" - }, - { - "type": "extern_variable", - "name": "D_800FA9D4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FA9D4" - }, - { - "type": "extern_variable", - "name": "D_800F9F3C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9F3C" - }, - { - "type": "extern_variable", - "name": "D_800F9F42", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9F42" - }, - { - "type": "extern_variable", - "name": "D_800F9F44", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9F44" - }, - { - "type": "extern_variable", - "name": "D_800F87F4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F87F4" - }, - { - "type": "extern_variable", - "name": "D_800F5E65", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E65" - }, - { - "type": "extern_variable", - "name": "D_800F3A40", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F3A40" - }, - { - "type": "extern_variable", - "name": "D_80071C32", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071C32" - }, - { - "type": "extern_variable", - "name": "D_80071E64", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071E64" - }, - { - "type": "extern_variable", - "name": "D_800722D6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800722D6" - }, - { - "type": "extern_variable", - "name": "D_800722D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800722D8" - }, - { - "type": "extern_variable", - "name": "D_800738A0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738A0" - }, - { - "type": "extern_variable", - "name": "D_800738CA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738CA" - }, - { - "type": "extern_variable", - "name": "D_801671B8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801671B8" - }, - { - "type": "extern_variable", - "name": "D_801671BA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801671BA" - }, - { - "type": "extern_variable", - "name": "D_801671BC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801671BC" - }, - { - "type": "extern_variable", - "name": "D_8009D866", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D866" - }, - { - "type": "extern_variable", - "name": "D_800F5E68", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E68" - }, - { - "type": "extern_variable", - "name": "D_800F5E6A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E6A" - }, - { - "type": "extern_variable", - "name": "D_800708D1", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708D1" - }, - { - "type": "extern_variable", - "name": "D_8009D85E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85E" - }, - { - "type": "extern_variable", - "name": "D_8009D862", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D862" - }, - { - "type": "extern_variable", - "name": "D_800F5E70", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E70" - }, - { - "type": "extern_variable", - "name": "D_800F5E72", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E72" - }, - { - "type": "extern_variable", - "name": "D_800738A4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738A4" - }, - { - "type": "extern_variable", - "name": "D_800738C7", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738C7" - }, - { - "type": "extern_variable", - "name": "D_8009D84E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D84E" - }, - { - "type": "extern_variable", - "name": "D_800F5E64", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E64" - }, - { - "type": "extern_variable", - "name": "D_800F5EFC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5EFC" - }, - { - "type": "extern_variable", - "name": "func_800AA574", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AA574" - }, - { - "type": "extern_variable", - "name": "func_800AA688", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AA688" - }, - { - "type": "extern_variable", - "name": "D_80163778", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163778" - }, - { - "type": "extern_variable", - "name": "D_800E7BA4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BA4" - }, - { - "type": "extern_variable", - "name": "D_800E7BA5", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BA5" - }, - { - "type": "extern_variable", - "name": "D_800E7BA6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BA6" - }, - { - "type": "extern_variable", - "name": "D_800F5E74", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E74" - }, - { - "type": "extern_variable", - "name": "D_800F5E76", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E76" - }, - { - "type": "extern_variable", - "name": "D_800730D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730D0" - }, - { - "type": "extern_variable", - "name": "D_800E7BBC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BBC" - }, - { - "type": "extern_variable", - "name": "D_800E7BBD", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BBD" - }, - { - "type": "extern_variable", - "name": "D_8009D86F", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D86F" - }, - { - "type": "extern_variable", - "name": "D_800E7BCC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BCC" - }, - { - "type": "extern_variable", - "name": "D_800E7BFC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BFC" - }, - { - "type": "extern_variable", - "name": "D_800E7BEC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BEC" - }, - { - "type": "extern_variable", - "name": "func_800AF264", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AF264" - }, - { - "type": "extern_variable", - "name": "func_800AF3AC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AF3AC" - }, - { - "type": "extern_variable", - "name": "D_800E7C7C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7C7C" - }, - { - "type": "extern_variable", - "name": "D_800E7CBC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7CBC" - }, - { - "type": "extern_variable", - "name": "D_800E7CDC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7CDC" - }, - { - "type": "extern_variable", - "name": "D_800F4A48", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4A48" - }, - { - "type": "extern_variable", - "name": "D_800F4A70", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4A70" - }, - { - "type": "extern_variable", - "name": "D_800F4A98", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4A98" - }, - { - "type": "extern_variable", - "name": "D_800F49A0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F49A0" - }, - { - "type": "extern_variable", - "name": "D_800F49A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F49A8" - }, - { - "type": "extern_variable", - "name": "D_8009D85C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85C" - }, - { - "type": "extern_variable", - "name": "D_8009D860", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D860" - }, - { - "type": "extern_variable", - "name": "D_8009D868", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D868" - }, - { - "type": "extern_variable", - "name": "D_8009D86A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D86A" - }, - { - "type": "extern_variable", - "name": "D_800F5F01", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5F01" - }, - { - "type": "extern_variable", - "name": "D_800F87F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F87F0" - }, - { - "type": "extern_variable", - "name": "func_800A5250", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800A5250" - } - ], - "timestamp": "2026-04-18T12:35:46.981814" - }, - { - "function_name": "func_800A1158", - "file": "src/battle/battle.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_8009D954", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D954" - }, - { - "type": "extern_variable", - "name": "D_800FA9D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FA9D0" - }, - { - "type": "extern_variable", - "name": "D_800FA9D4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800FA9D4" - }, - { - "type": "extern_variable", - "name": "D_800F9F3C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9F3C" - }, - { - "type": "extern_variable", - "name": "D_800F9F42", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9F42" - }, - { - "type": "extern_variable", - "name": "D_800F9F44", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9F44" - }, - { - "type": "extern_variable", - "name": "D_800F87F4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F87F4" - }, - { - "type": "extern_variable", - "name": "D_800F5E65", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E65" - }, - { - "type": "extern_variable", - "name": "D_800F3A40", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F3A40" - }, - { - "type": "extern_variable", - "name": "D_80071C32", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071C32" - }, - { - "type": "extern_variable", - "name": "D_80071E64", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80071E64" - }, - { - "type": "extern_variable", - "name": "D_800722D6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800722D6" - }, - { - "type": "extern_variable", - "name": "D_800722D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800722D8" - }, - { - "type": "extern_variable", - "name": "D_800738A0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738A0" - }, - { - "type": "extern_variable", - "name": "D_800738CA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738CA" - }, - { - "type": "extern_variable", - "name": "D_801671B8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801671B8" - }, - { - "type": "extern_variable", - "name": "D_801671BA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801671BA" - }, - { - "type": "extern_variable", - "name": "D_801671BC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801671BC" - }, - { - "type": "extern_variable", - "name": "D_8009D866", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D866" - }, - { - "type": "extern_variable", - "name": "D_800F5E68", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E68" - }, - { - "type": "extern_variable", - "name": "D_800F5E6A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E6A" - }, - { - "type": "extern_variable", - "name": "D_800708D1", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708D1" - }, - { - "type": "extern_variable", - "name": "D_8009D85E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85E" - }, - { - "type": "extern_variable", - "name": "D_8009D862", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D862" - }, - { - "type": "extern_variable", - "name": "D_800F5E70", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E70" - }, - { - "type": "extern_variable", - "name": "D_800F5E72", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E72" - }, - { - "type": "extern_variable", - "name": "D_800738A4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738A4" - }, - { - "type": "extern_variable", - "name": "D_800738C7", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800738C7" - }, - { - "type": "extern_variable", - "name": "D_8009D84E", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D84E" - }, - { - "type": "extern_variable", - "name": "D_800F5E64", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E64" - }, - { - "type": "extern_variable", - "name": "D_800F5EFC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5EFC" - }, - { - "type": "extern_variable", - "name": "func_800AA574", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AA574" - }, - { - "type": "extern_variable", - "name": "func_800AA688", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AA688" - }, - { - "type": "extern_variable", - "name": "D_80163778", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163778" - }, - { - "type": "extern_variable", - "name": "D_800E7BA4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BA4" - }, - { - "type": "extern_variable", - "name": "D_800E7BA5", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BA5" - }, - { - "type": "extern_variable", - "name": "D_800E7BA6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BA6" - }, - { - "type": "extern_variable", - "name": "D_800F5E74", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E74" - }, - { - "type": "extern_variable", - "name": "D_800F5E76", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5E76" - }, - { - "type": "extern_variable", - "name": "D_800730D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730D0" - }, - { - "type": "extern_variable", - "name": "D_800E7BBC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BBC" - }, - { - "type": "extern_variable", - "name": "D_800E7BBD", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BBD" - }, - { - "type": "extern_variable", - "name": "D_8009D86F", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D86F" - }, - { - "type": "extern_variable", - "name": "D_800E7BCC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BCC" - }, - { - "type": "extern_variable", - "name": "D_800E7BFC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BFC" - }, - { - "type": "extern_variable", - "name": "D_800E7BEC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7BEC" - }, - { - "type": "extern_variable", - "name": "func_800AF264", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AF264" - }, - { - "type": "extern_variable", - "name": "func_800AF3AC", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800AF3AC" - }, - { - "type": "extern_variable", - "name": "D_800E7C7C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7C7C" - }, - { - "type": "extern_variable", - "name": "D_800E7CBC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7CBC" - }, - { - "type": "extern_variable", - "name": "D_800E7CDC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E7CDC" - }, - { - "type": "extern_variable", - "name": "D_800F4A48", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4A48" - }, - { - "type": "extern_variable", - "name": "D_800F4A70", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4A70" - }, - { - "type": "extern_variable", - "name": "D_800F4A98", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4A98" - }, - { - "type": "extern_variable", - "name": "D_800F49A0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F49A0" - }, - { - "type": "extern_variable", - "name": "D_800F49A8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F49A8" - }, - { - "type": "extern_variable", - "name": "D_8009D85C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D85C" - }, - { - "type": "extern_variable", - "name": "D_8009D860", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D860" - }, - { - "type": "extern_variable", - "name": "D_8009D868", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D868" - }, - { - "type": "extern_variable", - "name": "D_8009D86A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D86A" - }, - { - "type": "extern_variable", - "name": "D_800F5F01", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F5F01" - }, - { - "type": "extern_variable", - "name": "D_800F87F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F87F0" - }, - { - "type": "extern_variable", - "name": "func_800A5250", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800A5250" - } - ], - "timestamp": "2026-04-18T12:35:47.973354" - }, - { - "function_name": "func_80034D18", - "file": "src/main/psxsdk.c", - "primary_error": "PSY-Q compilation failed: invalid type argument of `unary *'", - "missing_items": [], - "timestamp": "2026-04-22T17:10:07.508617" - }, - { - "function_name": "func_800AA0E0", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:10:10.061623" - }, - { - "function_name": "func_800A6884", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:10:12.453021" - }, - { - "function_name": "func_8001AC9C", - "file": "src/main/18B8.c", - "primary_error": "PSY-Q compilation failed: request for member `unk0' in something not a structure or union; request for member `unk1' in something not a structure or union; request for member `unk4' in something not a structure or union", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800730CE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730CE" - }, - { - "type": "extern_variable", - "name": "D_800730D0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730D0" - }, - { - "type": "extern_variable", - "name": "D_800730D6", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730D6" - } - ], - "timestamp": "2026-04-22T17:10:15.211363" - }, - { - "function_name": "func_8002BCCC", - "file": "src/main/akao.c", - "primary_error": "Local variable 'arg0' is void* but used with -> (m2c struct type inference failure)", - "missing_items": [ - { - "type": "void_pointer_struct", - "parameter_name": "arg1", - "accessed_fields": [ - "unk166", - "unk1CE", - "unk1E8", - "unk5E", - "unkC6", - "unkE0" - ], - "suggestion": "Define struct for arg1 with fields: unk166, unk1CE, unk1E8, unk5E, unkC6, unkE0" - } - ], - "timestamp": "2026-04-22T17:10:20.665795" - }, - { - "function_name": "func_8002BFCC", - "file": "src/main/akao.c", - "primary_error": "Local variable 'arg0' is void* but used with -> (m2c struct type inference failure)", - "missing_items": [ - { - "type": "void_pointer_struct", - "parameter_name": "arg1", - "accessed_fields": [ - "unk168", - "unk16A", - "unk1E8", - "unk60", - "unk62", - "unkE0" - ], - "suggestion": "Define struct for arg1 with fields: unk168, unk16A, unk1E8, unk60, unk62, unkE0" - } - ], - "timestamp": "2026-04-22T17:10:23.016527" - }, - { - "function_name": "func_800A92F8", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:10:28.235529" - }, - { - "function_name": "func_800294A4", - "file": "src/main/akao.c", - "primary_error": "Function 'func_800294A4' not found as a definition after decompilation (LLM may have renamed it)", - "missing_items": [], - "timestamp": "2026-04-22T17:10:30.594658" - }, - { - "function_name": "func_800AA32C", - "file": "src/field/field.c", - "primary_error": "Local variable 'var_a0' is void* but used with -> (m2c struct type inference failure)", - "missing_items": [], - "timestamp": "2026-04-22T17:10:33.176556" - }, - { - "function_name": "func_800A8ABC", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:10:35.903269" - }, - { - "function_name": "func_8002BD04", - "file": "src/main/akao.c", - "primary_error": "Local variable 'arg0' is void* but used with -> (m2c struct type inference failure)", - "missing_items": [ - { - "type": "void_pointer_struct", - "parameter_name": "arg1", - "accessed_fields": [ - "unk166", - "unk1CE", - "unk1D0", - "unk5E", - "unkC6", - "unkC8" - ], - "suggestion": "Define struct for arg1 with fields: unk166, unk1CE, unk1D0, unk5E, unkC6, unkC8" - } - ], - "timestamp": "2026-04-22T17:10:40.020054" - }, - { - "function_name": "func_8002C004", - "file": "src/main/akao.c", - "primary_error": "Local variable 'arg0' is void* but used with -> (m2c struct type inference failure)", - "missing_items": [ - { - "type": "void_pointer_struct", - "parameter_name": "arg1", - "accessed_fields": [ - "unk168", - "unk16A", - "unk1D2", - "unk60", - "unk62", - "unkCA" - ], - "suggestion": "Define struct for arg1 with fields: unk168, unk16A, unk1D2, unk60, unk62, unkCA" - } - ], - "timestamp": "2026-04-22T17:10:42.301228" - }, - { - "function_name": "func_800B5DD8", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:10:44.884699" - }, - { - "function_name": "func_8002FDA0", - "file": "src/main/akao.c", - "primary_error": "Local variable 'var_a0' is void* but used with -> (m2c struct type inference failure)", - "missing_items": [], - "timestamp": "2026-04-22T17:10:47.201641" - }, - { - "function_name": "func_80019E4C", - "file": "src/main/18B8.c", - "primary_error": "PSY-Q compilation failed: invalid type argument of `->'; invalid type argument of `->'", - "missing_items": [], - "timestamp": "2026-04-22T17:10:55.144582" - }, - { - "function_name": "func_80018E90", - "file": "src/main/18B8.c", - "primary_error": "Local variable 'temp_v1' is void* but used with -> (m2c struct type inference failure)", - "missing_items": [], - "timestamp": "2026-04-22T17:11:01.209838" - }, - { - "function_name": "func_800A692C", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:11:04.134247" - }, - { - "function_name": "func_800AE024", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:11:06.384239" - }, - { - "function_name": "func_8003345C", - "file": "src/main/akao.c", - "primary_error": "Parameter 'arg0' is void* but accessed as struct (m2c couldn't determine type)", - "missing_items": [ - { - "type": "void_pointer_struct", - "parameter_name": "arg0", - "accessed_fields": [ - "unk0", - "unk4", - "unk56", - "unkC2", - "unkC4" - ], - "suggestion": "Define struct for arg0 with fields: unk0, unk4, unk56, unkC2, unkC4" - } - ], - "timestamp": "2026-04-22T17:11:08.667570" - }, - { - "function_name": "func_800D3474", - "file": "src/battle/battle2.c", - "primary_error": "Contains M2C_ERROR() macro (m2c could not determine register/instruction)", - "missing_items": [], - "timestamp": "2026-04-22T17:11:20.838026" - }, - { - "function_name": "func_80018AB0", - "file": "src/main/18B8.c", - "primary_error": "Local variable 'temp_a2' is void* but used with -> (m2c struct type inference failure)", - "missing_items": [], - "timestamp": "2026-04-22T17:11:21.563068" - }, - { - "function_name": "func_800D3418", - "file": "src/battle/battle2.c", - "primary_error": "Contains M2C_ERROR() macro (m2c could not determine register/instruction)", - "missing_items": [], - "timestamp": "2026-04-22T17:11:22.240422" - }, - { - "function_name": "func_800AB48C", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:11:22.720585" - }, - { - "function_name": "func_800A4F08", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:11:23.201343" - }, - { - "function_name": "ChangeClearSIO", - "file": "src/main/psxsdk.c", - "primary_error": "PSY-Q compilation failed: parse error before `:'", - "missing_items": [], - "timestamp": "2026-04-22T17:11:25.365811" - }, - { - "function_name": "func_80032718", - "file": "src/main/akao.c", - "primary_error": "Parameter 'arg0' is void* but accessed as struct (m2c couldn't determine type)", - "missing_items": [ - { - "type": "void_pointer_struct", - "parameter_name": "arg0", - "accessed_fields": [ - "unk0", - "unk30", - "unk4", - "unk7C", - "unk7E" - ], - "suggestion": "Define struct for arg0 with fields: unk0, unk30, unk4, unk7C, unk7E" - } - ], - "timestamp": "2026-04-22T17:11:25.832218" - }, - { - "function_name": "func_800A993C", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:11:26.271987" - }, - { - "function_name": "func_800A63FC", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:11:26.733929" - }, - { - "function_name": "func_800D32B4", - "file": "src/battle/battle2.c", - "primary_error": "Function 'func_800D32B4' not found as a definition after decompilation (LLM may have renamed it)", - "missing_items": [], - "timestamp": "2026-04-22T17:11:27.391780" - }, - { - "function_name": "func_800D8304", - "file": "src/battle/battle2.c", - "primary_error": "Function 'func_800D8304' not found as a definition after decompilation (LLM may have renamed it)", - "missing_items": [], - "timestamp": "2026-04-22T17:11:29.490271" - }, - { - "function_name": "func_800B2638", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:11:29.950810" - }, - { - "function_name": "func_800D8468", - "file": "src/battle/battle2.c", - "primary_error": "Local variable 'arg0' is void* but used with -> (m2c struct type inference failure)", - "missing_items": [ - { - "type": "void_pointer_struct", - "parameter_name": "arg1", - "accessed_fields": [ - "unk0", - "unk10", - "unk14", - "unk18", - "unk1C", - "unk2", - "unk4", - "unk6", - "unk8", - "unkA", - "unkC", - "unkE" - ], - "suggestion": "Define struct for arg1 with fields: unk0, unk10, unk14, unk18, unk1C, unk2, unk4, unk6, unk8, unkA..." - } - ], - "timestamp": "2026-04-22T17:11:30.671107" - }, - { - "function_name": "func_800D3354", - "file": "src/battle/battle2.c", - "primary_error": "Function 'func_800D3354' not found as a definition after decompilation (LLM may have renamed it)", - "missing_items": [], - "timestamp": "2026-04-22T17:11:32.006894" - }, - { - "function_name": "func_800D83A4", - "file": "src/battle/battle2.c", - "primary_error": "Function 'func_800D83A4' not found as a definition after decompilation (LLM may have renamed it)", - "missing_items": [], - "timestamp": "2026-04-22T17:11:37.239744" - }, - { - "function_name": "func_80031BE4", - "file": "src/main/akao.c", - "primary_error": "Local variable 'temp_a0' is void* but used with -> (m2c struct type inference failure)", - "missing_items": [ - { - "type": "void_pointer_struct", - "parameter_name": "arg1", - "accessed_fields": [ - "unk40", - "unk44", - "unk50" - ], - "suggestion": "Define struct for arg1 with fields: unk40, unk44, unk50" - } - ], - "timestamp": "2026-04-22T17:11:37.685361" - }, - { - "function_name": "__SN_ENTRY_POINT", - "file": "src/main/18B8.c", - "primary_error": "Function '__SN_ENTRY_POINT' not found as a definition after decompilation (LLM may have renamed it)", - "missing_items": [], - "timestamp": "2026-04-22T17:11:38.335041" - }, - { - "function_name": "func_800A5C08", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:11:38.935685" - }, - { - "function_name": "func_8001BA54", - "file": "src/main/18B8.c", - "primary_error": "Local variable 'var_a0' is void* but used with -> (m2c struct type inference failure)", - "missing_items": [], - "timestamp": "2026-04-22T17:11:39.773964" - }, - { - "function_name": "func_800C46A4", - "file": "src/field/field.c", - "primary_error": "Local variable 'var_v0' is a primitive pointer but used with ->unk (m2c struct type inference failure)", - "missing_items": [], - "timestamp": "2026-04-22T17:11:41.931522" - }, - { - "function_name": "func_800D6260", - "file": "src/battle/battle2.c", - "primary_error": "Local variable 'arg0' is void* but used with -> (m2c struct type inference failure)", - "missing_items": [], - "timestamp": "2026-04-22T17:11:42.754437" - }, - { - "function_name": "func_800A91A4", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:11:43.409092" - }, - { - "function_name": "func_800AA098", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:11:47.571592" - }, - { - "function_name": "func_800A98E4", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:11:48.257178" - }, - { - "function_name": "func_800DA444", - "file": "src/field/field.c", - "primary_error": "Parameter 'arg1' is void* but accessed as struct (m2c couldn't determine type)", - "missing_items": [ - { - "type": "void_pointer_struct", - "parameter_name": "arg1", - "accessed_fields": [ - "unk0", - "unk1", - "unk2" - ], - "suggestion": "Define struct for arg1 with fields: unk0, unk1, unk2" - }, - { - "type": "extern_variable", - "name": "D_800E0208", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0208" - } - ], - "timestamp": "2026-04-22T17:11:49.627432" - }, - { - "function_name": "func_800A6B8C", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:11:52.465326" - }, - { - "function_name": "func_800C4C9C", - "file": "src/field/field.c", - "primary_error": "Local variable 'temp_a0' is void* but used with -> (m2c struct type inference failure)", - "missing_items": [], - "timestamp": "2026-04-22T17:11:52.855310" - }, - { - "function_name": "func_800A2088", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:11:53.371059" - }, - { - "function_name": "func_800B7714", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:11:53.881178" - }, - { - "function_name": "func_800B79B8", - "file": "src/world/world.c", - "primary_error": "Function 'func_800B79B8' not found as a definition after decompilation (LLM may have renamed it)", - "missing_items": [], - "timestamp": "2026-04-22T17:11:55.690395" - }, - { - "function_name": "func_800A45D4", - "file": "src/world/world.c", - "primary_error": "Function 'func_800A45D4' not found as a definition after decompilation (LLM may have renamed it)", - "missing_items": [], - "timestamp": "2026-04-22T17:11:56.029319" - }, - { - "function_name": "func_800AA170", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:11:57.210798" - }, - { - "function_name": "func_800A9480", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:11:57.671571" - }, - { - "function_name": "func_800D5774", - "file": "src/battle/battle2.c", - "primary_error": "PSY-Q compilation failed: invalid use of void expression", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800F4CEC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4CEC" - }, - { - "type": "extern_variable", - "name": "D_800F4D2C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4D2C" - } - ], - "timestamp": "2026-04-22T17:12:00.363594" - }, - { - "function_name": "func_800BBA0C", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:00.828475" - }, - { - "function_name": "func_800AA238", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:01.289212" - }, - { - "function_name": "func_80034D2C", - "file": "src/main/psxsdk.c", - "primary_error": "Contains pointer to unknown type '?*'", - "missing_items": [ - { - "type": "extern_variable", - "name": "func_80034E00", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80034E00" - }, - { - "type": "unknown_pointer", - "name": "jtbl_80034D14", - "suggestion": "m2c could not determine type of pointer jtbl_80034D14" - } - ], - "timestamp": "2026-04-22T17:12:01.832148" - }, - { - "function_name": "func_800A1D54", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:02.290977" - }, - { - "function_name": "func_800A8C70", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:04.152673" - }, - { - "function_name": "func_800A9A70", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:04.620708" - }, - { - "function_name": "func_800A9AD0", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:05.067791" - }, - { - "function_name": "func_800BCECC", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:05.511909" - }, - { - "function_name": "func_800ADC70", - "file": "src/world/world.c", - "primary_error": "Function 'func_800ADC70' not found as a definition after decompilation (LLM may have renamed it)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:08.449609" - }, - { - "function_name": "func_800A97A8", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:11.946205" - }, - { - "function_name": "func_800AF1A8", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:12.417376" - }, - { - "function_name": "func_800B57C0", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:12.870573" - }, - { - "function_name": "func_800B2FD0", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:13.320703" - }, - { - "function_name": "func_800A9134", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:15.098406" - }, - { - "function_name": "func_800B579C", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:15.556007" - }, - { - "function_name": "func_800B7838", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:16.005715" - }, - { - "function_name": "func_80034D5C", - "file": "src/main/psxsdk.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "func_80034E00", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80034E00" - }, - { - "type": "unknown_pointer", - "name": "jtbl_80034D14", - "suggestion": "m2c could not determine type of pointer jtbl_80034D14" - }, - { - "type": "unknown_pointer", - "name": "jtbl_80034D14", - "suggestion": "m2c could not determine type of pointer jtbl_80034D14" - } - ], - "timestamp": "2026-04-22T17:12:16.508190" - }, - { - "function_name": "func_800185A8", - "file": "src/main/18B8.c", - "primary_error": "PSY-Q compilation failed: invalid type argument of `->'; invalid type argument of `->'; invalid type argument of `->'", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80069554", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" - }, - { - "type": "extern_variable", - "name": "D_80069558", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" - }, - { - "type": "extern_variable", - "name": "D_80082274", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082274" - }, - { - "type": "extern_variable", - "name": "D_800696F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" - }, - { - "type": "extern_variable", - "name": "D_80062E53", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80062E53" - } - ], - "timestamp": "2026-04-22T17:12:17.327423" - }, - { - "function_name": "func_800B7B54", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:19.403584" - }, - { - "function_name": "func_800B7B78", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:20.709281" - }, - { - "function_name": "func_800B77F4", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:21.251433" - }, - { - "function_name": "func_800AA1B8", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:21.852420" - }, - { - "function_name": "func_800A94F4", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:23.911474" - }, - { - "function_name": "func_800A9820", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:24.406804" - }, - { - "function_name": "func_800AA04C", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:24.926149" - }, - { - "function_name": "func_800AA2B8", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:25.386418" - }, - { - "function_name": "func_800AA6A4", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:25.845587" - }, - { - "function_name": "func_800AB36C", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:27.630681" - }, - { - "function_name": "func_800A8F48", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:28.077400" - }, - { - "function_name": "func_800A984C", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:28.528166" - }, - { - "function_name": "func_800ADC3C", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:28.984812" - }, - { - "function_name": "func_800A16E0", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:31.763478" - }, - { - "function_name": "func_800A5970", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:32.328594" - }, - { - "function_name": "func_800BB8B0", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:32.769343" - }, - { - "function_name": "func_800A8A88", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:33.988387" - }, - { - "function_name": "func_800AFDE4", - "file": "src/field/field.c", - "primary_error": "Local variable 'var_v1' is a primitive pointer but used with ->unk (m2c struct type inference failure)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:35.976922" - }, - { - "function_name": "func_800B01C4", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:36.420620" - }, - { - "function_name": "func_800B8A5C", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:36.939799" - }, - { - "function_name": "func_800B7BD8", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:37.396788" - }, - { - "function_name": "func_800A97E4", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:37.870768" - }, - { - "function_name": "func_800BB9D0", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:39.451380" - }, - { - "function_name": "func_800AF2A4", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:39.902632" - }, - { - "function_name": "func_800AF324", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:40.358773" - }, - { - "function_name": "func_800AF364", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:40.798540" - }, - { - "function_name": "func_800A8CA4", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:47.428542" - }, - { - "function_name": "func_800B017C", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:47.982327" - }, - { - "function_name": "func_800A5A94", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:50.905700" - }, - { - "function_name": "func_800AA128", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:51.561709" - }, - { - "function_name": "func_800DA480", - "file": "src/field/field.c", - "primary_error": "Parameter 'arg1' is void* but accessed as struct (m2c couldn't determine type)", - "missing_items": [ - { - "type": "void_pointer_struct", - "parameter_name": "arg1", - "accessed_fields": [ - "unk0", - "unk1", - "unk2", - "unk3", - "unk4" - ], - "suggestion": "Define struct for arg1 with fields: unk0, unk1, unk2, unk3, unk4" - }, - { - "type": "extern_variable", - "name": "D_800E08C0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08C0" - }, - { - "type": "extern_variable", - "name": "D_800E0208", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0208" - } - ], - "timestamp": "2026-04-22T17:12:52.013393" - }, - { - "function_name": "func_80026B70", - "file": "src/main/18B8.c", - "primary_error": "Function 'func_80026B70' not found as a definition after decompilation (LLM may have renamed it)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80069554", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" - }, - { - "type": "extern_variable", - "name": "D_80069558", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" - }, - { - "type": "extern_variable", - "name": "D_80082274", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082274" - }, - { - "type": "extern_variable", - "name": "D_800696F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" - }, - { - "type": "extern_variable", - "name": "D_80069800", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069800" - }, - { - "type": "extern_variable", - "name": "D_8009D890", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D890" - }, - { - "type": "extern_variable", - "name": "D_8009D894", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" - } - ], - "timestamp": "2026-04-22T17:12:52.710270" - }, - { - "function_name": "func_800A40F0", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:53.261643" - }, - { - "function_name": "func_800AD928", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:55.209177" - }, - { - "function_name": "func_800B37E0", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:55.735399" - }, - { - "function_name": "func_80034DB0", - "file": "src/main/psxsdk.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "func_80034E00", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80034E00" - }, - { - "type": "unknown_pointer", - "name": "jtbl_80034D14", - "suggestion": "m2c could not determine type of pointer jtbl_80034D14" - }, - { - "type": "unknown_pointer", - "name": "jtbl_80034D14", - "suggestion": "m2c could not determine type of pointer jtbl_80034D14" - } - ], - "timestamp": "2026-04-22T17:12:56.268641" - }, - { - "function_name": "func_800B3300", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:56.800595" - }, - { - "function_name": "func_800ADE30", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:57.253579" - }, - { - "function_name": "func_800AA684", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:12:58.805942" - }, - { - "function_name": "func_800B8D20", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:13:00.084334" - }, - { - "function_name": "func_800AF24C", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:13:00.884449" - }, - { - "function_name": "func_800A9988", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:13:03.799160" - }, - { - "function_name": "func_800A2420", - "file": "src/ending/ending.c", - "primary_error": "Local variable 'D_80075D00' is void* but used with -> (m2c struct type inference failure)", - "missing_items": [], - "timestamp": "2026-04-22T17:13:04.241332" - }, - { - "function_name": "func_800D51D4", - "file": "src/battle/battle2.c", - "primary_error": "PSY-Q compilation failed: request for member `unkC' in something not a structure or union; request for member `unk4' in something not a structure or union", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800F4CEC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4CEC" - }, - { - "type": "extern_variable", - "name": "D_800F4D2C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4D2C" - } - ], - "timestamp": "2026-04-22T17:13:05.167743" - }, - { - "function_name": "func_800A8300", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:13:05.663291" - }, - { - "function_name": "func_800AF1E8", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:13:06.113053" - }, - { - "function_name": "func_800AA688", - "file": "src/battle/battle.c", - "primary_error": "PSY-Q compilation failed: invalid operands to binary &", - "missing_items": [], - "timestamp": "2026-04-22T17:13:07.818379" - }, - { - "function_name": "func_80032E6C", - "file": "src/main/akao.c", - "primary_error": "Parameter 'arg0' is void* but accessed as struct (m2c couldn't determine type)", - "missing_items": [ - { - "type": "void_pointer_struct", - "parameter_name": "arg0", - "accessed_fields": [ - "unk0", - "unk24", - "unk38", - "unk4", - "unkE0", - "unkFC" - ], - "suggestion": "Define struct for arg0 with fields: unk0, unk24, unk38, unk4, unkE0, unkFC" - }, - { - "type": "extern_variable", - "name": "D_80096704", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80096704" - } - ], - "timestamp": "2026-04-22T17:13:08.399644" - }, - { - "function_name": "func_800B338C", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:13:09.085526" - }, - { - "function_name": "func_8001937C", - "file": "src/main/18B8.c", - "primary_error": "PSY-Q compilation failed: request for member `unk38' in something not a structure or union; request for member `unk38' in something not a structure or union; request for member `unk38' in something not a structure or union", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80069554", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" - }, - { - "type": "extern_variable", - "name": "D_80069558", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" - }, - { - "type": "extern_variable", - "name": "D_80082274", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082274" - }, - { - "type": "extern_variable", - "name": "D_800696F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" - }, - { - "type": "extern_variable", - "name": "D_80069800", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069800" - }, - { - "type": "extern_variable", - "name": "D_8009D890", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D890" - }, - { - "type": "extern_variable", - "name": "D_8009D894", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" - }, - { - "type": "extern_variable", - "name": "D_800730DE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800730DE" - } - ], - "timestamp": "2026-04-22T17:13:10.032318" - }, - { - "function_name": "func_800A91E0", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:13:10.572215" - }, - { - "function_name": "func_80025040", - "file": "src/main/18B8.c", - "primary_error": "PSY-Q compilation failed: incompatible types in assignment", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80069554", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" - }, - { - "type": "extern_variable", - "name": "D_80069558", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" - }, - { - "type": "extern_variable", - "name": "D_80082274", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082274" - }, - { - "type": "extern_variable", - "name": "D_800696F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" - }, - { - "type": "extern_variable", - "name": "D_80069800", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069800" - }, - { - "type": "extern_variable", - "name": "D_8009D890", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D890" - }, - { - "type": "extern_variable", - "name": "D_8009D894", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" - } - ], - "timestamp": "2026-04-22T17:13:13.054198" - }, - { - "function_name": "func_800D09D0", - "file": "src/battle/battle2.c", - "primary_error": "PSY-Q compilation failed: invalid type argument of `->'; invalid type argument of `->'", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800F4CEC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4CEC" - }, - { - "type": "extern_variable", - "name": "D_800F4D2C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4D2C" - }, - { - "type": "extern_variable", - "name": "D_800F8384", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F8384" - }, - { - "type": "extern_variable", - "name": "D_800F9984", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9984" - }, - { - "type": "extern_variable", - "name": "D_801679BC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801679BC" - } - ], - "timestamp": "2026-04-22T17:13:13.937253" - }, - { - "function_name": "func_800B6E08", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:13:14.453028" - }, - { - "function_name": "func_800D0958", - "file": "src/battle/battle2.c", - "primary_error": "PSY-Q compilation failed: invalid type argument of `->'; invalid type argument of `->'", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800F4CEC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4CEC" - }, - { - "type": "extern_variable", - "name": "D_800F4D2C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4D2C" - }, - { - "type": "extern_variable", - "name": "D_800F8384", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F8384" - }, - { - "type": "extern_variable", - "name": "D_800F9984", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F9984" - }, - { - "type": "extern_variable", - "name": "D_801679BC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801679BC" - } - ], - "timestamp": "2026-04-22T17:13:15.354672" - }, - { - "function_name": "func_800A5A20", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:13:17.179054" - }, - { - "function_name": "func_800B1C1C", - "file": "src/battle/battle.c", - "primary_error": "PSY-Q compilation failed: invalid type argument of `->'", - "missing_items": [], - "timestamp": "2026-04-22T17:13:18.111941" - }, - { - "function_name": "func_800A59A0", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:13:18.686867" - }, - { - "function_name": "func_800A8898", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:13:22.157131" - }, - { - "function_name": "func_800AA7DC", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:13:22.708483" - }, - { - "function_name": "func_800B5AAC", - "file": "src/battle/battle1.c", - "primary_error": "PSY-Q compilation failed: incompatible types in assignment", - "missing_items": [], - "timestamp": "2026-04-22T17:13:24.666443" - }, - { - "function_name": "func_800A0B48", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:13:25.287943" - }, - { - "function_name": "func_800B392C", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:13:25.828275" - }, - { - "function_name": "func_800B8CBC", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:13:26.361933" - }, - { - "function_name": "func_800A60D8", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:13:26.841492" - }, - { - "function_name": "func_800B8A98", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:13:28.253474" - }, - { - "function_name": "func_800A9064", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:13:28.700332" - }, - { - "function_name": "func_80036100", - "file": "src/main/psxsdk.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "func_80034E00", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80034E00" - }, - { - "type": "unknown_pointer", - "name": "jtbl_80034D14", - "suggestion": "m2c could not determine type of pointer jtbl_80034D14" - }, - { - "type": "unknown_pointer", - "name": "jtbl_80034D14", - "suggestion": "m2c could not determine type of pointer jtbl_80034D14" - } - ], - "timestamp": "2026-04-22T17:13:29.197159" - }, - { - "function_name": "func_8001BB30", - "file": "src/main/18B8.c", - "primary_error": "PSY-Q compilation failed: invalid type argument of `->'; invalid type argument of `->'; invalid type argument of `->'", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80069554", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" - }, - { - "type": "extern_variable", - "name": "D_80069558", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" - }, - { - "type": "extern_variable", - "name": "D_80082274", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082274" - }, - { - "type": "extern_variable", - "name": "D_800696F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" - }, - { - "type": "extern_variable", - "name": "D_80069800", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069800" - }, - { - "type": "extern_variable", - "name": "D_8009D890", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D890" - }, - { - "type": "extern_variable", - "name": "D_8009D894", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" - }, - { - "type": "extern_variable", - "name": "D_80069508", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069508" - }, - { - "type": "extern_variable", - "name": "D_80069509", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069509" - }, - { - "type": "extern_variable", - "name": "D_8006950A", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8006950A" - }, - { - "type": "extern_variable", - "name": "D_800707C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800707C4" - }, - { - "type": "extern_variable", - "name": "D_800707C5", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800707C5" - } - ], - "timestamp": "2026-04-22T17:13:36.641058" - }, - { - "function_name": "func_800D5230", - "file": "src/battle/battle2.c", - "primary_error": "PSY-Q compilation failed: structure has no member named `unk4'; structure has no member named `unk4'", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800F4CEC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4CEC" - }, - { - "type": "extern_variable", - "name": "D_800F4D2C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4D2C" - } - ], - "timestamp": "2026-04-22T17:13:37.752414" - }, - { - "function_name": "func_800150E4", - "file": "src/main/18B8.c", - "primary_error": "Local variable 'temp_a3' is void* but used with -> (m2c struct type inference failure)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80069554", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" - }, - { - "type": "extern_variable", - "name": "D_80069558", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" - }, - { - "type": "extern_variable", - "name": "D_80082274", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082274" - }, - { - "type": "extern_variable", - "name": "D_800696F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" - }, - { - "type": "extern_variable", - "name": "D_80069800", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069800" - }, - { - "type": "extern_variable", - "name": "D_8009D890", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D890" - }, - { - "type": "extern_variable", - "name": "D_8009D894", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" - }, - { - "type": "extern_variable", - "name": "D_80063560", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80063560" - }, - { - "type": "unknown_pointer", - "name": "var_a3", - "suggestion": "m2c could not determine type of pointer var_a3" - } - ], - "timestamp": "2026-04-22T17:13:39.762930" - }, - { - "function_name": "func_8002C6C8", - "file": "src/main/akao.c", - "primary_error": "Parameter 'arg0' is void* but accessed as struct (m2c couldn't determine type)", - "missing_items": [ - { - "type": "void_pointer_struct", - "parameter_name": "arg0", - "accessed_fields": [ - "unk4", - "unk8" - ], - "suggestion": "Define struct for arg0 with fields: unk4, unk8" - } - ], - "timestamp": "2026-04-22T17:13:42.949673" - }, - { - "function_name": "func_800B667C", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:13:43.529968" - }, - { - "function_name": "func_800B089C", - "file": "src/battle/battle.c", - "primary_error": "PSY-Q compilation failed: conflicting types for `func_800B089C'; previous declaration of `func_800B089C'", - "missing_items": [], - "timestamp": "2026-04-22T17:13:44.493092" - }, - { - "function_name": "func_800C2130", - "file": "src/world/world2.c", - "primary_error": "Local variable 'arg0' is void* but used with -> (m2c struct type inference failure)", - "missing_items": [ - { - "type": "void_pointer_struct", - "parameter_name": "arg0", - "accessed_fields": [ - "unk0", - "unk3", - "unk4", - "unk6", - "unk8", - "unkC" - ], - "suggestion": "Define struct for arg0 with fields: unk0, unk3, unk4, unk6, unk8, unkC" - } - ], - "timestamp": "2026-04-22T17:13:46.211066" - }, - { - "function_name": "func_800A52A4", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:13:48.192298" - }, - { - "function_name": "func_800B1624", - "file": "src/battle/battle.c", - "primary_error": "PSY-Q compilation failed: request for member `unk8' in something not a structure or union; request for member `unk8' in something not a structure or union; request for member `unk7C' in something not a structure or union", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800708C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708C4" - } - ], - "timestamp": "2026-04-22T17:13:49.221770" - }, - { - "function_name": "func_800BCA78", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:13:49.860631" - }, - { - "function_name": "func_800BCB2C", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:13:50.497585" - }, - { - "function_name": "func_800B17F0", - "file": "src/battle/battle.c", - "primary_error": "PSY-Q compilation failed: request for member `unk8' in something not a structure or union; request for member `unk8' in something not a structure or union; request for member `unk7C' in something not a structure or union", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800708C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708C4" - } - ], - "timestamp": "2026-04-22T17:13:51.482364" - }, - { - "function_name": "func_800B1C94", - "file": "src/battle/battle.c", - "primary_error": "PSY-Q compilation failed: invalid type argument of `->'; invalid type argument of `->'; invalid type argument of `->'", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800708C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708C4" - } - ], - "timestamp": "2026-04-22T17:13:53.747430" - }, - { - "function_name": "func_800A3210", - "file": "src/ending/ending.c", - "primary_error": "Local variable 'var_s0' is void* but used with -> (m2c struct type inference failure)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800A652C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A652C" - } - ], - "timestamp": "2026-04-22T17:13:57.258014" - }, - { - "function_name": "func_800A31F8", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:13:57.876954" - }, - { - "function_name": "func_801D01C4", - "file": "src/menu/bginmenu.c", - "primary_error": "PSY-Q compilation failed: invalid operands to binary +; invalid operands to binary +", - "missing_items": [], - "timestamp": "2026-04-22T17:13:58.641832" - }, - { - "function_name": "func_800ADA64", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:13:59.273763" - }, - { - "function_name": "func_800B89C4", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:14:01.040210" - }, - { - "function_name": "func_800BB568", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:14:02.863796" - }, - { - "function_name": "func_800B1B64", - "file": "src/battle/battle.c", - "primary_error": "PSY-Q compilation failed: request for member `unkC' in something not a structure or union; request for member `unk2C' in something not a structure or union; request for member `unk54' in something not a structure or union", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800708C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708C4" - } - ], - "timestamp": "2026-04-22T17:14:03.914334" - }, - { - "function_name": "func_800AB5E4", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:14:04.614855" - }, - { - "function_name": "func_800BB350", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:14:08.439015" - }, - { - "function_name": "func_800A44C4", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:14:09.013480" - }, - { - "function_name": "func_800B1AA0", - "file": "src/battle/battle.c", - "primary_error": "PSY-Q compilation failed: request for member `unkC' in something not a structure or union; request for member `unk2C' in something not a structure or union; request for member `unk54' in something not a structure or union", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800708C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708C4" - } - ], - "timestamp": "2026-04-22T17:14:09.977621" - }, - { - "function_name": "func_800BB450", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:14:10.746061" - }, - { - "function_name": "func_800A4DDC", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:14:12.927959" - }, - { - "function_name": "func_8001FCDC", - "file": "src/main/18B8.c", - "primary_error": "Function 'func_8001FCDC' not found as a definition after decompilation (LLM may have renamed it)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80069554", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" - }, - { - "type": "extern_variable", - "name": "D_80069558", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" - }, - { - "type": "extern_variable", - "name": "D_80082274", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082274" - }, - { - "type": "extern_variable", - "name": "D_800696F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" - }, - { - "type": "extern_variable", - "name": "D_80069800", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069800" - }, - { - "type": "extern_variable", - "name": "D_8009D890", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D890" - }, - { - "type": "extern_variable", - "name": "D_8009D894", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" - } - ], - "timestamp": "2026-04-22T17:14:14.845145" - }, - { - "function_name": "func_800AF874", - "file": "src/battle/battle.c", - "primary_error": "PSY-Q compilation failed: invalid operands to binary &", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800708C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708C4" - } - ], - "timestamp": "2026-04-22T17:14:16.031592" - }, - { - "function_name": "func_800BC04C", - "file": "src/battle/battle1.c", - "primary_error": "PSY-Q compilation failed: conflicting types for `func_800BC04C'; previous declaration of `func_800BC04C'; void value not ignored as it ought to be", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80163B84", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80163B84" - } - ], - "timestamp": "2026-04-22T17:14:19.519193" - }, - { - "function_name": "func_800A9520", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:14:20.266536" - }, - { - "function_name": "func_8002DA7C", - "file": "src/main/akao.c", - "primary_error": "Local variable 'temp_s0' is void* but used with -> (m2c struct type inference failure)", - "missing_items": [], - "timestamp": "2026-04-22T17:14:21.279726" - }, - { - "function_name": "func_800C64D4", - "file": "src/battle/battle1.c", - "primary_error": "PSY-Q compilation failed: invalid operands to binary ==", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80151780", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151780" - } - ], - "timestamp": "2026-04-22T17:14:22.526904" - }, - { - "function_name": "func_800A9B04", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:14:23.429855" - }, - { - "function_name": "func_800C6628", - "file": "src/battle/battle1.c", - "primary_error": "PSY-Q compilation failed: invalid operands to binary ==", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80151780", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151780" - } - ], - "timestamp": "2026-04-22T17:14:25.964958" - }, - { - "function_name": "func_800AE0BC", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:14:26.731458" - }, - { - "function_name": "func_800A4430", - "file": "src/field/field.c", - "primary_error": "PSY-Q compilation failed: default label not within a switch statement", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800E08C0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08C0" - } - ], - "timestamp": "2026-04-22T17:14:28.497203" - }, - { - "function_name": "func_800318BC", - "file": "src/main/akao.c", - "primary_error": "Function 'func_800318BC' not found as a definition after decompilation (LLM may have renamed it)", - "missing_items": [], - "timestamp": "2026-04-22T17:14:29.035390" - }, - { - "function_name": "func_800D415C", - "file": "src/battle/battle2.c", - "primary_error": "Local variable 'arg1' is void* but used with -> (m2c struct type inference failure)", - "missing_items": [ - { - "type": "void_pointer_struct", - "parameter_name": "arg1", - "accessed_fields": [ - "unk0", - "unk4" - ], - "suggestion": "Define struct for arg1 with fields: unk0, unk4" - }, - { - "type": "extern_variable", - "name": "D_800F4CEC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4CEC" - }, - { - "type": "extern_variable", - "name": "D_800F4D2C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4D2C" - }, - { - "type": "unaligned_cast", - "cast_type": "s32", - "suggestion": "Unaligned access to s32 - may need struct packing or alignment fix" - } - ], - "timestamp": "2026-04-22T17:14:34.187436" - }, - { - "function_name": "func_80036298", - "file": "src/main/psxsdk.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "func_80034E00", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80034E00" - }, - { - "type": "unknown_pointer", - "name": "jtbl_80034D14", - "suggestion": "m2c could not determine type of pointer jtbl_80034D14" - }, - { - "type": "unknown_pointer", - "name": "jtbl_80034D14", - "suggestion": "m2c could not determine type of pointer jtbl_80034D14" - } - ], - "timestamp": "2026-04-22T17:14:34.860742" - }, - { - "function_name": "func_800D61AC", - "file": "src/battle/battle2.c", - "primary_error": "Contains unknown parameter type '?'", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800F4CEC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4CEC" - }, - { - "type": "extern_variable", - "name": "D_800F4D2C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4D2C" - } - ], - "timestamp": "2026-04-22T17:14:35.856396" - }, - { - "function_name": "func_800293F4", - "file": "src/main/akao.c", - "primary_error": "Contains function declaration with unknown return type '?'", - "missing_items": [ - { - "type": "extern_function", - "name": "SpuSetTransferCallback", - "return_type": "unknown", - "parameters": "?*", - "suggestion": "Define proper signature for SpuSetTransferCallback in header" - }, - { - "type": "extern_variable", - "name": "func_800293D0", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800293D0" - } - ], - "timestamp": "2026-04-22T17:14:36.560832" - }, - { - "function_name": "func_80015668", - "file": "src/main/18B8.c", - "primary_error": "Contains pointer to unknown type '?*'", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80069554", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" - }, - { - "type": "extern_variable", - "name": "D_80069558", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" - }, - { - "type": "extern_variable", - "name": "D_80082274", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082274" - }, - { - "type": "extern_variable", - "name": "D_800696F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" - }, - { - "type": "extern_variable", - "name": "D_80069800", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069800" - }, - { - "type": "extern_variable", - "name": "D_8009D890", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D890" - }, - { - "type": "extern_variable", - "name": "D_8009D894", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" - }, - { - "type": "extern_variable", - "name": "D_80075D24", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D24" - }, - { - "type": "extern_variable", - "name": "D_80075D28", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D28" - }, - { - "type": "extern_variable", - "name": "D_80075DE8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075DE8" - }, - { - "type": "extern_variable", - "name": "D_8009D7E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E4" - }, - { - "type": "extern_variable", - "name": "D_8009D7E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E8" - }, - { - "type": "extern_variable", - "name": "D_8009D7EC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7EC" - }, - { - "type": "extern_variable", - "name": "D_8009D7ED", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7ED" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - } - ], - "timestamp": "2026-04-22T17:14:37.695173" - }, - { - "function_name": "func_80029464", - "file": "src/main/akao.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "SpuSetTransferCallback", - "return_type": "unknown", - "parameters": "?*", - "suggestion": "Define proper signature for SpuSetTransferCallback in header" - }, - { - "type": "extern_variable", - "name": "func_800293D0", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800293D0" - } - ], - "timestamp": "2026-04-22T17:14:39.425155" - }, - { - "function_name": "func_80016340", - "file": "src/main/18B8.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80069554", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" - }, - { - "type": "extern_variable", - "name": "D_80069558", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" - }, - { - "type": "extern_variable", - "name": "D_80082274", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082274" - }, - { - "type": "extern_variable", - "name": "D_800696F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" - }, - { - "type": "extern_variable", - "name": "D_80069800", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069800" - }, - { - "type": "extern_variable", - "name": "D_8009D890", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D890" - }, - { - "type": "extern_variable", - "name": "D_8009D894", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" - }, - { - "type": "extern_variable", - "name": "D_80075D24", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D24" - }, - { - "type": "extern_variable", - "name": "D_80075D28", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D28" - }, - { - "type": "extern_variable", - "name": "D_80075DE8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075DE8" - }, - { - "type": "extern_variable", - "name": "D_8009D7E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E4" - }, - { - "type": "extern_variable", - "name": "D_8009D7E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E8" - }, - { - "type": "extern_variable", - "name": "D_8009D7EC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7EC" - }, - { - "type": "extern_variable", - "name": "D_8009D7ED", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7ED" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - } - ], - "timestamp": "2026-04-22T17:14:40.211257" - }, - { - "function_name": "func_800A3908", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:14:41.053918" - }, - { - "function_name": "func_800B86E8", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:14:41.818840" - }, - { - "function_name": "func_800293D0", - "file": "src/main/akao.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "SpuSetTransferCallback", - "return_type": "unknown", - "parameters": "?*", - "suggestion": "Define proper signature for SpuSetTransferCallback in header" - }, - { - "type": "extern_variable", - "name": "func_800293D0", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800293D0" - } - ], - "timestamp": "2026-04-22T17:14:42.461138" - }, - { - "function_name": "func_8001C0EC", - "file": "src/main/18B8.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80069554", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" - }, - { - "type": "extern_variable", - "name": "D_80069558", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" - }, - { - "type": "extern_variable", - "name": "D_80082274", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082274" - }, - { - "type": "extern_variable", - "name": "D_800696F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" - }, - { - "type": "extern_variable", - "name": "D_80069800", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069800" - }, - { - "type": "extern_variable", - "name": "D_8009D890", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D890" - }, - { - "type": "extern_variable", - "name": "D_8009D894", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" - }, - { - "type": "extern_variable", - "name": "D_80075D24", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D24" - }, - { - "type": "extern_variable", - "name": "D_80075D28", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D28" - }, - { - "type": "extern_variable", - "name": "D_80075DE8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075DE8" - }, - { - "type": "extern_variable", - "name": "D_8009D7E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E4" - }, - { - "type": "extern_variable", - "name": "D_8009D7E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E8" - }, - { - "type": "extern_variable", - "name": "D_8009D7EC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7EC" - }, - { - "type": "extern_variable", - "name": "D_8009D7ED", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7ED" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - } - ], - "timestamp": "2026-04-22T17:14:44.432773" - }, - { - "function_name": "func_8001AEE4", - "file": "src/main/18B8.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80069554", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" - }, - { - "type": "extern_variable", - "name": "D_80069558", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" - }, - { - "type": "extern_variable", - "name": "D_80082274", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082274" - }, - { - "type": "extern_variable", - "name": "D_800696F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" - }, - { - "type": "extern_variable", - "name": "D_80069800", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069800" - }, - { - "type": "extern_variable", - "name": "D_8009D890", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D890" - }, - { - "type": "extern_variable", - "name": "D_8009D894", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" - }, - { - "type": "extern_variable", - "name": "D_80075D24", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D24" - }, - { - "type": "extern_variable", - "name": "D_80075D28", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D28" - }, - { - "type": "extern_variable", - "name": "D_80075DE8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075DE8" - }, - { - "type": "extern_variable", - "name": "D_8009D7E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E4" - }, - { - "type": "extern_variable", - "name": "D_8009D7E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E8" - }, - { - "type": "extern_variable", - "name": "D_8009D7EC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7EC" - }, - { - "type": "extern_variable", - "name": "D_8009D7ED", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7ED" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - } - ], - "timestamp": "2026-04-22T17:14:45.348952" - }, - { - "function_name": "func_800AE180", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:14:46.089750" - }, - { - "function_name": "func_800AB728", - "file": "src/field/field.c", - "primary_error": "Contains pointer to unknown type '?*'", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800E08C0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08C0" - }, - { - "type": "extern_variable", - "name": "D_80074EB0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB0" - }, - { - "type": "extern_variable", - "name": "D_80074EB4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB4" - }, - { - "type": "extern_variable", - "name": "D_80074EB8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB8" - }, - { - "type": "extern_variable", - "name": "D_800E0638", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0638" - }, - { - "type": "extern_variable", - "name": "D_800E42D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42D8" - }, - { - "type": "extern_variable", - "name": "D_800E42DA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DA" - }, - { - "type": "extern_variable", - "name": "D_800E42DC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DC" - }, - { - "type": "extern_variable", - "name": "D_800E42E0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E0" - }, - { - "type": "extern_variable", - "name": "D_800E42E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E4" - }, - { - "type": "extern_variable", - "name": "D_800E42E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E8" - }, - { - "type": "extern_variable", - "name": "D_800E42EA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EA" - }, - { - "type": "extern_variable", - "name": "D_800E42EE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EE" - }, - { - "type": "extern_variable", - "name": "D_800E48E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48E8" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - } - ], - "timestamp": "2026-04-22T17:14:46.871473" - }, - { - "function_name": "func_800A2888", - "file": "src/ending/ending.c", - "primary_error": "Contains function declaration with unknown return type '?'", - "missing_items": [ - { - "type": "extern_function", - "name": "GetTPage", - "return_type": "s16", - "parameters": "s32, ?, s16, s16", - "suggestion": "Define proper signature for GetTPage in header" - }, - { - "type": "extern_function", - "name": "LoadImage", - "return_type": "unknown", - "parameters": "void*, s32", - "suggestion": "Define proper signature for LoadImage in header" - }, - { - "type": "extern_function", - "name": "OpenTIM", - "return_type": "unknown", - "parameters": "", - "suggestion": "Define proper signature for OpenTIM in header" - }, - { - "type": "extern_function", - "name": "ReadTIM", - "return_type": "unknown", - "parameters": "s32*", - "suggestion": "Define proper signature for ReadTIM in header" - }, - { - "type": "extern_variable", - "name": "D_800A652C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A652C" - } - ], - "timestamp": "2026-04-22T17:14:47.547113" - }, - { - "function_name": "func_800AEB80", - "file": "src/battle/battle.c", - "primary_error": "Contains unknown parameter type '?'", - "missing_items": [ - { - "type": "extern_function", - "name": "func_800AF834", - "return_type": "s32", - "parameters": "?", - "suggestion": "Define proper signature for func_800AF834 in header" - }, - { - "type": "extern_variable", - "name": "D_800708C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708C4" - } - ], - "timestamp": "2026-04-22T17:14:49.848033" - }, - { - "function_name": "func_800D3A6C", - "file": "src/battle/battle2.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800F4CEC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4CEC" - }, - { - "type": "extern_variable", - "name": "D_800F4D2C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4D2C" - } - ], - "timestamp": "2026-04-22T17:14:50.664772" - }, - { - "function_name": "func_800A66A4", - "file": "src/battle/battle.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "func_800AF834", - "return_type": "s32", - "parameters": "?", - "suggestion": "Define proper signature for func_800AF834 in header" - }, - { - "type": "extern_variable", - "name": "D_800708C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708C4" - } - ], - "timestamp": "2026-04-22T17:14:51.597592" - }, - { - "function_name": "func_800D41FC", - "file": "src/battle/battle2.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800F4CEC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4CEC" - }, - { - "type": "extern_variable", - "name": "D_800F4D2C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4D2C" - } - ], - "timestamp": "2026-04-22T17:14:52.465177" - }, - { - "function_name": "func_800D491C", - "file": "src/battle/battle2.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800F4CEC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4CEC" - }, - { - "type": "extern_variable", - "name": "D_800F4D2C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4D2C" - } - ], - "timestamp": "2026-04-22T17:14:53.364866" - }, - { - "function_name": "func_800E1C40", - "file": "src/battle/battle3.c", - "primary_error": "PSY-Q compilation failed: request for member `unk0' in something not a structure or union; request for member `unk2' in something not a structure or union; request for member `unk0' in something not a structure or union", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800F32C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F32C4" - }, - { - "type": "extern_variable", - "name": "D_801031F4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801031F4" - }, - { - "type": "extern_variable", - "name": "D_80151688", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80151688" - }, - { - "type": "extern_variable", - "name": "D_801516A4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801516A4" - }, - { - "type": "extern_variable", - "name": "D_801516CC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801516CC" - }, - { - "type": "extern_variable", - "name": "D_8015174C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8015174C" - }, - { - "type": "extern_variable", - "name": "D_8015178C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8015178C" - }, - { - "type": "extern_variable", - "name": "D_801517C8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_801517C8" - }, - { - "type": "extern_variable", - "name": "D_8015187C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8015187C" - } - ], - "timestamp": "2026-04-22T17:14:55.993682" - }, - { - "function_name": "func_800C1490", - "file": "src/world/world2.c", - "primary_error": "Local variable 'arg0' is void* but used with -> (m2c struct type inference failure)", - "missing_items": [ - { - "type": "void_pointer_struct", - "parameter_name": "arg1", - "accessed_fields": [ - "unk0", - "unk10", - "unk14", - "unk18", - "unk1C", - "unk4", - "unk8", - "unkC" - ], - "suggestion": "Define struct for arg1 with fields: unk0, unk10, unk14, unk18, unk1C, unk4, unk8, unkC" - }, - { - "type": "extern_variable", - "name": "D_800C7538", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800C7538" - } - ], - "timestamp": "2026-04-22T17:14:56.966711" - }, - { - "function_name": "func_800BCBE8", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:14:57.551583" - }, - { - "function_name": "func_800BBBB0", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:14:58.133190" - }, - { - "function_name": "func_800A2E80", - "file": "src/ending/ending.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "GetTPage", - "return_type": "s16", - "parameters": "s32, ?, s16, s16", - "suggestion": "Define proper signature for GetTPage in header" - }, - { - "type": "extern_function", - "name": "LoadImage", - "return_type": "unknown", - "parameters": "void*, s32", - "suggestion": "Define proper signature for LoadImage in header" - }, - { - "type": "extern_function", - "name": "OpenTIM", - "return_type": "unknown", - "parameters": "", - "suggestion": "Define proper signature for OpenTIM in header" - }, - { - "type": "extern_function", - "name": "ReadTIM", - "return_type": "unknown", - "parameters": "s32*", - "suggestion": "Define proper signature for ReadTIM in header" - }, - { - "type": "extern_variable", - "name": "D_800A652C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A652C" - } - ], - "timestamp": "2026-04-22T17:14:58.635553" - }, - { - "function_name": "func_800C3948", - "file": "src/world/world2.c", - "primary_error": "Local variable 'arg0' is void* but used with -> (m2c struct type inference failure)", - "missing_items": [ - { - "type": "void_pointer_struct", - "parameter_name": "arg0", - "accessed_fields": [ - "unk18", - "unk4", - "unk8", - "unkE" - ], - "suggestion": "Define struct for arg0 with fields: unk18, unk4, unk8, unkE" - }, - { - "type": "extern_variable", - "name": "D_800C7938", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800C7938" - } - ], - "timestamp": "2026-04-22T17:15:00.718376" - }, - { - "function_name": "func_800B11C4", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:15:01.275555" - }, - { - "function_name": "func_800C6104", - "file": "src/world/world2.c", - "primary_error": "Contains M2C_ERROR() macro (m2c could not determine register/instruction)", - "missing_items": [ - { - "type": "void_pointer_struct", - "parameter_name": "arg0", - "accessed_fields": [ - "unk16", - "unk1C", - "unk4", - "unk8" - ], - "suggestion": "Define struct for arg0 with fields: unk16, unk1C, unk4, unk8" - }, - { - "type": "extern_variable", - "name": "D_800C7938", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800C7938" - } - ], - "timestamp": "2026-04-22T17:15:02.099765" - }, - { - "function_name": "func_800ABF0C", - "file": "src/field/field.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800E08C0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08C0" - }, - { - "type": "extern_variable", - "name": "D_80074EB0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB0" - }, - { - "type": "extern_variable", - "name": "D_80074EB4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB4" - }, - { - "type": "extern_variable", - "name": "D_80074EB8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB8" - }, - { - "type": "extern_variable", - "name": "D_800E0638", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0638" - }, - { - "type": "extern_variable", - "name": "D_800E42D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42D8" - }, - { - "type": "extern_variable", - "name": "D_800E42DA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DA" - }, - { - "type": "extern_variable", - "name": "D_800E42DC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DC" - }, - { - "type": "extern_variable", - "name": "D_800E42E0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E0" - }, - { - "type": "extern_variable", - "name": "D_800E42E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E4" - }, - { - "type": "extern_variable", - "name": "D_800E42E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E8" - }, - { - "type": "extern_variable", - "name": "D_800E42EA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EA" - }, - { - "type": "extern_variable", - "name": "D_800E42EE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EE" - }, - { - "type": "extern_variable", - "name": "D_800E48E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48E8" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - } - ], - "timestamp": "2026-04-22T17:15:02.590484" - }, - { - "function_name": "func_800A0C54", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:15:03.159265" - }, - { - "function_name": "func_800D84F8", - "file": "src/battle/battle2.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800F4CEC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4CEC" - }, - { - "type": "extern_variable", - "name": "D_800F4D2C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4D2C" - } - ], - "timestamp": "2026-04-22T17:15:07.452522" - }, - { - "function_name": "func_800B153C", - "file": "src/battle/battle.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "func_800AF834", - "return_type": "s32", - "parameters": "?", - "suggestion": "Define proper signature for func_800AF834 in header" - }, - { - "type": "extern_variable", - "name": "D_800708C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708C4" - } - ], - "timestamp": "2026-04-22T17:15:08.106521" - }, - { - "function_name": "func_800B58F8", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:15:08.815420" - }, - { - "function_name": "func_800B0F04", - "file": "src/battle/battle.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "func_800AF834", - "return_type": "s32", - "parameters": "?", - "suggestion": "Define proper signature for func_800AF834 in header" - }, - { - "type": "extern_variable", - "name": "D_800708C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708C4" - } - ], - "timestamp": "2026-04-22T17:15:09.584482" - }, - { - "function_name": "func_8002E23C", - "file": "src/main/akao.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "SpuSetTransferCallback", - "return_type": "unknown", - "parameters": "?*", - "suggestion": "Define proper signature for SpuSetTransferCallback in header" - }, - { - "type": "extern_variable", - "name": "func_800293D0", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800293D0" - } - ], - "timestamp": "2026-04-22T17:15:10.174490" - }, - { - "function_name": "func_80034CAC", - "file": "src/main/psxsdk.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "func_80034E00", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80034E00" - }, - { - "type": "unknown_pointer", - "name": "jtbl_80034D14", - "suggestion": "m2c could not determine type of pointer jtbl_80034D14" - }, - { - "type": "unknown_pointer", - "name": "jtbl_80034D14", - "suggestion": "m2c could not determine type of pointer jtbl_80034D14" - } - ], - "timestamp": "2026-04-22T17:15:11.711588" - }, - { - "function_name": "func_800C1394", - "file": "src/battle/battle1.c", - "primary_error": "Contains '?' type in cast expression (m2c type inference failure)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800EA470", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800EA470" - } - ], - "timestamp": "2026-04-22T17:15:12.716351" - }, - { - "function_name": "func_800AF3AC", - "file": "src/battle/battle.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "func_800AF834", - "return_type": "s32", - "parameters": "?", - "suggestion": "Define proper signature for func_800AF834 in header" - }, - { - "type": "extern_variable", - "name": "D_800708C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708C4" - } - ], - "timestamp": "2026-04-22T17:15:13.450974" - }, - { - "function_name": "func_8001FA28", - "file": "src/main/18B8.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80069554", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" - }, - { - "type": "extern_variable", - "name": "D_80069558", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" - }, - { - "type": "extern_variable", - "name": "D_80082274", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082274" - }, - { - "type": "extern_variable", - "name": "D_800696F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" - }, - { - "type": "extern_variable", - "name": "D_80069800", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069800" - }, - { - "type": "extern_variable", - "name": "D_8009D890", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D890" - }, - { - "type": "extern_variable", - "name": "D_8009D894", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" - }, - { - "type": "extern_variable", - "name": "D_80075D24", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D24" - }, - { - "type": "extern_variable", - "name": "D_80075D28", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D28" - }, - { - "type": "extern_variable", - "name": "D_80075DE8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075DE8" - }, - { - "type": "extern_variable", - "name": "D_8009D7E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E4" - }, - { - "type": "extern_variable", - "name": "D_8009D7E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E8" - }, - { - "type": "extern_variable", - "name": "D_8009D7EC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7EC" - }, - { - "type": "extern_variable", - "name": "D_8009D7ED", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7ED" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - } - ], - "timestamp": "2026-04-22T17:15:14.161587" - }, - { - "function_name": "func_800A1498", - "file": "src/field/field.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800E08C0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08C0" - }, - { - "type": "extern_variable", - "name": "D_80074EB0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB0" - }, - { - "type": "extern_variable", - "name": "D_80074EB4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB4" - }, - { - "type": "extern_variable", - "name": "D_80074EB8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB8" - }, - { - "type": "extern_variable", - "name": "D_800E0638", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0638" - }, - { - "type": "extern_variable", - "name": "D_800E42D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42D8" - }, - { - "type": "extern_variable", - "name": "D_800E42DA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DA" - }, - { - "type": "extern_variable", - "name": "D_800E42DC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DC" - }, - { - "type": "extern_variable", - "name": "D_800E42E0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E0" - }, - { - "type": "extern_variable", - "name": "D_800E42E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E4" - }, - { - "type": "extern_variable", - "name": "D_800E42E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E8" - }, - { - "type": "extern_variable", - "name": "D_800E42EA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EA" - }, - { - "type": "extern_variable", - "name": "D_800E42EE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EE" - }, - { - "type": "extern_variable", - "name": "D_800E48E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48E8" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - } - ], - "timestamp": "2026-04-22T17:15:14.746489" - }, - { - "function_name": "func_800C3DE4", - "file": "src/battle/battle1.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800EA470", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800EA470" - } - ], - "timestamp": "2026-04-22T17:15:16.455460" - }, - { - "function_name": "func_800DA124", - "file": "src/field/field.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800E08C0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08C0" - }, - { - "type": "extern_variable", - "name": "D_80074EB0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB0" - }, - { - "type": "extern_variable", - "name": "D_80074EB4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB4" - }, - { - "type": "extern_variable", - "name": "D_80074EB8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB8" - }, - { - "type": "extern_variable", - "name": "D_800E0638", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0638" - }, - { - "type": "extern_variable", - "name": "D_800E42D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42D8" - }, - { - "type": "extern_variable", - "name": "D_800E42DA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DA" - }, - { - "type": "extern_variable", - "name": "D_800E42DC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DC" - }, - { - "type": "extern_variable", - "name": "D_800E42E0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E0" - }, - { - "type": "extern_variable", - "name": "D_800E42E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E4" - }, - { - "type": "extern_variable", - "name": "D_800E42E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E8" - }, - { - "type": "extern_variable", - "name": "D_800E42EA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EA" - }, - { - "type": "extern_variable", - "name": "D_800E42EE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EE" - }, - { - "type": "extern_variable", - "name": "D_800E48E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48E8" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - } - ], - "timestamp": "2026-04-22T17:15:17.051887" - }, - { - "function_name": "func_8001FA68", - "file": "src/main/18B8.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80069554", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" - }, - { - "type": "extern_variable", - "name": "D_80069558", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" - }, - { - "type": "extern_variable", - "name": "D_80082274", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082274" - }, - { - "type": "extern_variable", - "name": "D_800696F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" - }, - { - "type": "extern_variable", - "name": "D_80069800", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069800" - }, - { - "type": "extern_variable", - "name": "D_8009D890", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D890" - }, - { - "type": "extern_variable", - "name": "D_8009D894", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" - }, - { - "type": "extern_variable", - "name": "D_80075D24", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D24" - }, - { - "type": "extern_variable", - "name": "D_80075D28", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D28" - }, - { - "type": "extern_variable", - "name": "D_80075DE8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075DE8" - }, - { - "type": "extern_variable", - "name": "D_8009D7E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E4" - }, - { - "type": "extern_variable", - "name": "D_8009D7E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E8" - }, - { - "type": "extern_variable", - "name": "D_8009D7EC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7EC" - }, - { - "type": "extern_variable", - "name": "D_8009D7ED", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7ED" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - } - ], - "timestamp": "2026-04-22T17:15:17.797559" - }, - { - "function_name": "func_800A1FAC", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:15:18.450330" - }, - { - "function_name": "func_80024A04", - "file": "src/main/18B8.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80069554", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" - }, - { - "type": "extern_variable", - "name": "D_80069558", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" - }, - { - "type": "extern_variable", - "name": "D_80082274", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082274" - }, - { - "type": "extern_variable", - "name": "D_800696F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" - }, - { - "type": "extern_variable", - "name": "D_80069800", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069800" - }, - { - "type": "extern_variable", - "name": "D_8009D890", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D890" - }, - { - "type": "extern_variable", - "name": "D_8009D894", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" - }, - { - "type": "extern_variable", - "name": "D_80075D24", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D24" - }, - { - "type": "extern_variable", - "name": "D_80075D28", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D28" - }, - { - "type": "extern_variable", - "name": "D_80075DE8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075DE8" - }, - { - "type": "extern_variable", - "name": "D_8009D7E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E4" - }, - { - "type": "extern_variable", - "name": "D_8009D7E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E8" - }, - { - "type": "extern_variable", - "name": "D_8009D7EC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7EC" - }, - { - "type": "extern_variable", - "name": "D_8009D7ED", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7ED" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - } - ], - "timestamp": "2026-04-22T17:15:19.213706" - }, - { - "function_name": "func_800D70C0", - "file": "src/battle/battle2.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800F4CEC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4CEC" - }, - { - "type": "extern_variable", - "name": "D_800F4D2C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4D2C" - } - ], - "timestamp": "2026-04-22T17:15:20.807011" - }, - { - "function_name": "func_8001FAAC", - "file": "src/main/18B8.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80069554", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" - }, - { - "type": "extern_variable", - "name": "D_80069558", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" - }, - { - "type": "extern_variable", - "name": "D_80082274", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082274" - }, - { - "type": "extern_variable", - "name": "D_800696F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" - }, - { - "type": "extern_variable", - "name": "D_80069800", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069800" - }, - { - "type": "extern_variable", - "name": "D_8009D890", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D890" - }, - { - "type": "extern_variable", - "name": "D_8009D894", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" - }, - { - "type": "extern_variable", - "name": "D_80075D24", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D24" - }, - { - "type": "extern_variable", - "name": "D_80075D28", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D28" - }, - { - "type": "extern_variable", - "name": "D_80075DE8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075DE8" - }, - { - "type": "extern_variable", - "name": "D_8009D7E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E4" - }, - { - "type": "extern_variable", - "name": "D_8009D7E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E8" - }, - { - "type": "extern_variable", - "name": "D_8009D7EC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7EC" - }, - { - "type": "extern_variable", - "name": "D_8009D7ED", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7ED" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - } - ], - "timestamp": "2026-04-22T17:15:21.578912" - }, - { - "function_name": "func_800D87EC", - "file": "src/battle/battle2.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800F4CEC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4CEC" - }, - { - "type": "extern_variable", - "name": "D_800F4D2C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4D2C" - } - ], - "timestamp": "2026-04-22T17:15:22.330238" - }, - { - "function_name": "func_800BC9E8", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:15:22.984514" - }, - { - "function_name": "func_800A38C8", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:15:23.705258" - }, - { - "function_name": "func_8002E428", - "file": "src/main/akao.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "SpuSetTransferCallback", - "return_type": "unknown", - "parameters": "?*", - "suggestion": "Define proper signature for SpuSetTransferCallback in header" - }, - { - "type": "extern_variable", - "name": "func_800293D0", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800293D0" - } - ], - "timestamp": "2026-04-22T17:15:25.083785" - }, - { - "function_name": "func_80015D64", - "file": "src/main/18B8.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80069554", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" - }, - { - "type": "extern_variable", - "name": "D_80069558", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" - }, - { - "type": "extern_variable", - "name": "D_80082274", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082274" - }, - { - "type": "extern_variable", - "name": "D_800696F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" - }, - { - "type": "extern_variable", - "name": "D_80069800", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069800" - }, - { - "type": "extern_variable", - "name": "D_8009D890", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D890" - }, - { - "type": "extern_variable", - "name": "D_8009D894", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" - }, - { - "type": "extern_variable", - "name": "D_80075D24", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D24" - }, - { - "type": "extern_variable", - "name": "D_80075D28", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D28" - }, - { - "type": "extern_variable", - "name": "D_80075DE8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075DE8" - }, - { - "type": "extern_variable", - "name": "D_8009D7E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E4" - }, - { - "type": "extern_variable", - "name": "D_8009D7E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E8" - }, - { - "type": "extern_variable", - "name": "D_8009D7EC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7EC" - }, - { - "type": "extern_variable", - "name": "D_8009D7ED", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7ED" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - } - ], - "timestamp": "2026-04-22T17:15:25.830896" - }, - { - "function_name": "func_800B64A0", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:15:26.502785" - }, - { - "function_name": "func_800B7134", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:15:27.179141" - }, - { - "function_name": "func_800B7C1C", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:15:27.875563" - }, - { - "function_name": "func_800B64D8", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:15:29.297553" - }, - { - "function_name": "func_800BC11C", - "file": "src/battle/battle1.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800EA470", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800EA470" - } - ], - "timestamp": "2026-04-22T17:15:30.132136" - }, - { - "function_name": "func_800A2040", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:15:30.988745" - }, - { - "function_name": "func_800A4080", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:15:31.654429" - }, - { - "function_name": "func_800AE5B8", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:15:32.338389" - }, - { - "function_name": "func_800AE5F0", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:15:33.525781" - }, - { - "function_name": "func_800B65A4", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:15:34.153134" - }, - { - "function_name": "func_800B0098", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:15:34.794727" - }, - { - "function_name": "func_800345BC", - "file": "src/main/psxsdk.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "func_80034E00", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80034E00" - }, - { - "type": "unknown_pointer", - "name": "jtbl_80034D14", - "suggestion": "m2c could not determine type of pointer jtbl_80034D14" - }, - { - "type": "unknown_pointer", - "name": "jtbl_80034D14", - "suggestion": "m2c could not determine type of pointer jtbl_80034D14" - } - ], - "timestamp": "2026-04-22T17:15:35.427497" - }, - { - "function_name": "func_800D5B6C", - "file": "src/battle/battle2.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800F4CEC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4CEC" - }, - { - "type": "extern_variable", - "name": "D_800F4D2C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4D2C" - } - ], - "timestamp": "2026-04-22T17:15:36.047232" - }, - { - "function_name": "func_80032CE8", - "file": "src/main/akao.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "SpuSetTransferCallback", - "return_type": "unknown", - "parameters": "?*", - "suggestion": "Define proper signature for SpuSetTransferCallback in header" - }, - { - "type": "extern_variable", - "name": "func_800293D0", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800293D0" - } - ], - "timestamp": "2026-04-22T17:15:37.127385" - }, - { - "function_name": "func_800BBF7C", - "file": "src/battle/battle1.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800EA470", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800EA470" - } - ], - "timestamp": "2026-04-22T17:15:37.791572" - }, - { - "function_name": "func_80032C20", - "file": "src/main/akao.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "SpuSetTransferCallback", - "return_type": "unknown", - "parameters": "?*", - "suggestion": "Define proper signature for SpuSetTransferCallback in header" - }, - { - "type": "extern_variable", - "name": "func_800293D0", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800293D0" - } - ], - "timestamp": "2026-04-22T17:15:38.281645" - }, - { - "function_name": "func_800A1F48", - "file": "src/ending/ending.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "GetTPage", - "return_type": "s16", - "parameters": "s32, ?, s16, s16", - "suggestion": "Define proper signature for GetTPage in header" - }, - { - "type": "extern_function", - "name": "LoadImage", - "return_type": "unknown", - "parameters": "void*, s32", - "suggestion": "Define proper signature for LoadImage in header" - }, - { - "type": "extern_function", - "name": "OpenTIM", - "return_type": "unknown", - "parameters": "", - "suggestion": "Define proper signature for OpenTIM in header" - }, - { - "type": "extern_function", - "name": "ReadTIM", - "return_type": "unknown", - "parameters": "s32*", - "suggestion": "Define proper signature for ReadTIM in header" - }, - { - "type": "extern_variable", - "name": "D_800A652C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A652C" - } - ], - "timestamp": "2026-04-22T17:15:38.743594" - }, - { - "function_name": "func_800A5924", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:15:39.338547" - }, - { - "function_name": "func_800A6C04", - "file": "src/battle/battle.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "func_800AF834", - "return_type": "s32", - "parameters": "?", - "suggestion": "Define proper signature for func_800AF834 in header" - }, - { - "type": "extern_variable", - "name": "D_800708C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708C4" - } - ], - "timestamp": "2026-04-22T17:15:43.452324" - }, - { - "function_name": "func_80032B30", - "file": "src/main/akao.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "SpuSetTransferCallback", - "return_type": "unknown", - "parameters": "?*", - "suggestion": "Define proper signature for SpuSetTransferCallback in header" - }, - { - "type": "extern_variable", - "name": "func_800293D0", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800293D0" - } - ], - "timestamp": "2026-04-22T17:15:44.043291" - }, - { - "function_name": "func_800A4350", - "file": "src/battle/battle.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "func_800AF834", - "return_type": "s32", - "parameters": "?", - "suggestion": "Define proper signature for func_800AF834 in header" - }, - { - "type": "extern_variable", - "name": "D_800708C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708C4" - } - ], - "timestamp": "2026-04-22T17:15:44.770016" - }, - { - "function_name": "func_801D027C", - "file": "src/menu/bginmenu.c", - "primary_error": "PSY-Q compilation failed: aggregate value used where an integer was expected; incompatible types in assignment", - "missing_items": [], - "timestamp": "2026-04-22T17:15:52.499429" - }, - { - "function_name": "func_800AC6B4", - "file": "src/battle/battle.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "func_800AF834", - "return_type": "s32", - "parameters": "?", - "suggestion": "Define proper signature for func_800AF834 in header" - }, - { - "type": "extern_variable", - "name": "D_800708C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708C4" - } - ], - "timestamp": "2026-04-22T17:15:53.345055" - }, - { - "function_name": "func_800D3548", - "file": "src/battle/battle2.c", - "primary_error": "Function 'func_800D3548' not found as a definition after decompilation (LLM may have renamed it)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800F4CEC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4CEC" - }, - { - "type": "extern_variable", - "name": "D_800F4D2C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4D2C" - } - ], - "timestamp": "2026-04-22T17:15:53.969203" - }, - { - "function_name": "func_800AA468", - "file": "src/battle/battle.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "func_800AF834", - "return_type": "s32", - "parameters": "?", - "suggestion": "Define proper signature for func_800AF834 in header" - }, - { - "type": "extern_variable", - "name": "D_800708C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708C4" - } - ], - "timestamp": "2026-04-22T17:15:55.506469" - }, - { - "function_name": "func_80018ECC", - "file": "src/main/18B8.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80069554", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" - }, - { - "type": "extern_variable", - "name": "D_80069558", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" - }, - { - "type": "extern_variable", - "name": "D_80082274", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082274" - }, - { - "type": "extern_variable", - "name": "D_800696F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" - }, - { - "type": "extern_variable", - "name": "D_80069800", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069800" - }, - { - "type": "extern_variable", - "name": "D_8009D890", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D890" - }, - { - "type": "extern_variable", - "name": "D_8009D894", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" - }, - { - "type": "extern_variable", - "name": "D_80075D24", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D24" - }, - { - "type": "extern_variable", - "name": "D_80075D28", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D28" - }, - { - "type": "extern_variable", - "name": "D_80075DE8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075DE8" - }, - { - "type": "extern_variable", - "name": "D_8009D7E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E4" - }, - { - "type": "extern_variable", - "name": "D_8009D7E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E8" - }, - { - "type": "extern_variable", - "name": "D_8009D7EC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7EC" - }, - { - "type": "extern_variable", - "name": "D_8009D7ED", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7ED" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - } - ], - "timestamp": "2026-04-22T17:15:56.341360" - }, - { - "function_name": "func_800AFFBC", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:15:57.064089" - }, - { - "function_name": "func_800A5AD8", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:15:58.342316" - }, - { - "function_name": "func_800AB788", - "file": "src/battle/battle.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "func_800AF834", - "return_type": "s32", - "parameters": "?", - "suggestion": "Define proper signature for func_800AF834 in header" - }, - { - "type": "extern_variable", - "name": "D_800708C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708C4" - } - ], - "timestamp": "2026-04-22T17:15:59.099299" - }, - { - "function_name": "func_800A0000", - "file": "src/brom/brom.c", - "primary_error": "Function 'func_800A0000' not found as a definition after decompilation (LLM may have renamed it)", - "missing_items": [], - "timestamp": "2026-04-22T17:15:59.598073" - }, - { - "function_name": "func_800D4284", - "file": "src/battle/battle2.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800F4CEC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4CEC" - }, - { - "type": "extern_variable", - "name": "D_800F4D2C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4D2C" - } - ], - "timestamp": "2026-04-22T17:16:01.439941" - }, - { - "function_name": "func_800BA938", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:16:02.223447" - }, - { - "function_name": "func_800B69A4", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:16:02.977668" - }, - { - "function_name": "func_800C0254", - "file": "src/battle/battle1.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800EA470", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800EA470" - } - ], - "timestamp": "2026-04-22T17:16:04.604914" - }, - { - "function_name": "func_800ADF38", - "file": "src/battle/battle.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "func_800AF834", - "return_type": "s32", - "parameters": "?", - "suggestion": "Define proper signature for func_800AF834 in header" - }, - { - "type": "extern_variable", - "name": "D_800708C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708C4" - } - ], - "timestamp": "2026-04-22T17:16:05.497319" - }, - { - "function_name": "func_800A4138", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:16:06.304538" - }, - { - "function_name": "func_800BFCAC", - "file": "src/world/world2.c", - "primary_error": "Function 'func_800BFCAC' not found as a definition after decompilation (LLM may have renamed it)", - "missing_items": [], - "timestamp": "2026-04-22T17:16:07.832292" - }, - { - "function_name": "func_80035430", - "file": "src/main/psxsdk.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "func_80034E00", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80034E00" - }, - { - "type": "unknown_pointer", - "name": "jtbl_80034D14", - "suggestion": "m2c could not determine type of pointer jtbl_80034D14" - }, - { - "type": "unknown_pointer", - "name": "jtbl_80034D14", - "suggestion": "m2c could not determine type of pointer jtbl_80034D14" - } - ], - "timestamp": "2026-04-22T17:16:08.509173" - }, - { - "function_name": "func_80028E00", - "file": "src/main/18B8.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80069554", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" - }, - { - "type": "extern_variable", - "name": "D_80069558", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" - }, - { - "type": "extern_variable", - "name": "D_80082274", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082274" - }, - { - "type": "extern_variable", - "name": "D_800696F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" - }, - { - "type": "extern_variable", - "name": "D_80069800", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069800" - }, - { - "type": "extern_variable", - "name": "D_8009D890", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D890" - }, - { - "type": "extern_variable", - "name": "D_8009D894", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" - }, - { - "type": "extern_variable", - "name": "D_80075D24", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D24" - }, - { - "type": "extern_variable", - "name": "D_80075D28", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D28" - }, - { - "type": "extern_variable", - "name": "D_80075DE8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075DE8" - }, - { - "type": "extern_variable", - "name": "D_8009D7E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E4" - }, - { - "type": "extern_variable", - "name": "D_8009D7E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E8" - }, - { - "type": "extern_variable", - "name": "D_8009D7EC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7EC" - }, - { - "type": "extern_variable", - "name": "D_8009D7ED", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7ED" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - } - ], - "timestamp": "2026-04-22T17:16:09.276629" - }, - { - "function_name": "func_80025174", - "file": "src/main/18B8.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80069554", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" - }, - { - "type": "extern_variable", - "name": "D_80069558", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" - }, - { - "type": "extern_variable", - "name": "D_80082274", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082274" - }, - { - "type": "extern_variable", - "name": "D_800696F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" - }, - { - "type": "extern_variable", - "name": "D_80069800", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069800" - }, - { - "type": "extern_variable", - "name": "D_8009D890", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D890" - }, - { - "type": "extern_variable", - "name": "D_8009D894", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" - }, - { - "type": "extern_variable", - "name": "D_80075D24", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D24" - }, - { - "type": "extern_variable", - "name": "D_80075D28", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D28" - }, - { - "type": "extern_variable", - "name": "D_80075DE8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075DE8" - }, - { - "type": "extern_variable", - "name": "D_8009D7E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E4" - }, - { - "type": "extern_variable", - "name": "D_8009D7E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E8" - }, - { - "type": "extern_variable", - "name": "D_8009D7EC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7EC" - }, - { - "type": "extern_variable", - "name": "D_8009D7ED", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7ED" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - } - ], - "timestamp": "2026-04-22T17:16:10.647432" - }, - { - "function_name": "func_8002D410", - "file": "src/main/akao.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "SpuSetTransferCallback", - "return_type": "unknown", - "parameters": "?*", - "suggestion": "Define proper signature for SpuSetTransferCallback in header" - }, - { - "type": "extern_variable", - "name": "func_800293D0", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800293D0" - } - ], - "timestamp": "2026-04-22T17:16:11.239960" - }, - { - "function_name": "func_8002D4A0", - "file": "src/main/akao.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "SpuSetTransferCallback", - "return_type": "unknown", - "parameters": "?*", - "suggestion": "Define proper signature for SpuSetTransferCallback in header" - }, - { - "type": "extern_variable", - "name": "func_800293D0", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800293D0" - } - ], - "timestamp": "2026-04-22T17:16:11.781677" - }, - { - "function_name": "func_800A7F38", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:16:12.976177" - }, - { - "function_name": "func_8002BB20", - "file": "src/main/akao.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "SpuSetTransferCallback", - "return_type": "unknown", - "parameters": "?*", - "suggestion": "Define proper signature for SpuSetTransferCallback in header" - }, - { - "type": "extern_variable", - "name": "func_800293D0", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800293D0" - } - ], - "timestamp": "2026-04-22T17:16:13.547791" - }, - { - "function_name": "func_800AC3C0", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:16:14.186809" - }, - { - "function_name": "func_800AE4B8", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:16:18.360585" - }, - { - "function_name": "func_80036190", - "file": "src/main/psxsdk.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "func_80034E00", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80034E00" - }, - { - "type": "unknown_pointer", - "name": "jtbl_80034D14", - "suggestion": "m2c could not determine type of pointer jtbl_80034D14" - }, - { - "type": "unknown_pointer", - "name": "jtbl_80034D14", - "suggestion": "m2c could not determine type of pointer jtbl_80034D14" - } - ], - "timestamp": "2026-04-22T17:16:19.042381" - }, - { - "function_name": "func_800A76CC", - "file": "src/battle/battle.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "func_800AF834", - "return_type": "s32", - "parameters": "?", - "suggestion": "Define proper signature for func_800AF834 in header" - }, - { - "type": "extern_variable", - "name": "D_800708C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708C4" - } - ], - "timestamp": "2026-04-22T17:16:19.892623" - }, - { - "function_name": "func_80017678", - "file": "src/main/18B8.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80069554", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" - }, - { - "type": "extern_variable", - "name": "D_80069558", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" - }, - { - "type": "extern_variable", - "name": "D_80082274", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082274" - }, - { - "type": "extern_variable", - "name": "D_800696F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" - }, - { - "type": "extern_variable", - "name": "D_80069800", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069800" - }, - { - "type": "extern_variable", - "name": "D_8009D890", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D890" - }, - { - "type": "extern_variable", - "name": "D_8009D894", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" - }, - { - "type": "extern_variable", - "name": "D_80075D24", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D24" - }, - { - "type": "extern_variable", - "name": "D_80075D28", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D28" - }, - { - "type": "extern_variable", - "name": "D_80075DE8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075DE8" - }, - { - "type": "extern_variable", - "name": "D_8009D7E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E4" - }, - { - "type": "extern_variable", - "name": "D_8009D7E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E8" - }, - { - "type": "extern_variable", - "name": "D_8009D7EC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7EC" - }, - { - "type": "extern_variable", - "name": "D_8009D7ED", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7ED" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - } - ], - "timestamp": "2026-04-22T17:16:21.170274" - }, - { - "function_name": "func_800C02F4", - "file": "src/world/world2.c", - "primary_error": "Function 'func_800C02F4' not found as a definition after decompilation (LLM may have renamed it)", - "missing_items": [], - "timestamp": "2026-04-22T17:16:21.917621" - }, - { - "function_name": "func_80036038", - "file": "src/main/psxsdk.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "func_80034E00", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80034E00" - }, - { - "type": "unknown_pointer", - "name": "jtbl_80034D14", - "suggestion": "m2c could not determine type of pointer jtbl_80034D14" - }, - { - "type": "unknown_pointer", - "name": "jtbl_80034D14", - "suggestion": "m2c could not determine type of pointer jtbl_80034D14" - } - ], - "timestamp": "2026-04-22T17:16:22.877779" - }, - { - "function_name": "func_800A4860", - "file": "src/battle/battle.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "func_800AF834", - "return_type": "s32", - "parameters": "?", - "suggestion": "Define proper signature for func_800AF834 in header" - }, - { - "type": "extern_variable", - "name": "D_800708C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708C4" - } - ], - "timestamp": "2026-04-22T17:16:24.155747" - }, - { - "function_name": "func_800B10AC", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:16:24.819991" - }, - { - "function_name": "func_800BC338", - "file": "src/field/field.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800E08C0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08C0" - }, - { - "type": "extern_variable", - "name": "D_80074EB0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB0" - }, - { - "type": "extern_variable", - "name": "D_80074EB4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB4" - }, - { - "type": "extern_variable", - "name": "D_80074EB8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB8" - }, - { - "type": "extern_variable", - "name": "D_800E0638", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0638" - }, - { - "type": "extern_variable", - "name": "D_800E42D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42D8" - }, - { - "type": "extern_variable", - "name": "D_800E42DA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DA" - }, - { - "type": "extern_variable", - "name": "D_800E42DC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DC" - }, - { - "type": "extern_variable", - "name": "D_800E42E0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E0" - }, - { - "type": "extern_variable", - "name": "D_800E42E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E4" - }, - { - "type": "extern_variable", - "name": "D_800E42E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E8" - }, - { - "type": "extern_variable", - "name": "D_800E42EA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EA" - }, - { - "type": "extern_variable", - "name": "D_800E42EE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EE" - }, - { - "type": "extern_variable", - "name": "D_800E48E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48E8" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - } - ], - "timestamp": "2026-04-22T17:16:25.418700" - }, - { - "function_name": "func_800D751C", - "file": "src/battle/battle2.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800F4CEC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4CEC" - }, - { - "type": "extern_variable", - "name": "D_800F4D2C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4D2C" - } - ], - "timestamp": "2026-04-22T17:16:26.598068" - }, - { - "function_name": "func_800BB7DC", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:16:27.281986" - }, - { - "function_name": "func_800A5FB4", - "file": "src/world/world.c", - "primary_error": "Function 'func_800A5FB4' not found as a definition after decompilation (LLM may have renamed it)", - "missing_items": [], - "timestamp": "2026-04-22T17:16:27.785054" - }, - { - "function_name": "func_8002A7E8", - "file": "src/main/akao.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "SpuSetTransferCallback", - "return_type": "unknown", - "parameters": "?*", - "suggestion": "Define proper signature for SpuSetTransferCallback in header" - }, - { - "type": "extern_variable", - "name": "func_800293D0", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_800293D0" - } - ], - "timestamp": "2026-04-22T17:16:28.806348" - }, - { - "function_name": "func_800B69C0", - "file": "src/field/field.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800E08C0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E08C0" - }, - { - "type": "extern_variable", - "name": "D_80074EB0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB0" - }, - { - "type": "extern_variable", - "name": "D_80074EB4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB4" - }, - { - "type": "extern_variable", - "name": "D_80074EB8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80074EB8" - }, - { - "type": "extern_variable", - "name": "D_800E0638", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E0638" - }, - { - "type": "extern_variable", - "name": "D_800E42D8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42D8" - }, - { - "type": "extern_variable", - "name": "D_800E42DA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DA" - }, - { - "type": "extern_variable", - "name": "D_800E42DC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42DC" - }, - { - "type": "extern_variable", - "name": "D_800E42E0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E0" - }, - { - "type": "extern_variable", - "name": "D_800E42E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E4" - }, - { - "type": "extern_variable", - "name": "D_800E42E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42E8" - }, - { - "type": "extern_variable", - "name": "D_800E42EA", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EA" - }, - { - "type": "extern_variable", - "name": "D_800E42EE", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E42EE" - }, - { - "type": "extern_variable", - "name": "D_800E48E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800E48E8" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - }, - { - "type": "unknown_pointer", - "name": "var_t1", - "suggestion": "m2c could not determine type of pointer var_t1" - } - ], - "timestamp": "2026-04-22T17:16:29.359862" - }, - { - "function_name": "func_800A4954", - "file": "src/battle/battle.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "func_800AF834", - "return_type": "s32", - "parameters": "?", - "suggestion": "Define proper signature for func_800AF834 in header" - }, - { - "type": "extern_variable", - "name": "D_800708C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708C4" - } - ], - "timestamp": "2026-04-22T17:16:30.114109" - }, - { - "function_name": "func_800AAA00", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:16:31.202074" - }, - { - "function_name": "func_800112E8", - "file": "src/main/18B8.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80069554", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" - }, - { - "type": "extern_variable", - "name": "D_80069558", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" - }, - { - "type": "extern_variable", - "name": "D_80082274", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082274" - }, - { - "type": "extern_variable", - "name": "D_800696F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" - }, - { - "type": "extern_variable", - "name": "D_80069800", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069800" - }, - { - "type": "extern_variable", - "name": "D_8009D890", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D890" - }, - { - "type": "extern_variable", - "name": "D_8009D894", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" - }, - { - "type": "extern_variable", - "name": "D_80075D24", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D24" - }, - { - "type": "extern_variable", - "name": "D_80075D28", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D28" - }, - { - "type": "extern_variable", - "name": "D_80075DE8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075DE8" - }, - { - "type": "extern_variable", - "name": "D_8009D7E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E4" - }, - { - "type": "extern_variable", - "name": "D_8009D7E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E8" - }, - { - "type": "extern_variable", - "name": "D_8009D7EC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7EC" - }, - { - "type": "extern_variable", - "name": "D_8009D7ED", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7ED" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - } - ], - "timestamp": "2026-04-22T17:16:32.003435" - }, - { - "function_name": "func_800BAA00", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:16:32.789655" - }, - { - "function_name": "func_800D44E8", - "file": "src/battle/battle2.c", - "primary_error": "Function 'func_800D44E8' not found as a definition after decompilation (LLM may have renamed it)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800F4CEC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4CEC" - }, - { - "type": "extern_variable", - "name": "D_800F4D2C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800F4D2C" - } - ], - "timestamp": "2026-04-22T17:16:33.990751" - }, - { - "function_name": "func_800AE954", - "file": "src/battle/battle.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "func_800AF834", - "return_type": "s32", - "parameters": "?", - "suggestion": "Define proper signature for func_800AF834 in header" - }, - { - "type": "extern_variable", - "name": "D_800708C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708C4" - } - ], - "timestamp": "2026-04-22T17:16:34.842925" - }, - { - "function_name": "func_800C4814", - "file": "src/battle/battle1.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800EA470", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800EA470" - } - ], - "timestamp": "2026-04-22T17:16:35.807686" - }, - { - "function_name": "func_800C3CA8", - "file": "src/battle/battle1.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_800EA470", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800EA470" - } - ], - "timestamp": "2026-04-22T17:16:37.111767" - }, - { - "function_name": "func_800B6B28", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:16:37.787298" - }, - { - "function_name": "func_800B0334", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:16:40.119501" - }, - { - "function_name": "func_800AEF68", - "file": "src/battle/battle.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "func_800AF834", - "return_type": "s32", - "parameters": "?", - "suggestion": "Define proper signature for func_800AF834 in header" - }, - { - "type": "extern_variable", - "name": "D_800708C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708C4" - } - ], - "timestamp": "2026-04-22T17:16:40.899016" - }, - { - "function_name": "func_800ABE58", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:16:41.760339" - }, - { - "function_name": "func_8001CB48", - "file": "src/main/18B8.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80069554", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" - }, - { - "type": "extern_variable", - "name": "D_80069558", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" - }, - { - "type": "extern_variable", - "name": "D_80082274", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082274" - }, - { - "type": "extern_variable", - "name": "D_800696F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" - }, - { - "type": "extern_variable", - "name": "D_80069800", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069800" - }, - { - "type": "extern_variable", - "name": "D_8009D890", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D890" - }, - { - "type": "extern_variable", - "name": "D_8009D894", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" - }, - { - "type": "extern_variable", - "name": "D_80075D24", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D24" - }, - { - "type": "extern_variable", - "name": "D_80075D28", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D28" - }, - { - "type": "extern_variable", - "name": "D_80075DE8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075DE8" - }, - { - "type": "extern_variable", - "name": "D_8009D7E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E4" - }, - { - "type": "extern_variable", - "name": "D_8009D7E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E8" - }, - { - "type": "extern_variable", - "name": "D_8009D7EC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7EC" - }, - { - "type": "extern_variable", - "name": "D_8009D7ED", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7ED" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - } - ], - "timestamp": "2026-04-22T17:16:42.788731" - }, - { - "function_name": "func_800B062C", - "file": "src/battle/battle.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "func_800AF834", - "return_type": "s32", - "parameters": "?", - "suggestion": "Define proper signature for func_800AF834 in header" - }, - { - "type": "extern_variable", - "name": "D_800708C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708C4" - } - ], - "timestamp": "2026-04-22T17:16:43.537862" - }, - { - "function_name": "func_800A8A6C", - "file": "src/battle/battle.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "func_800AF834", - "return_type": "s32", - "parameters": "?", - "suggestion": "Define proper signature for func_800AF834 in header" - }, - { - "type": "extern_variable", - "name": "D_800708C4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708C4" - } - ], - "timestamp": "2026-04-22T17:16:44.379504" - }, - { - "function_name": "func_800AB6E4", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:16:45.398769" - }, - { - "function_name": "func_8001C5BC", - "file": "src/main/18B8.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80069554", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" - }, - { - "type": "extern_variable", - "name": "D_80069558", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" - }, - { - "type": "extern_variable", - "name": "D_80082274", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082274" - }, - { - "type": "extern_variable", - "name": "D_800696F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" - }, - { - "type": "extern_variable", - "name": "D_80069800", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069800" - }, - { - "type": "extern_variable", - "name": "D_8009D890", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D890" - }, - { - "type": "extern_variable", - "name": "D_8009D894", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" - }, - { - "type": "extern_variable", - "name": "D_80075D24", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D24" - }, - { - "type": "extern_variable", - "name": "D_80075D28", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D28" - }, - { - "type": "extern_variable", - "name": "D_80075DE8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075DE8" - }, - { - "type": "extern_variable", - "name": "D_8009D7E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E4" - }, - { - "type": "extern_variable", - "name": "D_8009D7E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E8" - }, - { - "type": "extern_variable", - "name": "D_8009D7EC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7EC" - }, - { - "type": "extern_variable", - "name": "D_8009D7ED", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7ED" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - } - ], - "timestamp": "2026-04-22T17:16:46.154829" - }, - { - "function_name": "func_800DDCE8", - "file": "src/battle/battle3.c", - "primary_error": "Contains unknown parameter type '?'", - "missing_items": [ - { - "type": "extern_function", - "name": "func_8001DE0C", - "return_type": "void", - "parameters": "?*, s32, ?, s32, s32", - "suggestion": "Define proper signature for func_8001DE0C in header" - }, - { - "type": "extern_function", - "name": "func_8001E040", - "return_type": "void", - "parameters": "?*", - "suggestion": "Define proper signature for func_8001E040 in header" - }, - { - "type": "extern_variable", - "name": "func_8001E040", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_8001E040" - }, - { - "type": "extern_variable", - "name": "func_80026A00", - "declared_type": "void", - "suggestion": "Unknown type for extern variable func_80026A00" - }, - { - "type": "unknown_variable", - "name": "sp18", - "suggestion": "m2c could not determine type of variable sp18" - } - ], - "timestamp": "2026-04-22T17:16:47.137933" - }, - { - "function_name": "func_80027990", - "file": "src/main/18B8.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80069554", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" - }, - { - "type": "extern_variable", - "name": "D_80069558", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" - }, - { - "type": "extern_variable", - "name": "D_80082274", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082274" - }, - { - "type": "extern_variable", - "name": "D_800696F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" - }, - { - "type": "extern_variable", - "name": "D_80069800", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069800" - }, - { - "type": "extern_variable", - "name": "D_8009D890", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D890" - }, - { - "type": "extern_variable", - "name": "D_8009D894", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" - }, - { - "type": "extern_variable", - "name": "D_80075D24", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D24" - }, - { - "type": "extern_variable", - "name": "D_80075D28", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D28" - }, - { - "type": "extern_variable", - "name": "D_80075DE8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075DE8" - }, - { - "type": "extern_variable", - "name": "D_8009D7E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E4" - }, - { - "type": "extern_variable", - "name": "D_8009D7E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E8" - }, - { - "type": "extern_variable", - "name": "D_8009D7EC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7EC" - }, - { - "type": "extern_variable", - "name": "D_8009D7ED", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7ED" + "suggestion": "Unknown type for extern variable D_800708D0" }, { "type": "unknown_pointer", @@ -29424,85 +5550,26 @@ "suggestion": "m2c could not determine type of pointer var_t8" } ], - "timestamp": "2026-04-22T17:16:48.198392" + "timestamp": "2026-04-22T19:49:28.576126" }, { - "function_name": "func_800AE8AC", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:16:48.911893" - }, - { - "function_name": "func_800A358C", - "file": "src/ending/ending.c", + "function_name": "func_80026090", + "file": "src/main/1255C.c", "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", "missing_items": [ { "type": "extern_function", - "name": "GetTPage", - "return_type": "s16", - "parameters": "s32, ?, s16, s16", - "suggestion": "Define proper signature for GetTPage in header" - }, - { - "type": "extern_function", - "name": "LoadImage", - "return_type": "unknown", - "parameters": "void*, s32", - "suggestion": "Define proper signature for LoadImage in header" - }, - { - "type": "extern_function", - "name": "OpenTIM", - "return_type": "unknown", - "parameters": "", - "suggestion": "Define proper signature for OpenTIM in header" + "name": "func_80048540", + "return_type": "s32", + "parameters": "?", + "suggestion": "Define proper signature for func_80048540 in header" }, { "type": "extern_function", - "name": "ReadTIM", + "name": "VSync", "return_type": "unknown", - "parameters": "s32*", - "suggestion": "Define proper signature for ReadTIM in header" - }, - { - "type": "extern_variable", - "name": "D_800A652C", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A652C" - } - ], - "timestamp": "2026-04-22T17:16:49.485784" - }, - { - "function_name": "func_8002708C", - "file": "src/main/18B8.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80069554", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" - }, - { - "type": "extern_variable", - "name": "D_80069558", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" - }, - { - "type": "extern_variable", - "name": "D_80082274", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082274" - }, - { - "type": "extern_variable", - "name": "D_800696F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" + "parameters": "?", + "suggestion": "Define proper signature for VSync in header" }, { "type": "extern_variable", @@ -29512,483 +5579,333 @@ }, { "type": "extern_variable", - "name": "D_8009D890", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D890" - }, - { - "type": "extern_variable", - "name": "D_8009D894", + "name": "D_80071E4D", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" + "suggestion": "Unknown type for extern variable D_80071E4D" }, { "type": "extern_variable", - "name": "D_80075D24", + "name": "D_800738BC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D24" + "suggestion": "Unknown type for extern variable D_800738BC" }, { "type": "extern_variable", - "name": "D_80075D28", + "name": "D_800491D0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D28" + "suggestion": "Unknown type for extern variable D_800491D0" }, { "type": "extern_variable", - "name": "D_80075DE8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075DE8" + "name": "func_80017678", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80017678" }, { "type": "extern_variable", - "name": "D_8009D7E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E4" + "name": "func_8001786C", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_8001786C" }, { "type": "extern_variable", - "name": "D_8009D7E8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E8" + "name": "func_80020058", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_80020058" }, { "type": "extern_variable", - "name": "D_8009D7EC", + "name": "D_8009D85C", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7EC" + "suggestion": "Unknown type for extern variable D_8009D85C" }, { "type": "extern_variable", - "name": "D_8009D7ED", + "name": "D_8009D85E", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7ED" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" + "suggestion": "Unknown type for extern variable D_8009D85E" } ], - "timestamp": "2026-04-22T17:16:53.498864" + "timestamp": "2026-04-22T19:49:38.592150" }, { - "function_name": "func_800A86C4", - "file": "src/world/world.c", + "function_name": "func_80033A90", + "file": "src/main/akao.c", "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", "missing_items": [], - "timestamp": "2026-04-22T17:16:54.254404" + "timestamp": "2026-04-22T19:49:48.748419" }, { - "function_name": "func_800A2504", - "file": "src/ending/ending.c", + "function_name": "func_800B798C", + "file": "src/battle/battle1.c", "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", "missing_items": [ { - "type": "extern_function", - "name": "GetTPage", - "return_type": "s16", - "parameters": "s32, ?, s16, s16", - "suggestion": "Define proper signature for GetTPage in header" - }, - { - "type": "extern_function", - "name": "LoadImage", - "return_type": "unknown", - "parameters": "void*, s32", - "suggestion": "Define proper signature for LoadImage in header" - }, - { - "type": "extern_function", - "name": "OpenTIM", - "return_type": "unknown", - "parameters": "", - "suggestion": "Define proper signature for OpenTIM in header" - }, - { - "type": "extern_function", - "name": "ReadTIM", - "return_type": "unknown", - "parameters": "s32*", - "suggestion": "Define proper signature for ReadTIM in header" + "type": "extern_variable", + "name": "func_800C5BEC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C5BEC" }, { "type": "extern_variable", - "name": "D_800A652C", + "name": "D_801517F0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800A652C" - } - ], - "timestamp": "2026-04-22T17:16:54.913763" - }, - { - "function_name": "func_800AE080", - "file": "src/battle/battle.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "func_800AF834", - "return_type": "s32", - "parameters": "?", - "suggestion": "Define proper signature for func_800AF834 in header" + "suggestion": "Unknown type for extern variable D_801517F0" }, { "type": "extern_variable", - "name": "D_800708C4", + "name": "D_800F7ED8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708C4" - } - ], - "timestamp": "2026-04-22T17:16:56.761340" - }, - { - "function_name": "func_800AB480", - "file": "src/battle/battle.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "func_800AF834", - "return_type": "s32", - "parameters": "?", - "suggestion": "Define proper signature for func_800AF834 in header" + "suggestion": "Unknown type for extern variable D_800F7ED8" }, { "type": "extern_variable", - "name": "D_800708C4", + "name": "D_800F7EDA", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708C4" - } - ], - "timestamp": "2026-04-22T17:16:57.605889" - }, - { - "function_name": "func_800AD0FC", - "file": "src/battle/battle.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_function", - "name": "func_800AF834", - "return_type": "s32", - "parameters": "?", - "suggestion": "Define proper signature for func_800AF834 in header" + "suggestion": "Unknown type for extern variable D_800F7EDA" }, { "type": "extern_variable", - "name": "D_800708C4", + "name": "D_800F9DA8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800708C4" + "suggestion": "Unknown type for extern variable D_800F9DA8" } ], - "timestamp": "2026-04-22T17:16:58.886050" + "timestamp": "2026-04-22T19:50:04.503099" }, { - "function_name": "func_800C7924", + "function_name": "func_800B3FAC", "file": "src/battle/battle1.c", "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", "missing_items": [ { "type": "extern_variable", - "name": "D_800EA470", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800EA470" - } - ], - "timestamp": "2026-04-22T17:16:59.804535" - }, - { - "function_name": "func_800B98F0", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:17:00.584047" - }, - { - "function_name": "func_80029114", - "file": "src/main/18B8.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ - { - "type": "extern_variable", - "name": "D_80069554", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" - }, - { - "type": "extern_variable", - "name": "D_80069558", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" - }, - { - "type": "extern_variable", - "name": "D_80082274", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082274" - }, - { - "type": "extern_variable", - "name": "D_800696F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" - }, - { - "type": "extern_variable", - "name": "D_80069800", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069800" - }, - { - "type": "extern_variable", - "name": "D_8009D890", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D890" - }, - { - "type": "extern_variable", - "name": "D_8009D894", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" - }, - { - "type": "extern_variable", - "name": "D_80075D24", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D24" - }, - { - "type": "extern_variable", - "name": "D_80075D28", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D28" - }, - { - "type": "extern_variable", - "name": "D_80075DE8", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075DE8" - }, - { - "type": "extern_variable", - "name": "D_8009D7E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E4" + "name": "func_800C5BEC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C5BEC" }, { "type": "extern_variable", - "name": "D_8009D7E8", + "name": "D_801517F0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E8" + "suggestion": "Unknown type for extern variable D_801517F0" }, { "type": "extern_variable", - "name": "D_8009D7EC", + "name": "D_800F7ED8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7EC" + "suggestion": "Unknown type for extern variable D_800F7ED8" }, { "type": "extern_variable", - "name": "D_8009D7ED", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7ED" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" - } - ], - "timestamp": "2026-04-22T17:17:02.055653" - }, - { - "function_name": "func_800B87D8", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:17:02.964307" - }, - { - "function_name": "func_800BFB88", - "file": "src/battle/battle1.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [ + "name": "D_800F7EDA", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F7EDA" + }, { "type": "extern_variable", - "name": "D_800EA470", + "name": "D_800F9DA8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800EA470" + "suggestion": "Unknown type for extern variable D_800F9DA8" } ], - "timestamp": "2026-04-22T17:17:03.878468" + "timestamp": "2026-04-22T19:50:29.760023" }, { - "function_name": "func_80026C5C", - "file": "src/main/18B8.c", + "function_name": "func_800BFA98", + "file": "src/battle/battle1.c", "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", "missing_items": [ { "type": "extern_variable", - "name": "D_80069554", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" + "name": "func_800C5BEC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C5BEC" }, { "type": "extern_variable", - "name": "D_80069558", + "name": "D_801517F0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" + "suggestion": "Unknown type for extern variable D_801517F0" }, { "type": "extern_variable", - "name": "D_80082274", + "name": "D_800F7ED8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082274" + "suggestion": "Unknown type for extern variable D_800F7ED8" }, { "type": "extern_variable", - "name": "D_800696F0", + "name": "D_800F7EDA", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" + "suggestion": "Unknown type for extern variable D_800F7EDA" }, { "type": "extern_variable", - "name": "D_80069800", + "name": "D_800F9DA8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069800" - }, + "suggestion": "Unknown type for extern variable D_800F9DA8" + } + ], + "timestamp": "2026-04-22T19:50:34.925783" + }, + { + "function_name": "func_800BFB10", + "file": "src/battle/battle1.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_8009D890", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D890" + "name": "func_800C5BEC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C5BEC" }, { "type": "extern_variable", - "name": "D_8009D894", + "name": "D_801517F0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" + "suggestion": "Unknown type for extern variable D_801517F0" }, { "type": "extern_variable", - "name": "D_80075D24", + "name": "D_800F7ED8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D24" + "suggestion": "Unknown type for extern variable D_800F7ED8" }, { "type": "extern_variable", - "name": "D_80075D28", + "name": "D_800F7EDA", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D28" + "suggestion": "Unknown type for extern variable D_800F7EDA" }, { "type": "extern_variable", - "name": "D_80075DE8", + "name": "D_800F9DA8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075DE8" - }, + "suggestion": "Unknown type for extern variable D_800F9DA8" + } + ], + "timestamp": "2026-04-22T19:50:35.770248" + }, + { + "function_name": "func_800C20E8", + "file": "src/battle/battle1.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_8009D7E4", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E4" + "name": "func_800C5BEC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C5BEC" }, { "type": "extern_variable", - "name": "D_8009D7E8", + "name": "D_801517F0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E8" + "suggestion": "Unknown type for extern variable D_801517F0" }, { "type": "extern_variable", - "name": "D_8009D7EC", + "name": "D_800F7ED8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7EC" + "suggestion": "Unknown type for extern variable D_800F7ED8" }, { "type": "extern_variable", - "name": "D_8009D7ED", + "name": "D_800F7EDA", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7ED" - }, - { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" + "suggestion": "Unknown type for extern variable D_800F7EDA" }, { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" + "type": "extern_variable", + "name": "D_800F9DA8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9DA8" } ], - "timestamp": "2026-04-22T17:17:04.988499" - }, - { - "function_name": "func_800B39B4", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:17:05.767197" + "timestamp": "2026-04-22T19:50:43.205305" }, { - "function_name": "func_80028930", - "file": "src/main/18B8.c", + "function_name": "func_800BB684", + "file": "src/battle/battle1.c", "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", "missing_items": [ { "type": "extern_variable", - "name": "D_80069554", + "name": "func_800C5BEC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C5BEC" + }, + { + "type": "extern_variable", + "name": "D_801517F0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" + "suggestion": "Unknown type for extern variable D_801517F0" }, { "type": "extern_variable", - "name": "D_80069558", + "name": "D_800F7ED8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" + "suggestion": "Unknown type for extern variable D_800F7ED8" }, { "type": "extern_variable", - "name": "D_80082274", + "name": "D_800F7EDA", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082274" + "suggestion": "Unknown type for extern variable D_800F7EDA" }, { "type": "extern_variable", - "name": "D_800696F0", + "name": "D_800F9DA8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" + "suggestion": "Unknown type for extern variable D_800F9DA8" + } + ], + "timestamp": "2026-04-22T19:50:43.886166" + }, + { + "function_name": "func_800BC1E0", + "file": "src/battle/battle1.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ + { + "type": "extern_variable", + "name": "func_800C5BEC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800C5BEC" }, { "type": "extern_variable", - "name": "D_80069800", + "name": "D_801517F0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069800" + "suggestion": "Unknown type for extern variable D_801517F0" }, { "type": "extern_variable", - "name": "D_8009D890", + "name": "D_800F7ED8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D890" + "suggestion": "Unknown type for extern variable D_800F7ED8" }, { "type": "extern_variable", - "name": "D_8009D894", + "name": "D_800F7EDA", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" + "suggestion": "Unknown type for extern variable D_800F7EDA" }, + { + "type": "extern_variable", + "name": "D_800F9DA8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800F9DA8" + } + ], + "timestamp": "2026-04-22T19:50:48.120759" + }, + { + "function_name": "func_8001DEF0", + "file": "src/main/18B8.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", "name": "D_80075D24", @@ -30031,6 +5948,24 @@ "declared_type": "s32", "suggestion": "Unknown type for extern variable D_8009D7ED" }, + { + "type": "extern_variable", + "name": "D_80069508", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069508" + }, + { + "type": "extern_variable", + "name": "D_800708C8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C8" + }, + { + "type": "extern_variable", + "name": "D_800708D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708D0" + }, { "type": "unknown_pointer", "name": "var_t8", @@ -30042,55 +5977,13 @@ "suggestion": "m2c could not determine type of pointer var_t8" } ], - "timestamp": "2026-04-22T17:17:06.652297" + "timestamp": "2026-04-22T19:56:20.640007" }, { - "function_name": "func_800285AC", + "function_name": "func_80014C44", "file": "src/main/18B8.c", "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", "missing_items": [ - { - "type": "extern_variable", - "name": "D_80069554", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" - }, - { - "type": "extern_variable", - "name": "D_80069558", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" - }, - { - "type": "extern_variable", - "name": "D_80082274", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082274" - }, - { - "type": "extern_variable", - "name": "D_800696F0", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" - }, - { - "type": "extern_variable", - "name": "D_80069800", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069800" - }, - { - "type": "extern_variable", - "name": "D_8009D890", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D890" - }, - { - "type": "extern_variable", - "name": "D_8009D894", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" - }, { "type": "extern_variable", "name": "D_80075D24", @@ -30133,6 +6026,24 @@ "declared_type": "s32", "suggestion": "Unknown type for extern variable D_8009D7ED" }, + { + "type": "extern_variable", + "name": "D_80069508", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_80069508" + }, + { + "type": "extern_variable", + "name": "D_800708C8", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708C8" + }, + { + "type": "extern_variable", + "name": "D_800708D0", + "declared_type": "s32", + "suggestion": "Unknown type for extern variable D_800708D0" + }, { "type": "unknown_pointer", "name": "var_t8", @@ -30144,115 +6055,127 @@ "suggestion": "m2c could not determine type of pointer var_t8" } ], - "timestamp": "2026-04-22T17:17:07.758586" - }, - { - "function_name": "func_800A4268", - "file": "src/world/world.c", - "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", - "missing_items": [], - "timestamp": "2026-04-22T17:17:08.516203" + "timestamp": "2026-04-22T19:56:21.527396" }, { - "function_name": "func_80014E74", + "function_name": "func_8001A3B8", "file": "src/main/18B8.c", "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", "missing_items": [ { "type": "extern_variable", - "name": "D_80069554", + "name": "D_80075D24", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069554" + "suggestion": "Unknown type for extern variable D_80075D24" }, { "type": "extern_variable", - "name": "D_80069558", + "name": "D_80075D28", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069558" + "suggestion": "Unknown type for extern variable D_80075D28" }, { "type": "extern_variable", - "name": "D_80082274", + "name": "D_80075DE8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80082274" + "suggestion": "Unknown type for extern variable D_80075DE8" }, { "type": "extern_variable", - "name": "D_800696F0", + "name": "D_8009D7E4", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_800696F0" + "suggestion": "Unknown type for extern variable D_8009D7E4" }, { "type": "extern_variable", - "name": "D_80069800", + "name": "D_8009D7E8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80069800" + "suggestion": "Unknown type for extern variable D_8009D7E8" }, { "type": "extern_variable", - "name": "D_8009D890", + "name": "D_8009D7EC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D890" + "suggestion": "Unknown type for extern variable D_8009D7EC" }, { "type": "extern_variable", - "name": "D_8009D894", + "name": "D_8009D7ED", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D894" + "suggestion": "Unknown type for extern variable D_8009D7ED" }, { "type": "extern_variable", - "name": "D_80075D24", + "name": "D_80069508", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D24" + "suggestion": "Unknown type for extern variable D_80069508" }, { "type": "extern_variable", - "name": "D_80075D28", + "name": "D_800708C8", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075D28" + "suggestion": "Unknown type for extern variable D_800708C8" }, { "type": "extern_variable", - "name": "D_80075DE8", + "name": "D_800708D0", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_80075DE8" + "suggestion": "Unknown type for extern variable D_800708D0" + }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" }, + { + "type": "unknown_pointer", + "name": "var_t8", + "suggestion": "m2c could not determine type of pointer var_t8" + } + ], + "timestamp": "2026-04-22T19:56:22.188841" + }, + { + "function_name": "func_800CEB48", + "file": "src/battle/battle2.c", + "primary_error": "m2c added 1 decompilation failure comment(s) (dependency issues)", + "missing_items": [ { "type": "extern_variable", - "name": "D_8009D7E4", + "name": "D_800F4CEC", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E4" + "suggestion": "Unknown type for extern variable D_800F4CEC" }, { "type": "extern_variable", - "name": "D_8009D7E8", + "name": "D_800F4D2C", "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7E8" + "suggestion": "Unknown type for extern variable D_800F4D2C" }, { "type": "extern_variable", - "name": "D_8009D7EC", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7EC" + "name": "func_800D6998", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6998" }, { "type": "extern_variable", - "name": "D_8009D7ED", - "declared_type": "s32", - "suggestion": "Unknown type for extern variable D_8009D7ED" + "name": "func_800D6ACC", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6ACC" }, { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" + "type": "extern_variable", + "name": "func_800D6C20", + "declared_type": "void", + "suggestion": "Unknown type for extern variable func_800D6C20" }, { - "type": "unknown_pointer", - "name": "var_t8", - "suggestion": "m2c could not determine type of pointer var_t8" + "type": "unaligned_cast", + "cast_type": "s32", + "suggestion": "Unaligned access to s32 - may need struct packing or alignment fix" } ], - "timestamp": "2026-04-22T17:17:09.297948" + "timestamp": "2026-04-23T13:14:10.335601" } ] \ No newline at end of file diff --git a/automation/rank_all.md b/automation/rank_all.md index f10d52e..256c7bf 100644 --- a/automation/rank_all.md +++ b/automation/rank_all.md @@ -4,79 +4,200 @@ | Score | Function | | --- | --- | +| 0.197 | func_800B12DC.s | +| 0.200 | func_800D3520.s | +| 0.213 | func_800A4E00.s | +| 0.213 | func_800C5BEC.s | | 0.217 | func_800B383C.s | | 0.217 | func_800B38E0.s | +| 0.217 | func_800BB978.s | +| 0.217 | func_800BB4F8.s | | 0.234 | func_800A6C04.s | +| 0.235 | func_800BB9B8.s | +| 0.235 | func_800BB9FC.s | +| 0.235 | func_800BBA40.s | +| 0.235 | func_800C03B8.s | | 0.235 | func_800B1A5C.s | +| 0.246 | func_800B888C.s | +| 0.249 | func_800AD8DC.s | +| 0.253 | func_800A8D18.s | +| 0.253 | func_800A8C94.s | +| 0.253 | func_800A7090.s | | 0.253 | func_800ADFC0.s | +| 0.253 | func_800AFE98.s | +| 0.266 | func_800E68B4.s | | 0.268 | func_800D5774.s | | 0.268 | func_800A3208.s | +| 0.268 | func_800A3240.s | +| 0.268 | func_800A55BC.s | +| 0.273 | func_800ADDE8.s | +| 0.273 | func_800B37A0.s | +| 0.285 | func_800C0900.s | +| 0.285 | func_800C0410.s | +| 0.293 | func_800B88CC.s | +| 0.293 | func_800B8360.s | +| 0.293 | func_800A8CC8.s | +| 0.293 | func_800B10B4.s | +| 0.294 | func_800DBEC8.s | +| 0.299 | func_800A5FB0.s | | 0.304 | func_800AEB80.s | +| 0.305 | func_800AF834.s | +| 0.310 | func_800A67B8.s | +| 0.310 | func_800D8A88.s | +| 0.310 | func_800ADE84.s | | 0.314 | func_800A66A4.s | +| 0.314 | func_800A6A70.s | +| 0.314 | func_800B2F70.s | | 0.327 | func_800A3488.s | +| 0.328 | func_800B3FAC.s | +| 0.328 | func_800A5660.s | +| 0.337 | func_800AE25C.s | +| 0.355 | func_800A85FC.s | | 0.360 | func_800D4FA8.s | +| 0.360 | func_800B1368.s | +| 0.362 | func_800A44D8.s | +| 0.368 | func_800A6B88.s | +| 0.369 | func_800AF594.s | +| 0.373 | func_800A661C.s | +| 0.374 | func_800B13B0.s | | 0.378 | func_800B3968.s | | 0.378 | func_800C614C.s | +| 0.378 | func_800A6E0C.s | +| 0.378 | func_800AEB20.s | +| 0.378 | func_800A73F8.s | +| 0.378 | func_800AD420.s | +| 0.378 | func_800AD890.s | +| 0.378 | func_800A6D3C.s | +| 0.380 | func_800A32C0.s | | 0.383 | func_800D41FC.s | +| 0.383 | func_800A4F14.s | +| 0.392 | func_800B11B4.s | +| 0.396 | func_800B0E5C.s | | 0.397 | func_800A853C.s | +| 0.397 | func_800B0EB4.s | +| 0.402 | func_800C627C.s | | 0.407 | func_800B5CD4.s | +| 0.407 | func_800A6C5C.s | +| 0.407 | func_800D55A4.s | +| 0.407 | func_800A6CC0.s | +| 0.407 | func_800B1218.s | +| 0.409 | func_800B1304.s | | 0.410 | func_800D51D4.s | +| 0.414 | func_800A4CC8.s | | 0.417 | func_800B2EBC.s | +| 0.421 | func_800A6858.s | +| 0.421 | func_800A8DCC.s | | 0.427 | func_800D3474.s | | 0.428 | func_800A34CC.s | | 0.432 | func_800D58D0.s | | 0.434 | func_800D3354.s | | 0.434 | func_800D83A4.s | -| 0.434 | func_800D8304.s | | 0.434 | func_800D32B4.s | +| 0.434 | func_800D8304.s | | 0.434 | func_800AC6B4.s | +| 0.441 | func_800A55F4.s | +| 0.441 | func_800A283C.s | | 0.445 | func_800AD088.s | | 0.446 | func_800BC81C.s | | 0.446 | func_800D34C8.s | -| 0.451 | func_800AA468.s | +| 0.451 | func_800A65B0.s | +| 0.451 | func_800A4480.s | +| 0.451 | func_800BC2F0.s | | 0.452 | func_800D3658.s | +| 0.457 | func_800B3C50.s | | 0.457 | func_800D76B8.s | +| 0.457 | func_800A70C4.s | +| 0.457 | func_800A6AC4.s | | 0.471 | func_800D3418.s | | 0.472 | func_800D56A8.s | +| 0.477 | func_800B950C.s | | 0.478 | func_800A2FD0.s | +| 0.478 | func_800E5FB4.s | | 0.482 | func_800D3A6C.s | +| 0.482 | func_800ADFF4.s | +| 0.490 | func_800A61D4.s | +| 0.496 | func_800ACE14.s | | 0.496 | func_800AA688.s | +| 0.496 | func_800A71F4.s | +| 0.502 | func_800A6D88.s | +| 0.502 | func_800A7254.s | +| 0.502 | func_800AE318.s | +| 0.503 | func_800B0B94.s | | 0.503 | func_800B089C.s | | 0.507 | func_800A311C.s | | 0.507 | func_800A555C.s | +| 0.510 | func_800AD480.s | +| 0.515 | func_800A6B1C.s | +| 0.516 | func_800D72B4.s | +| 0.527 | func_800ADBBC.s | | 0.527 | func_800B3A04.s | +| 0.527 | func_800B798C.s | | 0.532 | func_800D5444.s | | 0.546 | func_800D5230.s | +| 0.548 | func_800BC11C.s | | 0.552 | func_800AB9C4.s | | 0.552 | func_800AF1D4.s | +| 0.552 | func_800C20E8.s | +| 0.554 | func_800ACA4C.s | | 0.557 | func_800D4CBC.s | | 0.560 | func_800ADF38.s | +| 0.566 | func_800BBF7C.s | | 0.566 | func_800BC04C.s | +| 0.566 | func_800BBEAC.s | +| 0.574 | func_800D55F4.s | | 0.579 | func_800AD804.s | | 0.582 | func_800D3F0C.s | | 0.590 | func_800B1C1C.s | +| 0.594 | func_800AF494.s | +| 0.596 | func_800BA24C.s | +| 0.601 | func_800E58CC.s | | 0.602 | func_800B3B84.s | | 0.602 | func_800B3AB8.s | +| 0.604 | func_800A5E0C.s | +| 0.609 | func_800C1304.s | +| 0.610 | func_800B1268.s | +| 0.616 | func_800C5C18.s | | 0.625 | func_800D09D0.s | | 0.630 | func_800D6734.s | +| 0.630 | func_800D7B1C.s | +| 0.630 | func_800D7BA4.s | +| 0.640 | func_800B3030.s | | 0.643 | func_800AB788.s | +| 0.644 | func_800E0530.s | +| 0.644 | func_800ACD88.s | +| 0.646 | func_800DF7CC.s | | 0.648 | func_800C57B0.s | | 0.649 | func_800D0958.s | | 0.649 | func_800B1B64.s | | 0.649 | func_800C0254.s | +| 0.653 | func_800DDC34.s | +| 0.653 | func_800AE2A0.s | +| 0.653 | func_800BFA98.s | +| 0.653 | func_800BFB10.s | | 0.656 | func_800D508C.s | +| 0.661 | func_800A778C.s | +| 0.671 | func_800B8FCC.s | +| 0.672 | func_800BBA84.s | +| 0.672 | func_800E6018.s | +| 0.674 | func_800E1A2C.s | | 0.676 | func_800B5C1C.s | | 0.676 | func_800B153C.s | | 0.678 | func_800D5138.s | | 0.683 | func_801B1120.s | +| 0.693 | func_800AF264.s | +| 0.693 | func_800C2FD4.s | | 0.693 | func_800DF24C.s | +| 0.694 | func_800C018C.s | | 0.698 | func_800D7A88.s | | 0.711 | func_800D3548.s | | 0.714 | func_800DF530.s | | 0.721 | func_800AE6C0.s | +| 0.725 | func_800E0794.s | +| 0.730 | func_800A64B4.s | | 0.734 | func_800DF9F8.s | | 0.738 | func_800B10F0.s | | 0.756 | func_800A4860.s | +| 0.757 | func_800D5AC0.s | | 0.757 | func_800AF3AC.s | | 0.757 | func_800D61AC.s | | 0.757 | func_800D415C.s | @@ -86,37 +207,90 @@ | 0.776 | func_800D8468.s | | 0.777 | func_800D52A0.s | | 0.789 | func_800D4284.s | +| 0.789 | func_800A4E80.s | | 0.795 | func_800B1624.s | +| 0.798 | func_800A56B0.s | | 0.804 | func_800B1AA0.s | +| 0.806 | func_800BA2BC.s | +| 0.807 | func_800A5990.s | +| 0.809 | func_800BA360.s | | 0.814 | func_800D70C0.s | +| 0.814 | func_800E5814.s | | 0.824 | func_800D6394.s | | 0.824 | func_800B8E48.s | +| 0.828 | func_800C2864.s | | 0.829 | func_800D08B8.s | | 0.835 | func_800A80DC.s | +| 0.837 | func_800A3354.s | +| 0.838 | func_800D7178.s | | 0.838 | func_800D4C08.s | +| 0.838 | func_800DE3CC.s | +| 0.839 | func_800B141C.s | | 0.840 | func_800B17F0.s | | 0.846 | func_800A76CC.s | +| 0.846 | func_800C0314.s | +| 0.846 | func_800A7130.s | | 0.848 | func_800D4368.s | | 0.851 | func_800D461C.s | | 0.851 | func_800D84F8.s | | 0.854 | func_800B1C94.s | +| 0.856 | func_800C2F20.s | +| 0.858 | func_800D3AF0.s | +| 0.858 | func_800C61C0.s | +| 0.864 | func_800AF0C4.s | +| 0.867 | func_800AE764.s | +| 0.871 | func_800D54EC.s | +| 0.872 | func_800A4F60.s | | 0.872 | func_800B16D0.s | -| 0.879 | func_800ADD2C.s | +| 0.875 | func_800C5864.s | | 0.879 | func_800ADC70.s | +| 0.879 | func_800ADD2C.s | +| 0.885 | func_800AD73C.s | | 0.886 | func_800D3994.s | +| 0.886 | func_800A3534.s | +| 0.887 | func_800AE378.s | +| 0.888 | func_800BB684.s | +| 0.889 | func_800BB430.s | +| 0.898 | func_800B8EE4.s | +| 0.899 | func_800B45F0.s | +| 0.903 | func_800E15D8.s | +| 0.903 | func_800BC8B0.s | +| 0.903 | func_800BFF88.s | +| 0.904 | func_800E05E4.s | +| 0.905 | func_800A2894.s | | 0.907 | func_800D7724.s | +| 0.912 | func_800C0088.s | | 0.912 | func_800B8944.s | | 0.916 | func_800E4A64.s | +| 0.916 | func_800B46B4.s | | 0.917 | func_800C5ADC.s | | 0.920 | func_800B0F04.s | | 0.922 | func_800E53C8.s | +| 0.924 | func_800C7220.s | +| 0.926 | func_800A304C.s | | 0.926 | func_800A4954.s | +| 0.926 | func_800C2150.s | +| 0.926 | func_800B0170.s | +| 0.928 | func_800BCA58.s | +| 0.932 | func_800A22C0.s | | 0.932 | func_800D5350.s | | 0.933 | func_800A8424.s | +| 0.934 | func_800BC754.s | +| 0.935 | func_800AD4EC.s | | 0.936 | func_800DFA94.s | +| 0.936 | func_800A5EB0.s | +| 0.939 | func_801B13DC.s | | 0.939 | func_800DDCE8.s | +| 0.939 | func_800BA11C.s | +| 0.940 | func_800B36B4.s | +| 0.947 | func_800D57C0.s | +| 0.949 | func_800A7458.s | | 0.951 | func_800C2000.s | +| 0.951 | func_800E010C.s | | 0.953 | func_800DE46C.s | +| 0.954 | func_800B079C.s | +| 0.955 | func_800AB674.s | +| 0.956 | func_800A68FC.s | | 0.957 | func_800B2B5C.s | | 0.957 | func_800BB538.s | | 0.961 | func_800A784C.s | @@ -129,101 +303,171 @@ | 0.966 | func_800D44E8.s | | 0.969 | func_800C7340.s | | 0.970 | func_800C59B8.s | +| 0.970 | func_800D7C2C.s | | 0.970 | func_800DF5C8.s | | 0.970 | func_800A5AC8.s | +| 0.972 | func_800DDE90.s | +| 0.973 | func_800BC348.s | +| 0.973 | func_800BC440.s | +| 0.973 | func_800BC538.s | | 0.974 | func_800D6F78.s | +| 0.974 | func_800C44B4.s | | 0.974 | func_800C4814.s | | 0.975 | func_800C1394.s | +| 0.975 | func_800DE2B4.s | +| 0.976 | func_800BC630.s | +| 0.976 | func_800C3578.s | | 0.976 | func_800C3CA8.s | +| 0.977 | func_800A2BF4.s | +| 0.978 | func_800B5FE8.s | | 0.978 | func_800B5D38.s | | 0.978 | func_800D7368.s | | 0.979 | func_800DDAD8.s | +| 0.980 | func_800BC1E0.s | | 0.982 | func_800D5938.s | | 0.984 | func_800D751C.s | | 0.985 | func_800A4BA4.s | | 0.985 | func_800C14C0.s | +| 0.986 | func_800C3950.s | +| 0.987 | func_800B905C.s | | 0.987 | func_800C0480.s | | 0.987 | func_800C0970.s | | 0.988 | func_800D6ACC.s | | 0.988 | func_800B062C.s | | 0.988 | func_800A50E0.s | | 0.988 | func_800AE82C.s | +| 0.988 | func_800AA574.s | +| 0.988 | func_800C5694.s | | 0.989 | func_800A35F8.s | +| 0.989 | func_800E4180.s | | 0.989 | func_800D91DC.s | +| 0.989 | func_800A2DB0.s | +| 0.989 | func_800DE94C.s | +| 0.990 | func_800DBF8C.s | +| 0.990 | func_800B8A34.s | | 0.990 | func_800E3E10.s | | 0.990 | func_800D3BF0.s | | 0.990 | func_800D376C.s | | 0.991 | func_800C2704.s | +| 0.991 | func_800D6C20.s | +| 0.991 | func_800CD400.s | | 0.991 | func_800DFFE4.s | +| 0.991 | func_800B2A2C.s | +| 0.991 | func_800C328C.s | | 0.992 | func_800AEF68.s | +| 0.992 | func_800E6B94.s | | 0.992 | func_800B18A8.s | | 0.993 | func_801B1CB0.s | | 0.993 | func_800D7888.s | | 0.994 | func_800D491C.s | | 0.994 | func_800AB830.s | | 0.994 | func_800A3D4C.s | -| 0.994 | func_800A3828.s | +| 0.995 | func_800AD5E8.s | | 0.995 | func_800C3DE4.s | | 0.995 | func_800D6260.s | | 0.995 | func_800D650C.s | +| 0.995 | func_800C70AC.s | +| 0.995 | func_800B0234.s | +| 0.996 | func_800D4A64.s | +| 0.996 | func_800C40F4.s | | 0.996 | func_800A2974.s | | 0.997 | func_800AF874.s | +| 0.997 | func_800AB308.s | +| 0.997 | func_800A7560.s | | 0.997 | func_800C64D4.s | +| 0.997 | func_800D9E0C.s | | 0.998 | func_800E3FB4.s | | 0.998 | func_800C6628.s | | 0.998 | func_800A6000.s | | 0.998 | func_800BB2A8.s | | 0.998 | func_800D6D8C.s | | 0.998 | func_800DF2CC.s | +| 0.998 | func_800B3E2C.s | +| 0.998 | func_800A6E9C.s | +| 0.998 | func_800E1AC0.s | | 0.998 | func_800BE86C.s | | 0.998 | func_800AD0FC.s | | 0.998 | func_800B33A4.s | | 0.998 | func_800D5B6C.s | | 0.999 | func_801B0668.s | +| 0.999 | func_800C33F0.s | | 0.999 | func_800AE954.s | +| 0.999 | func_800AA1C8.s | | 0.999 | func_800BE69C.s | | 0.999 | func_800B5AAC.s | +| 0.999 | func_800C5CC0.s | | 0.999 | func_800AE080.s | | 0.999 | func_800A8A6C.s | | 0.999 | func_801B11BC.s | +| 0.999 | func_800C5E94.s | | 0.999 | func_801B0F08.s | | 0.999 | func_800C494C.s | +| 0.999 | func_800AA738.s | | 0.999 | func_801B0050.s | +| 0.999 | func_800CD5E4.s | | 1.000 | func_800A5BC8.s | +| 1.000 | func_800C3F44.s | +| 1.000 | func_800B430C.s | | 1.000 | func_800AB480.s | | 1.000 | func_800D4710.s | | 1.000 | func_800B2CFC.s | | 1.000 | func_801B1598.s | | 1.000 | func_801B1734.s | +| 1.000 | func_800E6904.s | | 1.000 | func_800C62F4.s | +| 1.000 | func_800D9BF4.s | | 1.000 | func_800A6278.s | +| 1.000 | func_800AF65C.s | +| 1.000 | func_800E16B8.s | | 1.000 | func_800C4DC8.s | | 1.000 | func_800B7DB4.s | +| 1.000 | func_800B588C.s | | 1.000 | func_800AA950.s | | 1.000 | func_800C74E4.s | +| 1.000 | func_800B0C14.s | +| 1.000 | func_800BFDA0.s | +| 1.000 | func_800DDFEC.s | | 1.000 | func_800B6B98.s | +| 1.000 | func_800C1104.s | +| 1.000 | func_800A5750.s | +| 1.000 | func_800D8B60.s | | 1.000 | func_800B0378.s | | 1.000 | func_800C1D8C.s | +| 1.000 | func_800C6CB8.s | +| 1.000 | func_800DBC18.s | +| 1.000 | func_800ACE88.s | +| 1.000 | func_800BE49C.s | | 1.000 | func_800D87EC.s | +| 1.000 | func_800DFC40.s | +| 1.000 | func_800C3AA0.s | | 1.000 | func_800BFB88.s | | 1.000 | func_800DD85C.s | | 1.000 | func_800B0910.s | | 1.000 | func_800D85B0.s | +| 1.000 | func_800B7764.s | | 1.000 | func_800C3068.s | | 1.000 | func_800D4D90.s | +| 1.000 | func_800AD944.s | | 1.000 | func_800B8B48.s | | 1.000 | func_800C7924.s | +| 1.000 | func_800E0BE0.s | | 1.000 | func_800E3B64.s | | 1.000 | func_800E5530.s | +| 1.000 | func_800DE618.s | +| 1.000 | func_800C45EC.s | +| 1.000 | func_800C428C.s | | 1.000 | func_800E33A0.s | | 1.000 | func_800C76C8.s | +| 1.000 | func_800AFECC.s | | 1.000 | func_800A81B8.s | | 1.000 | func_800E3088.s | | 1.000 | func_800BACEC.s | | 1.000 | func_800D8D78.s | +| 1.000 | func_800C5170.s | | 1.000 | func_800C2928.s | -| 1.000 | func_800AC73C.s | | 1.000 | func_800E2C6C.s | +| 1.000 | func_800C2C1C.s | +| 1.000 | func_800AC73C.s | | 1.000 | func_801B19AC.s | | 1.000 | func_800AE42C.s | | 1.000 | func_800C0B20.s | @@ -232,47 +476,64 @@ | 1.000 | func_800C36B4.s | | 1.000 | func_800C0630.s | | 1.000 | func_800B91CC.s | +| 1.000 | func_800ACB98.s | +| 1.000 | func_800B64CC.s | +| 1.000 | func_800C0DD8.s | +| 1.000 | func_800C679C.s | | 1.000 | func_800A23E0.s | | 1.000 | func_800B4E30.s | +| 1.000 | func_800A4540.s | +| 1.000 | func_800BBB20.s | +| 1.000 | func_800E08C4.s | | 1.000 | func_800B3FFC.s | | 1.000 | func_800B5138.s | -| 1.000 | func_800A3ED0.s | -| 1.000 | func_800CD860.s | -| 1.000 | func_800D93E4.s | -| 1.000 | func_800D9FA4.s | -| 1.000 | func_800DA380.s | -| 1.000 | func_800DB818.s | -| 1.000 | func_800DC0CC.s | -| 1.000 | func_800DCFD4.s | | 1.000 | func_800A38FC.s | -| 1.000 | func_800D7D3C.s | +| 1.000 | func_800B54B8.s | +| 1.000 | func_800DCFD4.s | +| 1.000 | func_800DC0CC.s | +| 1.000 | func_800B4794.s | +| 1.000 | func_800DEC10.s | +| 1.000 | func_800B60E0.s | +| 1.000 | func_800DB818.s | +| 1.000 | func_800DA380.s | +| 1.000 | func_800D9FA4.s | +| 1.000 | func_800B677C.s | +| 1.000 | func_800C223C.s | +| 1.000 | func_800D93E4.s | +| 1.000 | func_800A3ED0.s | +| 1.000 | func_800BEA38.s | +| 1.000 | func_800BCB1C.s | | 1.000 | func_800A1798.s | | 1.000 | func_800A1158.s | | 1.000 | func_801B1E0C.s | -| 1.000 | func_800DEC10.s | -| 1.000 | func_800BA598.s | -| 1.000 | func_800BCB1C.s | -| 1.000 | func_800B9568.s | -| 1.000 | func_800BEA38.s | -| 1.000 | func_800C7C4C.s | -| 1.000 | func_800D29D4.s | -| 1.000 | func_800B54B8.s | -| 1.000 | func_800A79CC.s | | 1.000 | func_800E0E34.s | +| 1.000 | func_800B6D6C.s | +| 1.000 | func_800D7D3C.s | +| 1.000 | func_800B1D48.s | +| 1.000 | func_800C7C4C.s | | 1.000 | func_800E1C40.s | | 1.000 | func_800E2098.s | -| 1.000 | func_800A866C.s | -| 1.000 | func_800B4794.s | -| 1.000 | func_800B1D48.s | -| 1.000 | func_800E368C.s | +| 1.000 | func_800CD860.s | +| 1.000 | func_800CEB48.s | | 1.000 | func_800D5D28.s | -| 1.000 | func_800C223C.s | -| 1.000 | func_800AABBC.s | -| 1.000 | func_801B08C0.s | -| 1.000 | func_800E4C08.s | +| 1.000 | func_800E368C.s | +| 1.000 | func_800D1530.s | +| 1.000 | func_800B79F0.s | +| 1.000 | func_800D29D4.s | +| 1.000 | func_800A79CC.s | +| 1.000 | func_800E4394.s | | 1.000 | func_800AF9C8.s | -| 1.000 | func_800ABB0C.s | +| 1.000 | func_800E4C08.s | +| 1.000 | func_800A866C.s | +| 1.000 | func_800A8E84.s | +| 1.000 | func_800A9DA0.s | +| 1.000 | func_800B9568.s | | 1.000 | func_800E5978.s | +| 1.000 | func_801B08C0.s | +| 1.000 | func_800E60F8.s | +| 1.000 | func_800BA598.s | +| 1.000 | func_800AABBC.s | +| 1.000 | func_800ABB0C.s | | 1.000 | func_800E6DCC.s | | 1.000 | func_800E7170.s | @@ -281,8 +542,10 @@ | Score | Function | | --- | --- | | 0.098 | func_800A015C.s | +| 0.170 | func_800A0514.s | | 0.183 | func_800A01A0.s | | 0.217 | func_800A0000.s | +| 0.346 | func_800A00CC.s | | 0.749 | func_800A0534.s | | 0.881 | func_800A05D4.s | @@ -297,30 +560,52 @@ | Score | Function | | --- | --- | -| 0.110 | func_800A3308.s | +| 0.020 | func_800A2458.s | +| 0.092 | func_800A2248.s | +| 0.100 | func_800A1EE4.s | | 0.110 | func_800A32FC.s | +| 0.110 | func_800A3308.s | | 0.110 | func_800A32F0.s | +| 0.120 | func_800A20D4.s | +| 0.120 | func_800A1FA4.s | +| 0.120 | func_800A22D4.s | +| 0.120 | func_800A1ED4.s | | 0.125 | func_800A24A8.s | +| 0.131 | func_800A23F8.s | | 0.143 | func_800A32D8.s | | 0.184 | func_800A2F1C.s | | 0.184 | func_800A2E80.s | +| 0.185 | func_800A1FC8.s | | 0.193 | func_800A2014.s | +| 0.200 | func_800A2190.s | +| 0.234 | func_800A2328.s | +| 0.235 | func_800A2274.s | +| 0.235 | func_800A22A4.s | | 0.245 | func_800A2888.s | +| 0.253 | func_800A208C.s | | 0.273 | func_800A2420.s | | 0.315 | func_800A2934.s | | 0.337 | func_800A22E4.s | | 0.360 | func_800A1F48.s | +| 0.360 | func_800A1EEC.s | +| 0.416 | func_800A3314.s | | 0.471 | func_800A12F0.s | +| 0.532 | func_800A2380.s | +| 0.582 | func_800A310C.s | +| 0.602 | func_800A21CC.s | | 0.606 | func_800A20F8.s | | 0.688 | func_800A343C.s | | 0.746 | func_800A3178.s | +| 0.826 | func_800A34C4.s | | 0.832 | func_800A09DC.s | | 0.851 | func_800A2974.s | +| 0.859 | func_800A1E20.s | | 0.912 | func_800A3368.s | | 0.923 | func_800A0E68.s | | 0.926 | func_800A3210.s | | 0.958 | func_800A0AB8.s | | 0.959 | func_800A16E4.s | +| 0.970 | func_800A273C.s | | 0.975 | func_800A0BA8.s | | 0.987 | func_800A139C.s | | 0.989 | func_800A2504.s | @@ -342,179 +627,227 @@ | Score | Function | | --- | --- | -| 0.100 | func_800A41CC.s | -| 0.100 | func_800D4840.s | -| 0.100 | func_800D4838.s | -| 0.131 | func_800CDC14.s | -| 0.153 | func_800AA32C.s | -| 0.170 | func_800DA424.s | +| 0.170 | func_800A8600.s | +| 0.170 | func_800A8620.s | | 0.213 | func_800C46A4.s | -| 0.216 | func_800D7F9C.s | +| 0.217 | func_800D4E88.s | +| 0.235 | func_800C0BE8.s | +| 0.253 | func_800D8498.s | | 0.268 | func_800AFDE4.s | -| 0.293 | func_800DA444.s | +| 0.293 | func_800ABA34.s | +| 0.293 | func_800D4BC0.s | +| 0.310 | func_800D3B88.s | +| 0.310 | func_800D3C18.s | +| 0.310 | func_800C0EDC.s | | 0.310 | func_800C0DE0.s | -| 0.315 | func_800A8DF4.s | +| 0.315 | func_800DA194.s | +| 0.315 | func_800DA28C.s | +| 0.315 | func_800DA1D4.s | +| 0.332 | func_800C0E5C.s | | 0.332 | func_800CC70C.s | | 0.332 | func_800C0F58.s | +| 0.332 | func_800CC4D8.s | | 0.337 | func_800DA2CC.s | -| 0.354 | func_800CB8F4.s | +| 0.354 | func_800CBA28.s | | 0.354 | func_800D3CA8.s | +| 0.354 | func_800CBDFC.s | | 0.354 | func_800CB7C0.s | | 0.354 | func_800CBB5C.s | -| 0.354 | func_800CBDFC.s | -| 0.354 | func_800CBA28.s | -| 0.355 | func_800CC824.s | +| 0.354 | func_800CB8F4.s | | 0.355 | func_800CC5EC.s | +| 0.355 | func_800CC824.s | | 0.355 | func_800C560C.s | -| 0.378 | func_800CBAC0.s | +| 0.369 | func_800CF6C0.s | +| 0.373 | func_800D368C.s | +| 0.378 | func_800C493C.s | +| 0.378 | func_800CBF40.s | +| 0.378 | func_800CBCA4.s | | 0.378 | func_800CC098.s | | 0.378 | func_800CB858.s | +| 0.378 | func_800CBAC0.s | | 0.378 | func_800CB98C.s | -| 0.378 | func_800CBF40.s | -| 0.378 | func_800CBCA4.s | -| 0.378 | func_800C8514.s | -| 0.378 | func_800C814C.s | | 0.378 | func_800C7CE8.s | +| 0.378 | func_800C814C.s | +| 0.378 | func_800C8514.s | | 0.383 | func_800C4C9C.s | -| 0.402 | func_800C17B8.s | -| 0.402 | func_800CC134.s | +| 0.398 | func_800AB2B4.s | | 0.402 | func_800C1674.s | +| 0.402 | func_800CC134.s | +| 0.402 | func_800C17B8.s | | 0.402 | func_800D3D40.s | | 0.402 | func_800D4300.s | +| 0.416 | func_800CF66C.s | +| 0.421 | func_800D33FC.s | | 0.426 | func_800D3264.s | | 0.426 | func_800D3330.s | +| 0.426 | func_800C1714.s | | 0.426 | func_800C0FD8.s | +| 0.426 | func_800CC9EC.s | | 0.426 | func_800D1D3C.s | -| 0.446 | func_800D1F20.s | | 0.446 | func_800D1FDC.s | +| 0.446 | func_800D1F20.s | | 0.446 | func_800CC558.s | -| 0.451 | func_800C2FFC.s | | 0.451 | func_800C2F7C.s | -| 0.451 | func_800C307C.s | | 0.451 | func_800CCBBC.s | +| 0.451 | func_800C307C.s | +| 0.451 | func_800C2FFC.s | +| 0.471 | func_800CBE94.s | +| 0.471 | func_800CC358.s | | 0.471 | func_800CC78C.s | +| 0.472 | func_800D48C0.s | | 0.482 | func_800DA124.s | | 0.485 | func_800B6AE4.s | +| 0.496 | func_800CBBF4.s | +| 0.496 | func_800CC1D4.s | | 0.496 | func_800CC670.s | | 0.496 | func_800CC8A8.s | +| 0.496 | func_800C4350.s | | 0.497 | func_800D298C.s | +| 0.514 | func_800CEB20.s | | 0.516 | func_800CB28C.s | | 0.527 | func_800ABF0C.s | -| 0.527 | func_800CCC3C.s | | 0.527 | func_800CCCC8.s | +| 0.527 | func_800CCC3C.s | | 0.532 | func_800A82A0.s | +| 0.532 | func_800D4E24.s | | 0.541 | func_800D2098.s | | 0.552 | func_800C3FA0.s | | 0.552 | func_800C3EA0.s | -| 0.565 | func_800BECA4.s | -| 0.571 | func_800CBD40.s | | 0.571 | func_800CBFDC.s | +| 0.571 | func_800CBD40.s | | 0.577 | func_800CD16C.s | | 0.577 | func_800CCA68.s | | 0.577 | func_800C506C.s | -| 0.601 | func_800CD6B0.s | +| 0.577 | func_800AB9C8.s | +| 0.577 | func_800D4BFC.s | +| 0.596 | func_800D3DCC.s | +| 0.601 | func_800D1B94.s | +| 0.601 | func_800D1C68.s | | 0.601 | func_800CD5F0.s | +| 0.601 | func_800CD6B0.s | | 0.601 | func_800CCB10.s | | 0.601 | func_800C3F1C.s | -| 0.607 | func_800C2970.s | | 0.607 | func_800C2000.s | +| 0.607 | func_800C2970.s | | 0.625 | func_800D2B60.s | | 0.625 | func_800CB01C.s | | 0.625 | func_800C401C.s | +| 0.626 | func_800D828C.s | +| 0.630 | func_800D8334.s | | 0.644 | func_800CB1CC.s | -| 0.645 | func_800C7C3C.s | -| 0.645 | func_800C2BFC.s | -| 0.645 | func_800C8588.s | -| 0.645 | func_800C2CA8.s | | 0.645 | func_800C2D54.s | +| 0.645 | func_800C2BFC.s | +| 0.645 | func_800C7C3C.s | | 0.645 | func_800C81C0.s | +| 0.645 | func_800C8588.s | +| 0.648 | func_800D2A70.s | | 0.648 | func_800CB5C0.s | -| 0.656 | func_800CC404.s | +| 0.649 | func_800DA214.s | +| 0.651 | func_800A4134.s | +| 0.653 | func_800D83A8.s | +| 0.653 | func_800D8420.s | | 0.656 | func_800CC284.s | +| 0.656 | func_800CC404.s | | 0.671 | func_800D3E64.s | -| 0.676 | func_800DA480.s | +| 0.684 | func_800D348C.s | +| 0.686 | func_800A4094.s | +| 0.688 | func_800CF200.s | | 0.693 | func_800C4AE8.s | -| 0.693 | func_800CB450.s | | 0.693 | func_800CC944.s | | 0.693 | func_800CB718.s | +| 0.693 | func_800CB450.s | | 0.693 | func_800CFAF0.s | +| 0.698 | func_800A2F78.s | +| 0.710 | func_800CF2BC.s | | 0.711 | func_800CB660.s | | 0.712 | func_800BA534.s | -| 0.714 | func_800CDA24.s | | 0.714 | func_800CD834.s | +| 0.714 | func_800CDA24.s | | 0.714 | func_800CFB84.s | +| 0.722 | func_800BC438.s | | 0.727 | func_800D28A8.s | | 0.731 | func_800CAF60.s | -| 0.738 | func_800BA65C.s | +| 0.734 | func_800CD554.s | | 0.745 | func_800D6D44.s | | 0.749 | func_800AD7B8.s | | 0.753 | func_800C42B0.s | | 0.765 | func_800D2794.s | +| 0.770 | func_800CD770.s | | 0.778 | func_800C45AC.s | +| 0.782 | func_800A635C.s | | 0.785 | func_800C4BCC.s | | 0.785 | func_800ACBA0.s | | 0.786 | func_800CCFE8.s | | 0.789 | func_800C46D0.s | -| 0.789 | func_800C5564.s | -| 0.789 | func_800C54BC.s | | 0.789 | func_800C5414.s | | 0.789 | func_800D4378.s | -| 0.789 | func_800CD0C4.s | +| 0.789 | func_800C54BC.s | +| 0.789 | func_800C5564.s | | 0.789 | func_800D2E94.s | | 0.789 | func_800C5194.s | +| 0.789 | func_800CD0C4.s | | 0.789 | func_800C50EC.s | | 0.793 | func_800C24A8.s | +| 0.795 | func_800D7C98.s | | 0.799 | func_800D4780.s | | 0.802 | func_800CF140.s | | 0.805 | func_800C4804.s | +| 0.818 | func_800D8194.s | | 0.832 | func_800D2F3C.s | | 0.835 | func_800CB4F8.s | | 0.835 | func_800D4160.s | +| 0.838 | func_800A48B8.s | | 0.840 | func_800A1368.s | | 0.840 | func_800ADC90.s | | 0.846 | func_800CB0B8.s | | 0.856 | func_800CF028.s | -| 0.866 | func_800C2754.s | -| 0.866 | func_800C1DE4.s | | 0.866 | func_800C228C.s | +| 0.866 | func_800C1DE4.s | +| 0.866 | func_800C2754.s | | 0.873 | func_800D184C.s | | 0.873 | func_800CD214.s | | 0.873 | func_800C1D24.s | | 0.875 | func_800C5A2C.s | | 0.882 | func_800DA4FC.s | +| 0.883 | func_800C6748.s | | 0.887 | func_800C523C.s | | 0.891 | func_800AB5E8.s | +| 0.891 | func_800CFC1C.s | | 0.891 | func_800C728C.s | -| 0.891 | func_800D4420.s | | 0.891 | func_800CA95C.s | | 0.891 | func_800CAA24.s | -| 0.891 | func_800CFC1C.s | +| 0.891 | func_800D4420.s | +| 0.892 | func_800C31E4.s | | 0.892 | func_800C30FC.s | | 0.892 | func_800C32CC.s | -| 0.892 | func_800C31E4.s | +| 0.893 | func_800C1AB4.s | | 0.897 | func_800C1EEC.s | | 0.897 | func_800C2394.s | | 0.897 | func_800C285C.s | -| 0.899 | func_800C4DE8.s | | 0.899 | func_800C4CE8.s | +| 0.899 | func_800C4DE8.s | | 0.909 | func_800CA074.s | +| 0.914 | func_800A47F8.s | | 0.916 | func_800AA870.s | | 0.917 | func_800B0EDC.s | -| 0.925 | func_800C684C.s | | 0.925 | func_800C5668.s | -| 0.929 | func_800D3958.s | -| 0.929 | func_800D3A70.s | -| 0.929 | func_800D3840.s | +| 0.925 | func_800C684C.s | +| 0.925 | func_800AB310.s | | 0.929 | func_800D3728.s | +| 0.929 | func_800D3840.s | +| 0.929 | func_800D3A70.s | +| 0.929 | func_800D3958.s | | 0.939 | func_800CD91C.s | | 0.939 | func_800CDB0C.s | +| 0.943 | func_800CF4CC.s | | 0.943 | func_800BC338.s | +| 0.945 | func_800D4B28.s | | 0.947 | func_800BEAD4.s | -| 0.947 | func_800C9F78.s | -| 0.947 | func_800C9E7C.s | -| 0.947 | func_800C9B88.s | | 0.947 | func_800C9C84.s | | 0.947 | func_800C9D80.s | +| 0.947 | func_800C9B88.s | +| 0.947 | func_800C9E7C.s | +| 0.947 | func_800C9F78.s | | 0.948 | func_800CA158.s | | 0.948 | func_800CA394.s | | 0.948 | func_800C532C.s | @@ -529,12 +862,14 @@ | 0.965 | func_800AA514.s | | 0.967 | func_800A8858.s | | 0.968 | func_800D6F6C.s | +| 0.969 | func_800D9F00.s | | 0.971 | func_800D1DB8.s | | 0.971 | func_800AB4AC.s | | 0.972 | func_800D4038.s | | 0.976 | func_800D1A80.s | | 0.977 | func_800D775C.s | | 0.977 | func_800D3F30.s | +| 0.977 | func_800D84CC.s | | 0.979 | func_800CCD54.s | | 0.979 | func_800D3004.s | | 0.980 | func_800CF874.s | @@ -544,19 +879,23 @@ | 0.981 | func_800D6E0C.s | | 0.981 | func_800D785C.s | | 0.981 | func_800CA254.s | +| 0.982 | func_800C5E80.s | | 0.982 | func_800D152C.s | | 0.986 | func_800CA490.s | | 0.989 | func_800CF718.s | -| 0.989 | func_800CADFC.s | | 0.989 | func_800CAC98.s | +| 0.989 | func_800CADFC.s | | 0.989 | func_800C4EE8.s | +| 0.990 | func_800D9FFC.s | | 0.990 | func_800CF9B8.s | | 0.991 | func_800D3124.s | | 0.991 | func_800D195C.s | +| 0.991 | func_800C5CE8.s | | 0.991 | func_800C1BF4.s | | 0.992 | func_800C2E00.s | | 0.994 | func_800D0938.s | | 0.995 | func_800C9A20.s | +| 0.995 | func_800CF368.s | | 0.996 | func_800CFCE4.s | | 0.996 | func_800C9080.s | | 0.996 | func_800CD3F0.s | @@ -579,7 +918,9 @@ | 0.999 | func_800C5898.s | | 0.999 | func_800CE054.s | | 0.999 | func_800A424C.s | +| 0.999 | func_800A8640.s | | 0.999 | func_800CDE8C.s | +| 0.999 | func_800A496C.s | | 0.999 | func_800A14D8.s | | 0.999 | func_800B1C7C.s | | 0.999 | func_800CE6F4.s | @@ -602,6 +943,7 @@ | 1.000 | func_800C3A20.s | | 1.000 | func_800D1654.s | | 1.000 | func_800D7D6C.s | +| 1.000 | func_800BB1B4.s | | 1.000 | func_800CE214.s | | 1.000 | func_800CE480.s | | 1.000 | func_800C6D64.s | @@ -613,410 +955,473 @@ | 1.000 | func_800C1858.s | | 1.000 | func_800C6FD8.s | | 1.000 | func_800C3C34.s | +| 1.000 | func_800D4EB4.s | | 1.000 | func_800AF6EC.s | | 1.000 | func_800D44E8.s | | 1.000 | func_800B480C.s | +| 1.000 | func_800D7A58.s | | 1.000 | func_800D579C.s | | 1.000 | func_800AB728.s | | 1.000 | func_800AE23C.s | | 1.000 | func_800CEB94.s | +| 1.000 | func_800C826C.s | | 1.000 | func_800C13B0.s | | 1.000 | func_800B5260.s | | 1.000 | func_800CFE78.s | -| 1.000 | func_800D0180.s | | 1.000 | func_800A8304.s | +| 1.000 | func_800D0180.s | | 1.000 | func_800D9C04.s | -| 1.000 | func_800ABFE8.s | | 1.000 | func_800D0518.s | -| 1.000 | func_800C8B98.s | +| 1.000 | func_800ABFE8.s | | 1.000 | func_800C63CC.s | -| 1.000 | func_800C91D8.s | | 1.000 | func_800B2A00.s | +| 1.000 | func_800C8B98.s | +| 1.000 | func_800C91D8.s | +| 1.000 | func_800ABA70.s | | 1.000 | func_800B4EAC.s | -| 1.000 | func_800B4B04.s | -| 1.000 | func_800B2F40.s | -| 1.000 | func_800D2164.s | -| 1.000 | func_800C955C.s | -| 1.000 | func_800B2598.s | -| 1.000 | func_800B1E40.s | -| 1.000 | func_800B5504.s | -| 1.000 | func_800B0FB0.s | -| 1.000 | func_800B0A48.s | -| 1.000 | func_800B0618.s | +| 1.000 | func_800BC9FC.s | | 1.000 | func_800AFE1C.s | -| 1.000 | func_800AFAC4.s | -| 1.000 | func_800B62C4.s | | 1.000 | func_800AEE24.s | | 1.000 | func_800AE4DC.s | -| 1.000 | func_800B6B4C.s | +| 1.000 | func_800B0618.s | | 1.000 | func_800ADD70.s | -| 1.000 | func_800B79B8.s | -| 1.000 | func_800B86D8.s | +| 1.000 | func_800BEE10.s | +| 1.000 | func_800BF3AC.s | | 1.000 | func_800ACC5C.s | +| 1.000 | func_800B0A48.s | | 1.000 | func_800AC35C.s | -| 1.000 | func_800B8CF0.s | -| 1.000 | func_800ABA70.s | -| 1.000 | func_800B9B0C.s | +| 1.000 | func_800B0FB0.s | +| 1.000 | func_800BF908.s | +| 1.000 | func_800BB3A8.s | +| 1.000 | func_800BC4D4.s | | 1.000 | func_800AAB24.s | -| 1.000 | func_800BA7C4.s | +| 1.000 | func_800C0248.s | | 1.000 | func_800D0B4C.s | -| 1.000 | func_800BB3A8.s | -| 1.000 | func_800BBBCC.s | +| 1.000 | func_800B1E40.s | +| 1.000 | func_800B2598.s | +| 1.000 | func_800D5228.s | | 1.000 | func_800BBF74.s | -| 1.000 | func_800A8F88.s | -| 1.000 | func_800BC9FC.s | -| 1.000 | func_800BEE10.s | +| 1.000 | func_800B2F40.s | | 1.000 | func_800D5C9C.s | +| 1.000 | func_800B4B04.s | +| 1.000 | func_800AFAC4.s | +| 1.000 | func_800C33B4.s | +| 1.000 | func_800B5504.s | +| 1.000 | func_800D726C.s | +| 1.000 | func_800C5FF4.s | +| 1.000 | func_800B62C4.s | +| 1.000 | func_800A8F88.s | +| 1.000 | func_800B6B4C.s | +| 1.000 | func_800BBBCC.s | +| 1.000 | func_800C6924.s | | 1.000 | func_800A8968.s | -| 1.000 | func_800BF3AC.s | +| 1.000 | func_800B79B8.s | +| 1.000 | func_800B86D8.s | | 1.000 | func_800A65A4.s | -| 1.000 | func_800BF908.s | +| 1.000 | func_800C75F0.s | | 1.000 | func_800A5FB4.s | | 1.000 | func_800A4BEC.s | -| 1.000 | func_800C0248.s | -| 1.000 | func_800C33B4.s | -| 1.000 | func_800C5FF4.s | -| 1.000 | func_800C6924.s | +| 1.000 | func_800C7D5C.s | | 1.000 | func_800D8710.s | -| 1.000 | func_800C75F0.s | +| 1.000 | func_800B8CF0.s | +| 1.000 | func_800B9B0C.s | +| 1.000 | func_800C8634.s | +| 1.000 | func_800BA7C4.s | | 1.000 | func_800A364C.s | | 1.000 | func_800A3020.s | -| 1.000 | func_800C7D5C.s | +| 1.000 | func_800D2164.s | | 1.000 | func_800A2314.s | | 1.000 | func_800A16CC.s | -| 1.000 | func_800C8634.s | +| 1.000 | func_800C955C.s | ## main | Score | Function | | --- | --- | +| 0.000 | D_8001029C.s | | 0.011 | func_800197B8.s | +| 0.026 | func_8001A440.s | | 0.035 | InitCARD.s | +| 0.045 | func_800299C8.s | | 0.046 | func_80018D4C.s | | 0.047 | StartCARD.s | +| 0.054 | func_80014804.s | +| 0.056 | func_80033BE0.s | | 0.058 | func_80034150.s | +| 0.063 | func_800148B4.s | | 0.063 | SsInitHot.s | | 0.068 | func_8003408C.s | +| 0.073 | func_80026090.s | | 0.092 | AverageSZ4.s | | 0.092 | func_800425F8.s | | 0.099 | rsin.s | | 0.100 | StUnSetRing.s | | 0.101 | CdReset.s | | 0.106 | func_8001A174.s | -| 0.110 | func_8001A5B4.s | -| 0.110 | func_8002B7E0.s | -| 0.110 | func_8002B9AC.s | -| 0.110 | DecDCToutSync.s | -| 0.110 | StCdInterrupt2.s | -| 0.110 | DecDCTinSync.s | -| 0.110 | PadStop.s | +| 0.110 | func_8002C850.s | +| 0.110 | func_8002C81C.s | +| 0.110 | func_80036298.s | | 0.110 | func_8003E2B0.s | -| 0.110 | DecDCTout.s | -| 0.110 | func_8003DE4C.s | +| 0.110 | PadStop.s | | 0.110 | func_8003DE2C.s | +| 0.110 | DecDCToutSync.s | | 0.110 | func_8003DD84.s | -| 0.110 | func_80036298.s | -| 0.110 | DecDCTBufSize.s | -| 0.110 | SetDQB.s | -| 0.110 | SetIR0.s | -| 0.110 | SetDQA.s | +| 0.110 | DecDCTout.s | +| 0.110 | func_800343F0.s | +| 0.110 | DecDCTinSync.s | +| 0.110 | StCdInterrupt2.s | +| 0.110 | func_80034F3C.s | +| 0.110 | func_8003DE4C.s | +| 0.110 | func_8002CF78.s | | 0.110 | SetData32.s | +| 0.110 | SetDQB.s | +| 0.110 | func_800211B8.s | +| 0.110 | DecDCTBufSize.s | +| 0.110 | func_80023050.s | | 0.110 | Lzc.s | +| 0.110 | SetDQA.s | +| 0.110 | func_80026A00.s | +| 0.110 | SetIR0.s | +| 0.110 | func_800155A4.s | +| 0.110 | func_80015B44.s | +| 0.110 | func_80026B64.s | | 0.116 | func_8001A980.s | | 0.118 | func_800294A4.s | | 0.118 | DecDCTReset.s | -| 0.120 | func_8002B730.s | +| 0.119 | func_800191A0.s | +| 0.120 | func_8002C408.s | +| 0.120 | func_8002BE2C.s | +| 0.120 | func_8002C0CC.s | +| 0.120 | func_8002BDCC.s | +| 0.120 | func_8002C3A8.s | +| 0.120 | func_8002C12C.s | | 0.120 | func_80034104.s | | 0.120 | func_80024A04.s | | 0.120 | _card_clear.s | -| 0.120 | _cmp.s | -| 0.120 | DecDCTinCallback.s | -| 0.120 | SpuSetReverbVoice.s | -| 0.120 | DecDCToutCallback.s | -| 0.120 | SpuSetNoiseVoice.s | -| 0.120 | func_8003E28C.s | -| 0.120 | func_800293D0.s | +| 0.120 | SpuSetPitchLFOVoice.s | | 0.120 | CdMix.s | -| 0.120 | CdGetSector.s | +| 0.120 | func_800293D0.s | +| 0.120 | SpuSetNoiseVoice.s | +| 0.120 | SpuSetReverbVoice.s | | 0.120 | _SpuCallback.s | | 0.120 | _SpuDataCallback.s | | 0.120 | _addque.s | -| 0.120 | SpuSetPitchLFOVoice.s | -| 0.120 | PAD_dr.s | -| 0.120 | InitHeap.s | -| 0.120 | _card_load.s | -| 0.120 | _card_info.s | -| 0.120 | _new_card.s | -| 0.120 | _card_auto.s | -| 0.120 | _bu_init.s | -| 0.120 | bcopy.s | -| 0.120 | close.s | -| 0.120 | write.s | -| 0.120 | _96_remove.s | +| 0.120 | _cmp.s | +| 0.120 | DecDCToutCallback.s | +| 0.120 | DecDCTinCallback.s | +| 0.120 | func_8003E28C.s | +| 0.120 | CdGetSector.s | | 0.120 | WaitEvent.s | -| 0.120 | strncmp.s | -| 0.120 | UnDeliverEvent.s | -| 0.120 | TestEvent.s | -| 0.120 | SystemError.s | -| 0.120 | StopPAD.s | -| 0.120 | StartPAD.s | -| 0.120 | StartCARD2.s | -| 0.120 | CdLastPos.s | -| 0.120 | strlen.s | -| 0.120 | delete.s | -| 0.120 | exit.s | -| 0.120 | strcmp.s | | 0.120 | firstfile.s | -| 0.120 | format.s | -| 0.120 | func_80034410.s | -| 0.120 | SetVertex2.s | -| 0.120 | SetVertex1.s | -| 0.120 | func_80023AC4.s | -| 0.120 | SetVertex0.s | -| 0.120 | ChangeClearPAD.s | -| 0.120 | ChangeClearRCnt.s | -| 0.120 | CheckCallback.s | -| 0.120 | CloseEvent.s | | 0.120 | srand.s | -| 0.120 | setjmp.s | -| 0.120 | read.s | -| 0.120 | rand.s | +| 0.120 | func_8003FA9C.s | +| 0.120 | write.s | +| 0.120 | SetMem.s | | 0.120 | SetSp.s | -| 0.120 | puts.s | -| 0.120 | printf.s | +| 0.120 | ChangeClearPAD.s | +| 0.120 | CdLastPos.s | +| 0.120 | nextfile.s | +| 0.120 | memset.s | +| 0.120 | strncmp.s | | 0.120 | open.s | +| 0.120 | printf.s | +| 0.120 | strlen.s | +| 0.120 | ChangeClearRCnt.s | +| 0.120 | memcpy.s | +| 0.120 | puts.s | +| 0.120 | strcmp.s | +| 0.120 | SetVertex0.s | +| 0.120 | func_8003DCD8.s | | 0.120 | DeliverEvent.s | +| 0.120 | SetVertex1.s | | 0.120 | DisableEvent.s | +| 0.120 | SetVertex2.s | +| 0.120 | rand.s | | 0.120 | EnableEvent.s | +| 0.120 | read.s | +| 0.120 | func_80034410.s | +| 0.120 | CloseEvent.s | +| 0.120 | SetGeomScreen.s | | 0.120 | EnterCriticalSection.s | +| 0.120 | memchr.s | +| 0.120 | func_80023AC4.s | +| 0.120 | setjmp.s | +| 0.120 | StartCARD2.s | | 0.120 | ExitCriticalSection.s | +| 0.120 | StartPAD.s | | 0.120 | FlushCache.s | | 0.120 | GPU_cw.s | +| 0.120 | StopPAD.s | +| 0.120 | format.s | +| 0.120 | ReturnFromException.s | +| 0.120 | exit.s | +| 0.120 | delete.s | +| 0.120 | SystemError.s | +| 0.120 | TestEvent.s | +| 0.120 | ResetEntryInt.s | +| 0.120 | UnDeliverEvent.s | +| 0.120 | close.s | +| 0.120 | ReadLZC.s | +| 0.120 | bcopy.s | +| 0.120 | ReadGeomScreen.s | +| 0.120 | AverageSZ3.s | +| 0.120 | _96_remove.s | | 0.120 | GetGraphDebug.s | | 0.120 | GetGraphType.s | -| 0.120 | SetMem.s | +| 0.120 | PAD_init.s | | 0.120 | GetVideoMode.s | | 0.120 | HookEntryInt.s | -| 0.120 | nextfile.s | +| 0.120 | PAD_dr.s | | 0.120 | InitCARD2.s | -| 0.120 | _card_write.s | -| 0.120 | memset.s | -| 0.120 | memcpy.s | -| 0.120 | func_8003DCD8.s | -| 0.120 | SetGeomScreen.s | -| 0.120 | memchr.s | +| 0.120 | InitHeap.s | | 0.120 | InitPAD.s | -| 0.120 | func_8003DCE8.s | -| 0.120 | func_8003DCF8.s | -| 0.120 | OpenEvent.s | -| 0.120 | ReturnFromException.s | -| 0.120 | ResetEntryInt.s | -| 0.120 | ReadLZC.s | -| 0.120 | ReadGeomScreen.s | -| 0.120 | func_8003FA9C.s | +| 0.120 | CheckCallback.s | | 0.120 | OpenTIM.s | -| 0.120 | PAD_init.s | -| 0.120 | AverageSZ3.s | +| 0.120 | _new_card.s | +| 0.120 | OpenEvent.s | +| 0.120 | func_8003DCF8.s | +| 0.120 | _bu_init.s | +| 0.120 | _card_auto.s | +| 0.120 | _card_info.s | +| 0.120 | func_8003DCE8.s | +| 0.120 | _card_write.s | +| 0.120 | _card_load.s | +| 0.121 | func_8001C788.s | | 0.124 | func_80034F5C.s | | 0.126 | func_80029A50.s | | 0.130 | func_80018C94.s | -| 0.131 | func_8002B8B4.s | | 0.131 | PadInit.s | | 0.131 | func_80034CAC.s | -| 0.131 | def_cbread.s | -| 0.131 | def_cbready.s | | 0.131 | def_cbsync.s | -| 0.131 | SetSprt8.s | -| 0.131 | SetRGBfifo.s | -| 0.131 | SetLineF2.s | -| 0.131 | SetBlockFill.s | -| 0.131 | func_80034D18.s | -| 0.131 | SetLineG2.s | -| 0.131 | SetMAC123.s | -| 0.131 | SetPolyF3.s | -| 0.131 | SetPolyF4.s | -| 0.131 | SetPolyFT3.s | -| 0.131 | SetPolyFT4.s | -| 0.131 | SetPolyG3.s | -| 0.131 | SetPolyG4.s | -| 0.131 | SetPolyGT3.s | -| 0.131 | SetPolyGT4.s | +| 0.131 | def_cbready.s | +| 0.131 | def_cbread.s | | 0.131 | VectorNormalS.s | -| 0.131 | SetRii.s | +| 0.131 | SetTile1.s | +| 0.131 | func_80034D18.s | | 0.131 | SetSXSYfifo.s | | 0.131 | SetSZfifo3.s | +| 0.131 | SetRGBfifo.s | | 0.131 | SetSprt.s | | 0.131 | SetSprt16.s | +| 0.131 | SetPolyF4.s | +| 0.131 | SetPolyGT4.s | +| 0.131 | SetSprt8.s | +| 0.131 | SetPolyGT3.s | +| 0.131 | SetMAC123.s | +| 0.131 | func_8001C484.s | +| 0.131 | SetPolyG4.s | +| 0.131 | func_800148A0.s | +| 0.131 | SetPolyFT3.s | | 0.131 | SetIR123.s | | 0.131 | SetTile.s | -| 0.131 | SetTile1.s | +| 0.131 | SetRii.s | | 0.131 | SetTile16.s | | 0.131 | SetTile8.s | +| 0.131 | SetPolyG3.s | +| 0.131 | SetPolyF3.s | +| 0.131 | SetLineG2.s | +| 0.131 | SetPolyFT4.s | +| 0.131 | SetLineF2.s | +| 0.131 | func_80026A0C.s | +| 0.131 | func_80034430.s | +| 0.131 | SetBlockFill.s | +| 0.131 | func_80026A20.s | +| 0.140 | func_8002D410.s | +| 0.140 | func_8002D4A0.s | | 0.141 | SpuStart.s | -| 0.143 | func_8002B904.s | -| 0.143 | func_8002B958.s | | 0.143 | func_80041CD4.s | -| 0.143 | func_8002BA08.s | +| 0.143 | func_80029424.s | | 0.143 | func_80029464.s | | 0.143 | VectorNormal.s | -| 0.143 | func_8003DE6C.s | -| 0.143 | TermPrim.s | -| 0.143 | func_8002C8C4.s | | 0.143 | GetClut.s | -| 0.143 | _status.s | -| 0.143 | SetSZfifo4.s | -| 0.143 | SetVideoMode.s | -| 0.143 | func_8003DDA4.s | | 0.143 | func_80041EFC.s | +| 0.143 | func_8003DE6C.s | | 0.143 | GetIntrMask.s | +| 0.143 | _status.s | +| 0.143 | func_8003DDA4.s | +| 0.143 | TermPrim.s | +| 0.143 | _getctl.s | +| 0.143 | func_800269E8.s | | 0.143 | func_8003DE84.s | | 0.143 | ReadOTZ.s | -| 0.143 | _getctl.s | +| 0.143 | func_8002C8C4.s | +| 0.143 | func_800269D0.s | +| 0.143 | SetVideoMode.s | +| 0.143 | SetSZfifo4.s | | 0.145 | func_8002988C.s | | 0.147 | func_80035CF0.s | | 0.149 | func_80041AFC.s | -| 0.154 | SetShadeTex.s | | 0.154 | SetSemiTrans.s | +| 0.154 | SetShadeTex.s | | 0.156 | cd_read.s | -| 0.156 | func_8002B668.s | -| 0.156 | PadRead.s | | 0.156 | StSetRing.s | +| 0.156 | func_800293F4.s | +| 0.156 | PadRead.s | | 0.156 | SetDrawMove.s | -| 0.156 | DpqColor.s | -| 0.156 | IsEndPrim.s | -| 0.156 | SetIntrMask.s | | 0.156 | NextPrim.s | +| 0.156 | SetIntrMask.s | +| 0.156 | IsEndPrim.s | | 0.156 | NormalColor.s | -| 0.161 | func_8002D530.s | +| 0.156 | DpqColor.s | | 0.161 | func_8002D668.s | +| 0.161 | func_8002D530.s | | 0.164 | SpuSetTransferMode.s | | 0.164 | CdInit.s | | 0.167 | func_8001A384.s | | 0.167 | SpuSetIRQAddr.s | -| 0.170 | func_8002B6AC.s | +| 0.170 | func_800211C4.s | | 0.170 | set_alarm.s | +| 0.170 | AverageZ3.s | +| 0.170 | StSetMask.s | | 0.170 | SetLineG3.s | -| 0.170 | SetLineF3.s | -| 0.170 | SetLineG4.s | -| 0.170 | SetVertexTri.s | +| 0.170 | SetFarColor.s | | 0.170 | SetTransMatrix.s | | 0.170 | NormalColorCol.s | | 0.170 | SetGeomOffset.s | +| 0.170 | SetLineF3.s | +| 0.170 | SetLineG4.s | +| 0.170 | ReadGeomOffset.s | +| 0.170 | SetVertexTri.s | | 0.170 | SetLineF4.s | -| 0.170 | AverageZ3.s | -| 0.170 | SetFarColor.s | | 0.170 | SetBackColor.s | -| 0.170 | StSetMask.s | -| 0.170 | ReadGeomOffset.s | +| 0.178 | func_80034754.s | +| 0.181 | func_80014BE4.s | | 0.181 | func_80048C58.s | | 0.181 | SpuSetTransferCallback.s | | 0.183 | func_800260DC.s | | 0.185 | GetDispEnv.s | -| 0.185 | func_8002BBB4.s | | 0.185 | GetDrawEnv.s | -| 0.185 | NormalColorDpq.s | -| 0.185 | CatPrim.s | +| 0.185 | func_8002BBB4.s | | 0.185 | LocalLight.s | +| 0.185 | Intpl.s | | 0.185 | AverageZ4.s | +| 0.185 | NormalColorDpq.s | +| 0.185 | CatPrim.s | | 0.185 | ColorCol.s | -| 0.185 | Intpl.s | | 0.185 | VectorNormalSS.s | -| 0.187 | func_80034A90.s | +| 0.190 | func_80035D64.s | | 0.193 | func_80025174.s | | 0.197 | _ExitCard.s | | 0.197 | SetPriority.s | | 0.197 | func_800346F8.s | -| 0.198 | MargePrim.s | | 0.198 | func_80025B48.s | +| 0.198 | MargePrim.s | | 0.200 | startIntrDMA.s | | 0.200 | CD_initintr.s | | 0.200 | SetTexWindow.s | | 0.200 | func_8002BA5C.s | -| 0.200 | ColorDpq.s | -| 0.200 | DpqColorLight.s | -| 0.200 | LightColor.s | -| 0.200 | Square12.s | | 0.200 | Square0.s | -| 0.210 | GPU_memset.s | -| 0.210 | memclr.s | +| 0.200 | ColorDpq.s | +| 0.200 | Square12.s | +| 0.200 | LightColor.s | +| 0.200 | DpqColorLight.s | | 0.210 | DMA_memclr.s | +| 0.210 | memclr.s | | 0.210 | VSync_memclr.s | +| 0.210 | GPU_memset.s | | 0.213 | setIntrVSync.s | +| 0.213 | func_80014C44.s | | 0.214 | _spu_write.s | | 0.214 | StGetBackloc.s | -| 0.214 | func_8003DDF4.s | +| 0.214 | ResetRCnt.s | | 0.214 | func_80019E4C.s | +| 0.214 | func_8003DDF4.s | | 0.214 | func_80025B10.s | -| 0.214 | func_8003DDBC.s | -| 0.214 | ResetRCnt.s | | 0.214 | GetRCnt.s | +| 0.214 | func_8003DDBC.s | +| 0.216 | func_8001840C.s | | 0.216 | func_80034350.s | | 0.217 | _spu_read.s | | 0.217 | OpenTMD.s | +| 0.217 | func_80026408.s | | 0.217 | func_8001FA28.s | -| 0.217 | _spu_FsetDelayW.s | | 0.217 | func_8002CC18.s | | 0.217 | _ctl.s | | 0.217 | func_8003345C.s | +| 0.217 | _spu_FsetDelayW.s | | 0.217 | _spu_FsetDelayR.s | +| 0.219 | func_80014B08.s | +| 0.222 | func_8002120C.s | | 0.228 | CdGetDiskType.s | +| 0.231 | func_80026258.s | | 0.231 | func_80019D1C.s | | 0.231 | SpuSetIRQCallback.s | -| 0.231 | func_80048BBC.s | | 0.231 | DecDCTvlcSize.s | +| 0.231 | func_80048BBC.s | +| 0.231 | func_80029998.s | +| 0.231 | func_80015D14.s | | 0.231 | _spu_FgetRXXa.s | | 0.234 | startIntrVSync.s | | 0.234 | SetDrawMode.s | -| 0.235 | func_8001FA68.s | | 0.235 | func_800345BC.s | +| 0.235 | func_8001FA68.s | | 0.235 | func_8001FAAC.s | | 0.235 | SetDrawOffset.s | -| 0.235 | TransMatrix.s | +| 0.235 | func_8003447C.s | +| 0.235 | func_800347B4.s | +| 0.235 | func_80031CB0.s | +| 0.235 | _param.s | | 0.235 | RotTrans.s | -| 0.235 | RotTransPers.s | +| 0.235 | SetLightMatrix.s | +| 0.235 | RestartCallback.s | | 0.235 | RotTransSV.s | -| 0.235 | SetColorMatrix.s | -| 0.235 | func_800254E4.s | +| 0.235 | TransMatrix.s | +| 0.235 | ResetCallback.s | +| 0.235 | SetRotMatrix.s | +| 0.235 | VSyncCallbacks.s | | 0.235 | DMACallback.s | -| 0.235 | func_80034D2C.s | -| 0.235 | ApplyRotMatrix.s | -| 0.235 | RestartCallback.s | -| 0.235 | _param.s | +| 0.235 | SquareSL12.s | | 0.235 | StopCallback.s | +| 0.235 | ApplyRotMatrix.s | | 0.235 | InterruptCallback.s | -| 0.235 | VSyncCallbacks.s | -| 0.235 | SetRotMatrix.s | -| 0.235 | ChangeClearSIO.s | -| 0.235 | func_8003CE0C.s | -| 0.235 | func_80031CB0.s | -| 0.235 | SetLightMatrix.s | +| 0.235 | func_800254E4.s | +| 0.235 | RotTransPers.s | +| 0.235 | SetColorMatrix.s | | 0.235 | SquareSL0.s | -| 0.235 | ResetCallback.s | -| 0.235 | SquareSL12.s | +| 0.235 | func_8003CE0C.s | +| 0.235 | func_80034D2C.s | +| 0.235 | ChangeClearSIO.s | +| 0.238 | func_8002305C.s | +| 0.241 | func_8001A4A8.s | | 0.243 | csqrt.s | | 0.244 | func_8001A280.s | | 0.245 | func_80041620.s | | 0.245 | CD_memcpy.s | +| 0.245 | func_80029B78.s | +| 0.246 | func_80019440.s | +| 0.246 | func_80018390.s | | 0.249 | func_800184C0.s | | 0.249 | _patch_gte.s | +| 0.249 | func_8001DEF0.s | | 0.250 | SpuSetTransferStartAddr.s | +| 0.253 | func_80022FE0.s | +| 0.253 | func_8002CEC0.s | +| 0.253 | func_8002CF1C.s | | 0.253 | GetODE.s | +| 0.253 | StopRCnt.s | +| 0.253 | VSyncCallback.s | +| 0.253 | func_800257CC.s | | 0.253 | func_8002C2CC.s | | 0.253 | StartRCnt.s | -| 0.253 | VSyncCallback.s | -| 0.253 | StopRCnt.s | -| 0.260 | func_8002D8E8.s | | 0.260 | func_8002D7A0.s | -| 0.264 | func_8002B5A8.s | -| 0.264 | func_8002B608.s | +| 0.260 | func_8002D8E8.s | | 0.265 | CdRead2.s | -| 0.268 | func_80029818.s | +| 0.266 | func_80015C3C.s | | 0.268 | func_800297A4.s | -| 0.273 | func_8002BFCC.s | +| 0.268 | func_80029818.s | +| 0.268 | func_80014980.s | +| 0.268 | func_80015B50.s | +| 0.268 | func_80015B88.s | +| 0.268 | func_80034444.s | +| 0.273 | func_80026A34.s | +| 0.273 | SquareSS0.s | | 0.273 | SquareSS12.s | | 0.273 | func_8002BCCC.s | -| 0.273 | SquareSS0.s | +| 0.273 | func_8002BFCC.s | +| 0.273 | func_80014B70.s | +| 0.281 | func_800146A4.s | | 0.284 | startIntr.s | +| 0.284 | func_8001C498.s | | 0.284 | SpuSetNoiseClock.s | | 0.289 | func_80018E90.s | | 0.289 | func_8003257C.s | @@ -1025,43 +1430,50 @@ | 0.290 | get_ofs.s | | 0.290 | _spu_FsetRXX.s | | 0.291 | get_mode.s | +| 0.293 | func_80012840.s | | 0.293 | func_8002E428.s | -| 0.293 | NormalColor3.s | +| 0.293 | func_8001FF50.s | +| 0.293 | AddPrims.s | +| 0.293 | func_80014C80.s | +| 0.293 | DpqColor3.s | | 0.293 | func_80033420.s | | 0.293 | AddPrim.s | -| 0.293 | DpqColor3.s | | 0.293 | SetDefDispEnv.s | -| 0.293 | AddPrims.s | +| 0.293 | NormalColor3.s | +| 0.293 | func_8002001C.s | | 0.305 | init_ring_status.s | | 0.308 | func_80034600.s | -| 0.310 | func_8001DE70.s | +| 0.310 | func_8001DEB0.s | | 0.310 | func_8002C884.s | -| 0.312 | func_8002B1F8.s | +| 0.310 | func_8001DE70.s | +| 0.314 | func_8001117C.s | | 0.314 | LoadClut.s | | 0.315 | func_80033224.s | | 0.315 | DumpClut.s | | 0.327 | func_80032BB4.s | | 0.327 | func_8001964C.s | +| 0.327 | func_80019608.s | | 0.330 | func_800347F8.s | | 0.330 | func_800344C0.s | | 0.332 | _patch_card2.s | +| 0.332 | func_80019338.s | | 0.332 | func_80031EEC.s | | 0.337 | func_80031BA0.s | | 0.337 | NormalColorCol3.s | | 0.350 | func_80018028.s | -| 0.355 | func_80015AFC.s | +| 0.351 | func_80014E0C.s | | 0.355 | func_8001FF8C.s | +| 0.355 | func_80015AFC.s | | 0.355 | func_8001FFD4.s | | 0.356 | ReadTIM.s | | 0.356 | SpuInitMalloc.s | -| 0.360 | ReadLightMatrix.s | | 0.360 | NormalColorDpq3.s | | 0.360 | ReadRotMatrix.s | +| 0.360 | ReadLightMatrix.s | | 0.368 | v_wait.s | | 0.368 | func_80048540.s | -| 0.373 | func_80038F04.s | | 0.373 | SpuRead.s | -| 0.374 | func_8002B2F8.s | +| 0.373 | func_80038F04.s | | 0.374 | func_800348F4.s | | 0.378 | func_800193F4.s | | 0.379 | func_80032C20.s | @@ -1071,17 +1483,23 @@ | 0.383 | func_80031AB0.s | | 0.383 | _cwc.s | | 0.392 | func_80025310.s | +| 0.392 | func_8002A748.s | +| 0.392 | func_8002A798.s | +| 0.397 | func_8002B1A8.s | | 0.397 | _cwb.s | | 0.399 | DecDCTin.s | | 0.402 | func_8003252C.s | +| 0.407 | func_80021BAC.s | | 0.407 | LoadImage.s | | 0.407 | StoreImage.s | -| 0.407 | TransposeMatrix.s | -| 0.407 | ApplyMatrix.s | -| 0.407 | func_80034DB0.s | +| 0.407 | SpuGetReverbModeParam.s | | 0.407 | LoadAverage0.s | | 0.407 | LoadAverage12.s | -| 0.407 | SpuGetReverbModeParam.s | +| 0.407 | ApplyMatrix.s | +| 0.407 | func_80034DB0.s | +| 0.407 | TransposeMatrix.s | +| 0.410 | func_80014A84.s | +| 0.417 | func_8001A3B8.s | | 0.421 | func_80031E98.s | | 0.423 | CdDiskReady.s | | 0.428 | restartIntr.s | @@ -1089,68 +1507,91 @@ | 0.428 | _spu_FwaitFs.s | | 0.428 | _spu_FsetPCR.s | | 0.430 | _SpuIsInAllocateArea.s | -| 0.432 | func_80036244.s | -| 0.432 | ReadColorMatrix.s | | 0.432 | func_80034D5C.s | +| 0.432 | ReadColorMatrix.s | +| 0.432 | func_80036244.s | +| 0.440 | func_80034974.s | | 0.446 | func_8001C5BC.s | | 0.446 | func_8001BA54.s | | 0.452 | func_8002CC44.s | | 0.457 | _spu_r_.s | -| 0.457 | func_800331CC.s | | 0.457 | OuterProduct12.s | | 0.457 | OuterProduct0.s | +| 0.457 | func_800331CC.s | +| 0.461 | func_8001C4E8.s | +| 0.465 | func_800135C0.s | | 0.467 | sin_1.s | +| 0.477 | func_80013564.s | | 0.477 | DrawSyncCallback.s | | 0.478 | SpuSetVoiceLoopStartAddr.s | | 0.478 | SpuSetVoiceStartAddr.s | | 0.481 | SpuGetKeyStatus.s | +| 0.482 | func_80021E70.s | | 0.482 | SetDrawArea.s | +| 0.485 | func_8001708C.s | +| 0.486 | func_8001A518.s | | 0.486 | func_80025288.s | | 0.496 | DecDCTPutEnv.s | | 0.502 | _patch_card.s | | 0.505 | _SpuIsInAllocateArea_.s | | 0.507 | func_80021D5C.s | -| 0.507 | RotAverage3.s | -| 0.507 | ApplyMatrixSV.s | -| 0.507 | DrawPrim.s | +| 0.507 | func_8001BD50.s | | 0.507 | LoadAverageByte.s | | 0.507 | RotTransPers3.s | +| 0.507 | ApplyMatrixSV.s | +| 0.507 | DrawPrim.s | +| 0.507 | RotAverage3.s | | 0.510 | func_8002BBEC.s | | 0.510 | func_8002C5C8.s | +| 0.510 | func_8002C6C8.s | | 0.516 | func_8002CB78.s | | 0.516 | func_8002C9E4.s | | 0.518 | func_80041D28.s | | 0.522 | func_80018E18.s | | 0.522 | func_80018AB0.s | -| 0.527 | func_800330C4.s | | 0.527 | func_80033060.s | | 0.527 | func_80032FFC.s | | 0.527 | func_80032F98.s | -| 0.527 | func_80032E08.s | | 0.527 | func_80032F34.s | | 0.527 | func_80032ED0.s | +| 0.527 | func_80032E08.s | +| 0.527 | func_80032E6C.s | +| 0.527 | func_800330C4.s | | 0.528 | func_80032B30.s | | 0.530 | func_80041E30.s | +| 0.532 | func_80011784.s | | 0.535 | func_80032A28.s | | 0.535 | func_800328F8.s | | 0.535 | func_80032770.s | +| 0.536 | func_8001C3CC.s | | 0.542 | func_80032D6C.s | +| 0.547 | func_80015BC0.s | +| 0.547 | func_8001BCE8.s | | 0.547 | StopCARD2.s | | 0.556 | _spu_FiDMA.s | +| 0.557 | func_80011BB4.s | | 0.560 | func_8002BA98.s | -| 0.560 | func_8002BC58.s | | 0.560 | func_8002C734.s | | 0.560 | func_8002C634.s | +| 0.560 | func_8002BC58.s | | 0.562 | rcos.s | | 0.569 | SetRCnt.s | -| 0.577 | DrawSync.s | +| 0.574 | func_8002A6C4.s | | 0.577 | SetGraphDebug.s | +| 0.577 | DrawSync.s | | 0.582 | InitGeom.s | | 0.591 | MDEC_out_sync.s | | 0.591 | MDEC_in_sync.s | +| 0.596 | func_80019064.s | +| 0.596 | func_800134F4.s | | 0.602 | SpuSetVoicePitch.s | +| 0.604 | func_8001A1C8.s | | 0.606 | func_80021C4C.s | +| 0.609 | func_800155B0.s | +| 0.620 | func_800194BC.s | +| 0.620 | func_8001B834.s | | 0.620 | func_80025040.s | +| 0.625 | func_80025668.s | | 0.625 | DrawOTag.s | | 0.625 | func_8001B570.s | | 0.630 | StSetStream.s | @@ -1159,29 +1600,36 @@ | 0.634 | SpuSetReverbDepth.s | | 0.644 | trapIntrVSync.s | | 0.649 | func_8003298C.s | +| 0.649 | func_80033C20.s | | 0.650 | get_tw.s | +| 0.652 | func_8001C808.s | | 0.652 | _spu_FsetRXXa.s | | 0.653 | func_8001937C.s | +| 0.657 | func_80033CB8.s | | 0.659 | get_dx.s | | 0.662 | SpuSetVoiceVolumeAttr.s | | 0.667 | func_80033264.s | -| 0.672 | SpuSetVoiceVolume.s | +| 0.671 | func_800256DC.s | | 0.672 | SpuSetVoiceSL.s | +| 0.672 | SpuSetVoiceVolume.s | | 0.676 | MDEC_out.s | -| 0.678 | func_80031FF0.s | | 0.683 | func_80035430.s | +| 0.684 | func_8001B4A0.s | +| 0.685 | func_8001FAF8.s | | 0.689 | func_80036038.s | +| 0.692 | func_80025380.s | | 0.693 | gteMIMefunc.s | | 0.694 | func_80036190.s | | 0.694 | SpuSetVoiceDR.s | | 0.698 | MDEC_in.s | | 0.698 | ClearImage.s | -| 0.698 | LoadAverageCol.s | -| 0.698 | RotAverage4.s | | 0.698 | RotTransPers4.s | +| 0.698 | RotAverage4.s | | 0.698 | CdPosToInt.s | +| 0.698 | LoadAverageCol.s | | 0.698 | LoadTPage.s | | 0.700 | func_80031CE0.s | +| 0.701 | func_8001C8D4.s | | 0.709 | func_80034E00.s | | 0.711 | func_800332EC.s | | 0.714 | SetDefDrawEnv.s | @@ -1193,106 +1641,155 @@ | 0.724 | func_800484A8.s | | 0.726 | SetDispMask.s | | 0.734 | func_800185A8.s | +| 0.735 | func_800182FC.s | | 0.738 | func_80029BAC.s | -| 0.738 | LoadAverageShort0.s | | 0.738 | LoadAverageShort12.s | +| 0.738 | LoadAverageShort0.s | | 0.738 | CD_vol.s | | 0.742 | CD_searchdir.s | -| 0.745 | InvSquareRoot.s | | 0.745 | DecDCTGetEnv.s | +| 0.745 | InvSquareRoot.s | | 0.751 | MDEC_reset.s | | 0.753 | PushMatrix.s | | 0.753 | PopMatrix.s | +| 0.757 | func_8001B8A8.s | | 0.757 | func_80026A94.s | | 0.758 | get_tim_addr.s | | 0.758 | SpuSetVoiceSRAttr.s | | 0.759 | func_80027354.s | | 0.760 | func_80036100.s | +| 0.764 | func_800190E8.s | | 0.764 | func_80018B14.s | +| 0.765 | func_80023788.s | | 0.767 | func_8002FDA0.s | +| 0.768 | func_80018FC0.s | | 0.772 | data_ready_callback.s | | 0.773 | SpuSetVoiceARAttr.s | | 0.783 | func_8002C300.s | +| 0.784 | func_80016F90.s | | 0.785 | setIntrDMA.s | | 0.786 | GetTPage.s | +| 0.789 | func_800129D0.s | +| 0.791 | func_80018220.s | +| 0.794 | func_80017E68.s | | 0.796 | _version.s | | 0.799 | func_80018A04.s | +| 0.802 | func_80019DA0.s | | 0.802 | SetGraphQueue.s | | 0.803 | SpuSetVoiceRRAttr.s | | 0.803 | func_8003337C.s | | 0.803 | SquareRoot0.s | | 0.805 | ClearOTagR.s | | 0.806 | RotAverageNclip3.s | -| 0.810 | func_80031BE4.s | -| 0.810 | func_80033128.s | | 0.810 | func_80031AFC.s | +| 0.810 | func_80033128.s | +| 0.810 | func_80031BE4.s | +| 0.812 | func_8001FE6C.s | +| 0.814 | func_80019544.s | +| 0.817 | func_8002FF4C.s | +| 0.817 | func_80030148.s | | 0.817 | MoveImage.s | | 0.818 | DumpTPage.s | | 0.821 | PutDrawEnv.s | | 0.824 | func_80031820.s | | 0.833 | StRingStatus.s | +| 0.835 | func_8001146C.s | | 0.843 | func_8002CCDC.s | +| 0.843 | func_80013800.s | | 0.856 | SquareRoot12.s | | 0.858 | _SpuInit.s | +| 0.868 | func_80030038.s | | 0.868 | func_80029E98.s | +| 0.871 | func_8001A780.s | | 0.873 | func_8002B3B4.s | | 0.874 | callback.s | | 0.875 | MatrixNormal.s | | 0.875 | DumpDispEnv.s | | 0.879 | StFreeRing.s | +| 0.882 | func_80025988.s | +| 0.882 | func_80025800.s | | 0.887 | func_80018BB8.s | | 0.889 | func_8002CDD0.s | -| 0.890 | func_8002BD04.s | +| 0.890 | func_80017F38.s | | 0.890 | func_8002C004.s | -| 0.895 | get_cs.s | +| 0.890 | func_8002BD04.s | | 0.895 | get_ce.s | +| 0.895 | get_cs.s | | 0.898 | _otc.s | | 0.899 | ClearOTag.s | | 0.899 | _reset.s | | 0.903 | RotAverageNclip4.s | +| 0.908 | func_80019254.s | | 0.908 | func_80032804.s | +| 0.911 | func_8001BC18.s | +| 0.911 | func_80018934.s | | 0.913 | __SN_ENTRY_POINT.s | +| 0.916 | func_8001B944.s | +| 0.921 | func_8002368C.s | | 0.921 | func_80018ECC.s | | 0.923 | SetFogNearFar.s | +| 0.923 | func_80034BB0.s | | 0.923 | StGetNext.s | | 0.925 | ResetGraph.s | | 0.927 | func_8003A0E8.s | +| 0.927 | func_8002FE48.s | +| 0.928 | func_80035F14.s | | 0.930 | func_800112E8.s | +| 0.930 | func_80025ED4.s | | 0.930 | func_8002A43C.s | +| 0.933 | func_80011AEC.s | | 0.934 | func_8001A684.s | +| 0.936 | func_8001B5E4.s | +| 0.938 | func_80025A44.s | +| 0.938 | func_800258BC.s | | 0.940 | get_tmd_addr.s | +| 0.941 | func_80018834.s | | 0.944 | checkRECT.s | | 0.947 | CdControlB.s | | 0.950 | func_8002CA84.s | +| 0.951 | func_8001A874.s | | 0.953 | setIntr.s | | 0.953 | func_80028484.s | +| 0.956 | func_8001AE08.s | | 0.957 | CdControlF.s | +| 0.957 | func_800128B8.s | | 0.958 | func_8001BB30.s | +| 0.959 | func_8001FBAC.s | +| 0.959 | func_8002D1E4.s | | 0.961 | func_800138EC.s | | 0.961 | CD_flush.s | +| 0.961 | func_80033A90.s | | 0.964 | func_80032614.s | | 0.964 | func_80019690.s | | 0.966 | MulRotMatrix0.s | | 0.967 | func_8002CFC0.s | +| 0.968 | func_80025514.s | | 0.968 | CdControl.s | | 0.969 | func_8002F738.s | | 0.970 | MulRotMatrix.s | | 0.970 | func_8002382C.s | | 0.970 | func_80022B5C.s | | 0.971 | func_80017108.s | +| 0.971 | func_80026F44.s | | 0.972 | func_800150E4.s | | 0.972 | func_80031D6C.s | | 0.974 | main.s | | 0.974 | func_8001B704.s | | 0.975 | CD_datasync.s | +| 0.975 | func_8002C8DC.s | | 0.976 | func_8002E23C.s | | 0.976 | VSync.s | | 0.976 | CD_initvol.s | +| 0.977 | func_80019E84.s | +| 0.977 | func_80024A3C.s | | 0.978 | func_800318BC.s | | 0.978 | func_80030234.s | | 0.979 | func_800354CC.s | +| 0.979 | func_800159B0.s | | 0.979 | timeout.s | | 0.981 | get_alarm.s | +| 0.981 | func_800119E4.s | +| 0.982 | func_8002DF88.s | | 0.982 | CD_getsector.s | | 0.982 | func_80019F90.s | | 0.983 | func_8001AB1C.s | @@ -1302,15 +1799,19 @@ | 0.985 | SetGraphReverse.s | | 0.985 | func_8001A9CC.s | | 0.986 | csqrt_1.s | +| 0.986 | func_800262D8.s | | 0.986 | func_8002A7E8.s | | 0.987 | func_8001155C.s | | 0.987 | func_800323CC.s | | 0.987 | MulMatrix0.s | | 0.988 | ratan2.s | -| 0.989 | SetMulMatrix.s | +| 0.988 | func_80028CA0.s | | 0.989 | MulMatrix.s | +| 0.989 | SetMulMatrix.s | | 0.989 | MulMatrix2.s | | 0.990 | func_80016808.s | +| 0.990 | func_8002D2D4.s | +| 0.991 | func_8002A958.s | | 0.991 | func_80035DC8.s | | 0.991 | func_800418D8.s | | 0.993 | _spu_writeByIO.s | @@ -1318,6 +1819,7 @@ | 0.994 | func_8001FCDC.s | | 0.994 | CD_init.s | | 0.995 | ScaleMatrix.s | +| 0.997 | func_800166C0.s | | 0.997 | func_80023940.s | | 0.997 | trapIntrDMA.s | | 0.997 | func_80032274.s | @@ -1325,18 +1827,24 @@ | 0.997 | DumpDrawEnv.s | | 0.997 | func_80029F44.s | | 0.998 | func_8001AC9C.s | +| 0.998 | func_8001C980.s | +| 0.998 | func_8002A510.s | | 0.998 | CompMatrix.s | | 0.999 | func_800487F0.s | | 0.999 | func_80014E74.s | | 0.999 | trapIntr.s | +| 0.999 | func_80015248.s | | 0.999 | func_80041654.s | +| 0.999 | func_8002A094.s | | 0.999 | func_8001F710.s | | 0.999 | func_80033894.s | | 0.999 | func_800320C4.s | +| 0.999 | func_80013624.s | | 0.999 | ApplyMatrixLV.s | -| 1.000 | RotMatrixX.s | | 1.000 | RotMatrixZ.s | | 1.000 | RotMatrixY.s | +| 1.000 | RotMatrixX.s | +| 1.000 | func_80018630.s | | 1.000 | _clr.s | | 1.000 | CdSearchFile.s | | 1.000 | _spu_init.s | @@ -1365,9 +1873,10 @@ | 1.000 | func_8002DA7C.s | | 1.000 | func_800485A0.s | | 1.000 | func_8001EC70.s | +| 1.000 | func_800264A8.s | +| 1.000 | RotMatrixYXZ.s | | 1.000 | RotMatrixZYX.s | | 1.000 | RotMatrix.s | -| 1.000 | RotMatrixYXZ.s | | 1.000 | func_800140F4.s | | 1.000 | func_80028E00.s | | 1.000 | _spu_gcSPU.s | @@ -1375,63 +1884,73 @@ | 1.000 | _exeque.s | | 1.000 | func_8001726C.s | | 1.000 | func_8001C0EC.s | -| 1.000 | func_800294BC.s | | 1.000 | func_8001BDB0.s | +| 1.000 | func_800294BC.s | | 1.000 | _SpuMallocSeparateTo3.s | | 1.000 | func_80035744.s | -| 1.000 | func_80028930.s | | 1.000 | func_800206E4.s | -| 1.000 | func_80015668.s | | 1.000 | DecDCTvlc.s | -| 1.000 | func_800285AC.s | +| 1.000 | func_80015668.s | | 1.000 | PutDispEnv.s | -| 1.000 | func_8001F1BC.s | -| 1.000 | SpuSetReverbModeParam.s | -| 1.000 | func_80030380.s | -| 1.000 | func_80027408.s | -| 1.000 | func_80016340.s | -| 1.000 | func_80015D64.s | -| 1.000 | func_80027B84.s | -| 1.000 | func_800308D4.s | -| 1.000 | func_8002AABC.s | +| 1.000 | func_800285AC.s | +| 1.000 | func_80028930.s | | 1.000 | func_80028030.s | -| 1.000 | func_80030E7C.s | -| 1.000 | getintr.s | -| 1.000 | func_8001AEE4.s | +| 1.000 | func_8002ED34.s | | 1.000 | _spu_setReverbAttr.s | -| 1.000 | func_800230C4.s | -| 1.000 | func_8003EF30.s | -| 1.000 | func_8002F848.s | +| 1.000 | func_80027B84.s | | 1.000 | func_800169B8.s | +| 1.000 | func_8003EF30.s | +| 1.000 | func_80019978.s | +| 1.000 | func_80016340.s | +| 1.000 | func_8002AABC.s | +| 1.000 | func_8001AEE4.s | +| 1.000 | func_80015D64.s | +| 1.000 | func_80040CA8.s | +| 1.000 | func_80027408.s | | 1.000 | func_80013C9C.s | -| 1.000 | func_8001D6A8.s | -| 1.000 | sprintf.s | -| 1.000 | func_80020058.s | -| 1.000 | func_8002F24C.s | -| 1.000 | func_8002ED34.s | +| 1.000 | func_80030380.s | +| 1.000 | func_8002E478.s | | 1.000 | func_8002E954.s | +| 1.000 | func_800212A8.s | +| 1.000 | func_80020B68.s | +| 1.000 | getintr.s | +| 1.000 | func_80023AD4.s | | 1.000 | func_8001786C.s | +| 1.000 | func_8002F24C.s | +| 1.000 | sprintf.s | +| 1.000 | func_80020058.s | +| 1.000 | func_800308D4.s | +| 1.000 | func_80030E7C.s | +| 1.000 | func_800230C4.s | | 1.000 | func_800131B8.s | +| 1.000 | func_8002F848.s | | 1.000 | func_80012DB0.s | -| 1.000 | func_80023AD4.s | -| 1.000 | func_80020B68.s | -| 1.000 | func_80040CA8.s | -| 1.000 | func_800212A8.s | +| 1.000 | func_80021F58.s | +| 1.000 | func_8001F1BC.s | +| 1.000 | SpuSetReverbModeParam.s | +| 1.000 | func_80012A8C.s | | 1.000 | func_80034FC8.s | | 1.000 | unpack_packet.s | -| 1.000 | func_8002E478.s | -| 1.000 | func_80021F58.s | +| 1.000 | func_8001E040.s | +| 1.000 | func_8001D6A8.s | ## menu | Score | Function | | --- | --- | +| 0.778 | func_801D01C4.s | +| 0.785 | func_801D027C.s | | 0.806 | func_801D1C2C.s | +| 0.848 | func_801D3478.s | +| 0.877 | func_801D0500.s | +| 0.916 | func_801D0324.s | +| 0.961 | func_801D0408.s | +| 0.998 | func_801D224C.s | | 0.998 | func_801D1D40.s | | 0.999 | func_801D1F40.s | | 1.000 | func_801D2DA8.s | -| 1.000 | func_801D080C.s | | 1.000 | func_801D2408.s | +| 1.000 | func_801D080C.s | ## world @@ -1440,132 +1959,143 @@ | 0.000 | func_800BBD20.s | | 0.000 | func_800AC700.s | | 0.004 | func_800A460C.s | -| 0.025 | func_800B28CC.s | -| 0.061 | func_800B76A8.s | -| 0.066 | func_800BBC4C.s | | 0.078 | func_800BB8E8.s | -| 0.110 | func_800A7F18.s | -| 0.116 | func_800A41E8.s | -| 0.120 | func_800A2040.s | -| 0.120 | func_800A40B8.s | -| 0.120 | func_800A45D4.s | -| 0.120 | func_800ADC70.s | -| 0.125 | func_800A3908.s | | 0.127 | func_800AF110.s | -| 0.129 | func_800A6C00.s | -| 0.129 | func_800B6DCC.s | -| 0.129 | func_800AF96C.s | -| 0.131 | func_800A3DFC.s | -| 0.131 | func_800A3E4C.s | -| 0.131 | func_800B7C1C.s | -| 0.131 | func_800B64A0.s | -| 0.131 | func_800B7134.s | | 0.139 | func_800BBBB0.s | -| 0.141 | func_800A38C8.s | -| 0.141 | func_800A8FA0.s | -| 0.143 | func_800A3E9C.s | -| 0.143 | func_800A9678.s | -| 0.143 | func_800A96A4.s | -| 0.143 | func_800A9D5C.s | -| 0.143 | func_800A9D88.s | | 0.150 | func_800B7A40.s | | 0.153 | func_800AA640.s | | 0.154 | func_800AF9A0.s | -| 0.156 | func_800B7104.s | | 0.156 | func_800B8720.s | +| 0.156 | func_800B7104.s | | 0.156 | func_800B57C0.s | +| 0.156 | func_800A886C.s | +| 0.156 | func_800A1D38.s | | 0.163 | func_800B6C84.s | -| 0.167 | func_800A9134.s | +| 0.167 | func_800A6BCC.s | +| 0.167 | func_800A9174.s | | 0.167 | func_800AA684.s | -| 0.167 | func_800A98E4.s | +| 0.167 | func_800A9154.s | +| 0.167 | func_800A9134.s | +| 0.167 | func_800A9910.s | +| 0.167 | func_800A9878.s | | 0.167 | func_800A8F48.s | +| 0.167 | func_800A98E4.s | +| 0.167 | func_800A9A44.s | | 0.167 | func_800A984C.s | +| 0.167 | func_800B2FA4.s | +| 0.167 | func_800A9AA4.s | | 0.168 | func_800B6E78.s | | 0.168 | func_800B832C.s | | 0.170 | func_800B64D8.s | +| 0.170 | func_800B6570.s | +| 0.170 | func_800AA8D8.s | | 0.181 | func_800B86E8.s | | 0.181 | func_800B075C.s | +| 0.181 | func_800A9110.s | | 0.181 | func_800B7B54.s | +| 0.181 | func_800A94D0.s | +| 0.181 | func_800A90EC.s | +| 0.181 | func_800B86C4.s | | 0.182 | func_800A16E0.s | +| 0.185 | func_800A4080.s | | 0.185 | func_800AE5B8.s | | 0.185 | func_800AE5F0.s | -| 0.185 | func_800A4080.s | -| 0.185 | func_800B579C.s | | 0.185 | func_800B7838.s | -| 0.193 | func_800A91A4.s | +| 0.185 | func_800B579C.s | | 0.193 | func_800A91E0.s | +| 0.193 | func_800A91A4.s | +| 0.197 | func_800A94A8.s | | 0.197 | func_800B7B78.s | | 0.197 | func_800A9480.s | | 0.197 | func_800BBA0C.s | | 0.197 | func_800A1370.s | | 0.198 | func_800A9AD0.s | | 0.198 | func_800A9A70.s | +| 0.200 | func_800B650C.s | | 0.200 | func_800B65A4.s | -| 0.200 | func_800AE47C.s | | 0.200 | func_800A8AF4.s | +| 0.200 | func_800AE47C.s | +| 0.200 | func_800A31C0.s | | 0.205 | func_800B2E90.s | | 0.209 | func_800B858C.s | | 0.209 | func_800A9988.s | | 0.209 | func_800A8C70.s | -| 0.213 | func_800A9820.s | | 0.213 | func_800AB36C.s | +| 0.213 | func_800AA04C.s | | 0.213 | func_800A94F4.s | | 0.213 | func_800AA6A4.s | -| 0.213 | func_800AA04C.s | +| 0.213 | func_800A9820.s | | 0.213 | func_800AA2B8.s | +| 0.213 | func_800B3018.s | | 0.217 | func_800B0200.s | | 0.217 | func_800B8D20.s | | 0.217 | func_800B77F4.s | | 0.226 | func_800A9018.s | +| 0.226 | func_800A8FCC.s | | 0.227 | func_800A5970.s | | 0.231 | func_800B84D8.s | -| 0.231 | func_800A97A8.s | -| 0.231 | func_800BB9D0.s | +| 0.231 | func_800BCA48.s | +| 0.231 | func_800BB9A0.s | | 0.231 | func_800A97E4.s | +| 0.231 | func_800BB9D0.s | +| 0.231 | func_800A97A8.s | | 0.232 | func_800B79B8.s | | 0.234 | func_800A1FAC.s | +| 0.235 | func_800B95E8.s | | 0.240 | func_800A92F8.s | | 0.245 | func_800A40F0.s | | 0.245 | func_800A8A88.s | +| 0.246 | func_800A98A4.s | +| 0.246 | func_800AB8EC.s | | 0.253 | func_800ADC3C.s | | 0.254 | func_800AD928.s | +| 0.258 | func_800A99BC.s | | 0.259 | func_800A8CA4.s | | 0.263 | func_800AF1A8.s | | 0.264 | func_800A8ABC.s | -| 0.268 | func_800B77A8.s | | 0.268 | func_800A5924.s | +| 0.268 | func_800B77A8.s | | 0.273 | func_800A7EA4.s | +| 0.273 | func_800B3044.s | | 0.273 | func_800BB8B0.s | | 0.279 | func_800A5A94.s | | 0.289 | func_800BC9E8.s | | 0.289 | func_800B7BD8.s | | 0.293 | func_800B8488.s | -| 0.293 | func_800B01C4.s | | 0.293 | func_800B8A5C.s | +| 0.293 | func_800B01C4.s | +| 0.293 | func_800B3350.s | | 0.295 | func_800AB92C.s | +| 0.295 | func_800A929C.s | +| 0.295 | func_800A9240.s | | 0.298 | func_800B7480.s | | 0.300 | func_800B2FD0.s | -| 0.304 | func_800AA098.s | | 0.304 | func_800AA0E0.s | +| 0.304 | func_800AA098.s | | 0.304 | func_800AA128.s | | 0.304 | func_800AA170.s | -| 0.310 | func_800A6B8C.s | -| 0.310 | func_800AF364.s | | 0.310 | func_800AF2A4.s | | 0.310 | func_800AF324.s | +| 0.310 | func_800AF364.s | +| 0.310 | func_800A6B8C.s | | 0.311 | func_800A5348.s | | 0.317 | func_800A993C.s | | 0.332 | func_800A8A1C.s | +| 0.340 | func_800B717C.s | | 0.344 | func_800B5DD8.s | | 0.345 | func_800ADA08.s | +| 0.350 | func_800B7AC0.s | | 0.350 | func_800B37E0.s | | 0.360 | func_800B017C.s | | 0.363 | func_800AB570.s | | 0.368 | func_800ABA18.s | -| 0.378 | func_800AF0B0.s | +| 0.378 | func_800A9DB4.s | | 0.378 | func_800B851C.s | +| 0.378 | func_800AF0B0.s | +| 0.390 | func_800A8CE4.s | | 0.397 | func_800A4008.s | | 0.402 | func_800ADFC0.s | +| 0.403 | func_800A0BE4.s | | 0.407 | func_800B3300.s | | 0.410 | func_800A8300.s | | 0.414 | func_800AF1E8.s | @@ -1582,16 +2112,20 @@ | 0.484 | func_800AB988.s | | 0.490 | func_800AB48C.s | | 0.503 | func_800A5A20.s | +| 0.507 | func_800B104C.s | | 0.508 | func_800AD63C.s | | 0.517 | func_800B3828.s | | 0.520 | func_800B69A4.s | | 0.532 | func_800B6A4C.s | | 0.532 | func_800B8CBC.s | | 0.536 | func_800AB4F4.s | +| 0.548 | func_800B65E0.s | | 0.552 | func_800B8A98.s | | 0.565 | func_800A4138.s | +| 0.566 | func_800A3F4C.s | | 0.566 | func_800A5B88.s | | 0.567 | func_800B85D4.s | +| 0.581 | func_800ADC80.s | | 0.586 | func_800A4F08.s | | 0.591 | func_800B6E08.s | | 0.604 | func_800AD804.s | @@ -1619,10 +2153,12 @@ | 0.745 | func_800BA938.s | | 0.749 | func_800C0808.s | | 0.757 | func_800A0B48.s | +| 0.765 | func_800B63F0.s | | 0.772 | func_800A60D8.s | | 0.785 | func_800BFBF0.s | | 0.786 | func_800A63FC.s | | 0.786 | func_800AA6D0.s | +| 0.787 | func_800ADD4C.s | | 0.792 | func_800AE024.s | | 0.793 | func_800B7714.s | | 0.793 | func_800B0D98.s | @@ -1633,6 +2169,7 @@ | 0.808 | func_800A5AD8.s | | 0.817 | func_800A12AC.s | | 0.828 | func_800B6D10.s | +| 0.841 | func_800A96D0.s | | 0.843 | func_800AC3C0.s | | 0.848 | func_800A67A8.s | | 0.851 | func_800A9B04.s | @@ -1658,6 +2195,7 @@ | 0.951 | func_800B21E4.s | | 0.956 | func_800ADEA8.s | | 0.957 | func_800BB568.s | +| 0.957 | func_800A8E50.s | | 0.957 | func_800A8D58.s | | 0.959 | func_800A1DF0.s | | 0.959 | func_800A5FB4.s | @@ -1665,12 +2203,14 @@ | 0.966 | func_800B2638.s | | 0.966 | func_800B0E84.s | | 0.968 | func_800B271C.s | +| 0.968 | func_800BAB60.s | | 0.972 | func_800AE4B8.s | | 0.973 | func_800B10AC.s | | 0.974 | func_800AA7DC.s | | 0.975 | func_800A31F8.s | | 0.976 | func_800A53A8.s | | 0.977 | func_800BB350.s | +| 0.977 | func_800ADB30.s | | 0.981 | func_800BAA00.s | | 0.982 | func_800B7228.s | | 0.982 | func_800AB5E4.s | @@ -1689,18 +2229,22 @@ | 0.996 | func_800A3964.s | | 0.996 | func_800A9E14.s | | 0.996 | func_800AE8AC.s | +| 0.996 | func_800A3C74.s | | 0.997 | func_800ABB24.s | | 0.997 | func_800B6EFC.s | | 0.998 | func_800A36AC.s | | 0.998 | func_800BC1CC.s | +| 0.998 | func_800C1FD8.s | | 0.998 | func_800B04AC.s | | 0.998 | func_800A9334.s | +| 0.998 | func_800B8B00.s | | 0.998 | func_800A86C4.s | | 0.999 | func_800A141C.s | | 1.000 | func_800A4268.s | | 1.000 | func_800A6FC0.s | | 1.000 | func_800A6994.s | | 1.000 | func_800B5C7C.s | +| 1.000 | func_800BAC70.s | | 1.000 | func_800BB650.s | | 1.000 | func_800AB6E4.s | | 1.000 | func_800A6168.s | @@ -1719,9 +2263,11 @@ | 1.000 | func_800A19FC.s | | 1.000 | func_800B59F4.s | | 1.000 | func_800BCECC.s | +| 1.000 | func_800B190C.s | | 1.000 | func_800B8D4C.s | | 1.000 | func_800B3418.s | | 1.000 | func_800C1D58.s | +| 1.000 | func_800A1710.s | | 1.000 | func_800AFCC8.s | | 1.000 | func_800A3304.s | | 1.000 | func_800B1650.s | @@ -1730,35 +2276,37 @@ | 1.000 | func_800ABFC0.s | | 1.000 | func_800BCBE8.s | | 1.000 | func_800B7C7C.s | +| 1.000 | func_800A835C.s | | 1.000 | func_800B2304.s | -| 1.000 | func_800B29CC.s | | 1.000 | func_800C3DB0.s | +| 1.000 | func_800B29CC.s | | 1.000 | func_800B5E28.s | | 1.000 | func_800B0810.s | -| 1.000 | func_800BFCAC.s | +| 1.000 | func_800B9B2C.s | | 1.000 | func_800C0B48.s | -| 1.000 | func_800BC420.s | -| 1.000 | func_800A0D2C.s | +| 1.000 | func_800A71E8.s | | 1.000 | func_800B4244.s | +| 1.000 | func_800B90C0.s | | 1.000 | func_800B1C80.s | -| 1.000 | func_800B45DC.s | -| 1.000 | func_800B11C4.s | -| 1.000 | func_800B5314.s | -| 1.000 | func_800B9B2C.s | -| 1.000 | func_800C02F4.s | -| 1.000 | func_800AAB18.s | | 1.000 | func_800A21B4.s | -| 1.000 | func_800B3C40.s | -| 1.000 | func_800C1490.s | +| 1.000 | func_800BAE60.s | | 1.000 | func_800AF3A4.s | +| 1.000 | func_800BFCAC.s | +| 1.000 | func_800C02F4.s | +| 1.000 | func_800B11C4.s | +| 1.000 | func_800AEA48.s | +| 1.000 | func_800BC420.s | +| 1.000 | func_800C1490.s | +| 1.000 | func_800B45DC.s | +| 1.000 | func_800AAB18.s | | 1.000 | func_800C2130.s | -| 1.000 | func_800A71E8.s | +| 1.000 | func_800B3C40.s | | 1.000 | func_800C2524.s | | 1.000 | func_800C31F0.s | | 1.000 | func_800C3948.s | -| 1.000 | func_800B90C0.s | +| 1.000 | func_800B5314.s | | 1.000 | func_800C4148.s | | 1.000 | func_800C4FB4.s | | 1.000 | func_800C5CD4.s | | 1.000 | func_800C6104.s | -| 1.000 | func_800AEA48.s | +| 1.000 | func_800A0D2C.s | diff --git a/include/decomp_decls.h b/include/decomp_decls.h new file mode 100644 index 0000000..25d9ce7 --- /dev/null +++ b/include/decomp_decls.h @@ -0,0 +1,408 @@ +/* AUTO-GENERATED by automation/generate_decls.py — do not edit manually */ +/* Forward declarations for all decompiled functions, used as m2c context. */ +#ifndef DECOMP_DECLS_H +#define DECOMP_DECLS_H + +#include "common.h" + +void BATTLE_FlushImageQueue(void); +void BATTLE_ResetImageQueue(void); +s32 SYS_gil(void); +void SetReverbMode(s32 in_ReverbMode); +void SetupGamepad(void); +void __main(void); +void func_800111E4(void); +void func_80011274(void); +void func_8001171C(void); +void func_80011860(void); +void func_80011920(void); +void func_80011938(void); +void func_800140A4(void); +s32 func_800144D8(s32 file_no); +void func_800144F0(s32 file_no); +void func_80014510(s32 file_no); +void func_80014540(void); +void func_80014608(void); +void func_80014610(void); +void func_800146A4(void); +void func_80014750(void); +void func_80014934(void); +void func_800149E0(void); +void func_80014A00(s32* dst, s32* src, s32 len); +s32 func_80014A38(u32 arg0); +s32 func_80014A58(u32 arg0); +void func_80014B54(void); +s32 func_80014BA8(s32 arg0); +void func_80014C44(s32 arg0); +void func_80014C70(void); +s32 func_80014CBC(s32 arg0, s32 arg1); +u8* func_80014D58(u8* arg0, u8* arg1, s32 arg2); +u16* func_80014D9C(s32 arg0, s32 arg1, s32 arg2); +void func_80014DD0(s32 arg0, s32 arg1, u8* arg2); +u16* func_800151F4(s32 arg0); +s32 func_8001521C(s32 arg0); +void func_80015654(s32 arg0); +s32 func_80015C3C(u8* src, void* dst, s32 id); +s32 func_80016320(s32* arg0); +void func_80017238(u32 arg0, u32* arg1, u8* arg2); +void func_80019D74(u8 arg0, u8 arg1); +void func_8001A384(u8 arg0, s32 arg1); +void func_8001A3B8(s32 arg0, s32 arg1, s32 arg2); +void func_8001A5B4(u8 arg0, u8 arg1, s32 arg2); +s32 func_8001AC9C(u8 arg0, s32 arg1); +void func_8001C3C4(void); +void func_8001C58C(void); +void func_8001CDA4(void); +void func_8001CF3C(s16 x, s16 y, s16 w, s16 h, u16 tx, u16 ty, u16 tw, u16 th, s16 clut, s32 tex); +void func_8001D180(s16 x, s16 y, s16 w, s16 h, u16 tx, u16 ty, u16 tw, u16 th, s16 clut, s32 tex); +void func_8001D3C0(s16 x, s16 y); +void func_8001D47C(s16 x0, s16 x1, s16 y, s32 color); +void func_8001D56C(s16 x0, s16 y0, s16 x1, s16 y1, s16 is_yellow); +void func_8001DEF0(u8* menu_colors); +void func_8001EB2C(s16 x, s16 y); +void func_8001EF84(s32 x, s32 y, s32 n, s32 len); +void func_8001F6AC(void); +u8 func_8001F6B4(void); +void func_8001F6C0(s32 arg0, s8 arg1); +void func_8001F6E4(s16 arg0, s16 arg1, s16 arg2); +void func_8001FAF0(void); +void func_80021258(s32 arg0); +void func_80021280(s32 arg0); +void func_80024D88(s32 arg0); +void func_80024DD4(s32 arg0); +void func_80024E18(s32 arg0); +void func_80024E5C(void); +void func_80024E94(void); +void func_80024ECC(void); +void func_80024F04(void); +void func_80024F3C(s32 arg0); +void func_80024F80(s32 arg0); +void func_80024FC4(s32 arg0); +void func_80025008(void); +void func_800250B4(void); +void func_800250EC(s32 arg0); +void func_80025130(s32 arg0); +void func_80025360(void); +s32 func_8002542C(s32 arg0); +void func_800254D8(void); +void func_80025648(void); +void func_80025650(void); +s32 func_80025658(void); +s32* func_80025758(s32 arg0); +s32* func_80025774(s32 arg0); +void func_800257C4(void); +void func_80025DF8(void); +void func_80026034(void); +s32 func_8002603C(u8 arg0); +void func_800269C0(void* arg0); +void func_80026B5C(void); +void func_8002BE8C(s32 arg0); +void func_8002BEB4(s32 arg0); +void func_8002BEDC(s32 arg0); +void func_8002BF04(s32 arg0); +void func_8002BF2C(s32 arg0); +void func_8002BF54(s32 arg0); +void func_8002BF7C(s32 arg0); +void func_8002BFA4(s32 arg0); +void func_8002C18C(s32 arg0); +void func_8002C1B4(s32 arg0); +void func_8002C1DC(s32 arg0); +void func_8002C204(s32 arg0); +void func_8002C22C(s32 arg0); +void func_8002C254(s32 arg0); +void func_8002C27C(s32 arg0); +void func_8002C2A4(s32 arg0); +void func_8002C468(s32 arg0); +void func_8002C490(s32 arg0); +void func_8002C4B8(s32 arg0); +void func_8002C4E0(s32 arg0); +void func_8002C508(s32 arg0); +void func_8002C530(s32 arg0); +void func_8002C558(s32 arg0); +void func_8002C580(s32 arg0); +void func_8002C7A8(void); +void func_8002C7C8(void); +void func_8002C7E8(void); +void func_8002CCBC(void); +void func_8002CCCC(void); +void func_8002CFA0(void); +void func_8002E1A8(void); +u8 func_80031A70(u8** arg0); +void func_80032D50(void); +void func_80032D64(void); +void func_80033B70(void); +int func_80033DE4(int sector_no); +void func_80034048(void); +void func_80034420(void); +void func_80034428(void); +void func_80034A58(void); +void func_80034A90(void); +u32 func_80034B44(void); +void func_800A1498(void); +s32 func_800A1D14(void); +void func_800A2040(void); +s32 func_800A21A4(void); +void func_800A23BC(s32 arg0); +void func_800A2B28(s32 arg0); +void func_800A2CC4(s32 arg0); +u8 func_800A2D0C(void); +void func_800A2D68(u8 arg0); +void func_800A2EFC(void); +void func_800A2F24(void); +void func_800A317C(void); +void func_800A31A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +s32 func_800A31E8(void); +void func_800A3278(void); +void func_800A329C(void); +s32 func_800A32F4(void); +void func_800A345C(void); +void func_800A368C(s32 arg0); +s32 func_800A37F8(s32 arg0); +s32 func_800A3828(void); +void func_800A38C8(void); +void func_800A3908(void); +void func_800A3DFC(void); +void func_800A3E4C(void); +void func_800A3E98(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +void func_800A3E9C(s32 arg0); +void func_800A40B8(s32 arg0); +void func_800A41E8(s32 arg0); +void func_800A4494(s32 arg0); +void func_800A44A4(s32 arg0); +void func_800A44B4(s32 arg0); +void func_800A45C4(s32 arg0); +void func_800A45D4(s32 arg0); +void func_800A45E4(s32 arg0); +s32 func_800A45F4(void); +void func_800A4844(s32 arg0); +s32 func_800A4A80(void); +void func_800A4ACC(s16 arg0, u16 arg1); +void func_800A4AF4(void); +u8 func_800A4B3C(s32 index, s32 arg1); +void func_800A4B9C(void); +u8 func_800A4CA8(s32 arg0); +void func_800A4D2C(s32 arg0); +void func_800A4D88(s32 arg0); +void func_800A4E40(void); +u8 func_800A5A5C(void); +s32 func_800A5A88(void); +s32 func_800A5AA8(void); +s8* func_800A5F90(s32 arg0); +void func_800A64A0(s32 arg0, s8 arg1); +void func_800A653C(s32 arg0); +void func_800A6590(s32 arg0); +void func_800A6720(s32 arg0, s16 arg1); +void func_800A6748(s32 arg0); +void func_800A6798(s32 arg0, s32 arg1); +void func_800A6834(s32 arg0); +void func_800A6A3C(s32 arg0, s32 arg1); +void func_800A6BFC(void); +void func_800A6C00(s32 arg0); +void func_800A6D10(s32 arg0); +void func_800A6DFC(void); +void func_800A6E04(void); +void func_800A6E6C(s32 arg0, s32 arg1); +void func_800A7034(s32 arg0, s16 arg1); +void func_800A7060(s32 arg0, s32 arg1); +void func_800A71E0(void); +s32 func_800A71E8(s32 arg0); +void func_800A73C0(void); +void func_800A73D8(void); +void func_800A76AC(void); +void func_800A7784(void); +void func_800A7940(void); +void func_800A795C(void); +void func_800A7988(void); +void func_800A79A8(void); +void func_800A7F18(void); +s32 func_800A82F0(void); +void func_800A8528(void); +void func_800A85A0(void); +void func_800A85B4(void); +void func_800A8888(s32 arg0); +void func_800A8D04(void); +void func_800A8D60(s32 arg0); +void func_800A8E34(void); +void func_800A8E54(s32 arg0); +void func_800A8F74(void); +void func_800A8FA0(void); +s32 func_800A921C(s32 arg0, u8 arg1); +void func_800A9678(s16 arg0); +void func_800A96A4(s16 arg0); +void func_800A9A04(s8 arg0); +void func_800A9A24(s16 arg0); +void func_800A9D5C(s32 arg0); +void func_800A9D88(s32 arg0); +s32 func_800AA6E8(s32 arg0, s32 arg1); +void func_800AB2AC(void); +void func_800ACA24(void); +void func_800AD324(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +void func_800AD924(void); +void func_800ADC70(void); +void func_800ADE5C(void); +void func_800ADED8(void); +void func_800ADF04(void); +void func_800AE050(void); +void func_800AE058(void); +void func_800AE060(void); +void func_800AE068(void); +void func_800AE070(void); +void func_800AE078(void); +void func_800AE234(void); +s32 func_800AE628(void); +void func_800AEBF0(void); +void func_800AF0A0(s32 arg0); +void func_800AF1A8(s32 arg0); +void func_800AF320(s32 arg0, s32 arg1, s32 arg2); +void func_800AF380(s32 arg0); +void func_800AF470(s32 arg0); +void func_800AF63C(s32 arg0); +s32 func_800AF96C(s32 arg0); +s32 func_800B0240(void); +int func_800B0B8C(void); +void func_800B0DF8(void); +void func_800B0FFC(s32 arg0, s32 arg1, s32 arg2, s16* arg3); +void func_800B1060(s32 arg0); +void func_800B108C(s32 arg0); +void func_800B28CC(s32 arg0); +s32 func_800B2C60(s32 arg0); +u8 func_800B2F30(void); +u16 func_800B2F50(void); +void func_800B30E4(void); +void func_800B5FC4(s16 arg0); +void func_800B64A0(void); +void func_800B6AEC(void); +void func_800B6DCC(void); +void func_800B7134(void); +s32 func_800B7200(void); +void func_800B76A8(void); +void func_800B7820(void); +s32 func_800B785C(void); +s32 func_800B786C(void); +void func_800B7B1C(u8 arg0); +u16 func_800B7B3C(void); +u8 func_800B7BA0(void); +u8 func_800B7BC0(void); +void func_800B7C1C(void); +void func_800B7FB4(void); +void func_800B8234(s32 arg0); +void func_800B8438(void); +void func_800BA65C(s32 arg0); +void func_800BB90C(void); +s32 func_800BBA44(void); +void func_800BBC4C(void); +s16 func_800BCA38(void); +s32 func_800BEE10(s16 arg0, s16 arg1); +s32 func_800C03FC(s32 arg0, s32 arg1); +s32 func_800C0B54(void); +void func_800C2CA8(void); +void func_800C49EC(void); +void func_800C4A40(void); +void func_800C4A94(void); +s32 func_800C60F4(void); +void func_800C64AC(void); +s16 func_800CD558(s16 arg0, u8* arg1); +void func_800CDDA4(void); +void func_800CDF6C(s32 arg0, s16 arg1); +void func_800CE970(void); +void func_800CF5BC(void); +void func_800CF8C0(s16 arg0, s16 arg1, u8 arg2); +void func_800CFB14(void); +void func_800CFCB0(void); +void func_800CFE60(void); +void func_800D01C0(void); +void func_800D0578(void); +void func_800D061C(void); +void func_800D06B8(void); +void func_800D0760(void); +void func_800D088C(s32 loc, s32 len); +void func_800D0A44(void); +void func_800D0A4C(void); +void func_800D0B4C(u8 arg0); +void func_800D0C80(u8 arg0); +void func_800D1110(u8 arg0); +s32 func_800D35D8(u8* arg0, s32* arg1, s32 arg2); +void func_800D3D88(void); +void func_800D3E8C(s32 arg0); +void func_800D3F8C(void); +s32 func_800D54BC(s32 arg0); +s32 func_800D574C(s32 arg0); +void func_800D6814(s32 arg0); +void func_800D8A04(void); +s32 func_800D8A0C(s32 arg0); +void func_800D8A24(void); +void func_800D8A2C(void); +void func_800D8A70(void); +void func_800D8A78(s8 arg0); +void func_800D8B2C(void); +void func_800D93DC(void); +u8 func_800D9DEC(s16 arg0); +void func_800DCF58(void); +void func_800DCF60(s16 arg0, s16 arg1); +void func_800DCF94(s16 arg0); +void func_800DE5D8(void); +void func_800DE5E0(void); +void func_800DE5E8(void); +void func_800DE5F0(void); +void func_800DE5F8(void); +void func_800DE600(void); +void func_800DE608(void); +void func_800DE610(void); +void func_800DE910(void); +void func_800DE918(void); +void func_800DEB10(void); +void func_800DF244(void); +void func_800DF528(void); +void func_800DF7BC(void); +void func_800DF7C4(void); +void func_800DF8F0(void); +void func_800DF8F8(void); +void func_800DF900(void); +void func_800DF9F0(void); +void func_800DFC38(void); +void func_800DFFDC(void); +void func_800E026C(void); +void func_800E0274(void); +void func_800E0294(void); +void func_800E03C8(void); +void func_800E03D0(void); +void func_800E03F0(void); +void func_800E0528(void); +void func_800E078C(void); +void func_800E084C(void); +void func_800E2054(s32 arg0, s32 arg1); +s32 func_800E54EC(void); +void func_800E58B0(void); +s32 func_800E5960(s32 arg0); +s32 func_800E5FB4(u32 arg0, s32 arg1); +s32 func_800E6820(void); +void func_801B0000(int arg0, int arg1); +void func_801B0490(s32 sceneID); +void func_801B085C(s32 arg0); +void func_801B137C(s32 arg0); +s32 func_801B14E8(u32 arg0); +s32 func_801B1530(u32* arg0); +void func_801B2308(void); +s32 func_801B2738(s32 arg0); +s32 func_801B2770(s32 arg0); +void func_801D0000(void); +void func_801D00C4(void); +s32 func_801D01C4(s32 arg0); +void func_801D05C0(u8 arg0); +void func_801D05C4(s32 arg0); +void func_801D069C(void); +int func_801D06B0(s32 arg0); +void func_801D0704(s32 arg0); +s32 func_801D1774(void); +u16 func_801D1950(u16 len, u8* data); +void func_801D19C4(void); +void func_801D1BA4(void); +u16 func_801D1C2C(s32 arg0); +s32 func_801D2184(s8 arg0); +void func_801D21F0(u8* arg0, u8* arg1); +void func_801D3668(s32 arg0); +s32 func_801D3698(s32 arg0, s32 arg1); +void func_801D370C(s32 x, s32 y, s32 slot_no); +s32 func_801D4CC0(void); + +#endif /* DECOMP_DECLS_H */ diff --git a/include/decomp_decls_battle.h b/include/decomp_decls_battle.h new file mode 100644 index 0000000..6e3bc79 --- /dev/null +++ b/include/decomp_decls_battle.h @@ -0,0 +1,195 @@ +/* AUTO-GENERATED by automation/generate_decls.py — do not edit manually */ +/* Per-module declarations for 'battle' — only valid in battle m2c context */ +/* struct types referenced here are defined by the module's own preprocessed headers */ + +#include "common.h" + +#include "../src/battle/battle_private.h" + +void BATTLE_EnqueueClearImage(RECT* rect); +void BATTLE_EnqueueMoveImage(RECT* rect, s32 x, s32 y); +void BATTLE_FlushImageQueue(void); +void BATTLE_ResetImageQueue(void); +void func_800A23BC(s32 arg0); +void func_800A2B28(s32 arg0); +void func_800A2CC4(s32 arg0); +u8 func_800A2D0C(void); +void func_800A2D68(u8 arg0); +void func_800A2EFC(void); +void func_800A2F24(void); +Unk800A2F4C* func_800A2F4C(void); +void func_800A317C(void); +void func_800A31A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +void func_800A3278(void); +void func_800A329C(void); +void func_800A345C(void); +s32 func_800A37F8(s32 arg0); +s32 func_800A3828(void); +void func_800A3E98(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +void func_800A4844(s32 arg0); +s32 func_800A4A80(void); +void func_800A4ACC(s16 arg0, u16 arg1); +void func_800A4AF4(void); +u8 func_800A4B3C(s32 index, s32 arg1); +void func_800A4B9C(void); +u8 func_800A4CA8(s32 arg0); +void func_800A4D2C(s32 arg0); +void func_800A4D88(s32 arg0); +void func_800A4E40(void); +u8 func_800A5A5C(void); +s32 func_800A5A88(void); +s32 func_800A5AA8(void); +s8* func_800A5F90(s32 arg0); +void func_800A64A0(s32 arg0, s8 arg1); +void func_800A653C(s32 arg0); +void func_800A6590(s32 arg0); +void func_800A6720(s32 arg0, s16 arg1); +void func_800A6748(s32 arg0); +void func_800A6798(s32 arg0, s32 arg1); +void func_800A6834(s32 arg0); +void func_800A6A3C(s32 arg0, s32 arg1); +void func_800A6BFC(void); +void func_800A6D10(s32 arg0); +void func_800A6DFC(void); +void func_800A6E04(void); +void func_800A6E6C(s32 arg0, s32 arg1); +void func_800A7034(s32 arg0, s16 arg1); +void func_800A7060(s32 arg0, s32 arg1); +void func_800A71E0(void); +s32 func_800A71E8(s32 arg0); +void func_800A73C0(void); +void func_800A73D8(void); +void func_800A76AC(void); +void func_800A7784(void); +void func_800A7940(void); +void func_800A795C(void); +void func_800A7988(void); +void func_800A79A8(void); +void func_800A8528(void); +void func_800A85A0(void); +void func_800A85B4(void); +void func_800A8D04(void); +void func_800A8D60(s32 arg0); +void func_800A8E34(void); +void func_800A8E54(s32 arg0); +s32 func_800AA6E8(s32 arg0, s32 arg1); +void func_800ACA24(void); +void func_800AD324(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +void func_800AD924(void); +void func_800ADE5C(void); +void func_800ADED8(void); +void func_800ADF04(void); +void func_800AE050(void); +void func_800AE058(void); +void func_800AE060(void); +void func_800AE068(void); +void func_800AE070(void); +void func_800AE078(void); +void func_800AE234(void); +void func_800AEBF0(void); +void func_800AF1A8(s32 arg0); +void func_800AF320(s32 arg0, s32 arg1, s32 arg2); +void func_800AF380(s32 arg0); +void func_800AF470(s32 arg0); +void func_800AF63C(s32 arg0); +int func_800B0B8C(void); +void func_800B0DF8(void); +void func_800B0FFC(s32 arg0, s32 arg1, s32 arg2, s16* arg3); +void func_800B1060(s32 arg0); +void func_800B108C(s32 arg0); +s32 func_800B2C60(s32 arg0); +u8 func_800B2F30(void); +u16 func_800B2F50(void); +void func_800B30E4(void); +void func_800B5FC4(s16 arg0); +void func_800B7FB4(void); +void func_800B8234(s32 arg0); +void func_800B8438(void); +void func_800BB67C(s32 arg0, Unk800BB67C* arg1); +void func_800BB90C(void); +s32 func_800C03FC(s32 arg0, s32 arg1); +s32 func_800C60F4(void); +void func_800C64AC(void); +s16 func_800CD558(s16 arg0, u8* arg1); +void func_800CDDA4(void); +void func_800CDF6C(s32 arg0, s16 arg1); +void func_800CE970(void); +void func_800CF5BC(void); +void func_800CF8C0(s16 arg0, s16 arg1, u8 arg2); +void func_800CFB14(void); +void func_800CFCB0(void); +void func_800CFE60(void); +void func_800D01C0(void); +void func_800D0578(void); +void func_800D061C(void); +void func_800D06B8(void); +void func_800D0760(void); +void func_800D088C(s32 loc, s32 len); +void func_800D0A44(void); +void func_800D0A4C(void); +void func_800D0B4C(u8 arg0); +void func_800D0C80(u8 arg0); +void func_800D1110(u8 arg0); +s32 func_800D35D8(u8* arg0, s32* arg1, s32 arg2); +void func_800D3D88(void); +void func_800D3E8C(s32 arg0); +void func_800D3F8C(void); +s32 func_800D54BC(s32 arg0); +s32 func_800D574C(s32 arg0); +void func_800D6814(s32 arg0); +void func_800D8A04(void); +s32 func_800D8A0C(s32 arg0); +void func_800D8A24(void); +void func_800D8A2C(void); +void func_800D8A70(void); +void func_800D8A78(s8 arg0); +void func_800D8B2C(void); +void func_800D93DC(void); +u8 func_800D9DEC(s16 arg0); +void func_800DCF58(void); +void func_800DCF60(s16 arg0, s16 arg1); +void func_800DCF94(s16 arg0); +void func_800DE5D8(void); +void func_800DE5E0(void); +void func_800DE5E8(void); +void func_800DE5F0(void); +void func_800DE5F8(void); +void func_800DE600(void); +void func_800DE608(void); +void func_800DE610(void); +void func_800DE910(void); +void func_800DE918(void); +void func_800DEB10(void); +void func_800DF244(void); +void func_800DF528(void); +void func_800DF7BC(void); +void func_800DF7C4(void); +void func_800DF8F0(void); +void func_800DF8F8(void); +void func_800DF900(void); +void func_800DF9F0(void); +void func_800DFC38(void); +void func_800DFFDC(void); +void func_800E026C(void); +void func_800E0274(void); +void func_800E0294(void); +void func_800E03C8(void); +void func_800E03D0(void); +void func_800E03F0(void); +void func_800E0528(void); +void func_800E078C(void); +void func_800E084C(void); +void func_800E2054(s32 arg0, s32 arg1); +s32 func_800E54EC(void); +void func_800E58B0(void); +s32 func_800E5960(s32 arg0); +s32 func_800E5FB4(u32 arg0, s32 arg1); +s32 func_800E6820(void); +void func_801B0490(s32 sceneID); +void func_801B085C(s32 arg0); +void func_801B137C(s32 arg0); +s32 func_801B14E8(u32 arg0); +s32 func_801B1530(u32* arg0); +void func_801B2308(void); +s32 func_801B2738(s32 arg0); +s32 func_801B2770(s32 arg0); diff --git a/include/decomp_decls_field.h b/include/decomp_decls_field.h new file mode 100644 index 0000000..56314e0 --- /dev/null +++ b/include/decomp_decls_field.h @@ -0,0 +1,15 @@ +/* AUTO-GENERATED by automation/generate_decls.py — do not edit manually */ +/* Per-module declarations for 'field' — only valid in field m2c context */ +/* struct types referenced here are defined by the module's own preprocessed headers */ + +#include "common.h" + +void func_800A1498(void); +void func_800AB2AC(void); +void func_800BA65C(s32 arg0); +s32 func_800BEE10(s16 arg0, s16 arg1); +s32 func_800C0B54(void); +void func_800C2CA8(void); +void func_800C49EC(void); +void func_800C4A40(void); +void func_800C4A94(void); diff --git a/include/decomp_decls_magic.h b/include/decomp_decls_magic.h new file mode 100644 index 0000000..2e7f3c9 --- /dev/null +++ b/include/decomp_decls_magic.h @@ -0,0 +1,7 @@ +/* AUTO-GENERATED by automation/generate_decls.py — do not edit manually */ +/* Per-module declarations for 'magic' — only valid in magic m2c context */ +/* struct types referenced here are defined by the module's own preprocessed headers */ + +#include "common.h" + +void func_801B0000(int arg0, int arg1); diff --git a/include/decomp_decls_main.h b/include/decomp_decls_main.h new file mode 100644 index 0000000..c9fed28 --- /dev/null +++ b/include/decomp_decls_main.h @@ -0,0 +1,147 @@ +/* AUTO-GENERATED by automation/generate_decls.py — do not edit manually */ +/* Per-module declarations for 'main' — only valid in main m2c context */ +/* struct types referenced here are defined by the module's own preprocessed headers */ + +#include "common.h" + +#include "../src/main/main_private.h" + +s32 SYS_gil(void); +void SetReverbMode(s32 in_ReverbMode); +void SetupGamepad(void); +void __main(void); +void func_800111E4(void); +void func_80011274(void); +void func_8001171C(void); +void func_80011860(void); +void func_80011920(void); +void func_80011938(void); +void func_800140A4(void); +s32 func_800144D8(s32 file_no); +void func_800144F0(s32 file_no); +void func_80014510(s32 file_no); +void func_80014540(void); +void func_80014608(void); +void func_80014610(void); +void func_800146A4(void); +void func_80014750(void); +void func_80014934(void); +void func_800149E0(void); +void func_80014A00(s32* dst, s32* src, s32 len); +s32 func_80014A38(u32 arg0); +s32 func_80014A58(u32 arg0); +void func_80014B54(void); +s32 func_80014BA8(s32 arg0); +void func_80014C44(s32 arg0); +void func_80014C70(void); +s32 func_80014CBC(s32 arg0, s32 arg1); +u8* func_80014D58(u8* arg0, u8* arg1, s32 arg2); +u16* func_80014D9C(s32 arg0, s32 arg1, s32 arg2); +void func_80014DD0(s32 arg0, s32 arg1, u8* arg2); +u16* func_800151F4(s32 arg0); +s32 func_8001521C(s32 arg0); +void func_80015654(s32 arg0); +s32 func_80015C3C(u8* src, void* dst, s32 id); +void func_80015CA0(GzHeader* src, s32* dst); +s32 func_80016320(s32* arg0); +void func_80017238(u32 arg0, u32* arg1, u8* arg2); +void func_80019D74(u8 arg0, u8 arg1); +void func_8001A384(u8 arg0, s32 arg1); +void func_8001A3B8(s32 arg0, s32 arg1, s32 arg2); +void func_8001A5B4(u8 arg0, u8 arg1, s32 arg2); +s32 func_8001AC9C(u8 arg0, s32 arg1); +void func_8001C3C4(void); +void func_8001C58C(void); +void func_8001CDA4(void); +void func_8001CF3C(s16 x, s16 y, s16 w, s16 h, u16 tx, u16 ty, u16 tw, u16 th, s16 clut, s32 tex); +void func_8001D180(s16 x, s16 y, s16 w, s16 h, u16 tx, u16 ty, u16 tw, u16 th, s16 clut, s32 tex); +void func_8001D3C0(s16 x, s16 y); +void func_8001D47C(s16 x0, s16 x1, s16 y, s32 color); +void func_8001D56C(s16 x0, s16 y0, s16 x1, s16 y1, s16 is_yellow); +void func_8001DE0C(Unk8001DE0C* arg0, s16 arg1, s16 arg2, s16 arg3, s32 arg4); +void func_8001DE24(Unk8001DE0C* arg0, s32 arg1, s32 arg2); +void func_8001DE40(Unk8001DE0C* arg0, Unk8001DE0C* arg1); +void func_8001DEF0(u8* menu_colors); +void func_8001DF24(RECT* rect, u8 arg1, u8 arg2, u8 arg3); +void func_8001EB2C(s16 x, s16 y); +void func_8001EF84(s32 x, s32 y, s32 n, s32 len); +void func_8001F6AC(void); +u8 func_8001F6B4(void); +void func_8001F6C0(s32 arg0, s8 arg1); +void func_8001F6E4(s16 arg0, s16 arg1, s16 arg2); +void func_8001FAF0(void); +void func_80021044(DRAWENV* draw_env, DISPENV* disp_env); +void func_80021258(s32 arg0); +void func_80021280(s32 arg0); +void func_80024D88(s32 arg0); +void func_80024DD4(s32 arg0); +void func_80024E18(s32 arg0); +void func_80024E5C(void); +void func_80024E94(void); +void func_80024ECC(void); +void func_80024F04(void); +void func_80024F3C(s32 arg0); +void func_80024F80(s32 arg0); +void func_80024FC4(s32 arg0); +void func_80025008(void); +void func_800250B4(void); +void func_800250EC(s32 arg0); +void func_80025130(s32 arg0); +void func_80025360(void); +s32 func_8002542C(s32 arg0); +void func_800254D8(void); +void func_80025648(void); +void func_80025650(void); +s32 func_80025658(void); +s32* func_80025758(s32 arg0); +s32* func_80025774(s32 arg0); +Unk8009D84C* func_80025788(s32 arg0); +void func_800257C4(void); +void func_80025DF8(void); +void func_80026034(void); +s32 func_8002603C(u8 arg0); +void func_80026448(Unk80026448* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6, s32 arg7, s32 arg8, s32 arg9, s32 arg10, s32 arg11, s32 arg12, u16 arg13); +void func_800269C0(void* arg0); +void func_80026B5C(void); +void func_8002BE8C(s32 arg0); +void func_8002BEB4(s32 arg0); +void func_8002BEDC(s32 arg0); +void func_8002BF04(s32 arg0); +void func_8002BF2C(s32 arg0); +void func_8002BF54(s32 arg0); +void func_8002BF7C(s32 arg0); +void func_8002BFA4(s32 arg0); +void func_8002C18C(s32 arg0); +void func_8002C1B4(s32 arg0); +void func_8002C1DC(s32 arg0); +void func_8002C204(s32 arg0); +void func_8002C22C(s32 arg0); +void func_8002C254(s32 arg0); +void func_8002C27C(s32 arg0); +void func_8002C2A4(s32 arg0); +void func_8002C468(s32 arg0); +void func_8002C490(s32 arg0); +void func_8002C4B8(s32 arg0); +void func_8002C4E0(s32 arg0); +void func_8002C508(s32 arg0); +void func_8002C530(s32 arg0); +void func_8002C558(s32 arg0); +void func_8002C580(s32 arg0); +void func_8002C7A8(void); +void func_8002C7C8(void); +void func_8002C7E8(void); +void func_8002CCBC(void); +void func_8002CCCC(void); +void func_8002CFA0(void); +void func_8002E1A8(void); +u8 func_80031A70(u8** arg0); +void func_80032D50(void); +void func_80032D64(void); +void func_80033B70(void); +int func_80033DE4(int sector_no); +void func_80034048(void); +void func_80034420(void); +void func_80034428(void); +void func_80034A58(void); +void func_80034A90(void); +u32 func_80034B44(void); diff --git a/include/decomp_decls_menu.h b/include/decomp_decls_menu.h new file mode 100644 index 0000000..1f52bf2 --- /dev/null +++ b/include/decomp_decls_menu.h @@ -0,0 +1,25 @@ +/* AUTO-GENERATED by automation/generate_decls.py — do not edit manually */ +/* Per-module declarations for 'menu' — only valid in menu m2c context */ +/* struct types referenced here are defined by the module's own preprocessed headers */ + +#include "common.h" + +void func_801D0000(void); +void func_801D00C4(void); +s32 func_801D01C4(s32 arg0); +void func_801D05C0(u8 arg0); +void func_801D05C4(s32 arg0); +void func_801D069C(void); +int func_801D06B0(s32 arg0); +void func_801D0704(s32 arg0); +s32 func_801D1774(void); +u16 func_801D1950(u16 len, u8* data); +void func_801D19C4(void); +void func_801D1BA4(void); +u16 func_801D1C2C(s32 arg0); +s32 func_801D2184(s8 arg0); +void func_801D21F0(u8* arg0, u8* arg1); +void func_801D3668(s32 arg0); +s32 func_801D3698(s32 arg0, s32 arg1); +void func_801D370C(s32 x, s32 y, s32 slot_no); +s32 func_801D4CC0(void); diff --git a/include/decomp_decls_world.h b/include/decomp_decls_world.h new file mode 100644 index 0000000..0017a69 --- /dev/null +++ b/include/decomp_decls_world.h @@ -0,0 +1,62 @@ +/* AUTO-GENERATED by automation/generate_decls.py — do not edit manually */ +/* Per-module declarations for 'world' — only valid in world m2c context */ +/* struct types referenced here are defined by the module's own preprocessed headers */ + +#include "common.h" + +s32 func_800A1D14(void); +void func_800A2040(void); +s32 func_800A21A4(void); +s32 func_800A31E8(void); +s32 func_800A32F4(void); +void func_800A368C(s32 arg0); +void func_800A38C8(void); +void func_800A3908(void); +void func_800A3DFC(void); +void func_800A3E4C(void); +void func_800A3E9C(s32 arg0); +void func_800A40B8(s32 arg0); +void func_800A41E8(s32 arg0); +void func_800A4494(s32 arg0); +void func_800A44A4(s32 arg0); +void func_800A44B4(s32 arg0); +void func_800A45C4(s32 arg0); +void func_800A45D4(s32 arg0); +void func_800A45E4(s32 arg0); +s32 func_800A45F4(void); +void func_800A6C00(s32 arg0); +void func_800A7F18(void); +s32 func_800A82F0(void); +void func_800A8888(s32 arg0); +void func_800A8F74(void); +void func_800A8FA0(void); +s32 func_800A921C(s32 arg0, u8 arg1); +void func_800A9678(s16 arg0); +void func_800A96A4(s16 arg0); +void func_800A9A04(s8 arg0); +void func_800A9A24(s16 arg0); +void func_800A9D5C(s32 arg0); +void func_800A9D88(s32 arg0); +void func_800ADC70(void); +s32 func_800AE628(void); +void func_800AF0A0(s32 arg0); +s32 func_800AF96C(s32 arg0); +s32 func_800B0240(void); +void func_800B28CC(s32 arg0); +void func_800B64A0(void); +void func_800B6AEC(void); +void func_800B6DCC(void); +void func_800B7134(void); +s32 func_800B7200(void); +void func_800B76A8(void); +void func_800B7820(void); +s32 func_800B785C(void); +s32 func_800B786C(void); +void func_800B7B1C(u8 arg0); +u16 func_800B7B3C(void); +u8 func_800B7BA0(void); +u8 func_800B7BC0(void); +void func_800B7C1C(void); +s32 func_800BBA44(void); +void func_800BBC4C(void); +s16 func_800BCA38(void); diff --git a/src/battle/battle2.c b/src/battle/battle2.c index 3576e70..45838e1 100644 --- a/src/battle/battle2.c +++ b/src/battle/battle2.c @@ -39,6 +39,11 @@ void func_801B0040(s16, u8); void func_801B0054(s16, u8); void func_801B0084(s16, u8); +extern u8 D_800F10EC[]; +extern u8 D_800F11E8[]; +extern u8 D_800F1304[]; +extern s32 D_800F14D4; + static s32 func_800C7B60(s16 arg0, s16 nItems, u8* arg2) { BattleModelSub* var_a0; s32 var_a1; @@ -1155,14 +1160,10 @@ INCLUDE_ASM("asm/us/battle/nonmatchings/battle2", func_800D6394); INCLUDE_ASM("asm/us/battle/nonmatchings/battle2", func_800D650C); -extern u8 D_800F10EC[]; -extern u8 D_800F11E8[]; -extern u8 D_800F1304[]; u8* const D_800A0DC8[] = {D_800F10EC, D_800F11E8, D_800F1304}; INCLUDE_ASM("asm/us/battle/nonmatchings/battle2", func_800D6734); void func_800D6734(s32, s32); -extern s32 D_800F14D4; static void func_800D67BC(s32 arg0) { D_800F14D4 = 0x88; diff --git a/src/ending/ending.c b/src/ending/ending.c index 003733a..42abf20 100644 --- a/src/ending/ending.c +++ b/src/ending/ending.c @@ -1,5 +1,7 @@ #include "common.h" +s32 func_80034410(); // extern + INCLUDE_ASM("asm/us/ending/nonmatchings/ending", func_800A0030); INCLUDE_ASM("asm/us/ending/nonmatchings/ending", func_800A04C4); diff --git a/src/main/18B8.c b/src/main/18B8.c index 631cf50..66ccf71 100644 --- a/src/main/18B8.c +++ b/src/main/18B8.c @@ -169,6 +169,9 @@ void func_8001B834(s32); void func_8001BD50(u8, u8, u8); u8 func_8001F6B4(); +extern s32 D_80048D24; // field.X sector +extern u32 D_80048D28; // field.X size + void __main(void) {} INCLUDE_ASM("asm/us/main/nonmatchings/18B8", __SN_ENTRY_POINT); @@ -230,8 +233,6 @@ INCLUDE_ASM("asm/us/main/nonmatchings/18B8", func_80011784); void func_800A16CC(); // field loop void func_800CF60C(); // field load -extern s32 D_80048D24; // field.X sector -extern u32 D_80048D28; // field.X size void func_80011860(void) { if (D_800965EC != 5 && D_800965EC != 13) { diff --git a/src/main/akao.c b/src/main/akao.c index e2d2122..84fe789 100644 --- a/src/main/akao.c +++ b/src/main/akao.c @@ -137,6 +137,8 @@ void func_8002BA08(Unk8002B7E0* arg0); void func_8002B8B4(Unk8002B7E0* arg0); void func_8002B668(Unk8002B7E0* arg0); +extern u16 D_80062FC8; + INCLUDE_ASM("asm/us/main/nonmatchings/akao", func_800293D0); INCLUDE_ASM("asm/us/main/nonmatchings/akao", func_800293F4); @@ -247,8 +249,6 @@ void func_8002B2F8(Unk8002B7E0* arg0) { INCLUDE_ASM("asm/us/main/nonmatchings/akao", func_8002B3B4); -extern u16 D_80062FC8; - void func_8002B5A8(Unk8002B7E0* arg0) { if (D_8009A14E) { D_80062FC8 = arg0->unk10 ? arg0->unk10 : 0x10; diff --git a/src/menu/bginmenu.c b/src/menu/bginmenu.c index 5c6d513..dc61d38 100644 --- a/src/menu/bginmenu.c +++ b/src/menu/bginmenu.c @@ -20,6 +20,9 @@ extern u8 D_801D085C[2]; extern Unk80026448 D_801D0860[]; extern s8 D_801D086B; +extern u8 D_8009C778[]; // Savemap.party +extern u8 D_8009C798[]; // Savemap.party + void func_801D0000(void) { volatile s32 padding; func_80026448(&D_801D0860[0], 0, 0, 1, 3, 0, 0, 1, 3, 0, 0, 0, 1, 0); @@ -52,8 +55,6 @@ static void func_801D01BC(void) {} INCLUDE_ASM("asm/us/menu/nonmatchings/bginmenu", func_801D01C4); #else // -O1 -extern u8 D_8009C778[]; // Savemap.party -extern u8 D_8009C798[]; // Savemap.party s32 func_801D01C4(s32 arg0) { s32 var_a1; s32 var_a2;