Pandemonium on Linux

How to build

The following instructions are valid for mostly all Debian based distribution. I am personally using Devuan ASCII, based on Debian stretch.

This document heavily use the terminal. In case of doubt, refer to the original documentation

To start, we need a workspace. Assuming we are in the home directory, we create then enter the workspace folder:

mkdir workspace
cd workspace
pwd

We should now be located in /home/USERNAME/workspace

Required software and libraries

Different tools and libraries are required to build Pandemonium. The following command should install everything you need. It may take a while, so you may want to grab some tea and biscuit while apt download and configure all the packages.

apt-get install codeblocks mercurial build-essential libtool libreadline-dev liblua5.3-dev liballegro5-dev unzip libglade2-dev libnoise-dev

libbass & libbass_fx

Bass is a proprietary audio library. Due to its nature it is not available in any distro repository, and we are then required to download the appropriate files. We need the base library, libbass and the FX extension bass_fx. You can find the download links on developer’s webpage, the appropriate ones have the Linux’s mascot appended.

Alternatively, these wget command should get you the proper archives.

wget 'https://www.un4seen.com/files/bass24-linux.zip'
wget 'https://www.un4seen.com/files/z/0/bass_fx24-linux.zip'

Cleanliness is primordial, so we will create a subdirectory for the bass library named bass. Luckily, the unzip command will automatically create the proper directory structure for us by using the -d argument. Let’s unzip those archives, libbass into bass/ and bass_fx in bass/FX/.

unzip bass24-linux.zip -d bass
unzip bass_fx24-linux.zip -d bass/FX/

We will need those files at a later step:

  • libbass.so or x64/libbass.so for 64bit systems
  • FX/libbass_fx.so or FX/x64/libbass_fx.so for 64bit systems
  • bass.h
  • FX/C/bass_fx.h

Main course

Let’s clone the repository and move into the project’s folder.

hg clone https://bitbucket.org/SaltyJustice/hopremastered
cd hopremastered

We’ll use Code::Blocks to build the software. The way advertised here makes away with the interface and directly ask codeblocks to build the Linux target. Code::Blocks might display several dialogue windows about “Global variable”, cancel every last one of them and validate the invalid variable warning. Global variables are useful for other operating systems, like windows, but are handled by the base system on Linux (so we ignore that Code::Blocks feature).

Again, this will take a while. Feel free to get a refill on that tea and those biscuits.

codeblock --build --target="ReleaseLinux" --no-batch-window-close ./Pandemonium.cbp

NOTE: I had to change the Pandemonium.cbp file so the compiler could find the different libraries on the system. Those changes might have been merged upstream.

Game data

The build succeeded and you are full of tea an biscuit. Good. We now need to retrieve the data files that goes along with the game. Since we like to be clean, we’ll put them in their own directory.

mkdir ../prototype
cd ../prototype
pwd

We should now be in /home/USERNAME/workspace/prototype.

Download the latest prototype package through the following link then save the zip file in the current directory (prototype). At the time this document was written, the prototype archive’s filename was Pandemonium+Prototype+5-2c.zip. You obviously need to adapt the following command to your situation.

The workspace directory tree should resemble the following (ignoring bass):

.
├── hopremastered
│   ├── Data
│   ├── DeveloperLocal
│   ├── osxbin
│   ├── Satellites
│   ├── Shaders
│   └── SourceCode
└── prototype
    └── Pandemonium Prototype 5-2c
        ├── Data
        ├── osxbin
        ├── Saves
        └── Shaders

We need to unzip the archive and copy the missing slf files and audio file to their proper location. We are making use of find, which will make all the work in our stead (search, copy and destroy). We also need to make sure to not copy over the lua files from the Audio folder.

unzip Pandemonium+Prototype+5-2c.zip
find "Pandemonium Prototype 5-2c/Data" -maxdepth 1 -type f -iname *.slf -exec cp "{}" ../hopremastered/Data/ \;
cp "Pandemonium Prototype 5-2c/Data/Audio" . && find Audio/ -type f -iname *.lua -delete && cp -rl Audio ../hopremastered/Data && rm -r Audio

To explain what we are doing with Audio:

  1. We copy the Audio folder to a temporary place (1st cp)
  2. We scan and remove all lua file from the temporary Audio folder (find)
  3. We merge the temporary Audio folder with the game’s (2nd cp, argument -l for hardlink)
  4. We remove the temporary Audio folder

Launching the game

Once the data is copied over, we can return to the hopremastered folder with a quick cd ../hopremastered. Let’s make sure the libraries are properly linked with the following, this should return nothing: ldd Pandemonium | grep "not found"

If everything is good, simply launch the game by typing: ./Pandemonium