rfht / fnaify

Run FNA/XNA games on OpenBSD - DEPRECATED! Check out the successor: https://github.com/IndieRunner/IndieRunner
https://www.PlayOnBSD.com
ISC License
36 stars 2 forks source link

mono 6 MONO_IOMAP fallout #39

Open rfht opened 4 years ago

rfht commented 4 years ago

Seems like many XNA and some FNA games are now broken with mono 6 because the filepaths don't match thanks to MONO_IOMAP removal. There is currently no general fix for it.

Issue has been raised upstream 1 2.

This post is meant to list games affected and track possible workarounds or solutions.

rfht commented 4 years ago

Here's a start: https://github.com/rfht/fnaify/commit/3ee3d1343a4216ceb135c9c2f41c3ee3a356a72a

rfht commented 3 years ago

Sword of the Stars: https://github.com/rfht/fnaify/commit/9837f1509d32a4e0bc0c961cac3fc8ac3efc1f7e

rfht commented 3 years ago

Wizorb stumbles over paths with backslashes in them:

NOTE: if game should unexpectedly fail to start, make sure datasize limit is high enough. AT LEAST 2G are recommended for most games. See ksh(1) for ulimit command documentation
Controller 0: XBox360 Controller
IGLDevice: OpenGLDevice
OpenGL Device: Mesa DRI Intel(R) UHD Graphics (Comet Lake 3x8 GT2) 
OpenGL Driver: 3.0 Mesa 19.2.8
OpenGL Vendor: Intel Open Source Technology Center
MojoShader Profile: glsl120
EXT_swap_control_tear unsupported. Fall back to standard VSync.
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
EXT_swap_control_tear unsupported. Fall back to standard VSync.
BlehAudio\SFX\netherworldmap
PAKAudio\SFX\netherworldmap
BlehAudio\SFX\rampartdeath
PAKAudio\SFX\rampartdeath
BlehAudio\SFX\SFXactivatewings
PAKAudio\SFX\SFXactivatewings
BlehAudio\SFX\SFXaltermagic
PAKAudio\SFX\SFXaltermagic
BlehAudio\SFX\SFXamuletblast
PAKAudio\SFX\SFXamuletblast
BlehAudio\SFX\SFXamuletget
PAKAudio\SFX\SFXamuletget
BlehAudio\SFX\SFXballdeath
PAKAudio\SFX\SFXballdeath
BlehAudio\SFX\SFXballteleport
PAKAudio\SFX\SFXballteleport
BlehAudio\SFX\SFXbark
PAKAudio\SFX\SFXbark
BlehAudio\SFX\SFXbeholdercharge
PAKAudio\SFX\SFXbeholdercharge
BlehAudio\SFX\SFXbeholderdeath
PAKAudio\SFX\SFXbeholderdeath
BlehAudio\SFX\SFXbeholdershoot
PAKAudio\SFX\SFXbeholdershoot
BlehAudio\SFX\SFXbeholderstone
PAKAudio\SFX\SFXbeholderstone
BlehAudio\SFX\SFXblockdeath
PAKAudio\SFX\SFXblockdeath
BlehAudio\SFX\SFXblockdeathbig
PAKAudio\SFX\SFXblockdeathbig
BlehAudio\SFX\SFXblockdeathsmall
PAKAudio\SFX\SFXblockdeathsmall
BlehAudio\SFX\SFXbounce
PAKAudio\SFX\SFXbounce
BlehAudio\SFX\SFXbubblepop
PAKAudio\SFX\SFXbubblepop
BlehAudio\SFX\SFXbushdeath
PAKAudio\SFX\SFXbushdeath
BlehAudio\SFX\SFXcoinGet
PAKAudio\SFX\SFXcoinGet
BlehAudio\SFX\SFXcratedeath
PAKAudio\SFX\SFXcratedeath
BlehAudio\SFX\SFXcursed
PAKAudio\SFX\SFXcursed
BlehAudio\SFX\SFXdaddyslimeboil
PAKAudio\SFX\SFXdaddyslimeboil
BlehAudio\SFX\SFXdaddyslimedeath
PAKAudio\SFX\SFXdaddyslimedeath
BlehAudio\SFX\SFXdaddyslimeslam
PAKAudio\SFX\SFXdaddyslimeslam
BlehAudio\SFX\SFXdaddyslimespit
PAKAudio\SFX\SFXdaddyslimespit
BlehAudio\SFX\SFXdevilking
PAKAudio\SFX\SFXdevilking
BlehAudio\SFX\SFXdevilkingshoot
PAKAudio\SFX\SFXdevilkingshoot
BlehAudio\SFX\SFXdevilkingslash
PAKAudio\SFX\SFXdevilkingslash
BlehAudio\SFX\SFXdevilkingsummon
PAKAudio\SFX\SFXdevilkingsummon
BlehAudio\SFX\SFXdevilkingteleportin
PAKAudio\SFX\SFXdevilkingteleportin
BlehAudio\SFX\SFXdevilkingteleportout
PAKAudio\SFX\SFXdevilkingteleportout
BlehAudio\SFX\SFXdoorclose
PAKAudio\SFX\SFXdoorclose
BlehAudio\SFX\SFXdoorrumble
PAKAudio\SFX\SFXdoorrumble
BlehAudio\SFX\SFXenemydeath
PAKAudio\SFX\SFXenemydeath
BlehAudio\SFX\SFXghostteleport
PAKAudio\SFX\SFXghostteleport
BlehAudio\SFX\SFXguarddissappear
PAKAudio\SFX\SFXguarddissappear
BlehAudio\SFX\SFXguardpush
PAKAudio\SFX\SFXguardpush
BlehAudio\SFX\SFXhitBumper
PAKAudio\SFX\SFXhitBumper
BlehAudio\SFX\SFXhitDamage
PAKAudio\SFX\SFXhitDamage
BlehAudio\SFX\SFXhitPaddle
PAKAudio\SFX\SFXhitPaddle
BlehAudio\SFX\SFXhitSolid
PAKAudio\SFX\SFXhitSolid
BlehAudio\SFX\SFXhitswitch
PAKAudio\SFX\SFXhitswitch
BlehAudio\SFX\SFXignitecannonball
PAKAudio\SFX\SFXignitecannonball
BlehAudio\SFX\SFXjumpDaddySlime
PAKAudio\SFX\SFXjumpDaddySlime
BlehAudio\SFX\SFXkeyGet
PAKAudio\SFX\SFXkeyGet
BlehAudio\SFX\SFXlaunchball
PAKAudio\SFX\SFXlaunchball
BlehAudio\SFX\SFXlifeGet
PAKAudio\SFX\SFXlifeGet
BlehAudio\SFX\SFXmapDot
PAKAudio\SFX\SFXmapDot
BlehAudio\SFX\SFXmenuBack
PAKAudio\SFX\SFXmenuBack
BlehAudio\SFX\SFXmenuConfirm
PAKAudio\SFX\SFXmenuConfirm
BlehAudio\SFX\SFXmenuMove
PAKAudio\SFX\SFXmenuMove
BlehAudio\SFX\SFXopenchest
PAKAudio\SFX\SFXopenchest
BlehAudio\SFX\SFXpause
PAKAudio\SFX\SFXpause
BlehAudio\SFX\SFXpoints
PAKAudio\SFX\SFXpoints
BlehAudio\SFX\SFXpotdeath
PAKAudio\SFX\SFXpotdeath
BlehAudio\SFX\SFXpotionGet
PAKAudio\SFX\SFXpotionGet
BlehAudio\SFX\SFXreaperdeath
PAKAudio\SFX\SFXreaperdeath
BlehAudio\SFX\SFXreaperpoint
PAKAudio\SFX\SFXreaperpoint
BlehAudio\SFX\SFXreaperreflect
PAKAudio\SFX\SFXreaperreflect
BlehAudio\SFX\SFXreaperslash
PAKAudio\SFX\SFXreaperslash
BlehAudio\SFX\SFXshootfireball
PAKAudio\SFX\SFXshootfireball
BlehAudio\SFX\SFXstoneblackdeath
PAKAudio\SFX\SFXstoneblackdeath
BlehAudio\SFX\SFXsuperjumpDaddySlime
PAKAudio\SFX\SFXsuperjumpDaddySlime
BlehAudio\SFX\SFXtalk
PAKAudio\SFX\SFXtalk
BlehAudio\SFX\SFXthroneappear
PAKAudio\SFX\SFXthroneappear
BlehAudio\SFX\SFXthroneexlaim
PAKAudio\SFX\SFXthroneexlaim
BlehAudio\SFX\SFXthroneguards
PAKAudio\SFX\SFXthroneguards
BlehAudio\SFX\SFXthronetwinkle
PAKAudio\SFX\SFXthronetwinkle
BlehAudio\SFX\SFXtitleimpact
PAKAudio\SFX\SFXtitleimpact
BlehAudio\SFX\SFXtitlePaddle
PAKAudio\SFX\SFXtitlePaddle
BlehAudio\SFX\SFXtrapdooropen
PAKAudio\SFX\SFXtrapdooropen
BlehAudio\SFX\SFXwerewolfdeath
PAKAudio\SFX\SFXwerewolfdeath
BlehAudio\SFX\SFXwerewolfgrowl
PAKAudio\SFX\SFXwerewolfgrowl
BlehAudio\SFX\SFXwerewolfslash
PAKAudio\SFX\SFXwerewolfslash
BlehAudio\SFX\SFXwizardtransform
PAKAudio\SFX\SFXwizardtransform
Loading from PAK
Loading from PAK
Bleh2d\Achievements\AchievementBox
PAK2d\Achievements\AchievementBox
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK
Loading from PAK

Unhandled Exception:
System.IO.FileNotFoundException: Could not find file "/home/thfr/games/fnaify/wizorb/data/Content/Audio\Music\BGM_Title.wav"
File name: '/home/thfr/games/fnaify/wizorb/data/Content/Audio\Music\BGM_Title.wav'
  at System.IO.FileStream..ctor (System.String path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, System.Int32 bufferSize, System.Boolean anonymous, System.IO.FileOptions options) [0x0019e] in <2571c3bf945d467593e54e49d871d815>:0 
  at System.IO.FileStream..ctor (System.String path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, System.Int32 bufferSize, System.Boolean isAsync, System.Boolean anonymous) [0x00000] in <2571c3bf945d467593e54e49d871d815>:0 
  at System.IO.FileStream..ctor (System.String path, System.IO.FileMode mode, System.IO.FileAccess access) [0x00000] in <2571c3bf945d467593e54e49d871d815>:0 
  at (wrapper remoting-invoke-with-check) System.IO.FileStream..ctor(string,System.IO.FileMode,System.IO.FileAccess)
  at Paris.Engine.Audio.Song..ctor (System.String i_sFilename) [0x0009b] in <db8544783c814ca99a21ef21d5408f9f>:0 
  at Paris.Engine.Audio.AudioManager.PlayMusic (System.String i_songName, System.Boolean i_bLoop) [0x0006a] in <db8544783c814ca99a21ef21d5408f9f>:0 
  at Paris.Game.Menu.MainMenu.StateShowTitleScreen (Paris.System.FSM.FSM+StateStep i_stateStep, Microsoft.Xna.Framework.GameTime i_gameTime) [0x0009c] in <b116149ffca94957ba28d6f65d4273e6>:0 
  at Paris.System.FSM.FSM.Tick (Microsoft.Xna.Framework.GameTime gameTime) [0x00019] in <db8544783c814ca99a21ef21d5408f9f>:0 
  at Paris.Game.Menu.MenuBase.Tick (Microsoft.Xna.Framework.GameTime i_gameTime) [0x00007] in <b116149ffca94957ba28d6f65d4273e6>:0 
  at Paris.Game.Menu.MainMenu.Tick (Microsoft.Xna.Framework.GameTime i_gameTime) [0x0000c] in <b116149ffca94957ba28d6f65d4273e6>:0 
  at Paris.Engine.Context.ContextManager.Tick (Microsoft.Xna.Framework.GameTime i_gameTime) [0x0015d] in <db8544783c814ca99a21ef21d5408f9f>:0 
  at Paris.Paris.Update (Microsoft.Xna.Framework.GameTime gameTime) [0x00051] in <b116149ffca94957ba28d6f65d4273e6>:0 
  at Microsoft.Xna.Framework.Game.Tick () [0x0022b] in <15784b03c61f4ff9b516c9b1e0c16225>:0 
  at Microsoft.Xna.Framework.SDL2_FNAPlatform.RunLoop (Microsoft.Xna.Framework.Game game) [0x00720] in <15784b03c61f4ff9b516c9b1e0c16225>:0 
  at Microsoft.Xna.Framework.Game.Run () [0x00037] in <15784b03c61f4ff9b516c9b1e0c16225>:0 
  at Paris.Program.Main (System.String[] args) [0x000b3] in <b116149ffca94957ba28d6f65d4273e6>:0 
[ERROR] FATAL UNHANDLED EXCEPTION: System.IO.FileNotFoundException: Could not find file "/home/thfr/games/fnaify/wizorb/data/Content/Audio\Music\BGM_Title.wav"
File name: '/home/thfr/games/fnaify/wizorb/data/Content/Audio\Music\BGM_Title.wav'
  at System.IO.FileStream..ctor (System.String path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, System.Int32 bufferSize, System.Boolean anonymous, System.IO.FileOptions options) [0x0019e] in <2571c3bf945d467593e54e49d871d815>:0 
  at System.IO.FileStream..ctor (System.String path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, System.Int32 bufferSize, System.Boolean isAsync, System.Boolean anonymous) [0x00000] in <2571c3bf945d467593e54e49d871d815>:0 
  at System.IO.FileStream..ctor (System.String path, System.IO.FileMode mode, System.IO.FileAccess access) [0x00000] in <2571c3bf945d467593e54e49d871d815>:0 
  at (wrapper remoting-invoke-with-check) System.IO.FileStream..ctor(string,System.IO.FileMode,System.IO.FileAccess)
  at Paris.Engine.Audio.Song..ctor (System.String i_sFilename) [0x0009b] in <db8544783c814ca99a21ef21d5408f9f>:0 
  at Paris.Engine.Audio.AudioManager.PlayMusic (System.String i_songName, System.Boolean i_bLoop) [0x0006a] in <db8544783c814ca99a21ef21d5408f9f>:0 
  at Paris.Game.Menu.MainMenu.StateShowTitleScreen (Paris.System.FSM.FSM+StateStep i_stateStep, Microsoft.Xna.Framework.GameTime i_gameTime) [0x0009c] in <b116149ffca94957ba28d6f65d4273e6>:0 
  at Paris.System.FSM.FSM.Tick (Microsoft.Xna.Framework.GameTime gameTime) [0x00019] in <db8544783c814ca99a21ef21d5408f9f>:0 
  at Paris.Game.Menu.MenuBase.Tick (Microsoft.Xna.Framework.GameTime i_gameTime) [0x00007] in <b116149ffca94957ba28d6f65d4273e6>:0 
  at Paris.Game.Menu.MainMenu.Tick (Microsoft.Xna.Framework.GameTime i_gameTime) [0x0000c] in <b116149ffca94957ba28d6f65d4273e6>:0 
  at Paris.Engine.Context.ContextManager.Tick (Microsoft.Xna.Framework.GameTime i_gameTime) [0x0015d] in <db8544783c814ca99a21ef21d5408f9f>:0 
  at Paris.Paris.Update (Microsoft.Xna.Framework.GameTime gameTime) [0x00051] in <b116149ffca94957ba28d6f65d4273e6>:0 
  at Microsoft.Xna.Framework.Game.Tick () [0x0022b] in <15784b03c61f4ff9b516c9b1e0c16225>:0 
  at Microsoft.Xna.Framework.SDL2_FNAPlatform.RunLoop (Microsoft.Xna.Framework.Game game) [0x00720] in <15784b03c61f4ff9b516c9b1e0c16225>:0 
  at Microsoft.Xna.Framework.Game.Run () [0x00037] in <15784b03c61f4ff9b516c9b1e0c16225>:0 
  at Paris.Program.Main (System.String[] args) [0x000b3] in <b116149ffca94957ba28d6f65d4273e6>:0 

Of course this can't be fixed with symlinks. However, maybe mono can recognize backslashes in path names and replace them with slashes.

rfht commented 1 year ago

Found other games with IOMAP issues needing attention:

rfht commented 1 year ago

For Sword of the Stars The Pit: IndieRunner now has all the symlinks to get into a New Game at least: https://github.com/IndieRunner/IndieRunner/commit/5381b29de3674ab97996e979f6ede8d68dd1f7ef