Hi there, I am currently trying to achieve the same.
It does work using some tricks (via wine).
winetricks dotnet40 xna40 d3dx9 directmusic directplay wmp9
I am not sure whether winetricks mono28 vcrun2010 corefonts was also required...
I got the game itself running (without sound), however it hangs for some minutes at the intro screen before it gets ready. Also, at every battle => normal or normal => battle or scene changing it does hang again. I am unsure what the game is doing then really. But it is in fact playable.
Another trick I am trying currently to achieve is to get it work via mono. There is a XNA port which does work in fact under Linux, Android and Windows as well, called ANX Framework
https://anxframework.codeplex.com/
It is API compatible, but the namespaces have to be swichched from Microsoft.Xna.Framework to ANX.Framework (or similar). However, I have downloaded, changed and recompiled the library, so that it declares the Microsoft.Xna.Framework namespace instead. The LUA script engine might be exchanged via
https://github.com/gfoot/kopiluainterface/releases which claims to be api compatible as well. It needs to be exchanged since the basic LUA implementation relies on native (Windows) code.
Via ilmerge I could change the references of the original assembly, but at the end I get this exceptions with mono
Code:
Invalid type _2._5DHero.BV2.BattleScreenV2 for instance field _2._5DHero.BV2.SwitchPokemonQueryObject:TempScreen
Invalid type _2._5DHero.PokeBill for instance field _2._5DHero.LUAFunctions:CurrentPokebill
Invalid type _2._5DHero.Item for instance field _2._5DHero.Pokemon:Item
Invalid type _2._5DHero.OwnPlayer for instance field _2._5DHero.Level:OwnPlayer
Invalid type _2._5DHero.Screen for instance field _2._5DHero.BV2.BattleScreenV2+SaveOverworld:OverworldScreen
Invalid type _2._5DHero.Entity for instance field _2._5DHero.Player+Temp:ScriptEntity
Invalid type _2._5DHero.Screen for instance field _2._5DHero.BattleScreen+SaveOverworld:OverworldScreen
Invalid type _2._5DHero.Pokemon for instance field _2._5DHero.PokedexViewScreen+EvolutionLinePokemon:Pokemon
Could not get XIM
Unhandled Exception:
System.TypeLoadException: A type load exception has occurred.
at _2._5DHero.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.TypeLoadException: A type load exception has occurred.
at _2._5DHero.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0
So probably it would be easier to find somehow the lag issue in the wine approach, but a mono solution would of course be nicer.
Porting the game without having the code is a hard process, and I am unsure whether I am going to do it.
Another note: Also the path seperator "\" seems to be inserted directly into the code rather than System.IO.Path.DirectorySeparatorChar
The launcher webbrowser control issue could be avoided if it would detect it's platform using System.Environment and only creating a new Webbrowsercontrol if the platform is Windows...
Regarding VMs:
wine would be a solution, a VM is not. First because you need a Windows license and more importantly the virtual machines lack good 3D acceleration support. I did not manage to get the 3D acceleration for the right DirectX-Version running on Vmware Workstation. It does run on VirtualBox, althrough the framerate sucks despite having a decent graphics card (Radeon 7900) and it does flicker as hell.