The commercial game Halloween (FPS) for Linux is now the open source project


gbudny

Member
Joined
Oct 16, 2021
Messages
56
Hi

I think that some users remember that many years ago, Jadeware published the commercial game Halloween. Unfortunately, they decided to drop the support for the Linux version, and I couldn't buy it. However, they decided to release the source code on GitHub, so it should be possible to compile it on Linux.

The original Linux version is too old to run on the modern Linux distributions. However. we have the source code for this game, but I can't compile it. Some of things has to be re-written like KSound, KMusic, and so on. I'm not a programmer, so I have difficulties to build it on Linux:

Perhaps, someone could look at the source code and build it for Linux x86 and OpenPandora.
 
KSound and Kmusic might be KDE projects?

I thought about the same thing when I saw the first error, but it's something different.

I have issues with compiling it, so I commented KSound.h and KMusic.h in the header files. However, the compiler started to generate too many warnings like:

warning: ISO C++ forbids converting a string constant to ‘char*’

Here is the explanation of the author:

"KSound.h was a simple code wrapper class managing audio SFX.
You can comment includes and probably rewrite the audio code with lib sdl or something..?"

This is a single player game, and you can finish it quickly:

 
Last edited:
Warnings about implicitly casting strings to char* variables is probably genuine, because that's how you used to set up a string in days gone by. I'm not an active C++ coder at present so I'm not sure what the right way to do that is these days. There are probably errors about missing functions that used to be found in Ksound and Kmusic. You can probably comment those lines out to begin with, although don't delete them, since they're useful in hinting about what those tools previously did, and it will result in the game binary being almost entirely silent when run I suspect.

Many linux programs to this day build with warnings, it's the errors you really need to spot. Reams of warnings can hide those, which is why the compiler -w options are useful. Ideally you'd go and resolve all of those warnings after fixing all the actual errors, but you woulndn't be the first person to not do that step and leave -w flags hard coded in their make files if they even care that much.
 
Thanks a lot for the news, i didn't know this game from Jadeware
I downloaded the sources and i saw that the Windows version use Bass Library to have audio. Maybe we could use it too.
We have Bass lib also on Pandora.
I'll take a look...but i don't promise nothing...as i'm not a programmer.
This will be a good game for the Pyra...so if someone want to take a look...(at moment don't have Pyra ...and my Pandora is in Germany for repairing).
 
Yes. it was a commercial game, and to be more specific it was shareware: $24.95. You can find the original file:

github.com/brizzly/Halloween3D/blob/master/HalloweenSrc/misc/ORDER

You could get the Linux version on a CD in 2003, and I found out about this game from happypenguin.org in 2004.

I think that a Mac version was updated few years ago, and you can download it from the the App store.
 
Last edited:
Here is a compiled version for Linux (64 bit), using Bass library fresh download and included here, the zip archive include the sources to be able to recompile.
To mantain a small archive i cutted most of the files that are unchanged, so if you want to test you need to download first the archive from github and substitute the original files with those on my zip archive.
The game start but segfault, maybe for my changes, or maybe for other reasons.
There are other things to fix, mostly i disabled some keyboard and mouse managements under menu.cpp and input.cpp (if someone want to take a look here...) that need to be fixed or rewritten using SDL.

I don't know if the Bass is working for audio...but at least it compile fine.

Here is the log when i compile...i disabled most of the warnings (look inside at "build" file to re-enable)
Halloween3D-master/HalloweenSrc$ ./build
bspfile.cpp: In function ‘hBool LoadMap()’:
bspfile.cpp:27:7: warning: ‘%s’ directive writing up to 254 bytes into a region of size 243 [-Wformat-overflow=]
hBool LoadMap()
^~~~~~~
bspfile.cpp:39:9: note: ‘sprintf’ output between 13 and 267 bytes into a destination of size 255
sprintf(path,"%s%s%s",SYSDIR,MAPDIR,mapfile.string);
~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
halloween_linux.cpp: In function ‘void sys_end()’:
halloween_linux.cpp:444:22: warning: format not a string literal and no format arguments [-Wformat-security]
printf(ErrorMessage);
^
console.cpp: In function ‘void m_ConsPrint(char*, ...)’:
console.cpp:471:15: warning: format not a string literal and no format arguments [-Wformat-security]
printf(buffer);
^
console.cpp: In function ‘void m_EnterConsoleString()’:
console.cpp:679:6: warning: ‘%s’ directive writing up to 254 bytes into a region of size 80 [-Wformat-overflow=]
void m_EnterConsoleString()
^~~~~~~~~~~~~~~~~~~~
console.cpp:830:13: note: ‘sprintf’ output between 2 and 256 bytes into a destination of size 80
sprintf(ConsoleBufferLine, "%s ", var->name);
~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
game.cpp: In function ‘void game_Init()’:
game.cpp:779:8: warning: ‘void* __builtin_memcpy(void*, const void*, long unsigned int)’ writing 10 bytes into a region of size 9 overflows the destination [-Wstringop-overflow=]
strcpy(HalloLetters,"_________");
~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
menu.cpp: In function ‘void menu_ClickedA_PAUSED()’:
menu.cpp:84:9: warning: ‘void* __builtin_memcpy(void*, const void*, long unsigned int)’ writing 10 bytes into a region of size 9 overflows the destination [-Wstringop-overflow=]
strcpy(HalloLetters, "_________");
~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~

Here is the log on my console when i run...
./Hallow999
WELCOME TO (HALLOWEEN 1.999-Linux (C) Copyright 2003 Jadeware)
New Variable Added: fullscreen 0 0.000000
New Variable Added: colordepth 16 16.000000
New Variable Added: videomode 2 2.000000
New Variable Added: visent 0 0.000000
New Variable Added: drawface 1 1.000000
New Variable Added: drawtris 0 0.000000
New Variable Added: drawone 0 0.000000
New Variable Added: drawportal 0 0.000000
New Variable Added: invertmouse 0 0.000000
New Variable Added: drawnormal 0 0.000000
New Variable Added: drawbound 0 0.000000
New Variable Added: pview 1 1.000000
New Variable Added: drawcell 0 0.000000
New Variable Added: drawfps 0 0.000000
New Variable Added: cvel 0.2 0.200000
New Variable Added: pvel 1.0 1.000000
New Variable Added: prvel 0.10 0.100000
New Variable Added: plook 90.0 90.000000
New Variable Added: noclip 0 0.000000
New Variable Added: fov 120 120.000000
New Variable Added: jumpstep 0.25 0.250000
New Variable Added: groundacc 0.03 0.030000
New Variable Added: groundslow 0.020 0.020000
New Variable Added: gravity 8.0 8.000000
New Variable Added: filemap h1m1.map 0.000000
New Variable Added: drawgun 1 1.000000
New Variable Added: maxspeed 0.23 0.230000
New Variable Added: airacc 0.004 0.004000
New Variable Added: airslow 0.0 0.000000
New Variable Added: soundsys 1 1.000000
New Variable Added: respawn 1 1.000000
New Variable Added: god 0 0.000000
New Variable Added: monster 1 1.000000
New Variable Added: bombslow 0.3 0.300000
New Variable Added: musicvol 50.0 50.000000
New Variable Added: soundvol 50.0 50.000000
New Variable Added: autoswitch 1 1.000000
New Variable Added: bms 4 4.000000
New Variable Added: bmd 5 5.000000
New Variable Added: statutbar 1 1.000000
New Variable Added: animspeed 1.0 1.000000
New Variable Added: lightmap 1 1.000000
New Variable Added: cullface 1 1.000000
New Variable Added: renderent 1 1.000000
New Variable Added: directstart 0 0.000000
New Variable Added: eps 0.001 0.001000
New Variable Added: developer 0 0.000000
New Variable Added: offset 20 20.000000
New Variable Added: leaf -1 -1.000000
New Variable Added: record 0 0.000000
New Variable Added: stoprecord 0 0.000000
New Variable Added: play 0 0.000000
New Variable Added: stopplay 0 0.000000
New Variable Added: noscript 0 0.000000
New Variable Added: gk_up 200 200.000000
New Variable Added: gk_down 208 208.000000
New Variable Added: gk_left 203 203.000000
New Variable Added: gk_right 205 205.000000
New Variable Added: gk_jump 257 257.000000
New Variable Added: gk_attack 256 256.000000
New Variable Added: gk_axe 2 2.000000
New Variable Added: gk_arbalet 3 3.000000
New Variable Added: gk_bombgun 4 4.000000
New Variable Added: gk_tromblon 5 5.000000
New Variable Added: gk_crouch 54 54.000000
New Variable Added: gk_action 28 28.000000
New Variable Added: gk_run 54 54.000000
New Variable Added: mapletter 0 0.000000
New Variable Added: killdepla 0 0.000000
New Variable Added: killmorba 0 0.000000
New Variable Added: killzeubat 0 0.000000
New Variable Added: killsubzerat 0 0.000000
New Variable Added: killzemummy 0 0.000000
New Variable Added: mapcomplete 0 0.000000
New Variable Added: musictrack 0 0.000000
New Variable Added: prestrack 0 0.000000
New Variable Added: resetgame 0 0.000000
New Variable Added: picmip 1 1.000000
New Variable Added: difficulty 1 1.000000
New Variable Added: gameslot 1 1.000000
New Variable Added: gamma 1 1.000000
New Variable Added: tflame 0.035 0.035000
New Variable Added: ghost 0 0.000000
New Variable Added: terminator 0 0.000000
New Variable Added: port 24650 24650.000000
New Variable Added: ip localhost 0.000000
New Variable Added: net_map 1 1.000000
New Variable Added: cl_name UnnamedPlayer 0.000000
New Variable Added: sv_name HalloweenServer 0.000000
New Variable Added: password SALEDEP 0.000000
New Variable Added: gametype 0 0.000000
New Variable Added: sv_dedicated 0 0.000000
New Variable Added: notextures 0 0.000000
New Variable Added: bestscore1 0 0.000000
New Variable Added: bestscore2 0 0.000000
New Variable Added: bestscore3 0 0.000000
New Variable Added: bestscore4 0 0.000000
New Variable Added: bestscore5 0 0.000000
New Variable Added: bestscore6 0 0.000000
New Variable Added: bestscore7 0 0.000000
New Variable Added: bestscore8 0 0.000000
New Variable Added: bestscore9 0 0.000000
New Variable Added: fogmode 0 0.000000
New Variable Added: fogdensity 0.001f 0.001000
Loading config file: system/hconfig.cfg
Console initialization done.
Halloween game engine is ready..
g_ResetTextureStruct
g_ResetTextureStruct done.
Font Init: i max: 256
systex/logo.tga
Errore di segmentazione (core dump creato)
 

Attachments

  • Halloween3D-test.zip
    6.3 MB · Views: 172
Here is the log when i compile...i disabled most of the warnings (look inside at "build" file to re-enable)
Code:
Halloween3D-master/HalloweenSrc$ ./build
bspfile.cpp: In function ‘hBool LoadMap()’:
bspfile.cpp:27:7: warning: ‘%s’ directive writing up to 254 bytes into a region of size 243 [-Wformat-overflow=]
 hBool LoadMap()
       ^~~~~~~
bspfile.cpp:39:9: note: ‘sprintf’ output between 13 and 267 bytes into a destination of size 255
  sprintf(path,"%s%s%s",SYSDIR,MAPDIR,mapfile.string);
  ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
halloween_linux.cpp: In function ‘void sys_end()’:
halloween_linux.cpp:444:22: warning: format not a string literal and no format arguments [-Wformat-security]
   printf(ErrorMessage);
                      ^
console.cpp: In function ‘void m_ConsPrint(char*, ...)’:
console.cpp:471:15: warning: format not a string literal and no format arguments [-Wformat-security]
  printf(buffer);
               ^
console.cpp: In function ‘void m_EnterConsoleString()’:
console.cpp:679:6: warning: ‘%s’ directive writing up to 254 bytes into a region of size 80 [-Wformat-overflow=]
 void m_EnterConsoleString()
      ^~~~~~~~~~~~~~~~~~~~
console.cpp:830:13: note: ‘sprintf’ output between 2 and 256 bytes into a destination of size 80
      sprintf(ConsoleBufferLine, "%s ", var->name);
      ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
game.cpp: In function ‘void game_Init()’:
game.cpp:779:8: warning: ‘void* __builtin_memcpy(void*, const void*, long unsigned int)’ writing 10 bytes into a region of size 9 overflows the destination [-Wstringop-overflow=]
  strcpy(HalloLetters,"_________");
  ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
menu.cpp: In function ‘void menu_ClickedA_PAUSED()’:
menu.cpp:84:9: warning: ‘void* __builtin_memcpy(void*, const void*, long unsigned int)’ writing 10 bytes into a region of size 9 overflows the destination [-Wstringop-overflow=]
   strcpy(HalloLetters, "_________");
   ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
Yeah, might not be surprising with all of those buffer overflows that it's segfaulting when run. I've no idea without looking further at the code why those are happening, especially the one copying a literal string into a buffer. They haven't done something weird like making wchars default on 64-bit linux have they?
 
Yeah, might not be surprising with all of those buffer overflows that it's segfaulting when run. I've no idea without looking further at the code why those are happening, especially the one copying a literal string into a buffer. They haven't done something weird like making wchars default on 64-bit linux have they?
I think this code is a bit old, the game is from around 2003 i think...so not be surprised about weird segfault on modern Linux...sure it need to be investigated.
 
I noticed that this game requires libjpeg-dev, but I have some issues with the library libbass on Ubuntu 20.4:

 
@gbudny you use the bass library included in my zip ?
about libjpeg...there is a folder in the source "jpeg-6b" but i don't use it...i may retry building this ancient version to see if it change something.
 
Yes. I use your archive file in the zip format, and libbass.so is in the directory HalloweenSrc.
I decided to remove libjpeg-dev and its dependencies: libjpeg-turbo8-dev, libjpeg8-dev to show you the previous error:


This script expects to find ibjpeg-dev installed from the package manager on Ubuntu 20.4.

@levi

I could be wrong, but I don't think that Jadeware published any official version of this game for Linux x86-64.
In 2003, we have a lot of commercial games for Linux x86, but games for Linux x86-64 were rare.
 
Last edited:
Yeah sure the original (2003) code was for x86 Linux, but i have compiled fine on my Linux Mint 19.3 64bit.
The Bass lib that i included is for 64bit, as i assumed that you would compile for any modern 64bit linux distro, if you want to compile for 32bit you need to use other libs.
 
I tried to build this game on the 64-bit version of Ubuntu 20.4, so I don't know why I have difficulties with the bass library. I know that Ubuntu and Mint are very similar to each other.
 
Back
Top