The first commercial RPG game for Linux is now Freeware


gbudny

Member
Joined
Oct 16, 2021
Messages
93
Hi

In 2023, I was exchanging emails with Spiderweb Software bacause I wanted to buy Exile III: Ruined World. I found out that it is now freeware, but it requires a key. It was ported by Boutell.com, which was closed.


Boutell.Com, Inc. and Spiderweb Software are pleased to announce theavailability of Exile III for Linux, a high-quality fantasy game in thetradition of Ultima and Wizardry.
Boutell.Com, Inc. now offers Windows-to-Linux porting services, taking advantage of theWillows TWIN libraries tobring Windows applications to Linux while maintaining a singlesource tree. Exile III is our first such adaptation. For moreinformation, contact boutell@boutell.com.

I had a suggestion, but they decided to solve this problem differently. They created a website that generates keys. You can generate your unique key for this game. This part of the game gets official support after 23 years, which is amazing, and they did it initially for Linux users.


Unfortunately, Exile III doesn't work on the modern operating system because it requires the old version of glibc. I use an old computer with Mandrake 7.2 to play it, but you can use virtualization software.
Onthim told me it should work with 86Box, but I didn't try it yet.

Exile III was the first commercial RPG game for Linux. I know that Tux Games was selling the box version of this game with the CD.

Warning: Make a backup copy of the file ex3misc.dat located it in .exile3 if you want to play it in the future. Exile III and the editor for this game always ask about the different keys if you remove the hidden folder for this game from your home directory. The same issue is happening when you re-install your system.

I thought about building a package for Linux x86-64 with the built-in emulator and the unactivated version of this game, but I don't know how to do it.

I hope that you can run it on Pyra/OpenPandora.
 
Last edited:
I don't see anything other then a demo available for Linux to download, for Windows is available the full game as freeware..but Linux?
 
Thank you for the answer.

Yes, you have to download the demo version and run it.


Later, you should check codes and generate keys for them.

Exile III: Ruined World: type exile3 in a terminal > click Register Copy (main menu)
Exile III: Ruined World (the editor): type exile3ed in a terminal > Registration > Register this copy


When you type these keys it will activate the full version of Exile III and the editor for Linux.
 
Last edited:
A "Demo" software with an "unlocking" system was always called "Shareware".
The unlocking mechanism, anyway, wasn't always hardcoded into the software itself, most of the times was purely "sentimental", as in "The DEMO is already FULL by default, but if you sent the money, ignore the part where it tells that you can't use it for more than 30 days"
 
@gbudny
Tested on Pyra, installer is ok i think when i run with Box86...it segfault..maybe @ptitSeb could check better

Debug level is 1
Dynarec for ARMv7, with extension: HALF FAST_MULT EDSP NEON VFPv4 IDIVA PageSize:4096 Running on Cortex-A15 with 2 Cores
Params database has 29 entries
Box86 with Dynarec v0.3.5 built on Jan 3 2024 17:35:22
Using default BOX86_LD_LIBRARY_PATH: ./:lib/:lib32/:x86/:i686/
Using default BOX86_PATH: ./:bin/
Counted 46 Env var
Looking for /home/farox/exile3/exile3-fullscreen-binary
Rename process to "exile3-fullscreen-binary"
Using native(wrapped) libc.so.6
Using native(wrapped) ld-linux.so.2
Using native(wrapped) libpthread.so.0
Using native(wrapped) librt.so.1
Using native(wrapped) libbsd.so.0
Warning, CALL to 0x0 at 0x8048836 (0x8048835)
FillBlock at 0xf7fb77ca triggered a segfault, cancelling
FillBlock at 0xf7fb77ca triggered a segfault, cancelling
3278|SIGSEGV @0x62b20114 (???(/home/farox/exile3/exile3-fullscreen-binary/0x62b20114)) (x86pc=0xf7fb77ca/???:"???", esp=0xb64382d0, stack=0xb5c39000:0xb6439000 own=(nil) fp=0xb64382d8), for accessing 0xf7fb77ca (code=1/prot=87), db=(nil)((nil):(nil)/(nil):(nil)/???:clean, hash:0/0)
ESP-0x10:0x00000000 ESP-0x0c:0x00000000 ESP-0x08:0x00000000 ESP-0x04:0x00000000
ESP+0x00:0x08048836 ESP+0x04:0xb6438314 ESP+0x08:0x00000000 ESP+0x0c:0x40020010
3278|Double SIGSEGV (code=1, pc=0x62b20114, addr=0xf7fb77ca)!
farox@farox-pyra:~/exile3$
 
Thank you for the answers.

I have never used box86 on Linux, but I have some suggestions about this game.

Exile III works only on the Linux distribution with glibc 2.1. In this case, I used Mandrake 7.2 and Onthim used Red Hat 7 to play it.

Type in a terminal: exile3 because I think you are trying to run it in fullscreen mode. This mode doesn't work if a system doesn't have 3D acceleration. It should start in a window mode.

Is x86box available for Pyra/OpenPandora?
 
Last edited:
Box86 by @ptitSeb is started on OpenPandora and (after his great succes...) later ported to many boards including Pyra.

I didn't have more luck with non fullscreen ..here is the log:

Debug level is 1
Dynarec for ARMv7, with extension: HALF FAST_MULT EDSP NEON VFPv4 IDIVA PageSize:4096 Running on Cortex-A15 with 2 Cores
Params database has 29 entries
Box86 with Dynarec v0.3.5 built on Jan 3 2024 17:35:22
Using default BOX86_LD_LIBRARY_PATH: ./:lib/:lib32/:x86/:i686/
Using default BOX86_PATH: ./:bin/
Counted 46 Env var
Looking for /home/farox/exile3/exile3-binary
Rename process to "exile3-binary"
Using emulated libtwin32.so
Using emulated libcommdlg.so
Using emulated libddeml.so
Using emulated libkeyboard.so
Using emulated libshell.so
Using native(wrapped) libXext.so.6
Using native(wrapped) libX11.so.6
Using native(wrapped) libdl.so.2
Using native(wrapped) libc.so.6
Using native(wrapped) ld-linux.so.2
Using native(wrapped) libpthread.so.0
Using native(wrapped) librt.so.1
Using native(wrapped) libbsd.so.0
Using native(wrapped) libxcb.so.1
Using native(wrapped) libXau.so.6
Using native(wrapped) libXdmcp.so.6
Using native(wrapped) libm.so.6
Error: Global Symbol XDrawImageString16 not found, cannot apply R_386_GLOB_DAT @0x6017244c ((nil)) in libtwin32.so
modify_ldt(0x1, 0xb640c154[0x4/base=0x632b8cc8/limit=0/32bits:0/2/0...], 16)
FatalAppExit: DPMI failure

LIB WARN : ***WARN*** Object Manager:Get Object: NULL Handle 0
 
Box86 by @ptitSeb is started on OpenPandora and (after his great succes...) later ported to many boards including Pyra.

I didn't have more luck with non fullscreen ..here is the log:

Debug level is 1
Dynarec for ARMv7, with extension: HALF FAST_MULT EDSP NEON VFPv4 IDIVA PageSize:4096 Running on Cortex-A15 with 2 Cores
Params database has 29 entries
Box86 with Dynarec v0.3.5 built on Jan 3 2024 17:35:22
Using default BOX86_LD_LIBRARY_PATH: ./:lib/:lib32/:x86/:i686/
Using default BOX86_PATH: ./:bin/
Counted 46 Env var
Looking for /home/farox/exile3/exile3-binary
Rename process to "exile3-binary"
Using emulated libtwin32.so
Using emulated libcommdlg.so
Using emulated libddeml.so
Using emulated libkeyboard.so
Using emulated libshell.so
Using native(wrapped) libXext.so.6
Using native(wrapped) libX11.so.6
Using native(wrapped) libdl.so.2
Using native(wrapped) libc.so.6
Using native(wrapped) ld-linux.so.2
Using native(wrapped) libpthread.so.0
Using native(wrapped) librt.so.1
Using native(wrapped) libbsd.so.0
Using native(wrapped) libxcb.so.1
Using native(wrapped) libXau.so.6
Using native(wrapped) libXdmcp.so.6
Using native(wrapped) libm.so.6
Error: Global Symbol XDrawImageString16 not found, cannot apply R_386_GLOB_DAT @0x6017244c ((nil)) in libtwin32.so
modify_ldt(0x1, 0xb640c154[0x4/base=0x632b8cc8/limit=0/32bits:0/2/0...], 16)
FatalAppExit: DPMI failure

LIB WARN : ***WARN*** Object Manager:Get Object: NULL Handle 0

Thank you for the answer.

I didn't know that @ptitSeb created this project, which is an interesting news for me,

It would be great if @ptitSeb could check it.

I suspect that some versions of libraries are incorrect for this game and are causing issues.
I must check what exact libraries are necessary for this game from Mandrake 7.2.

The old commercial games sometimes used older versions of glibc 2.1 like Exile III, Würstelstand, or even libc5 like Quake, Inner Worlds, etc.

Is it possible to use libraries from Mandrake 7.2 in Box86?
 
Last edited:
I didn't know that @ptitSeb created this project, which is an interesting news for me,
There were different projects started by devs from this community that at some point became mainstream, and most of them were made initially just for the Pandora... this forum has seen really great people around.

Two examples:
"DraStic" - a Nintendo DS emulator (that made the impossible possible) from @Exophase (is him still around ?) that at some point was ported to Android.
"JPEG XL" - Free Lossless Image Format (FLIF) a new kind of graphic format from @_wb_
... but there are too many to list
 
Box86 by @ptitSeb is started on OpenPandora and (after his great succes...) later ported to many boards including Pyra.

I didn't have more luck with non fullscreen ..here is the log:

Debug level is 1
Dynarec for ARMv7, with extension: HALF FAST_MULT EDSP NEON VFPv4 IDIVA PageSize:4096 Running on Cortex-A15 with 2 Cores
Params database has 29 entries
Box86 with Dynarec v0.3.5 built on Jan 3 2024 17:35:22
Using default BOX86_LD_LIBRARY_PATH: ./:lib/:lib32/:x86/:i686/
Using default BOX86_PATH: ./:bin/
Counted 46 Env var
Looking for /home/farox/exile3/exile3-binary
Rename process to "exile3-binary"
Using emulated libtwin32.so
Using emulated libcommdlg.so
Using emulated libddeml.so
Using emulated libkeyboard.so
Using emulated libshell.so
Using native(wrapped) libXext.so.6
Using native(wrapped) libX11.so.6
Using native(wrapped) libdl.so.2
Using native(wrapped) libc.so.6
Using native(wrapped) ld-linux.so.2
Using native(wrapped) libpthread.so.0
Using native(wrapped) librt.so.1
Using native(wrapped) libbsd.so.0
Using native(wrapped) libxcb.so.1
Using native(wrapped) libXau.so.6
Using native(wrapped) libXdmcp.so.6
Using native(wrapped) libm.so.6
Error: Global Symbol XDrawImageString16 not found, cannot apply R_386_GLOB_DAT @0x6017244c ((nil)) in libtwin32.so
modify_ldt(0x1, 0xb640c154[0x4/base=0x632b8cc8/limit=0/32bits:0/2/0...], 16)
FatalAppExit: DPMI failure

LIB WARN : ***WARN*** Object Manager:Get Object: NULL Handle 0
Looks like thereis a missing wrapped function "XDrawImageString16" that needs to be added to box86. I'll add it soon.
Post automatically merged:

Thank you for the answer.

I didn't know that @ptitSeb created this project, which is an interesting news for me,

It would be great if @ptitSeb could check it.

I suspect that some versions of libraries are incorrect for this game and are causing issues.
I must check what exact libraries are necessary for this game from Mandrake 7.2.

The old commercial games sometimes used older versions of glibc 2.1 like Exile III, Würstelstand, or even libc5 like Quake, Inner Worlds, etc.

Is it possible to use libraries from Mandrake 7.2 in Box86?
Yes and no. You can use old lib from other OS, but some libs are wrapped and the arm version will be used. Especialy for glibc, the arm version will be used no matter what.
 
Thanks @ptitSeb
Unfortunately the game still segfault.

Debug level is 1
Dynarec for ARMv7, with extension: HALF FAST_MULT EDSP NEON VFPv4 IDIVA PageSize:4096 Running on Cortex-A15 with 2 Cores
Params database has 29 entries
Box86 with Dynarec v0.3.7 built on Aug 25 2024 21:26:07
Using default BOX86_LD_LIBRARY_PATH: ./:lib/:lib32/:x86/:i686/
Using default BOX86_PATH: ./:bin/
Counted 46 Env var
Looking for /home/farox/exile3/exile3-binary
Rename process to "exile3-binary"
Using emulated libtwin32.so
Using emulated libcommdlg.so
Using emulated libddeml.so
Using emulated libkeyboard.so
Using emulated libshell.so
Using native(wrapped) libXext.so.6
Using native(wrapped) libX11.so.6
Using native(wrapped) libdl.so.2
Using native(wrapped) libc.so.6
Using native(wrapped) ld-linux.so.2
Using native(wrapped) libpthread.so.0
Using native(wrapped) librt.so.1
Using native(wrapped) libbsd.so.0
Using native(wrapped) libxcb.so.1
Using native(wrapped) libXau.so.6
Using native(wrapped) libXdmcp.so.6
Using native(wrapped) libm.so.6
Warning, function my_stat not found
Warning, function my_stat not found
Warning, function my_stat not found
Warning, function my_stat not found
Warning, function my_stat not found
FillBlock at (nil) triggered a segfault, cancelling
FillBlock at (nil) triggered a segfault, cancelling
5678|Ask to run at NULL, will segfault
5678|SIGSEGV @0x62b17f24 (???(/home/farox/exile3/exile3-binary/0x62b17f24)) (x86pc=(nil)/"???", esp=0xb644a094, stack=0xb5c4b000:0xb644b000 own=(nil) fp=0x53dcf), for accessing (nil) (code=1/prot=87), db=(nil)((nil):(nil)/(nil):(nil)/???:clean, hash:0/0)
ESP-0x10:0x66c8d302 ESP-0x0c:0x0b4420f2 ESP-0x08:0x00053dcf ESP-0x04:0x00000000
ESP+0x00:0x6018a8c0 ESP+0x04:0x60170d3c ESP+0x08:0x6031c3c8 ESP+0x0c:0x00000000
5678|Double SIGSEGV (code=1, pc=0x62b17f24, addr=(nil))!
 
Thank you @ptitSeb
A good step forward...but the game didn't start yet...

Debug level is 1
Dynarec for ARMv7, with extension: HALF FAST_MULT EDSP NEON VFPv4 IDIVA PageSize:4096 Running on Cortex-A15 with 2 Cores
Params database has 29 entries
Box86 with Dynarec v0.3.7 built on Aug 26 2024 20:23:55
Using default BOX86_LD_LIBRARY_PATH: ./:lib/:lib32/:x86/:i686/
Using default BOX86_PATH: ./:bin/
Counted 46 Env var
Looking for /home/farox/exile3/exile3-binary
Rename process to "exile3-binary"
Using emulated libtwin32.so
Using emulated libcommdlg.so
Using emulated libddeml.so
Using emulated libkeyboard.so
Using emulated libshell.so
Using native(wrapped) libXext.so.6
Using native(wrapped) libX11.so.6
Using native(wrapped) libdl.so.2
Using native(wrapped) libc.so.6
Using native(wrapped) ld-linux.so.2
Using native(wrapped) libpthread.so.0
Using native(wrapped) librt.so.1
Using native(wrapped) libbsd.so.0
Using native(wrapped) libxcb.so.1
Using native(wrapped) libXau.so.6
Using native(wrapped) libXdmcp.so.6
Using native(wrapped) libm.so.6
modify_ldt(0x1, 0xb645415c[0x4/base=0x637fb470/limit=0/32bits:0/2/0...], 16)
FatalAppExit: DPMI failure

LIB WARN : ***WARN*** Object Manager:Get Object: NULL Handle 0
 
Thank you for the answers.

There were different projects started by devs from this community that at some point became mainstream, and most of them were made initially just for the Pandora... this forum has seen really great people around.

Two examples:
"DraStic" - a Nintendo DS emulator (that made the impossible possible) from @Exophase (is him still around ?) that at some point was ported to Android.
"JPEG XL" - Free Lossless Image Format (FLIF) a new kind of graphic format from @_wb_
... but there are too many to list

I didn't know it.

It's great to see original projects created by members of this community.

Yes and no. You can use old lib from other OS, but some libs are wrapped and the arm version will be used. Especialy for glibc, the arm version will be used no matter what.

That's interesting.

Can box86 emulate libc5 on Pyra and OpenPandora?
 
That's interesting.

Can box86 emulate libc5 on Pyra and OpenPandora?
Probably. I'm usure what emulate libc5 would really mean. If it's different behaviour of function, or adding back removed function? or something else?
Post automatically merged:

Thank you @ptitSeb
A good step forward...but the game didn't start yet...

Debug level is 1
Dynarec for ARMv7, with extension: HALF FAST_MULT EDSP NEON VFPv4 IDIVA PageSize:4096 Running on Cortex-A15 with 2 Cores
Params database has 29 entries
Box86 with Dynarec v0.3.7 built on Aug 26 2024 20:23:55
Using default BOX86_LD_LIBRARY_PATH: ./:lib/:lib32/:x86/:i686/
Using default BOX86_PATH: ./:bin/
Counted 46 Env var
Looking for /home/farox/exile3/exile3-binary
Rename process to "exile3-binary"
Using emulated libtwin32.so
Using emulated libcommdlg.so
Using emulated libddeml.so
Using emulated libkeyboard.so
Using emulated libshell.so
Using native(wrapped) libXext.so.6
Using native(wrapped) libX11.so.6
Using native(wrapped) libdl.so.2
Using native(wrapped) libc.so.6
Using native(wrapped) ld-linux.so.2
Using native(wrapped) libpthread.so.0
Using native(wrapped) librt.so.1
Using native(wrapped) libbsd.so.0
Using native(wrapped) libxcb.so.1
Using native(wrapped) libXau.so.6
Using native(wrapped) libXdmcp.so.6
Using native(wrapped) libm.so.6
modify_ldt(0x1, 0xb645415c[0x4/base=0x637fb470/limit=0/32bits:0/2/0...], 16)
FatalAppExit: DPMI failure

LIB WARN : ***WARN*** Object Manager:Get Object: NULL Handle 0
the message "FatalAppExit: DPMI failure" is an application message, not a box86 one, but not sure why it happens. But if this is a "DOS Protected Mode Interface" message, like the games wants to run a 16bits process sub-part, wich seems coherent with the previous modify_ldt call that seems to setup a 16bits selector.. well, Box86 doesn't support that (and it's not planned for now)
Can you run with "BOX86_LOG=1 BOX86_SHOWSEGV=1 BOX86_DLSYM_ERROR=1" env. var. to have a more verbosed output?
 
Last edited:
Can you run with "BOX86_LOG=1 BOX86_SHOWSEGV=1 BOX86_DLSYM_ERROR=1" env. var. to have a more verbosed output?
Yes but nothing is changed.
Debug level is 1
Shows details of dlopen / dlsym /dlclose : Yes
Show Segfault signal even if a signal handler is present
Dynarec for ARMv7, with extension: HALF FAST_MULT EDSP NEON VFPv4 IDIVA PageSize:4096 Running on Cortex-A15 with 2 Cores
Params database has 29 entries
Box86 with Dynarec v0.3.7 built on Aug 26 2024 20:23:55
Using default BOX86_LD_LIBRARY_PATH: ./:lib/:lib32/:x86/:i686/
Using default BOX86_PATH: ./:bin/
Counted 46 Env var
Looking for /home/farox/exile3/exile3-binary
Rename process to "exile3-binary"
Using emulated libtwin32.so
Using emulated libcommdlg.so
Using emulated libddeml.so
Using emulated libkeyboard.so
Using emulated libshell.so
Using native(wrapped) libXext.so.6
Using native(wrapped) libX11.so.6
Using native(wrapped) libdl.so.2
Using native(wrapped) libc.so.6
Using native(wrapped) ld-linux.so.2
Using native(wrapped) libpthread.so.0
Using native(wrapped) librt.so.1
Using native(wrapped) libbsd.so.0
Using native(wrapped) libxcb.so.1
Using native(wrapped) libXau.so.6
Using native(wrapped) libXdmcp.so.6
Using native(wrapped) libm.so.6
modify_ldt(0x1, 0xb642d158[0x4/base=0x637fb470/limit=0/32bits:0/2/0...], 16)
FatalAppExit: DPMI failure

LIB WARN : ***WARN*** Object Manager:Get Object: NULL Handle 0
 
Yes but nothing is changed.
Debug level is 1
Shows details of dlopen / dlsym /dlclose : Yes
Show Segfault signal even if a signal handler is present
Dynarec for ARMv7, with extension: HALF FAST_MULT EDSP NEON VFPv4 IDIVA PageSize:4096 Running on Cortex-A15 with 2 Cores
Params database has 29 entries
Box86 with Dynarec v0.3.7 built on Aug 26 2024 20:23:55
Using default BOX86_LD_LIBRARY_PATH: ./:lib/:lib32/:x86/:i686/
Using default BOX86_PATH: ./:bin/
Counted 46 Env var
Looking for /home/farox/exile3/exile3-binary
Rename process to "exile3-binary"
Using emulated libtwin32.so
Using emulated libcommdlg.so
Using emulated libddeml.so
Using emulated libkeyboard.so
Using emulated libshell.so
Using native(wrapped) libXext.so.6
Using native(wrapped) libX11.so.6
Using native(wrapped) libdl.so.2
Using native(wrapped) libc.so.6
Using native(wrapped) ld-linux.so.2
Using native(wrapped) libpthread.so.0
Using native(wrapped) librt.so.1
Using native(wrapped) libbsd.so.0
Using native(wrapped) libxcb.so.1
Using native(wrapped) libXau.so.6
Using native(wrapped) libXdmcp.so.6
Using native(wrapped) libm.so.6
modify_ldt(0x1, 0xb642d158[0x4/base=0x637fb470/limit=0/32bits:0/2/0...], 16)
FatalAppExit: DPMI failure

LIB WARN : ***WARN*** Object Manager:Get Object: NULL Handle 0
Yeah, I'm afraid it's a 16bits game under the hood, wich is a no-go for now on box86 :( (and it's really a niche feature, so not sure I'll tackle this one one day)
 
Back
Top