libertyernie / brawltools

BrawlBox and BrawlLib
http://forums.kc-mm.com/index.php?topic=67847.0
142 stars 31 forks source link

Getting BrawlBox to build with Mono #186

Open uyjulian opened 6 years ago

uyjulian commented 6 years ago

Here are the following steps I did to build BrawlBox with Mono:

  1. Download packages with nuget: change directory to BrawlBox and run nuget install, mkdir ../packages, then mv IronPython.2.7.5 IronPython.StdLib.2.7.5 ../packages
  2. Comment out lines 10 and 327-347 of BrawlLib/System/Windows/Forms/TextureConverterDialog.cs
  3. Comment out line 116 of BrawlLib/BrawlLib.csproj
  4. Comment out lines 1026 and 1034-1045 of BrawlBox/BrawlBox.csproj

PresentationFramework is not implemented as part of Mono. This means that commit d24bf3779bc8e1547de30a38de077ac103ea9ddb / PR #54 broke compilation support for Mono.

Also, it appears that the post-build commands do not work for some reason.

BrawlBox no longer runs on newer versions of Mono on macOS since they build for 64-bit only, and the Carbon port of System.Windows.Forms will never be complete since Apple never updated Carbon for 64-bit. I'm not sure if there's any progress on a Cocoa port of System.Windows.Forms.

However, Wine works fine for running BrawlBox, except that the GUI may behave erratically. Also, lines 18-22 in BrawlLib/System/Audio/AudioProvider.cs needs to be commented out in order for the "Open" dialog to work properly in Wine-Mono:

[ERROR] FATAL UNHANDLED EXCEPTION: System.ArgumentException: Value must be a Com object.
Parameter name: o
  at System.Runtime.InteropServices.Marshal.ReleaseComObject (System.Object o) [0x0001b] in <1c90db0b17cb4b1e827d577d0607b212>:0 
  at System.Runtime.InteropServices.Marshal.FinalReleaseComObject (System.Object o) [0x00000] in <1c90db0b17cb4b1e827d577d0607b212>:0 
  at System.Audio.wAudioProvider.Dispose () [0x00016] in <6b6181dd22fe4a18a59eb89739f999a0>:0 
  at System.Audio.AudioProvider.Finalize () [0x00002] in <6b6181dd22fe4a18a59eb89739f999a0>:0 

Also, setting a dll search path is not supported in Wine-Mono, as seen here:

0009:fixme:mscoree:parse_probing privatePath=L"lib" not implemented