Vendor the Shockolate engine and build it via a Docker image with every
build / build (push) Failing after 5s

dependency (SDL2, SDL2_mixer, fluidsynth-lite, a MIDI soundfont)
prebuilt, so compiling the engine needs no network access - just the
image and the engine source. Add res/assets/extract_assets.sh to pull
the game's data files out of a purchased GOG installer, and a Makefile
that assembles a runnable dist/ from the two.

Also add `make package`, which builds a redistributable tarball that
omits the proprietary game assets (shipping res/GET_ASSETS.txt instead)
plus license information for both the MIT tooling and the GPLv3 engine,
and a Gitea Actions workflow that builds and publishes it to
dl.ladkau.de on every push.
This commit is contained in:
ml
2026-07-19 15:43:38 +02:00
parent 3ed6400466
commit a5ec8db5f7
826 changed files with 214554 additions and 0 deletions
File diff suppressed because it is too large Load Diff
+46
View File
@@ -0,0 +1,46 @@
#pragma once
typedef struct MusicDevice MusicDevice;
typedef enum MusicType
{
Music_None
,Music_AdlMidi
,Music_Native
#ifdef USE_FLUIDSYNTH
,Music_FluidSynth
#endif
} MusicType;
typedef enum MusicMode
{
Music_GeneralMidi,
Music_SoundBlaster,
} MusicMode;
struct MusicDevice
{
int (*init)(MusicDevice *dev, const unsigned int outputIndex, unsigned samplerate);
void (*destroy)(MusicDevice *dev);
void (*setupMode)(MusicDevice *dev, MusicMode mode);
void (*reset)(MusicDevice *dev);
void (*generate)(MusicDevice *dev, short *samples, int numframes);
void (*sendNoteOff)(MusicDevice *dev, int channel, int note, int vel);
void (*sendNoteOn)(MusicDevice *dev, int channel, int note, int vel);
void (*sendNoteAfterTouch)(MusicDevice *dev, int channel, int note, int touch);
void (*sendControllerChange)(MusicDevice *dev, int channel, int ctl, int val);
void (*sendProgramChange)(MusicDevice *dev, int channel, int pgm);
void (*sendChannelAfterTouch)(MusicDevice *dev, int channel, int touch);
void (*sendPitchBendML)(MusicDevice *dev, int channel, int msb, int lsb);
unsigned int (*getOutputCount)(MusicDevice *dev);
void (*getOutputName)(MusicDevice *dev, const unsigned int outputIndex, char *buffer, const unsigned int bufferSize);
unsigned short isOpen; // 1 if device open, 0 if closed
unsigned int outputIndex; // index of currently opened output
MusicType deviceType; // type of device
char *musicType; // "sblaster" or "genmidi"
};
#define MUSICTYPE_SBLASTER "sblaster"
#define MUSICTYPE_GENMIDI "genmidi"
MusicDevice *CreateMusicDevice(MusicType type);