A work-in-progress decompilation of Neon Genesis Evangelion (1999) for the Nintendo 64. This is the only officially licensed anime game released for the N64 platform.
๐ฏ Goal: Produce a matching, byte-for-byte identical ROM using modern tooling and readable C code.
| Attribute | Details |
|---|---|
| Game | Neon Genesis Evangelion (ๆฐไธ็ดใจใดใกใณใฒใชใชใณ) |
| Platform | Nintendo 64 |
| Release Date | June 25, 1999 (Japan) |
| Developer | BEC Co., Ltd. |
| Publisher | Bandai |
| ROM Size | 32 MB |
| Original SHA1 | a9ba0a4afeed48080f54aa237850f3676b3d9980 |
Current State: Functional Build - SHA1 Matching โ
โโโ Setup: โ
Complete
โโโ Extraction: โ
Complete (splat)
โโโ Build System: โ
Complete (GCC 2.7.2 + modern binutils)
โโโ Matching: โ
Complete (100% SHA1 match)
โโโ Decompilation: ๐ In Progress (C code compilation working)
- โ Full ROM extraction and analysis
- โ Build system with authentic GCC 2.7.2 toolchain
- โ Compilation to working ROM (matching SHA1)
- โ Asset extraction (textures, models, audio)
- โ Asset conversion tools (N64 textures โ PNG)
- โ Symbol identification
- ๐ Matching the original ROM byte-for-byte
- ๐ Decompiling functions from assembly to C
- ๐ Documenting game structures and systems
- Delay Slot Optimization: GCC 2.7.2 reorders certain branch delay slots differently than the original compiler
- Data Alignment: Minor differences in global data section alignment (offset
0x3E738)
- Linux or WSL (Windows Subsystem for Linux)
- Python 3.8+ with pip
build-essentialandbinutils-mips-linux-gnu- Your own legally obtained copy of the game ROM
# 1. Clone the repository
git clone https://github.com/YOUR_USERNAME/evangelion.git
cd evangelion
# 2. Place your ROM in the project root
cp /path/to/your/evangelion.z64 ./evangelion.z64
# 3. Setup (extracts assets and builds tools)
make setup
# 4. Build the project
make
# 5. Verify matching (optional)
sha1sum -c evangelion.sha1A successful build will produce:
build/eva.elf- Linked ELF filebuild/eva.z64- Final ROM (should match original when complete)build/eva.map- Linker map for debugging
The project includes tools for working with the game's image assets:
Convert N64 textures (CI4/CI8/YAY0) to PNG format:
# Convert single image
python tools/n64image_viewer.py assets/Images/D09S9A00.pal_554.320x240.ci8.yay0.bin
# Convert all images (creates assets/Images_preview/)
python tools/convert_all_images.pyOver 2,300 textures have been converted and are viewable in assets/Images_preview/.
To replace a game texture:
- Edit the PNG in
assets/Images_preview/ - Convert back to N64 format:
python tools/png_to_n64.py your_image.png output_name
- Ensure file size matches or is smaller than the original (compressed YAY0 files must maintain their size)
- Rebuild the ROM:
make clean && make
eva64/
โโโ asm/ # Assembly code extracted from ROM
โ โโโ nonmatchings/ # Functions not yet decompiled
โ โโโ ...
โโโ assets/ # Extracted game assets (gitignored)
โ โโโ Images/ # Texture files (.ci4, .ci8, .yay0)
โ โโโ Images_preview/ # Converted PNG previews
โ โโโ Palettes/ # Color palettes (.pal)
โ โโโ Font/ # Font textures
โ โโโ ...
โโโ include/ # Header files
โ โโโ PR/ # Nintendo SDK headers
โ โโโ libc/ # C standard library
โ โโโ *.h # Project headers
โโโ src/ # C source code
โ โโโ main/ # Main game code
โ โโโ os/ # LibUltra OS wrappers
โ โโโ ovl1-8/ # Overlay code
โ โโโ *.c # Individual translation units
โโโ tools/ # Build tools
โ โโโ splat_ext/ # splat extensions
โ โโโ n64image_viewer.py # Convert N64 textures to PNG
โ โโโ convert_all_images.py # Batch convert all textures
โ โโโ yay0_compress.py # YAY0 compression tool
โ โโโ ...
โโโ build/ # Build artifacts (gitignored)
โโโ evangelion.yaml # ROM segmentation config (splat)
โโโ Makefile # Build configuration
โโโ *.md # Documentation
- CPU: MIPS R4300i (VR4300)
- Graphics: RCP (Reality Co-Processor) with F3DEX2 microcode
- Audio: MusyX sound system
- Memory: 8MB RAM (with Expansion Pak)
- Compiler: GCC 2.7.2 (KMC wrapper)
- Assembler: GNU binutils 2.35+ (modern, with compatibility macros)
- Linker: mips-n64-ld
- Disassembler: spimdisasm 1.39.0
The game uses 8 dynamically loaded overlays:
| Overlay | ROM Range | Description |
|---|---|---|
| ovl1 | 0x69EE0 - 0x74BB0 | Main gameplay logic |
| ovl2 | 0x74BB0 - 0xCF110 | Additional systems |
| ovl3 | 0xCF110 - 0x113B10 | Japanese text & subtitles |
| ovl4 | 0x113B10 - 0x117A00 | - |
| ovl5 | 0x117A00 - 0x14F960 | - |
| ovl6 | 0x14F960 - 0x175640 | - |
| ovl7 | 0x175640 - 0x1A1880 | Mission text & dialogues |
| ovl8 | 0x1A1880 - 0x1BB280 | - |
- PROGRESS.md - Detailed project status and roadmap
- WORKFLOW.md - Development workflow and contribution guidelines
- KIMI_CONTEXT.md - Technical context and structures (AI-assisted development)
- SESSION_LOG.md - Development session history
- SETUP_WSL.md - WSL setup instructions
This is a personal research project, but feedback and suggestions are welcome!
If you're interested in N64 decompilation:
- Check out the N64 Decomp Discord
- Visit decomp.me for collaborative decompilation
- See n64decomp.github.io for resources
- splat - N64 ROM splitting tool by ethteck
- spimdisasm - MIPS disassembler by angheloalf
- decomp.me - Collaborative decompilation platform
- KMC GCC - Preserved compiler toolchain
- IlDucci, Zoinkity, Dark_Kudoh - Original text and file table research
This project is for educational and preservation purposes only.
- You must provide your own legally obtained ROM to build this project
- The original game and its assets are ยฉ 1999 Bandai / BEC / Khara
- This repository does not contain any copyrighted game assets or code
+ Header: 100% (corrected by n64crc)
+ Code: 100% (matching)
+ Assets: 100% (extracted directly)
+ Data Section: 100% (matching)Current SHA1: a9ba0a4afeed48080f54aa237850f3676b3d9980 โ
Target SHA1: a9ba0a4afeed48080f54aa237850f3676b3d9980
This project is not affiliated with or endorsed by Bandai, BEC, Khara, or Nintendo.