Repository navigation
Releases: Gabrick75/fh2-recompiled
Release list
FH2 Recompiled 0.4.0
Important
Unofficial, non-commercial fan project, not affiliated with or endorsed by Microsoft, Xbox Game Studios or
Playground Games. This APK contains no game data. It does nothing without the files extracted from your
own legally obtained copy of Forza Horizon 2 for Xbox 360. Do not ask for game files.
Release v0.4.0
English
A stability and usability release: fewer crashes, freezes and broken screens, a new launcher, more options.
Frame rate is about the same as v0.3.0 — the renderer does its work more cheaply, but both test phones are still
limited by the same thing (see the tables).
Fixed (game)
- Paint shop crash fixed (the game's own
setjmp/longjmpnow reach the recompiled code). - Garage stuck under the loading screen fixed (
XamXStudioRequestnow fails the way the console does). - "Free" FPS limit could leave the 3D world black (black race on the Moto G9 Play): Free is now the same as 120 fps.
- My Cars photos, the dealer's car lights and several reflection/HUD images that came out wrong or empty: large
one-off copies are read back to the game, sized by their destination, 16-bit targets clamped, scratch areas never
read back with a different shape;16_16render targets accepted; visibility-query proxy draws no longer drawn. - Sound stuttering or robotic on several phones: background audio decoding is now a toggle, off by default;
audio keeps flowing when threads are pinned to cores; larger Android audio buffer. - Achievement pop-ups now show Japanese, Korean, Chinese, Cyrillic and Polish text; achievement icons no longer
appear in the phone's gallery. - System bars (black bar at the top, gesture pill) hidden on phones that ignored the old method (HyperOS and others).
- "Could not find that ISO's path" (#1): ISOs picked through Downloads, media categories or other file managers work.
New
- New launcher: home screen with the game's own Press Start video, your player name (shown in game), a big Play
button and a new look. Spanish added (English, Portuguese, Spanish). - Native renderer is now the default and marked recommended. Phones whose GPU cannot run the emulated renderer
(several Mali GPUs) are warned before playing instead of failing to start. - Image options: MSAA 2x/4x on the native renderer, screen scaling Off / Bilinear / FSR 1.0 / CAS,
FSR 1.0 presets (Mega quality 100 % … Ultra performance 33 %), extra sharpness slider. - Phone vibration: the phone vibrates with the game's rumble (phone, gamepad or both).
- Renderer work per draw is cheaper: index cache and fetch cache across frames, identical constant blocks reused,
vertex work no longer waits between passes, small render targets at exact size, reflection mips in one pass
(optional). Ring cost per draw: −18 % on the S23 Ultra, −10 % on the Moto G9 Play (same scene). - Diagnostics report: describe the problem before saving; the zip carries the last two sessions' logs, the exact
build, a last-session summary (exit reason, min/avg/max fps, driver), device and storage state. Rooted phones: an
extra report with crash files, kernel log and full logcat, and an optional one-shot performance profile. - GPU usage on MediaTek phones in the overlay; logs keep repeated messages to 20 unless Verbose log is on.
Settings (launcher)
- Restore defaults at the foot of Graphics and Performance (asks first; the imported GPU driver stays).
- New defaults: native renderer, 100 % render resolution, anti-aliasing off, anisotropic filtering off, bilinear
scaling, 30 fps limit; Performance: pin threads, vertex and index caches, vertices without waiting, small targets at
exact size and ADPF on; fastest core and reflection mips in one pass off. - The game's language follows the phone's until you pick one.
- File access is asked only when you pick the ISO, the game folder or a save — not when the app opens.
- Performance shows only the options of the chosen renderer; options the game does not apply yet are hidden;
descriptions rewritten in plain words. - Upgrading: settings you changed before are kept. Options you never touched take the new defaults — the renderer
switches to native if you never picked one. Use Restore defaults to start clean.
Head-to-head (same parked scene, same camera change, uncapped)
S23 Ultra — render 100 %, anti-aliasing off, anisotropic off, shadows 100 %, Qualcomm 840 driver, GPU measuring on.
GPU clock 680–719 MHz in both runs (no thermal cap; the v0.3.0 run was cooler).
| v0.3.0 | v0.4.0 | |
|---|---|---|
| fps before the camera change | 48.4 | 49.8 (+3 %) |
| fps after the camera change | ~62 (51–71) | ~69 (60–75) |
| Draws per frame | ~1,700 | ~1,700 |
| Ring cost per draw | 5.4 µs | 4.4 µs (−18 %) |
| Ring busy | 100 % | 100 % |
| GPU time per frame | 17.4–18.5 ms | 17.5–18.5 ms |
| Resolve copies per frame | 93 × 74 µs (~7 ms) | 93 × 74 µs (~7 ms) |
| RAM used | 1.4 GB | 1.4 GB |
Moto G9 Play — Turnip (Mr. Purple T30), shadows off, charging, same thermal state.
| v0.3.0, 12 % | v0.4.0, 12 % | v0.4.0, 33 % + FSR | |
|---|---|---|---|
| fps | 13.8 | 14.1 (+2 %) | 14.2 |
| Ring cost per draw | 17.6 µs | 15.8 µs (−10 %) | 16.0 µs |
| Ring busy | 97–100 % | 94–96 % | 97–99 % |
| GPU busy | ~71 % | ~75 % | ~90 % |
| Resolve copies per frame | 89 × ~340 µs (~30 ms) | 89 × ~350 µs (~31 ms) | 89 × ~350 µs (~31 ms) |
| RAM used | 1.0 GB | 1.0–1.1 GB | 0.9–1.0 GB |
What the tables say: the frame rate barely moved because the ring (the thread that turns the game's GPU commands
into Vulkan) is busy 94–100 % of the time on both phones, and resolve copies take ~35 % of it on the S23 and ~45 %
on the Moto — those are the next target. On the Moto, resolution costs almost nothing: 33 % + FSR gives the same fps
as 12 % with a much better image.
Caveats: one run per version and phone;
What's Changed
- Perf: reduce touch-controls overhead on Android by @Gabrick75 in #5
- Fix/pc codegen automatico by @Gabrick75 in #7
- Feature/gamepad vibration by @Gabrick75 in #8
- Worktree diag shaders by @Gabrick75 in #9
- ISO picker: find the path of files picked through Downloads, media an… by @Gabrick75 in #11
- Launcher: warn when the GPU cannot run the emulated renderer by @Gabrick75 in #12
- Root profile: ask for root when the option is turned on; no "null" in… by @Gabrick75 in #13
- Worktree ring uploads by @Gabrick75 in #14
- Perf/pass stalls by @Gabrick75 in #15
- Launcher icon: adaptive icon so the gauge fills the whole mask by @Gabrick75 in #16
- Fix/achievement toast cyrillic by @Gabrick75 in #17
- Worktree audio stutter by @Gabrick75 in #19
- Fix/native visual bugs by @Gabrick75 in #20
- Fix/paint shop setjmp by @Gabrick75 in #21
- Keep achievement icons out of the phone gallery by @Gabrick75 in #22
- Worktree home screen nickname by @Gabrick75 in #23
- Reorder launcher sidebar pages and use a hamburger icon for Others by @Gabrick75 in #24
- Show GPU use from Vulkan timestamps where kernel load files are unrea… by @Gabrick75 in #25
- Tag phone vibration with a usage and log refusals by @Gabrick75 in #26
- Launcher: bring the ADPF toggle back to Performance, on by default by @Gabrick75 in #27
- Redesign by @Gabrick75 in #28
- Settings change by @Gabrick75 in #29
New Contributors
- @Gabrick75 made their first contribution in #5
Full Changelog: v0.3.0...v0.4.0
FH2 Recompiled 0.3.0
Important
Unofficial, non-commercial fan project, not affiliated with or endorsed by Microsoft, Xbox Game Studios or
Playground Games. This APK contains no game data. It does nothing without the files extracted from your
own legally obtained copy of Forza Horizon 2 for Xbox 360. Do not ask for game files.
Release v0.3.0
English
Much faster on both phones, same image.
- No read-backs of small resolves (on by default): the CPU used to read back 18–27 tiny 64×64 textures per frame for auto exposure, forcing the game, the ring and the GPU to take turns. 38 → 55 fps on the S23 Ultra.
- Vertex cache across frames (on by default): reuses the vertices the game hasn't changed instead of copying them again. Parked scene: 27 → 36.5 fps (+35 %); vegetation-heavy landscape: ~30 → ~40 fps; vertex uploads 12.5 → 1.0 GB per 10 s; 192 MB cache on phones with 8 GB+ of RAM.
- Exact-size small render targets (optional, off by default): the reflection cube's faces and reduction chain are created at their exact height instead of 720 rows. S23 Ultra parked:
menores−0.9 ms,copias−0.4 ms per Swap. Moto G9 Play: steadier frame pacing (see below). - Experimental
Fastest core for the gametoggle (off by default): gives the fastest core to the game's busiest thread instead of the ring. Measured −30 % in S23 Ultra testing (the ring still limits) — stays off. - Performance hints (ADPF) always on; XMA audio decoding fixed on Android; pipeline cache saved after slow compiles; fewer clock reads on the ring; no GPU-timestamp overhead by default; render scale down to 12 %; watched fetch table restarts when full (fixes the 4 fps dip at the festival); usage log with clocks, battery and thermal headroom.
Head-to-head, S23 Ultra (same parked scene, render scale 100 %, cold, Anisotropic filtering 16x, FXAA):
| v0.2.0 | v0.3.0 | |
|---|---|---|
| Parked fps | ~21–26 | ~48–61 (avg ~53, ~2.3×) |
| Game thread | 91–98 % all the time | 81–96 %, alternating with the ring |
borrados (clears — deferred clears via loadOp = CLEAR replaced full-image clears outside passes) |
8–10 ms GPU | 0.02 ms |
| hueco entre trabajos (idle gap between GPU submissions — it collapsed because the ring no longer stalls on read-backs and fences) | 8–9 ms | ~0.5–1 ms |
| copias (resolve copies, render target → texture) | ~3.0–3.2 ms | ~1.8–2.9 ms |
Head-to-head, Moto G9 Play (race, 30 fps cap, render scale 78 %, native):
| v0.2.0 | v0.3.0 | |
|---|---|---|
| Steady fps | ~8–9 | ~10 (~15 % faster frame, never drops to 8) |
| Game thread | 66–78 % | 60–99 % |
| GPU busy | 72–87 % | 80–93 % |
| borrados | 16–37 ms | n/a (measuring off) |
| copias | 2.6–12 ms | n/a (measuring off) |
Caveats: vblank quantization at the 30 fps cap on the Moto, routes may differ slightly.
Full Changelog: v0.2.0...v0.3.0
FH2 Recompiled 0.2.0
FH2 Recompiled 0.2.0
Unofficial static recompilation of Forza Horizon 2 (Xbox 360) for Android. This APK contains no game files:
it only works with files from your own copy of the game (USA edition, Title ID 4D530AA4).
Português abaixo.
What's new
Play from the ISO
- The launcher reads your disc image (.iso) in place: no more extracting the game to the phone.
Native renderer (experimental)
- A second renderer that draws the game's GPU commands straight in Vulkan with pre-translated shaders. Much
faster than the emulated one, with some image errors left. - Fixed for FH2: grass and foliage, dust and small particles, the headlights at night (the night no longer
looks like day), the sun's shadows. - It needs the shader library
fh2_shaders.nfsp, built on a PC from your own game files and copied next to
the game. The README explains how.
Launcher
- New vertical menu, with each renderer's own options.
- Shadow quality slider for the native renderer (0 turns shadows off).
- FPS limit: 30, 60, 90, 120 or unlimited.
- Game language (every language on the disc) and app language (Portuguese / English).
- GPU drivers: import an adrenotools package (.zip), such as Turnip, with a Vulkan test before use.
- Compile shaders in the background (emulated renderer) and deferred scene copy (native renderer) are now
options, off by default.
Achievements
- New Achievements page: every achievement of the game, unlocked ones in color with their date, locked ones in
grey with a lock, secret ones hidden until unlocked. It appears after you open the game once. - The in-game unlock notification is now small and centered at the bottom of the screen (it was huge and cut
off on phones).
Fixes
- Native renderer texture memory: a fix in how unused memory is returned to the system.
Known issues
- The native renderer still has image errors in some places; the emulated renderer is the faithful one.
- Frame rate on phones is still below the console's in the emulated renderer.
- Some menu options are marked as "not applied yet".
Installing
Download FH2-Recompiled-0.2.0.apk below and install it. It updates 0.1.0 directly.
SHA-256: 3541e770817e43a9039063ba53b90e0cc4f977ad83c523eb316a665b4bfdd89a
Português
Recompilação estática não oficial de Forza Horizon 2 (Xbox 360) para Android. Este APK não contém arquivos
do jogo: só funciona com os arquivos da sua própria cópia (edição USA, Title ID 4D530AA4).
Novidades
Jogar pela ISO
- O launcher lê a imagem do seu disco (.iso) direto, sem precisar extrair o jogo para o celular.
Renderizador nativo (experimental)
- Um segundo renderizador, que desenha os comandos de GPU do jogo direto em Vulkan com shaders já traduzidos.
Bem mais rápido que o emulado, ainda com alguns erros de imagem. - Corrigido para o FH2: grama e folhagem, poeira e partículas pequenas, os faróis à noite (a noite não parece
mais dia) e as sombras do sol. - Precisa da biblioteca de shaders
fh2_shaders.nfsp, gerada num PC a partir dos seus arquivos do jogo e
copiada para junto do jogo. O README explica como.
Launcher
- Novo menu vertical, com as opções próprias de cada renderizador.
- Slider de qualidade das sombras no renderizador nativo (0 desliga as sombras).
- Limite de FPS: 30, 60, 90, 120 ou livre.
- Idioma do jogo (todos os idiomas do disco) e do app (português / inglês).
- Drivers de GPU: importe um pacote do adrenotools (.zip), como o Turnip, com teste de Vulkan antes do uso.
- Compilar shaders em segundo plano (renderizador emulado) e cópia adiada da cena (renderizador nativo) agora
são opções, desligadas por padrão.
Conquistas
- Nova tela de Conquistas: todas as conquistas do jogo, as desbloqueadas coloridas e com a data, as bloqueadas
em cinza com cadeado, as secretas escondidas até serem desbloqueadas. Aparece depois de abrir o jogo uma vez. - O aviso de conquista desbloqueada agora é pequeno e centralizado na parte de baixo da tela (antes ficava
gigante e cortado nos celulares).
Correções
- Memória de texturas do renderizador nativo: correção na devolução de memória sem uso ao sistema.
Problemas conhecidos
- O renderizador nativo ainda tem erros de imagem em alguns lugares; o emulado é o fiel.
- No renderizador emulado, o FPS nos celulares ainda fica abaixo do console.
- Algumas opções do menu estão marcadas como "ainda sem efeito".
Instalação
Baixe o FH2-Recompiled-0.2.0.apk abaixo e instale. Ele atualiza a 0.1.0 diretamente.
SHA-256: 3541e770817e43a9039063ba53b90e0cc4f977ad83c523eb316a665b4bfdd89a
FH2 Recompiled 0.1.0 — first preview
Important
Unofficial, non-commercial fan project, not affiliated with or endorsed by Microsoft, Xbox Game Studios or
Playground Games. This APK contains no game data. It does nothing without the files extracted from your
own legally obtained copy of Forza Horizon 2 for Xbox 360. Do not ask for game files.
English
The first public preview of FH2 Recompiled: Forza Horizon 2 (Xbox 360) statically recompiled to run natively on
Android. The game code runs as native ARM64 code; the Xbox 360 GPU is still emulated on Vulkan, and that limits
the frame rate today.
What works
- The game boots, runs its menus, cutscenes and races, with sound.
- Launcher with graphics and performance settings: render resolution in percent (12–100 %), anti-aliasing
(off / MSAA / FXAA), anisotropic filtering, present mode (FIFO / MAILBOX), thread pinning. - In-game overlay with frame rate and GPU, CPU and RAM use.
- Touch controls with a layout editor, and physical gamepads.
Performance
This is an early preview: expect a low frame rate. On a Snapdragon 8 Gen 2 phone races run at roughly
5–17 fps; on entry-level phones the game is playable only for testing. Recommended settings: render resolution
50 % or lower, anti-aliasing off, FIFO present mode, thread pinning on.
Requirements
- Android 8.0 or later, ARM64 processor, GPU with Vulkan 1.1 or later.
- 4 GB of RAM or more (6 GB or more recommended) and about 8 GB of free storage.
- Your own copy of Forza Horizon 2 for Xbox 360, USA edition (Title ID
4D530AA4), extracted from your
own disc. Other editions have not been tested.
Installation
- Install
fh2-recompiled-0.1.0.apk(allow installing apps from unknown sources if Android asks). - Copy the extracted game files to
Internal storage/jogos/ForzaHorizon2:default.xex,
XMediaFacade_default.xex,SpeechFacade_default.xexand themediafolder. You can also pick the folder
from the launcher. - Open FH2 Recompiled, grant the file access it asks for, and tap Jogar (play).
The first launch takes longer while the shaders are prepared.
Known issues
- Low frame rate, limited by the Xbox 360 GPU emulation.
- The car sometimes passes through other cars, poles and some buildings, and can fall under the map.
- Some launcher options are not implemented yet; they are marked as such in the menu.
- The launcher is in Portuguese only for now.
Report problems in Issues with your phone model, GPU and Android version, and the diagnostics
file from the launcher (Salvar diagnóstico).
Português
A primeira prévia pública do FH2 Recompiled: Forza Horizon 2 (Xbox 360) recompilado estaticamente para rodar
nativamente no Android. O código do jogo roda como código ARM64 nativo; a GPU do Xbox 360 ainda é emulada sobre
Vulkan, e é isso que hoje limita o FPS.
O que funciona
- O jogo abre, roda os menus, as cenas e as corridas, com som.
- Launcher com opções de gráficos e desempenho: resolução de renderização em porcentagem (12–100 %),
suavização (desligada / MSAA / FXAA), filtro anisotrópico, modo de apresentação (FIFO / MAILBOX), fixação de
threads. - Painel durante o jogo com FPS e uso de GPU, CPU e RAM.
- Controles de toque com editor de layout, e controles físicos.
Desempenho
É uma prévia inicial: espere FPS baixo. Num celular com Snapdragon 8 Gen 2 as corridas rodam por volta de
5–17 fps; em celulares de entrada o jogo serve só para testes. Configuração recomendada: resolução de
renderização em 50 % ou menos, suavização desligada, modo FIFO, fixação de threads ligada.
Requisitos
- Android 8.0 ou mais recente, processador ARM64, GPU com Vulkan 1.1 ou mais recente.
- 4 GB de RAM ou mais (recomendado 6 GB ou mais) e cerca de 8 GB livres.
- Sua própria cópia de Forza Horizon 2 para Xbox 360, edição USA (Title ID
4D530AA4), extraída do seu
próprio disco. Outras edições não foram testadas.
Instalação
- Instale o
fh2-recompiled-0.1.0.apk(permita a instalação de fontes desconhecidas se o Android pedir). - Copie os arquivos extraídos do jogo para
Armazenamento interno/jogos/ForzaHorizon2:default.xex,
XMediaFacade_default.xex,SpeechFacade_default.xexe a pastamedia. Você também pode escolher a pasta
pelo launcher. - Abra o FH2 Recompiled, conceda o acesso a arquivos que ele pedir e toque em Jogar.
A primeira abertura demora mais enquanto os shaders são preparados.
Problemas conhecidos
- FPS baixo, limitado pela emulação da GPU do Xbox 360.
- Às vezes o carro atravessa outros carros, postes e algumas construções, e pode cair para baixo do mapa.
- Algumas opções do launcher ainda não funcionam; elas aparecem marcadas no menu.
- Por enquanto o launcher está só em português.
Relate problemas em Issues com o modelo do celular, a GPU, a versão do Android e o arquivo de
diagnóstico do launcher (Salvar diagnóstico).
Built on the ReXGlue SDK and the work of the projects listed in the
README. Licensed under the GPL-3.0.
Forza, Forza Horizon, Xbox and Xbox 360 are trademarks of the Microsoft group of companies.
Full Changelog: https://github.com/Gabrick75/fh2-recompiled/commits/v0.1.0