LmCast :: Stay tuned in

Ogre Battle 64 Recompiled Project at 99.05%

Recorded: Sept. 20, 2026, 10:08 p.m.

Original Summarized

GitHub - lfarroco/ogre-battle-64-recomp: Decompilation project for the game "Ogre Battle 64: Person of Lordly Caliber" · GitHub

Skip to content

Navigation MenuSign inAppearance settingsPlatformAI CODE CREATIONGitHub CopilotWrite better code with AIGitHub Copilot appDirect agents from issue to mergeMCP RegistryIntegrate external toolsDEVELOPER WORKFLOWSActionsAutomate any workflowCodespacesInstant dev environmentsIssuesPlan and track workCode ReviewManage code changesCode QualityEnforce quality at mergeAPPLICATION SECURITYGitHub Advanced SecurityFind and fix vulnerabilitiesCode securitySecure your code as you buildSecret protectionStop leaks before they startEXPLOREWhy GitHubDocumentationBlogChangelogMarketplaceView all featuresSolutionsBY COMPANY SIZEEnterprisesSmall and medium teamsStartupsNonprofitsBY USE CASEApp ModernizationDevSecOpsDevOpsCI/CDView all use casesBY INDUSTRYHealthcareFinancial servicesManufacturingGovernmentView all industriesView all solutionsResourcesEXPLORE BY TOPICAISoftware DevelopmentDevOpsSecurityView all topicsEXPLORE BY TYPECustomer storiesEvents & webinarsEbooks & reportsBusiness insightsGitHub SkillsSUPPORT & SERVICESDocumentationCustomer supportCommunity forumTrust centerPartnersView all resourcesOpen SourceCOMMUNITYGitHub SponsorsFund open source developersPROGRAMSSecurity LabMaintainer CommunityGitHub StarsArchive ProgramREPOSITORIESTopicsTrendingCollectionsEnterpriseENTERPRISE SOLUTIONSEnterprise platformAI-powered developer platformAVAILABLE ADD-ONSGitHub Advanced SecurityEnterprise-grade security featuresCopilot for BusinessEnterprise-grade AI featuresPremium SupportEnterprise-grade 24/7 supportPricingSearch/Sign inSign upAppearance settings

You signed in with another tab or window. Reload to refresh your session.
You signed out in another tab or window. Reload to refresh your session.
You switched accounts on another tab or window. Reload to refresh your session.

Dismiss alert

lfarroco

/

ogre-battle-64-recomp

Public

Notifications
You must be signed in to change notification settings

Fork
0

Star
6

Code

Issues
0

Pull requests
0

Actions

Projects

Security and quality
0

Insights

Additional navigation options

Code

Issues

Pull requests

Actions

Projects

Security and quality

Insights

mainBranchesTagsGo to fileCodeOpen more actions menuLatest commit History146 Commits146 CommitsFolders and filesNameNameLast commit messageLast commit date.github/workflows.github/workflows  appapp  asmasm  debugdebug  docsdocs  includeinclude  mods/skip-boot-logosmods/skip-boot-logos  packagingpackaging  toolstools  .gitattributes.gitattributes  .gitignore.gitignore  .gitmodules.gitmodules  AGENTS.mdAGENTS.md  MakefileMakefile  PLAN.mdPLAN.md  README.mdREADME.md  config-bankA.tomlconfig-bankA.toml  config-bankA.yamlconfig-bankA.yaml  config-bankAA.tomlconfig-bankAA.toml  config-bankAA.yamlconfig-bankAA.yaml  config-bankAB.tomlconfig-bankAB.toml  config-bankAB.yamlconfig-bankAB.yaml  config-bankAC.tomlconfig-bankAC.toml  config-bankAC.yamlconfig-bankAC.yaml  config-bankAD.tomlconfig-bankAD.toml  config-bankAD.yamlconfig-bankAD.yaml  config-bankAE.tomlconfig-bankAE.toml  config-bankAE.yamlconfig-bankAE.yaml  config-bankAF.tomlconfig-bankAF.toml  config-bankAF.yamlconfig-bankAF.yaml  config-bankAG.tomlconfig-bankAG.toml  config-bankAG.yamlconfig-bankAG.yaml  config-bankAH.tomlconfig-bankAH.toml  config-bankAH.yamlconfig-bankAH.yaml  config-bankB.tomlconfig-bankB.toml  config-bankB.yamlconfig-bankB.yaml  config-bankC.tomlconfig-bankC.toml  config-bankC.yamlconfig-bankC.yaml  config-bankD.tomlconfig-bankD.toml  config-bankD.yamlconfig-bankD.yaml  config-bankE.tomlconfig-bankE.toml  config-bankE.yamlconfig-bankE.yaml  config-bankF.tomlconfig-bankF.toml  config-bankF.yamlconfig-bankF.yaml  config-bankG.tomlconfig-bankG.toml  config-bankG.yamlconfig-bankG.yaml  config-bankH.tomlconfig-bankH.toml  config-bankH.yamlconfig-bankH.yaml  config-bankI.tomlconfig-bankI.toml  config-bankI.yamlconfig-bankI.yaml  config-bankJ.tomlconfig-bankJ.toml  config-bankJ.yamlconfig-bankJ.yaml  config-bankK.tomlconfig-bankK.toml  config-bankK.yamlconfig-bankK.yaml  config-bankL.tomlconfig-bankL.toml  config-bankL.yamlconfig-bankL.yaml  config-bankM.tomlconfig-bankM.toml  config-bankM.yamlconfig-bankM.yaml  config-bankN.tomlconfig-bankN.toml  config-bankN.yamlconfig-bankN.yaml  config-bankO.tomlconfig-bankO.toml  config-bankO.yamlconfig-bankO.yaml  config-bankP.tomlconfig-bankP.toml  config-bankP.yamlconfig-bankP.yaml  config-bankQ.tomlconfig-bankQ.toml  config-bankQ.yamlconfig-bankQ.yaml  config-bankR.tomlconfig-bankR.toml  config-bankR.yamlconfig-bankR.yaml  config-bankS.tomlconfig-bankS.toml  config-bankS.yamlconfig-bankS.yaml  config-bankT.tomlconfig-bankT.toml  config-bankT.yamlconfig-bankT.yaml  config-bankU.tomlconfig-bankU.toml  config-bankU.yamlconfig-bankU.yaml  config-bankV.tomlconfig-bankV.toml  config-bankV.yamlconfig-bankV.yaml  config-bankW.tomlconfig-bankW.toml  config-bankW.yamlconfig-bankW.yaml  config-bankX.tomlconfig-bankX.toml  config-bankX.yamlconfig-bankX.yaml  config-bankY.tomlconfig-bankY.toml  config-bankY.yamlconfig-bankY.yaml  config-bankZ.tomlconfig-bankZ.toml  config-bankZ.yamlconfig-bankZ.yaml  config.tomlconfig.toml  config.yamlconfig.yaml  extra_syms.txtextra_syms.txt  n64modernruntime-n64recomp.patchn64modernruntime-n64recomp.patch  n64modernruntime-ob64.patchn64modernruntime-ob64.patch  n64recomp-ob64.patchn64recomp-ob64.patch  ogrebattle64.dogrebattle64.d  ogrebattle64.ldogrebattle64.ld  ogrebattle64.yamlogrebattle64.yaml  reloc_addrs.txtreloc_addrs.txt  relocatable_sections.txtrelocatable_sections.txt  rsp-audio.tomlrsp-audio.toml  rsp-njpeg.tomlrsp-njpeg.toml  rt64-ob64.patchrt64-ob64.patch  rt64-plume-ob64.patchrt64-plume-ob64.patch  symbol_addrs-bankAA.txtsymbol_addrs-bankAA.txt  View all filesRepository files navigationREADMEMore itemsOgre Battle 64: Person of Lordly Caliber (PC port project)
Static recompilation of the N64 game Ogre Battle 64: Person of Lordly Caliber
(USA, Rev A) to a native PC executable, using the N64Recomp toolchain.
This repository contains no copyrighted game data. You must supply your own
ROM dump (see below).
AI Disclaimer
This work in this project was mostly performed by the DeepSeek v4/v4.1 Flash model.
Status
The main code segment (807 functions) has been fully recompiled to C. The runtime
app (rendering, input, audio) is the next milestone. See PLAN.md for the
full plan, current status, and technical findings.
Directory layout
assets/ your ROM (gitignored; big-endian .z64 expected)
asm/ splat-generated disassembly
debug/ headless-browser probes for the wasm build (see debug/README.md)
config.yaml splat config (segments, vram mapping)
config.toml N64Recomp config
Makefile assemble + link + recompile
n64recomp-ob64.patch our N64Recomp modifications (apply to upstream clone)
rt64-plume-sdl.patch our RT64 plume patch — SDL >= 2.0.22 guard (apply to the
tools/RT64 submodule on systems with older SDL2, e.g. Ubuntu 22.04)
PLAN.md the project plan

Getting started
See Reproduce in PLAN.md. Summary:
# tools (macOS)
brew install mips-linux-gnu-binutils cmake
python3 -m venv tools/venv && tools/venv/bin/pip install 'splat64[mips]'
git clone --recurse-submodules https://github.com/N64Recomp/N64Recomp.git tools/N64Recomp
git -C tools/N64Recomp apply ../../n64recomp-ob64.patch
cmake -S tools/N64Recomp -B tools/N64Recomp/build -DCMAKE_BUILD_TYPE=Release
cmake --build tools/N64Recomp/build --target N64RecompCLI -j4

# ROM: put your .z64 dump in assets/, then regenerate the recompiled code
# (see docs/guides/app-build.md -> "Regenerating the recompiled code")
make regenerate
The ROM must be the USA Rev A dump (40 MB, .n64 16-bit byte-swapped or already
converted .z64). tools/convert_rom.py converts .n64 → .z64.
A fresh clone cannot build the app until make regenerate has run once: the
recompiled C (RecompiledFuncs/, Bank*Funcs/, RspFuncs/,
app/src/bank_funcs.inc) is generated from your own ROM and is deliberately not
committed. make regenerate runs splat, the MIPS link, the 34 bank units, the
main recompilation and the RSP microcode in the one order that works.
Build and run the app
cmake -S app -B build-app -DCMAKE_BUILD_TYPE=Release
cmake --build build-app -j
./build-app/ogrebattle64
On launch the app shows a black start screen — OGRE BATTLE 64: RECOMP /
CLICK TO LOAD YOUR ROM (OR DROP IT IN THIS WINDOW). Click it to pick your ROM,
drag the ROM onto the window, or just put the ROM next to the executable. The
ROM is validated by hash and stored, so later launches go straight into the
game. The battery save lands in saves/ beside the executable.
A playable build
make dist # -> dist/ogre-battle-64-recomp/ (one self-contained executable)
make dist-zip # -> dist/ogre-battle-64-recomp-<platform>.zip
The package is a single file: SDL2 is linked statically (make dist fetches and
builds a pinned real SDL2 once, because Homebrew's sdl2 is the SDL3-based
compat shim and has no static library). No game data is included, so the player
supplies their own ROM on the start screen. See docs/guides/app-build.md →
"Distribution".
The renderer (tools/RT64) is a git submodule pinned to an upstream commit and
needs its own one-time patch on systems with SDL < 2.0.22 (e.g. Ubuntu 22.04
ships SDL 2.0.20, but SDL_GetWindowSizeInPixels requires 2.0.22+):
git submodule update --init --recursive
git -C tools/RT64/src/contrib/plume apply ../../../../rt64-plume-sdl.patch
Re-apply after any git submodule update inside tools/RT64, which resets the
submodule and discards the patch.
Legal
Ogre Battle 64 © Quest / Nintendo. This project is for preservation and
interoperability research. Never distribute the ROM or its extracted assets.
AboutDecompilation project for the game "Ogre Battle 64: Person of Lordly Caliber"ResourcesReadmeActivityStars6 starsWatchers0 watchingForks0 forksReport repositoryReleasesPackagesContributorsLanguages

Footer

© 2026 GitHub, Inc.

Footer navigation

Terms

Privacy

Security

Status

Community

Docs

Contact

Manage cookies

Do not share my personal information

You can’t perform that action at this time.

This project focuses on the static recompilation of the N64 game Ogre Battle 64: Person of Lordly Caliber (USA, Rev A) into a native PC executable utilizing the N64Recomp toolchain. The repository is intended for preservation and interoperability research, explicitly stating that it contains no copyrighted game data and requires users to supply their own ROM dumps. The work on this repository was primarily executed using the DeepSeek v4/v4.1 Flash model. Currently, the main code segment, comprising eight hundred seven functions, has been successfully recompiled into C, with the development of the runtime application, which handles rendering, input, and audio, being the subsequent objective.

The directory structure organizes the project into various components, including assets (where the ROM dump is placed), assembly code, debug files, configuration files, and necessary patches for operational adjustments. The workflow for setting up the project involves specific steps utilizing external tools. To begin the process, the setup requires installing necessary dependencies such as mips-linux-gnu-binutils and cmake, followed by setting up a Python virtual environment to install the splat64 package. The core of the recompilation tooling is the N64Recomp repository, which must be cloned recursively, and specific patches, such as n64recomp-ob64.patch, are applied to modify the upstream N64Recomp source code.

The recompilation process demands careful sequencing, as the recompiled C code from the ROM and the specific banking structures are generated prior to the main compilation. The system relies on a sequence where make regenerate is executed to generate the necessary C code for the banking functions and the main recompilation, which involves splat execution, MIPS linking, processing of thirty-four bank units, and RSP microcode in the correct order. Following this generation, the application itself is built using cmake to compile the application code, and finally, the executable is generated via make dist, which results in a self-contained executable and its associated libraries, with the Static Linkage of SDL2 handled to ensure portability.

The process also involves handling external components, specifically the renderer tools, which are implemented as a git submodule. The project requires applying a patch, such as rt64-plume-sdl.patch, to the RT64 submodule, applying it once for systems running older SDL versions, such as Ubuntu 22.04, to ensure compatibility with functions like SDL_GetWindowSizeInPixels. The user is directed to ensure the renderer is updated by recursively updating the git submodule before re-applying patches if interaction with the submodule has occurred. Ultimately, the resulting distribution package is a single executable, which prompts the user to load their custom ROM from a start screen, validating the ROM via hash before launching the game. The project emphasizes that the resulting package contains only the compiled code and does not include game data, requiring the end-user to provide the ROM separately.