In Which I Try Compiling OpenC2E on Arch Linux
I figure I may as well document this too. Disclaimer, I have no idea what I'm doing.
The requirements are listed for Ubuntu as:
sudo apt-get install \
build-essential \
qtbase5-dev \
libsdl2-dev \
libsdl2-mixer-dev \
re2c\
cmake\
bison\
libpng-dev
As we learned when installing DS, package names tend to vary with non-debian based distros! I ended up actually installing:
sudo pacman -S re2c cmake bison base-devel
At this point I got stressed out trying to figure out what the equivalents for the others were, so I just decided to skip ahead and try to troubleshoot on an error-to-error basis
When I extracted the contents of the folder, I cd'd into it and tried cmake -B build .
I got an error: Could NOT find utf8proc
. Installed libutf8proc
.
Got a missing SDL2_mixer
. Installed...... sdl2_mixer
Tried again, got some warnings like Couldn't parse Git rev, not in a Git repository
but otherwise things looked okay?
Tried make -C . openc2e -j4
It seemed to go okay outside of a bunch of "variable set but not used" warnings like:
warning: variable 'flags' set but not used [-Wunused-but-set-variable]
239 | VM_PARAM_INTEGER(flags)
| ^~~~~
so I ./openc2e -d ~/ds20
annnnnd:
Warning: No gametype specified, assuming C3/DS (c3), see --help if you need to specify one.
* Initialising backend sdl...
* SDL Renderer: opengl
* Initialising audio backend sdlmixer...
* Listening for connections on port 20001.
* Reading catalogue files...
* Initial setup...
imageGallery couldn't find the sprite 'hand'
Couldn't find a valid "Pointer Information" catalogue tag, and couldn't find a pointer sprite, so not creating the pointer agent.
* Reading PRAY files...
Warning: Catalogue tag "Pray System File Extensions" wasn't found, so no PRAY files will be loaded.
* Executing initial scripts...
terminate called after throwing an instance of 'creaturesException'
what(): No metarooms found in given bootstrap directories or files
Aborted (core dumped)
Oh, I forgot that dstation-2020 handles things differently... structurally.
./openc2e -d ~/ds20/dockingstation/
was what I needed. And it opened! To... a random new world. No world select screen, I guess. Makes sense, for testing purposes.
I clicked past the login screen and saw the giant BUY CREATURES 3 magma norn fade in... and then it crashed:
Warning: No gametype specified, assuming C3/DS (c3), see --help if you need to specify one.
* Initialising backend sdl...
* SDL Renderer: opengl
* Initialising audio backend sdlmixer...
* Listening for connections on port 20001.
* Reading catalogue files...
Unmatched substitution: \'
* Initial setup...
* Reading PRAY files...
* Executing initial scripts...
Unmatched substitution: \'
* Done startup.
Couldn't find MNG file 'ds_music.mng'!
1 3 11 (Corridor Signpost) caused an exception during script 9: creaturesException: No such clip 'fp_2.wav'
in file /home/aiko/ds20/dockingstation/Bootstrap/010 Docking Station/new_ds_fav_places.cos near line 322:
...q 1 doif ov00 eq 0 setv ov00 1 sndc "fp_2" setv va10 spcs sets va11 gal...
^^^^
1 1 194 (Stinger speaker) caused an exception during script 9: creaturesException: No such clip '_fly.wav'
in file /home/aiko/ds20/dockingstation/Bootstrap/010 Docking Station/stinger pod.cos near line 1531:
...eq 1 and ov00 eq 0 setv ov00 1 sndl "_fly" elif va00 eq 0 and ov00 eq 1...
^^^^
1 3 10 (Meso Signpost) caused an exception during script 9: creaturesException: No such clip 'fp_2.wav'
in file /home/aiko/ds20/dockingstation/Bootstrap/010 Docking Station/new_ds_fav_places.cos near line 322:
...q 1 doif ov00 eq 0 setv ov00 1 sndc "fp_2" setv va10 spcs sets va11 gal...
^^^^
3 3 102 (Muco the Egg Layer) caused an exception during script 9: creaturesException: No such clip 'muc3.wav'
in file /home/aiko/ds20/dockingstation/Bootstrap/010 Docking Station/Norn Egg layer.cos near line 444:
...lif va00 eq 1 sndc "muc2" else sndc "muc3" endi setv va00 rand 0 5 doif...
^^^^
2 11 8 (Tuba) caused an exception during script 6: creaturesException: No such clip 'dr10.wav'
in file /home/aiko/ds20/dockingstation/Bootstrap/010 Docking Station/tuba.cos near line 418:
...r endi endm scrp 2 11 8 6 lock sndc "dr10" endm rscr enum 1 1 162 kill ...
^^^^
2 11 8 (Tuba) caused an exception during script 6: creaturesException: No such clip 'dr10.wav'
in file /home/aiko/ds20/dockingstation/Bootstrap/010 Docking Station/tuba.cos near line 418:
...r endi endm scrp 2 11 8 6 lock sndc "dr10" endm rscr enum 1 1 162 kill ...
^^^^
2 11 8 (Tuba) caused an exception during script 6: creaturesException: No such clip 'dr10.wav'
in file /home/aiko/ds20/dockingstation/Bootstrap/010 Docking Station/tuba.cos near line 418:
...r endi endm scrp 2 11 8 6 lock sndc "dr10" endm rscr enum 1 1 162 kill ...
^^^^
1 2 26 (Welcome Screen) caused an exception during script 1003: creaturesException: No such clip '2bep.wav'
in file /home/aiko/ds20/dockingstation/Bootstrap/010 Docking Station/DS welcome screen.cos near line 273:
...a50 va51 endm scrp 1 2 26 1003 snde "2bep" lock part 3 pose 1 setv va00...
^^^^
terminate called after throwing an instance of 'creaturesException'
what(): No such clip 'mah0.wav'
Aborted (core dumped)
Clearly the game can't find my sounds, for some reason.
I tried Creatures3 and got:
imageGallery couldn't find the sprite 'meerknew'
exec of ""meerk.cos"" failed due to exception assertFailure: Assertion sprite thrown from /home/aiko/Downloads/openc2e-master/src/SpritePart.cpp:17
in file /home/aiko/ds20/creatures3/Bootstrap/098 C3 Patches/meerk.cos near line 4:
inst reps 3 new: simp 2 15 23 "meerknew" 290 0 2500 attr 195 perm 80 bhvr ...
^^^^
* Done startup.
free(): invalid pointer
Aborted (core dumped)
So it can't even find my sprites. Weird? But I'm willing to blame it not being a conventional install.
I decided to point the client at a backup of a windows DS install I had on an old drive:
I'm Here: 010 Docking Station
exec of ""f_DWG.cos"" failed due to exception Parse error at line 2 in file /media/disk/Documents and Settings/Aiko/Documents/Creatures/Docking Station/Bootstrap/087 Dynamic Window Generator/f_DWG.cos: Command not found: expr sorc near:
sets game "f_DWG" sorc 1 202 3 1000 setv game ...
^^^^
exec of ""f_GetByLabel.cos"" failed due to exception Parse error at line 2 in file /media/disk/Documents and Settings/Aiko/Documents/Creatures/Docking Station/Bootstrap/088 CAOS Functions/f_GetByLabel.cos: Command not found: expr sorc near:
sets game "f_GetByLabel" sorc 1 202 2 1000 setv game ...
^^^^
exec of ""f_GetFromList.cos"" failed due to exception Parse error at line 4 in file /media/disk/Documents and Settings/Aiko/Documents/Creatures/Docking Station/Bootstrap/088 CAOS Functions/f_GetFromList.cos: Command not found: expr sorc near:
... 0 0 sets game "f_GetFromList" sorc 1 202 1 1000 ...
^^^^
exec of ""z_updated_dev_injector.cos"" failed due to exception Parse error at line 3 in file /media/disk/Documents and Settings/Aiko/Documents/Creatures/Docking Station/Bootstrap/099 Patches/z_updated_dev_injector.cos: Command not found: expr sorc near:
doif sins sorc 1 1 226 9 1 "z_updated_dev_injector.cos" eq ...
^^^^
I'm Here: Temporary Removal
I'm Here: dsbuild 195
reinjecting
* Done startup.
free(): invalid pointer
Aborted (core dumped)
I recognize those "I'm Here:" lines as dbg: outs from some stuff I was working on. But it looks like openc2e really doesn't like parsing SORC, used in my CAOS function setup, which is... fair, I don't think that command was used in Vanilla C3DS at all, and possibly very rarely in 3rd party stuff.
So I tried point it at my windows C3 install, and just got
free(): invalid pointer
Aborted (core dumped)
Oh dear. Maybe something went wrong in the compile? Maybe because I didn't install all the right dependencies? I didn't look closely at the output but I didn't see any dire warnings.
Creatures 2 started to load— I could hear the sounds and the bees! And then crashed with the same invalid pointer
bit.
Creatures 1 opened though! And it looks nice!

I kind of want to keep it open for the background music.

I even made some little brainless debug norns to tickle.
I'm not terribly disappointed by how this went, since nothing really hinged on this working. I just kind of wanted to try it and see. It was nice to see C1, at least!