1. 22
  1.  

  2. 4

    You can also play quite a few c# games natively with a little assistance from fnaify. It’s primarily targeted at openbsd, but works fine on freebsd. Notes:

    • You need to manually install mojoshader, fna3d, fna, libstubborn, theoraplay, theorafile. (First three mandatory; others might be needed.)

    • Install oksh from ports|packages. Change fnaify’s shebang to oksh rather than ksh.

    • On mesa, there’s a driver bug. One of the following might work around it:

      • FNA3D_FORCE_DRIVER=Vulkan
      • FNA3D_OPENGL_FORCE_CORE_PROFILE=1
      • FNA3D_OPENGL_FORCE_ES3=1

    I’ve been meaning to make ports for all these—openbsd has a much nicer ‘out of the box’ experience at the moment—but it’s not difficult to make happen.

    1. 1

      Thanks. I have read about ‘fnaify’ based games but did not find any one I wanted to play so I did not digged that topic more, but thank you for these hints.

    2. 3

      Opensource operating systems will be the ones who will preserve computer history through emulation or translation layers. And man, it’s great to turn on your laptop and play some old stuff :)

      1. 2

        You can also play many games with the linux compatibility layer. You can even use steam.

        1. 2

          I tried to play World of Goo but no success. The game starts but the screen goes black. The sound still works, you can even ‘blindly’ start a level but the screen is still black. Its probably a lot hit and miss.

          1. 1

            Try setting LIBGL_ALWAYS_SOFTWARE=1. It solved a similar problem for me with FTL.

            It does mean the game won’t be able to use the gpu for rendering, but it doesn’t look like a particularly graphics-intensive game, so that should be fine.

            1. 1

              LIBGL_ALWAYS_SOFTWARE=1

              Thanks for suggestion but I remembered wrong. The behavior I described was under WINE.

              Using Linux Compat Layer its even worse.

              Without specyfing LIBGL_ALWAYS_SOFTWARE=1 it fails very fast:

              % ./WorldOfGoo.bin32
              zsh: segmentation fault  ./WorldOfGoo.bin32
              
              % ./WorldOfGoo.bin64
              zsh: segmentation fault  ./WorldOfGoo.bin64
              

              With LIBGL_ALWAYS_SOFTWARE=1 it fails ‘later’ a little:

              % env LIBGL_ALWAYS_SOFTWARE=1 ./WorldOfGoo.bin64 
              *** Error in `./WorldOfGoo.bin64': double free or corruption (out): 0x0000000998200950 ***
              ======= Backtrace: =========
              /lib64/libc.so.6(+0x81679)[0x802a81679]
              /lib64/libc.so.6(fclose+0x177)[0x802a6e167]
              /lib64/libSDL-1.2.so.0(+0xffd9)[0x801a0ffd9]
              /lib64/libSDL_mixer-1.2.so.0(Mix_LoadWAV_RW+0xe6)[0x801e07d86]
              ./WorldOfGoo.bin64[0x52bdde]
              ./WorldOfGoo.bin64[0x52c984]
              ./WorldOfGoo.bin64[0x51a29b]
              ./WorldOfGoo.bin64[0x53b760]
              ./WorldOfGoo.bin64[0x500605]
              ./WorldOfGoo.bin64[0x520f8a]
              /lib64/libSDL-1.2.so.0(+0x10ad8)[0x801a10ad8]
              /lib64/libSDL-1.2.so.0(+0x52c09)[0x801a52c09]
              /lib64/libpthread.so.0(+0x7e65)[0x802e07e65]
              /lib64/libc.so.6(clone+0x6d)[0x802afe88d]
              ======= Memory map: ========
              zsh: abort      env LIBGL_ALWAYS_SOFTWARE=1 ./WorldOfGoo.bin64
              
              % env LIBGL_ALWAYS_SOFTWARE=1 ./WorldOfGoo.bin32
              *** Error in `./WorldOfGoo.bin32': double free or corruption (out): 0x5da67538 ***
              ======= Backtrace: =========
              /lib/libc.so.6(+0x79aad)[0x287beaad]
              /lib/libc.so.6(fclose+0x164)[0x287ab714]
              /lib/libSDL-1.2.so.0(+0xdcdb)[0x2853bcdb]
              /lib/libSDL_mixer-1.2.so.0(Mix_LoadWAV_RW+0x39b)[0x285d312b]
              ./WorldOfGoo.bin32[0x816e29b]
              ./WorldOfGoo.bin32[0x816ebd3]
              ./WorldOfGoo.bin32[0x815ccc6]
              ./WorldOfGoo.bin32[0x817efd1]
              ./WorldOfGoo.bin32[0x8144062]
              ./WorldOfGoo.bin32[0x8163651]
              /lib/libSDL-1.2.so.0(+0xe955)[0x2853c955]
              /lib/libSDL-1.2.so.0(+0x5740b)[0x2858540b]
              /lib/libpthread.so.0(+0x6bbc)[0x28916bbc]
              /lib/libc.so.6(clone+0x5e)[0x288430ee]
              ======= Memory map: ========
              zsh: abort      env LIBGL_ALWAYS_SOFTWARE=1 ./WorldOfGoo.bin32
              

              Not sure if that helps :)

              1. 1

                Odd…never had anything like that happen before. Usually if I can get a program to run at all in the linuxulator it’ll work—possibly barring external interactions like graphics (per above).

                But yeah, difficult to tell anything from just a backtrace.

        2. 1

          I recently published a command line game and within days of “opening up the repo” (it was private for months) I got a bug report, “it doesn’t compile on freebsd”. (Probably due to some Google test framework code and a strict compile option). Replied but sadly never heard back. If you have some spare time: https://github.com/RaymiiOrg/c_ookieclicker

          1. 1

            Do games that were available on both DOS and Amiga not tend to have much worse music on DOS? The Amiga came with pretty nice hardware for playing music whereas the IBM PC frequently did not.

            1. 3

              Probably depends on the game and timing (and the quality of the made port).

              When AMIGA 1000 was introduced in 1984 (or it was 1985?) it was MASSIVE difference and AMIGA 1000 sound possibilities crushed anything else into the ground. Not sure how it was at 1994-1995 when PC generally took over and AMIGA was at the Deathbed Vigil (1994).

              For example Sensible World of Soccer 96/97 was released in 1996. Compare that to Need for Speed and FIFA 97 which were also released in 1996 :)

              Not to even mention 3Dfx revolution when 3Dfx released its Voodoo Graphics chip also on 1996.

              1. 2

                This. IBM PC had a pile of random add-on cards with varying capabilities. The built-in PC speaker is barely worth mentioning, since it is basically a one-bit channel that had to be driven entirely in software, and not many people wanted to try to write a software synthesizer for it. I have seen games that output human voice through it, but it didn’t work well. By the early/mid 90’s though the tech had more or less settled on the Adlib music card, which provided an FM synthesizer, and the Soundblaster, which provided a PCM sampling interface.

                1. 3

                  The PC speaker was it until 1989, and it took heroic effort to get anything decent out of it: Sentinel Worlds 1 was a childhood delight and even had a technical explanation section in the manual by the sound programmer.

                  By 1995 there was just enough almost-but-not-quite-entirely compatible hardware that a DOS game’s sound-setup might ask you to select from:

                  And yes, companies might compose hardware-specific soundtracks. Sound Card Database combined the multiple versions from Dune 2 into one and found some slight differences: https://www.youtube.com/watch?v=o-Q_UO6Hp7U

                2. 1

                  Mostly I’m recalling that on the DOS side I had an “Adlib” sound card which could barely do MIDI, and not entirely amazing MIDI voices at that. :)