XnaToFna game status tracker: https://github.com/0x0ade/XnaToFna-Tracker
Relinker making some games using XNA 4.0 run with FNA. It goes as far as booting some X360 games on Android.
- Download release OR compile using Visual Studio, MonoDevelop,
xbuild
or something that compiles C# code. - Put
XnaToFna.exe
into the game directory. - Put
FNA.dll
and the native libs into the game directory. - Run
XnaToFna.exe
with Mono on Linux / macOS or .NET Framework on Windows. - Keep
XnaToFna.exe
in the game directory because the game now also links to theXnaToFnaHelper
inside it, whoops. - Update Mono or MonoKickstart.
- Complain about broken paths, unconverted sound / video assets, Windows-specific
DllImport
s and unsupported, closed-source native libraries.
- Ethan "flibitijibibo" Lee: Thank you for FNA! This wouldn't have been without you!
- ADAMATOMIC: for the image above!
- Iced Lizard Games for donating a good bunch of X360 titles and sources, some even unreleased!
- My Patrons on Patreon, both current and former ones:
- Chad Yates
- KyleTheScientist
- razing32
- Merlijn Sebrechts
- Ryan Kistner
- Renaud Bédard
- Artus Elias Meyer-Toms
- razing32 for giving me an UnderRail key to test it with!
Using MonoMod, it sets up the relinking map in MonoMod to relink all Microsoft.Xna.Framework
references to FNA
instead.
It can also relink from Microsoft.Xna.Framework.Net
and Microsoft.Xna.Framework.GamerServices
to FNA.NetStub
, if it exists in the game directory.
Finally, it applies some optional salt and pepper here and there (XmlIgnore
this, XnaToFnaHelper.GetProxyFormHandle
that).
XnaToFna-Legacy was practically a heavily modified fork of MonoMod, meant to relink and only to relink... and fix the paths, which didn't always work.
This rebuilt version uses "MonoMod neo", which itself is a rebuilt version of MonoMod. It now supports defining a custom relinker and relinking maps for the default relinker.
Before, most relinker fixes ping-ponged between MonoMod and XnaToFna, while some of them weren't even compatible with each other.
Keeping the actual relinking in MonoMod means there's only one relinker to maintain and only one place where it can screw up.