Giter Club home page Giter Club logo

systemshock's Introduction

Shockolate - System Shock, but cross platform!

Based on the source code for PowerPC released by Night Dive Studios, Incorporated.

Build Status TravisCI Build Status AppVeyor

GENERAL NOTES

Shockolate is a cross platform source port of System Shock, using SDL2. This runs well on OSX, Linux, and Windows right now, with some missing features that need reviving due to not being included in the source code that was released.

The end goal for this project is something like what Chocolate Doom is for Doom: an experience that closely mimics the original, but portable and with some quality of life improvements including an OpenGL renderer and mod support!

Join our Discord to follow along with development: https://discord.gg/m45xPan

work so far

Prerequisites

  • Original cd-rom or SS:EE assets in a res/data folder next to the executable
    • Floppy disk assets are an older version that we can't load currently

Running

From a prebuilt package

Find a list of downloadable packages for Linux, Mac and Windows. 32 and 64 bit versions are available for Linux and Windows.

From source code

Prerequisites:

Step 1. Build the dependencies:

  • Windows: build_win32.sh or build_win64.sh (Git Bash and MinGW recommended)
  • Linux/Mac: build_deps.sh or the CI build scripts in osx-linux
  • Other: build_deps.sh

Step 2. Build and run the game itself

cmake .
make systemshock
./systemshock

The following CMake options are supported in the build process:

  • ENABLE_SDL2 - use system or bundled SDL2 (ON/BUNDLED, default BUNDLED)
  • ENABLE_SOUND - enable sound support (requires SDL2_mixer, ON/BUNDLED/OFF, default is BUNDLED)
  • ENABLE_FLUIDSYNTH - enable FluidSynth MIDI support (ON/BUNDLED/OFF, default is BUNDLED)
  • ENABLE_OPENGL - enable OpenGL support (ON/OFF, default ON)

If you find yourself needing to modify the build script for Shockolate itself, CMakeLists.txt is the place to look into.

Command line parameters

-nosplash Disables the splash screens, causes the game to start straight to the main menu

Modding Support

Shockolate supports loading mods and full on fan missions. Just point the executable at a mod file or folder and the game will load it in. So far mod loading supports additional .res and .dat files for resources and missions respectively.

Run a fan mission from a folder:

./systemshock /Path/To/My/Mission

Run a fan mission from specific files:

./systemshock my-archive.dat my-strings.res

Control modifications

Movement

Shockolate replaces the original game's movement with WASD controls, and uses F as the mouselook toggle hotkey. This differs from the Enhanced Edition's usage of E as the mouselook hotkey, but allows us to keep Q and E available for leaning.

Additional hotkeys

  • Ctrl+G cycles between graphics rendering modes
  • Ctrl+F to enable full screen mode
  • Ctrl+D to disable full screen mode

systemshock's People

Contributors

danielgibson avatar donnierussellii avatar hunterz avatar icosahedral-dragon avatar inguin avatar interrupt avatar janisozaur avatar jpcima avatar laanwj avatar laastine avatar manpat avatar manuel-k avatar markkurikola avatar monreal avatar mrikola avatar nightdivestudios avatar oreo639 avatar rfht avatar rohit-n avatar shamazmazum avatar solidgriever avatar speachy avatar svkaiser avatar winterheart avatar yarolig avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

systemshock's Issues

Implementing Logger framework

Current logging functionality taken partly from LG/dbg.c, partly - simple printf(). I think there should be better solution.
I checked https://github.com/rxi/log.c and it works pretty well, but maybe someone give better frameworks.
Here some requirements:

  • Code should be C99 compatible
  • License should be GPL-3 compatible
  • No external file configuration (only in-code, we could implement own configuration file)

Leaving the full automap resizes window

Leaving the full automap tries to reset the window size to the user-selected resolution. If the window is maximized it will remain so, but the renderer viewport will change to use only the lower left region (Linux with Cinnamon desktop, behavior may be different in other environments).

Crash when trying to use a Nitropack

Trying to use a Nitropack crashes with a floating point exception (division by zero). Looks like the grenade timing deviation parameter is unexpectedly zero. Backtrace:

#0  0x0814a19e in RndRange (prs=0x81ac974 <grenade_rnd>, low=0, high=0)
    at /home/inva/Coding/git/systemshock/src/Libraries/RND/Source/rnd.c:173
#1  0x0810a1a9 in activate_grenade (osid=19) at /home/inva/Coding/git/systemshock/src/GameSrc/grenades.c:579
#2  0x080901dd in grenade_use_func (dp=0x81a9f30 <inv_display_list+80>, row=0)
    at /home/inva/Coding/git/systemshock/src/GameSrc/invent.c:1105
#3  0x08092e0d in inventory_mouse_handler (ev=0xffffce3a, r=0x843dba0, data=0x0)
    at /home/inva/Coding/git/systemshock/src/GameSrc/invent.c:2281
#4  0x0810ea63 in event_dispatch_callback (reg=0x843dba0, rect=0xffffcda6, v=0xffffce3a)
    at /home/inva/Coding/git/systemshock/src/Libraries/UI/Source/event.c:410
#5  0x0810eb75 in ui_try_region (reg=0x843dba0, pos=..., ev=0xffffce3a)
    at /home/inva/Coding/git/systemshock/src/Libraries/UI/Source/event.c:451
#6  0x0810ecbf in ui_traverse_point (reg=0x843dba0, pos=..., data=0xffffce3a)
    at /home/inva/Coding/git/systemshock/src/Libraries/UI/Source/event.c:484
#7  0x0810ec80 in ui_traverse_point (reg=0x81dcbc0 <root_region_data>, pos=..., data=0xffffce3a)
    at /home/inva/Coding/git/systemshock/src/Libraries/UI/Source/event.c:478
#8  0x0810ee14 in uiDispatchEventToRegion (ev=0xffffcf16, reg=0x81dcbc0 <root_region_data>)
    at /home/inva/Coding/git/systemshock/src/Libraries/UI/Source/event.c:514
#9  0x0810ee95 in uiDispatchEvent (ev=0xffffcf16)
    at /home/inva/Coding/git/systemshock/src/Libraries/UI/Source/event.c:527
#10 0x0810f523 in ui_dispatch_mouse_event (mout=0xffffcf16)
    at /home/inva/Coding/git/systemshock/src/Libraries/UI/Source/event.c:681
#11 0x0810f8d5 in uiPoll () at /home/inva/Coding/git/systemshock/src/Libraries/UI/Source/event.c:900
#12 0x0808ad3d in input_chk () at /home/inva/Coding/git/systemshock/src/GameSrc/input.c:389
#13 0x08095bd2 in mainloop (argc=1, argv=0xffffd034) at /home/inva/Coding/git/systemshock/src/GameSrc/mainloop.c:126
#14 0x08078899 in main (argc=1, argv=0xffffd034) at /home/inva/Coding/git/systemshock/src/MacSrc/Shock.c:164

Cutscenes are missing subtitles

The death cutscene should show that "They find your body and give it new life" text. This is probably stored in text blocks in the highres cutscenes.

Automatic detection of locally built SDL components is wonky on Fedora

I had problems with DBUS errors until I RTFM and realised I needed to build SDL2 components manually. It looks like there's automatic detection of these under externals/findsdl2-cmake/, but it always seems to pick the system-installed headers and libraries first. I needed to explicitly specify the locations of the locally built ones.

The first thing I note is that the set(CMAKE_MODULE_PATH ...) occurs after find_package(SDL2) which looked odd.

This is what I did to successfully build on my Fedora 28 x86_64:

sudo dnf install glibc-devel.i686
./build_deps.sh
SDL2_DIR=build_ext/built_sdl SDL2_MIXER_DIR=build_ext/built_sdl_mixer cmake .
make -j8

(Edited to make it clear that I can build successfully by explicitly specifying local SDL2 locations.)

Shipping Builds / CI

This might be stable enough now to start regularly cutting builds on the major platforms (Windows/Linux/OSX)

There are some open questions though:

  • How should we do this? Manually or through some kind of CI system?
  • How often should these be made: weekly, monthly?

Crash during escape pod countdown

steps to repro:

  1. open the attached savegame
  2. pull the escape pod lever in front of you
  3. wait for the countdown
  4. observe: game crashes when the countdown reaches 3 or so

This is the "get to the flight deck and use the escape pod" quest late in the game. Debugger seems to indicate the crash happens in email.c at line 570, may be as simple as a bad array access but I can't tell what all that code there is doing. Happy to provide more info or investigate further.

jp_save_crash_escape_pod.zip

Enter / Delete keys do not function properly

The Enter and Delete keys do not work for either text input or firing the weapon. Something seems to be resetting the keycodes of their input to 0 before it gets to any handlers. Maybe the key cooking that is used to add modifiers like SHIFT / ALT?

Feature requirements for v1.0

As the project progresses and garners more interest, I think there should be a clear set of requirements to aim for in a prospective v1.0 release. My preliminary shortlist would be something like this:

  • Audio logs and videos (#13)
  • Intelligent XMI playback (#14)
  • Credits screen (#48)
  • Removal of debug inputs (eg. '7' to go up a level)
  • Remaining game breaking bugs, if any

Any comments?

State of tutorial messages is not saved

The tutorial click-here-to-do-this prompts are disabled by a game trigger when leaving the healing suite, but this state is not persisted. After restarting the engine and loading a savegame the messages are back and remain permanently enabled.

Idea: launcher GUI

3RD and I agreed on Discord that a launcher GUI that allows the player to choose various parameters on startup would be a great addition. Examples:

  • OpenGL on/off
    • texture filtering on/off
    • other possible OpenGL specific features on/off
  • fullscreen vs. windowed
  • resolution selector
  • show or hide console output
  • mod selector
  • save file to continue from, possibly picking up all of the above from that save's preferences

Making such a thing is of course time consuming, but would go a long way toward user friendliness.

64bit conversion

Noticed the requirement is for 32bit SDL builds. Given that MacOS will be depreciating the ability to run 32bit binaries in the very near future, what are the plans for 64bit support?

[OpenGL] Weird star glitches at some places

The OpenGL star rendering glitches in a few places. I can reliably reproduce it in a room a the beginning of level 2 (see this savegame):

  1. Open the door and walk slowly towards the window; the stars "zoom out" when crossing the doorstep.
  2. Walk closer to the window; at some point the stars disappear.

Main Menu code in setup.c should be revived

In porting to Mac a new main menu was used, but thankfully it looks like the old main menu code still survives, but is commented out, in setup.c so we may be able to bring it back.

Website / Discord?

  • Does this project need a website, or is the Github page enough?
  • Should we make a Discord around this? A few of us have been in the #source-code-chat channel on the Night Dive discord, but we're enough of our own thing now to think about branching off.

SystemShock assets version

HI
I thing you may have forgotten to specify the correct version of the "original" assets.
The game wont run if you use the assets from the classic version available on gog when you put them in the res/data folder accordingly. It only works with the Enhanced edition that has different map versions. Maybe this should be specified in the reademe ?

Cheers

Starting the game in 320x200 mode is wacky

Now that we have persistent preferences, there's something wacky happening if you set the screen mode to 320x200, quit, and restart. The game renders at 320x240 but the window size is 640x480!

Decide on a code formatting style

Should we leave the formatting for code as is, for historical purposes? Should we run a formatter against everything to unify the formatting? I'm torn on this one.

Credits screen code is missing

The code to run the original credits screen appears to have gone AWOL. There's references to a header file called "scrntext.h" that probably handled this stuff but that's missing as well.

Hover-tooltips are wrong size when reloading a savegame made with non-default resolution

steps to reproduce:

  1. start a new game
  2. set the resolution to 1024x768
  3. save the game
  4. relaunch shockolate
  5. load that saved game
  6. hover the mouse over one of the buttons that has a tooltip, eg the lower side tabs for automap etc
  7. observe: the tooltips are still 640x480-sized

Setting the resolution to 640 and back fixes this, but that must be done on every new launch so that's more of a workaround.

SHODAN despawns in final battle?

I picked up JP Le Breton's Isolinear Chipset save game and walked into the final battle, but even after several attempts I can't manage to win. Part of me thinks the fight is timed based on frames you take (I feel like the screen fills up with pixels faster than the original) but I also definitely saw the SHODAN core despawn mid-fight... and that makes the fight literally unwinnable.

Slowdown when touching energy drain mines on Deck 8

steps to reproduce:

  1. open the attached savegame
  2. walk forward towards the floating mines and let yourself fall
  3. observe: framerate slows down significantly as you intersect with the mines

This is a comparatively very minor issue, as it's not necessary to ever do this if you know the correct solution to this deck (ie extending the bridge so you can walk across the space the mines are covering). It's possible this behavior also exists in the vanilla DOS executable, Shockolate saves aren't vanilla-compatible so I can't easily test that.

jp_save_slowdown_mines.zip

Demo support?

I will be nice to have support for the free demo, to allow people to easily test this neat re-implementation.

Progression blocker: final door to SHODAN fails to open when Isolinear Chipset installed

steps to reproduce:

  1. open the attached savegame
  2. drag the "iso chipset" item from your general inventory into the "computer program entry" panel on the directly ahead of you
  3. exit this room, go back into the main area and take a left
  4. find the west wall of the central octagonal feature
  5. observe: this wall should now be open to reveal the chamber with the game's final cyberspace terminal, but it is not.

See this video (timestamp 43:23) for what should happen.

For what it's worth the computer speech that follows inserting the chipset doesn't happen in the current build, but I'm guessing that that's simply due to digitized speech eg audio logs not working yet.

jp_save_shodan_final_door.zip

Gamma correction slider

The slider has two settings: a bit dim at 0, and totally oversaturated anywhere above it.

dim
bright

But whichever setting you pick, the actual game still looks like the default.

actual

Cmake doesn't find 32-Bit libraries on Ubuntu 16.04

I wasn't able to compile on Ubuntu 16.04 with the correct 32-Bit libraries installed.
Cmake always found the 64-Bit libraries and linking was not possible..
My workaround was to use docker: # sudo docker pull 32bit/ubuntu:16.04

Needs a framerate limiter

Right now the game runs as fast as it can, we should probably either try to VSYNC (via SDL OpengGL?) or limit the game loop so that it's not rendering at 800fps

Feature: FM synth music playback via libADL

This is probably a well-down-the-road thing, but just in case it's useful and/or more appealing than getting a more conventional MIDI synth working within the project, there are libraries like this that will emulate an OPL3 FM synth chip and play MIDI data:
https://github.com/Wohlstand/libADLMIDI
Many people first played Shock 1 with a Sound Blaster card and this gives that authentic sound.

Object spawns are broken when starting a new game

steps to repro:

  1. launch shockolate
  2. start a new game with any difficulty settings
  3. observe: left door in first room starts open, there's a mutant inside it, and none of the stuff you need to get through the door out of this room is there.

I tried wiping my save data just in case this was related, no change in behavior.

Crash running latest with adlmidi-xmi branch

steps to repro:

  1. sync and build adlmidi-xmi branch
  2. start a new game with default difficulty settings
  3. clear out the first area before the keypad door (the 3 bots and 2 cameras)
  4. walk over to the healing bed from wherever you are - in my repros i don't think the healing bed had anything to do with the crash, it was just where i was headed to heal myself after killing the robots

Debugger told me the crash was on line 1409 of midi_sequencer_impl.hpp, the first line of BW_MidiSequencer.

Last few lines of my log before the crash, in case they're useful:

14:15:47 DEBUG resacc.c:113: ResUnlock: id $36 already unlocked
14:15:47 DEBUG mlimbs.c:276: AIL callback 119 triggered, running music AI
14:15:47 DEBUG mlimbs.c:149: snd_end_sequence 2
14:15:47 DEBUG mlimbs.c:1049: mlimbs_punt_piece 4 on 1
14:15:47 DEBUG mlimbs.c:412: _mlimbs_clear_uid
14:15:47 DEBUG mlimbs.c:149: snd_end_sequence 3
14:15:47 DEBUG mlimbs.c:1049: mlimbs_punt_piece 18 on 2
14:15:47 DEBUG mlimbs.c:412: _mlimbs_clear_uid
14:15:47 DEBUG mlimbs.c:397: _mlimbs_clear_req
14:15:47 DEBUG mlimbs.c:1363: New piece 5
14:15:47 DEBUG mlimbs.c:937: mlimbs_play_piece 5, times 4
14:15:47 DEBUG mlimbs.c:103: snd_sequence_play: 6 res/sound/genmidi/thm1.xmi
14:15:47 DEBUG mlimbs.c:125: Playing track 6 on 2
14:15:47 DEBUG mlimbs.c:624: Unmute sequence 1 for piece 6
14:15:47 DEBUG mlimbs.c:624: Unmute sequence 1 for piece 6
14:15:47 DEBUG mlimbs.c:624: Unmute sequence 1 for piece 6
14:15:48 DEBUG musicai.c:349: mai_transition
14:15:48 DEBUG musicai.c:395: make_request 0 5
14:15:48 DEBUG musicai.c:395: make_request 1 16
Segmentation fault (core dumped)

Some keyboard shortcuts dont work

I have a german keyboard with a german key map.
Some keyboard shortcuts are inaccessible to me.
All ALT shortcuts don't work.
All shortcuts from special characters like ? or ; or : don't work either because I need shift to access them.
I wager that most international keyboards will have this problem.

Crashing playing first SHODAN log in audiologs branch

steps to repro:

  1. start a new game
  2. head to the door with the 451 keypad
  3. when you get the first log from SHODAN, click it in the data reader's list of logs
  4. observe: game crashes

Here's the log from just before the crash:

23:01:09 DEBUG resacc.c:99: ResUnlock: id $989 already unlocked
23:01:10 TRACE resload.c:70: ResLoadResource loading $9c8
23:01:12 DEBUG resacc.c:99: ResUnlock: id $9c8 already unlocked
23:01:15 TRACE resfile.c:124: ResOpenResFile: res/data/citalog.res
23:01:15 TRACE resfile.c:176: ResOpenResFile: opening: res/data/citalog.res at filenum 8
23:01:15 TRACE resload.c:70: ResLoadResource loading $ab5
23:01:15 DEBUG afile.c:101: AfileOpen: trying to open file
23:01:15 TRACE afile.c:125: AfileOpen: reading header
23:01:15 TRACE afile.c:142: AfileOpen: numBits: 0  w,h: 0,0  frameLen: 0
23:01:15 TRACE afile.c:145: AfileOpen: initing work buffer of size: 512
23:01:15 TRACE afile.c:150: AfileOpen: initing compose buffer and prev buffer
23:01:15 DEBUG afile.c:156: AfileOpen: successful open
23:01:15 TRACE afile.c:305: AfileGetAudio: getting audio
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00001000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00003000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00005000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00007000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00009000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0000b000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0000d000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0000f000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00011000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00013000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00015000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00017000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00019000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0001b000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0001d000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0001f000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00021000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00023000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00025000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00027000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00029000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0002b000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0002d000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0002f000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00031000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00033000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00035000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00037000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00039000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0003b000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0003d000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0003f000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00041000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00043000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00045000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00047000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00049000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0004b000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0004d000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0004f000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00051000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00053000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00055000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00057000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00059000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0005b000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0005d000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0005f000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00061000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00063000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00065000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00067000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00069000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0006b000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0006d000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0006f000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00071000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00073000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00075000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00077000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00079000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0007b000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0007d000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0007f000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00081000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00083000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00085000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00087000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00089000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0008b000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0008d000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0008f000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00091000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00093000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00095000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00097000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00099000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0009b000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0009d000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0009f000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000a1000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000a3000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000a5000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000a7000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000a9000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000ab000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000ad000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000af000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000b1000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000b3000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000b5000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000b7000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000b9000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000bb000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000bd000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000bf000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000c1000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000c3000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000c5000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000c7000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000c9000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000cb000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000cd000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000cf000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000d1000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000d3000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000d5000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000d7000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000d9000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000db000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000dd000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000df000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000e1000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000e3000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000e5000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000e7000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000e9000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000eb000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000ed000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000ef000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000f1000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000f3000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000f5000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000f7000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000f9000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000fb000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000fd000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x000ff000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00101000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00103000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00105000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00107000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00109000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0010b000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0010d000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0010f000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00111000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00113000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00115000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00117000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00119000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0011b000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0011d000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0011f000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00121000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00123000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00125000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00127000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00129000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0012b000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0012d000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0012f000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00131000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00133000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00135000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00137000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x00139000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0013b000 offset
23:01:15 TRACE amov.c:298: AmovReadAudio: got audio chunk in 0x0013d000 offset
23:01:15 DEBUG audiolog.c:155: audiolog_play: Playing email
23:01:15 TRACE resfile.c:222: ResCloseFile: closing 8
23:01:15 WARN  resacc.c:186: ResDrop: Block $ab5 is locked, dropping anyway
23:01:15 TRACE resacc.c:200: ResDrop: Dropping resource 0xab5 that's in use.
munmap_chunk(): invalid pointer
Aborted (core dumped)

Copying resources is case sensitive

As found in #45, copying the /res/data/archive.dat file to CurrentGame.dat can fail on a case sensitive OS like Linux if the folders are uppercased like RES/DATA

Launching systemshock built with mingw fails

I tried building systemshock with mingw toolchain (based on GCC 7.2.1) and it was successful.

Trying to launch the produced binary, however, fails, at least when used with wine.
Here's the error report including stack trace, on 0b8006a

Register dump:
 CS:0023 SS:002b DS:002b ES:002b FS:0063 GS:006b
 EIP:0044fda7 ESP:00c7fa28 EBP:00c7fa50 EFLAGS:00010246(  R- --  I  Z- -P- )
 EAX:00000000 EBX:002461d0 ECX:00000000 EDX:00000000
 ESI:002461b8 EDI:00000001
Stack dump:
0x00c7fa28:  02680000 00440000 00c7fa50 004132d4
0x00c7fa38:  00000010 00000000 02680000 00000000
0x00c7fa48:  00000040 00000000 00c7fd80 00412761
0x00c7fa58:  00000001 0051e88f 00000146 0051e8dc
0x00c7fa68:  00c7fa90 7e9c1000 002461b8 00000001
0x00c7fa78:  00c7faa8 7e95403a 0014f4d8 00402161
Backtrace:
=>0 0x0044fda7 init_popups+0x2e() [/home/janisozaur/workspace/systemshock/src/GameSrc/popups.c:62] in systemshock (0x00c7fa50)
  1 0x00412761 init_all+0x193() [/home/janisozaur/workspace/systemshock/src/GameSrc/init.c:327] in systemshock (0x00c7fd80)
  2 0x00401cd1 SDL_main+0x43(argc=0x1, argv=0x2461b8) [/home/janisozaur/workspace/systemshock/src/MacSrc/Shock.c:139] in systemshock (0x00c7fda0)
  3 0x0050fda4 in systemshock (+0x10fda3) (0x00c7fde8)
  4 0x004013eb in systemshock (+0x13ea) (0x00c7fec0)
  5 0x7b4638e2 call_process_entry+0x11() in kernel32 (0x00c7fed8)
  6 0x7b46520c in kernel32 (+0x4520b) (0x00c7ffd8)
  7 0x7b4638ee call_process_entry+0x1d() in kernel32 (0x00c7ffec)
0x0044fda7 init_popups+0x2e [/home/janisozaur/workspace/systemshock/src/GameSrc/popups.c:62] in systemshock: movl	0x14(%eax),%edx
62	        popup_rects[i] = f->anchorArea;
Modules:
Module	Address			Debug info	Name (56 modules)
PE	  400000-  a7a000	Dwarf           systemshock
PE	64b40000-64b54000	Deferred        libwinpthread-1
PE	67a80000-67aa3000	Deferred        sdl2_mixer
PE	6c940000-6ca0b000	Deferred        sdl2
PE	6d0c0000-6d0de000	Deferred        libgcc_s_sjlj-1
PE	6fe40000-6ff7f000	Deferred        libstdc++-6
ELF	7b400000-7b7ee000	Dwarf           kernel32<elf>
  \-PE	7b420000-7b7ee000	\               kernel32
ELF	7bc00000-7bd01000	Deferred        ntdll<elf>
  \-PE	7bc10000-7bd01000	\               ntdll
ELF	7c000000-7c004000	Deferred        <wine-loader>
ELF	7d97d000-7d9af000	Deferred        libexpat.so.1
ELF	7d9af000-7dade000	Deferred        libglib-2.0.so.0
ELF	7db22000-7db6c000	Deferred        libfontconfig.so.1
ELF	7db6c000-7dbe4000	Deferred        libpcre.so.1
ELF	7dbe4000-7dca3000	Deferred        libharfbuzz.so.0
ELF	7dca3000-7dcbc000	Deferred        libz.so.1
ELF	7dcbc000-7dcfa000	Deferred        libpng16.so.16
ELF	7dcfa000-7ddca000	Deferred        libfreetype.so.6
ELF	7ddca000-7de38000	Deferred        libncursesw.so.6
ELF	7de96000-7dec1000	Deferred        msacm32<elf>
  \-PE	7dea0000-7dec1000	\               msacm32
ELF	7dec1000-7df7b000	Deferred        winmm<elf>
  \-PE	7ded0000-7df7b000	\               winmm
ELF	7df7b000-7dff3000	Deferred        shlwapi<elf>
  \-PE	7df90000-7dff3000	\               shlwapi
ELF	7dff3000-7e2af000	Deferred        shell32<elf>
  \-PE	7e000000-7e2af000	\               shell32
ELF	7e2af000-7e3e1000	Deferred        oleaut32<elf>
  \-PE	7e2d0000-7e3e1000	\               oleaut32
ELF	7e3e1000-7e464000	Deferred        rpcrt4<elf>
  \-PE	7e3f0000-7e464000	\               rpcrt4
ELF	7e464000-7e5c1000	Deferred        ole32<elf>
  \-PE	7e480000-7e5c1000	\               ole32
ELF	7e5c1000-7e5db000	Deferred        version<elf>
  \-PE	7e5d0000-7e5db000	\               version
ELF	7e5db000-7e7e4000	Deferred        user32<elf>
  \-PE	7e5f0000-7e7e4000	\               user32
ELF	7e7e4000-7e912000	Deferred        gdi32<elf>
  \-PE	7e7f0000-7e912000	\               gdi32
ELF	7e912000-7e9cb000	Deferred        msvcrt<elf>
  \-PE	7e930000-7e9cb000	\               msvcrt
ELF	7e9cb000-7ea46000	Deferred        advapi32<elf>
  \-PE	7e9e0000-7ea46000	\               advapi32
ELF	7eec0000-7eed5000	Deferred        libnss_files.so.2
ELF	7eed5000-7efa2000	Deferred        libm.so.6
ELF	7efa5000-7efb7000	Deferred        libbz2.so.1.0
ELF	7efb7000-7efdb000	Deferred        imm32<elf>
  \-PE	7efc0000-7efdb000	\               imm32
ELF	f7b6c000-f7b72000	Deferred        libdl.so.2
ELF	f7b77000-f7b80000	Deferred        libuuid.so.1
ELF	f7bd0000-f7dad000	Deferred        libc.so.6
ELF	f7dad000-f7dce000	Deferred        libpthread.so.0
ELF	f7dce000-f7f84000	Dwarf           libwine.so.1
ELF	f7f86000-f7fb0000	Deferred        ld-linux.so.2
ELF	f7fb3000-f7fb4000	Deferred        [vdso].so
Threads:
process  tid      prio (all id:s are in hex)
00000008 (D) Z:\home\janisozaur\workspace\systemshock\build-mingw\systemshock.exe
	00000009    0 <==
0000000e services.exe
	0000002d    0
	00000024    0
	0000001d    0
	00000015    0
	00000014    0
	00000013    0
	00000010    0
	0000000f    0
00000011 winedevice.exe
	0000001a    0
	00000017    0
	00000016    0
	00000012    0
0000001b plugplay.exe
	0000001f    0
	0000001e    0
	0000001c    0
00000020 Updater.exe
	0000002c    0
	0000002b    0
	0000002a    0
	00000029    0
	00000026    0
	00000025    0
	00000021    0
00000027 winedevice.exe
	00000035    0
	00000030    0
	0000002f    0
	0000002e    0
	00000028    0
00000038 explorer.exe
	0000003c    0
	0000003b    0
	0000003a    0
	00000039    0
System information:
    Wine build: wine-3.13
    Platform: i386
    Version: Windows XP
    Host system: Linux
    Host version: 4.17.6-1-ARCH

Note I have not made any configuration or any other steps than building and launching the executable.

Fullscreen automap doesn't scale for other resolutions

The automap is pinned at 640x480, even when changing resolutions. Trying to make it resize using convert_use_mode worked well for smaller resolutions, but something else seems to be clipping it from drawing any bigger than 640x480, need to figure out what's going on there.

[OpenGL] Night Sight does not work

The Night Sight hardware does not work with the OpenGL renderer. It's supposed to render everything in black and white at full brightness.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.