{"id":51287347,"url":"https://github.com/elliotttate/vrframework","last_synced_at":"2026-06-30T07:02:10.732Z","repository":{"id":362697667,"uuid":"1255376396","full_name":"elliotttate/vrframework","owner":"elliotttate","description":"A field guide to building VR support into a game engine, plus a scaffolded engine-agnostic VR/modding core. Derived from praydog/REFramework.","archived":false,"fork":false,"pushed_at":"2026-06-05T13:14:03.000Z","size":322,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-05T15:10:09.853Z","etag":null,"topics":["directx","game-engine","hooking","modding","openvr","openxr","reframework","reverse-engineering","virtual-reality","vr"],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/elliotttate.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-31T18:51:56.000Z","updated_at":"2026-06-05T13:14:08.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/elliotttate/vrframework","commit_stats":null,"previous_names":["elliotttate/vrframework"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/elliotttate/vrframework","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elliotttate%2Fvrframework","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elliotttate%2Fvrframework/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elliotttate%2Fvrframework/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elliotttate%2Fvrframework/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/elliotttate","download_url":"https://codeload.github.com/elliotttate/vrframework/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elliotttate%2Fvrframework/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34955986,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-30T02:00:05.919Z","response_time":92,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["directx","game-engine","hooking","modding","openvr","openxr","reframework","reverse-engineering","virtual-reality","vr"],"created_at":"2026-06-30T07:02:05.850Z","updated_at":"2026-06-30T07:02:10.723Z","avatar_url":"https://github.com/elliotttate.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# vrframework\n\n**A field guide to building VR support into a game engine — plus a scaffolded,\nengine-agnostic VR/modding core to build it on.**\n\nThis repo is two things that belong together:\n\n1. **[`guides/`](guides/00-README.md) — a 17-part written guide** (~6,000 lines) that\n   teaches, from first principles, how to bend a shipping game's flat one-camera renderer\n   into stereo VR *from the outside* — by injecting a DLL, hooking DirectX, lying to the\n   engine about the camera, and stealing its frames before they reach the monitor. Every\n   technique is grounded in real, cited code from three production VR mods.\n2. **A scaffolded engine-agnostic core** (`include/`, `src/`) — the reusable Layer-1\n   framework (injection, D3D hooks, ImGui overlay, mod system, VR runtime, frame timing)\n   plus a clean engine **SPI** (`IEngineAdapter` / `FrameTimeline` / `StereoView`) that\n   the duplicated per-engine logic collapses into. See [`PORTING.md`](PORTING.md).\n\n\u003e ## Source \u0026 credit\n\u003e This work is derived from **[praydog/REFramework](https://github.com/praydog/REFramework)**\n\u003e — the original scripting/modding/VR framework for Capcom's RE Engine, and the project\n\u003e every technique here traces back to. **REFramework is MIT-licensed, © praydog.** If you\n\u003e find this useful, the credit belongs upstream: ⭐ [praydog/REFramework](https://github.com/praydog/REFramework).\n\u003e\n\u003e The guides additionally study two REFramework-derived ports by **mutars**:\n\u003e **starfield2vr** (Bethesda Creation Engine 2) and **anvilengine2vr** (Ubisoft Anvil).\n\n---\n\n## The guide series\n\nStart at **[`guides/00-README.md`](guides/00-README.md)** for reading paths. The arc:\n\n| # | Document | What it answers |\n|---|----------|-----------------|\n| [01](guides/01-the-big-picture.md) | The Big Picture | What does \"VR-ifying\" a closed engine even mean? |\n| [02](guides/02-injection-and-bootstrap.md) | Injection \u0026 Bootstrap | How does my code get into the game? |\n| [03](guides/03-hooking-and-pattern-scanning.md) | Hooking \u0026 Pattern Scanning | How do I intercept functions with no symbols? |\n| [04](guides/04-graphics-api-interception.md) | Hooking D3D11 \u0026 D3D12 | How do I own the frame? |\n| [05](guides/05-the-framework-core.md) | The Framework Core | The reusable spine: singleton, mods, overlay |\n| [06](guides/06-vr-runtime-integration.md) | OpenVR \u0026 OpenXR | Talking to the headset behind one abstraction |\n| [07](guides/07-frame-timing-and-synchronization.md) | Frame Timing | The hardest part — Reflex markers vs two-hook pacing |\n| [08](guides/08-stereo-rendering-strategies.md) | Stereo Rendering | Two eyes from a one-camera engine (AFR + projection) |\n| [09](guides/09-camera-and-coordinate-systems.md) | Camera \u0026 Coordinate Math | Putting your head in the world (basis/handedness) |\n| [10](guides/10-submission-and-the-taa-problem.md) | Submission \u0026 the TAA Problem | Sending eyes out + the history-smear fix |\n| [11](guides/11-hud-ui-and-menus-in-vr.md) | HUD, UI \u0026 Menus | Making flat UI usable in stereo |\n| [12](guides/12-input-and-motion-controllers.md) | Input \u0026 Controllers | Wiring VR input into a gamepad game |\n| [13](guides/13-reading-the-engine-object-model.md) | Reading the Engine | Three ways to find the player/camera |\n| [14](guides/14-engine-tweaks-and-quirks.md) | Engine Tweaks \u0026 Quirks | Disabling effects that fight VR |\n| [15](guides/15-multi-title-architecture-and-build.md) | Multi-Title \u0026 Build | One codebase, many games; the build/proxy setup |\n| [16](guides/16-porting-checklist-for-a-new-engine.md) | Porting Checklist | The capstone, milestone by milestone |\n\nThe guides are grounded in **~180 `file:line` citations** across the three reference\nprojects, and constantly compare how RE Engine, Creation Engine 2, and Anvil each solved\nthe same problem differently.\n\n### The three reference projects\n\n| Project | Engine | Games |\n|---|---|---|\n| [REFramework](https://github.com/praydog/REFramework) (praydog) | RE Engine | Resident Evil, Monster Hunter, DD2 |\n| starfield2vr (mutars) | Creation Engine 2 | Starfield |\n| anvilengine2vr (mutars) | Ubisoft Anvil | AC Odyssey / Valhalla / Mirage |\n\n---\n\n## The scaffolded core\n\nLayered architecture the guides converge toward:\n\n```\nLAYER 3  per-game DATA         offsets manifest + per-title settings + reclass structs\nLAYER 2  per-engine ADAPTER    implements spi/IEngineAdapter (frame pacing, projection,\n                               view, HUD, input) — the per-engine .cpp hooks\n─────────────────────────────────────────────────────────────────────────────────────\nLAYER 1  UNIVERSAL CORE  ← include/ + src/ in this repo\n  Framework / g_framework      lifecycle, window, input, d3d hooks, imgui overlay\n  Mod + ModValue widgets       config-backed UI; zero engine types\n  hooks/  vr/  mods/VR         D3D11/12 hooks, OpenVR/OpenXR runtime, stereo submit\n  spi/                         IEngineAdapter, FrameTimeline, StereoView, EngineCaps\n  utility/  memory/            Config, ScopeProfiler, pattern-scan relocation helpers\n```\n\n**Status:** the contract headers are complete and clean; several `.cpp` bodies are\n**stubs with `PORT FROM:` pointers** at the exact REFramework source to lift. This is a\nteaching/starting scaffold, not a finished runtime — see [`PORTING.md`](PORTING.md) for\nthe file-by-file map and [`guides/16`](guides/16-porting-checklist-for-a-new-engine.md)\nfor the bring-up order.\n\n```cmake\nadd_subdirectory(extern/vrframework)\ntarget_link_libraries(MyEngineVR PRIVATE vrframework)\n```\n\n---\n\n## Repository layout\n\n```\nvrframework/\n├── guides/            the 17-part written guide (start at 00-README.md)\n├── include/           public headers: Framework, Mod, spi/, mods/VR, hooks/, vr/, utility/\n├── src/               implementations (real where trivial; stubs with PORT FROM: notes)\n├── examples/          an example IEngineAdapter + a per-game offsets manifest\n├── PORTING.md         stub → REFramework source map\n├── README.md          you are here\n└── LICENSE            MIT (preserves praydog's upstream copyright)\n```\n\n## License\n\nMIT. This is a derivative of [praydog/REFramework](https://github.com/praydog/REFramework)\n(MIT, © praydog); that copyright notice is preserved in [`LICENSE`](LICENSE). See also\n[`CREDITS.md`](CREDITS.md).\n\n## A note on scope \u0026 ethics\n\nThe reference projects are single-player visual mods that inject into a local process you\nown — that's the context this guide assumes. The same techniques exist in a broader world\nwith different rules: respect anti-cheat, EULAs, and online play. Don't take this near a\nmultiplayer game.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felliotttate%2Fvrframework","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Felliotttate%2Fvrframework","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felliotttate%2Fvrframework/lists"}