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
+172
View File
@@ -0,0 +1,172 @@
/*
Copyright (C) 2015-2018 Night Dive Studios, LLC.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
** $Header: n:/project/cit/src/RCS/objapp.c 1.17 1994/05/14 03:30:03 xemu Exp $
*
*/
#include "objects.h"
#include "objwpn.h"
#include "objwarez.h"
#include "objstuff.h"
#include "objgame.h"
#include "objcrit.h"
#include "objprop.h"
#include "map.h"
////////////////////////////// APPLICATION-SPECIFIC DATA
//
// Here we define the arrays for all the application-specific
// classes defined in objapp.h. Follow this example, and there
// won't be any trouble.
//
// ## INSERT NEW CLASS HERE
/*const*/ ObjSpecHeader objSpecHeaders[NUM_CLASSES] = {
{NUM_OBJECTS_GUN, sizeof(ObjGun), (char *)&objGuns},
{NUM_OBJECTS_AMMO, sizeof(ObjAmmo), (char *)&objAmmos},
{NUM_OBJECTS_PHYSICS, sizeof(ObjPhysics), (char *)&objPhysicss},
{NUM_OBJECTS_GRENADE, sizeof(ObjGrenade), (char *)&objGrenades},
{NUM_OBJECTS_DRUG, sizeof(ObjDrug), (char *)&objDrugs},
{NUM_OBJECTS_HARDWARE, sizeof(ObjHardware), (char *)&objHardwares},
{NUM_OBJECTS_SOFTWARE, sizeof(ObjSoftware), (char *)&objSoftwares},
{NUM_OBJECTS_BIGSTUFF, sizeof(ObjBigstuff), (char *)&objBigstuffs},
{NUM_OBJECTS_SMALLSTUFF, sizeof(ObjSmallstuff), (char *)&objSmallstuffs},
{NUM_OBJECTS_FIXTURE, sizeof(ObjFixture), (char *)&objFixtures},
{NUM_OBJECTS_DOOR, sizeof(ObjDoor), (char *)&objDoors},
{NUM_OBJECTS_ANIMATING, sizeof(ObjAnimating), (char *)&objAnimatings},
{NUM_OBJECTS_TRAP, sizeof(ObjTrap), (char *)&objTraps},
{NUM_OBJECTS_CONTAINER, sizeof(ObjContainer), (char *)&objContainers},
{NUM_OBJECTS_CRITTER, sizeof(ObjCritter), (char *)&objCritters},
};
// const ObjSpecHeader ObjPropHeader = {NUM_OBJECT, sizeof(ObjProp), &ObjProps}
const ObjSpecHeader ClassPropHeaders[NUM_CLASSES] = {
{NUM_GUN, sizeof(GunProp), (char *)&GunProps},
{NUM_AMMO, sizeof(AmmoProp), (char *)&AmmoProps},
{NUM_PHYSICS, sizeof(PhysicsProp), (char *)&PhysicsProps},
{NUM_GRENADE, sizeof(GrenadeProp), (char *)&GrenadeProps},
{NUM_DRUG, sizeof(DrugProp), (char *)&DrugProps},
{NUM_HARDWARE, sizeof(HardwareProp), (char *)&HardwareProps},
{NUM_SOFTWARE, sizeof(SoftwareProp), (char *)&SoftwareProps},
{NUM_BIGSTUFF, sizeof(BigstuffProp), (char *)&BigstuffProps},
{NUM_SMALLSTUFF, sizeof(SmallstuffProp), (char *)&SmallstuffProps},
{NUM_FIXTURE, sizeof(FixtureProp), (char *)&FixtureProps},
{NUM_DOOR, sizeof(DoorProp), (char *)&DoorProps},
{NUM_CONTAINER, sizeof(ContainerProp), (char *)&ContainerProps},
{NUM_CRITTER, sizeof(CritterProp), (char *)&CritterProps},
};
const ObjSpecHeader SubclassPropHeaders[NUM_SUBCLASSES] = {
{NUM_PISTOL_GUN, sizeof(PistolGunProp), (char *)&PistolGunProps},
{NUM_AUTO_GUN, sizeof(AutoGunProp), (char *)&AutoGunProps},
{NUM_SPECIAL_GUN, sizeof(SpecialGunProp), (char *)&SpecialGunProps},
{NUM_HANDTOHAND_GUN, sizeof(HandtohandGunProp), (char *)&HandtohandGunProps},
{NUM_BEAM_GUN, sizeof(BeamGunProp), (char *)&BeamGunProps},
{NUM_BEAMPROJ_GUN, sizeof(BeamprojGunProp), (char *)&BeamprojGunProps},
{NUM_PISTOL_AMMO, sizeof(PistolAmmoProp), (char *)&PistolAmmoProps},
{NUM_NEEDLE_AMMO, sizeof(NeedleAmmoProp), (char *)&NeedleAmmoProps},
{NUM_MAGNUM_AMMO, sizeof(MagnumAmmoProp), (char *)&MagnumAmmoProps},
{NUM_RIFLE_AMMO, sizeof(RifleAmmoProp), (char *)&RifleAmmoProps},
{NUM_FLECHETTE_AMMO, sizeof(FlechetteAmmoProp), (char *)&FlechetteAmmoProps},
{NUM_AUTO_AMMO, sizeof(AutoAmmoProp), (char *)&AutoAmmoProps},
{NUM_PROJ_AMMO, sizeof(ProjAmmoProp), (char *)&ProjAmmoProps},
{NUM_TRACER_PHYSICS, sizeof(TracerPhysicsProp), (char *)&TracerPhysicsProps},
{NUM_SLOW_PHYSICS, sizeof(SlowPhysicsProp), (char *)&SlowPhysicsProps},
{NUM_CAMERA_PHYSICS, sizeof(CameraPhysicsProp), (char *)&CameraPhysicsProps},
{NUM_DIRECT_GRENADE, sizeof(DirectGrenadeProp), (char *)&DirectGrenadeProps},
{NUM_TIMED_GRENADE, sizeof(TimedGrenadeProp), (char *)&TimedGrenadeProps},
{NUM_STATS_DRUG, sizeof(StatsDrugProp), (char *)&StatsDrugProps},
{NUM_GOGGLE_HARDWARE, sizeof(GoggleHardwareProp), (char *)&GoggleHardwareProps},
{NUM_HARDWARE_HARDWARE, sizeof(HardwareHardwareProp), (char *)&HardwareHardwareProps},
{NUM_OFFENSE_SOFTWARE, sizeof(OffenseSoftwareProp), (char *)&OffenseSoftwareProps},
{NUM_DEFENSE_SOFTWARE, sizeof(DefenseSoftwareProp), (char *)&DefenseSoftwareProps},
{NUM_ONESHOT_SOFTWARE, sizeof(OneshotSoftwareProp), (char *)&OneshotSoftwareProps},
{NUM_MISC_SOFTWARE, sizeof(MiscSoftwareProp), (char *)&MiscSoftwareProps},
{NUM_DATA_SOFTWARE, sizeof(DataSoftwareProp), (char *)&DataSoftwareProps},
{NUM_ELECTRONIC_BIGSTUFF, sizeof(ElectronicBigstuffProp), (char *)&ElectronicBigstuffProps},
{NUM_FURNISHING_BIGSTUFF, sizeof(FurnishingBigstuffProp), (char *)&FurnishingBigstuffProps},
{NUM_ONTHEWALL_BIGSTUFF, sizeof(OnthewallBigstuffProp), (char *)&OnthewallBigstuffProps},
{NUM_LIGHT_BIGSTUFF, sizeof(LightBigstuffProp), (char *)&LightBigstuffProps},
{NUM_LABGEAR_BIGSTUFF, sizeof(LabgearBigstuffProp), (char *)&LabgearBigstuffProps},
{NUM_TECHNO_BIGSTUFF, sizeof(TechnoBigstuffProp), (char *)&TechnoBigstuffProps},
{NUM_DECOR_BIGSTUFF, sizeof(DecorBigstuffProp), (char *)&DecorBigstuffProps},
{NUM_TERRAIN_BIGSTUFF, sizeof(TerrainBigstuffProp), (char *)&TerrainBigstuffProps},
{NUM_USELESS_SMALLSTUFF, sizeof(UselessSmallstuffProp), (char *)&UselessSmallstuffProps},
{NUM_BROKEN_SMALLSTUFF, sizeof(BrokenSmallstuffProp), (char *)&BrokenSmallstuffProps},
{NUM_CORPSELIKE_SMALLSTUFF, sizeof(CorpselikeSmallstuffProp), (char *)&CorpselikeSmallstuffProps},
{NUM_GEAR_SMALLSTUFF, sizeof(GearSmallstuffProp), (char *)&GearSmallstuffProps},
{NUM_CARDS_SMALLSTUFF, sizeof(CardsSmallstuffProp), (char *)&CardsSmallstuffProps},
{NUM_CYBER_SMALLSTUFF, sizeof(CyberSmallstuffProp), (char *)&CyberSmallstuffProps},
{NUM_ONTHEWALL_SMALLSTUFF, sizeof(OnthewallSmallstuffProp), (char *)&OnthewallSmallstuffProps},
{NUM_PLOT_SMALLSTUFF, sizeof(PlotSmallstuffProp), (char *)&PlotSmallstuffProps},
{NUM_CONTROL_FIXTURE, sizeof(ControlFixtureProp), (char *)&ControlFixtureProps},
{NUM_RECEPTACLE_FIXTURE, sizeof(ReceptacleFixtureProp), (char *)&ReceptacleFixtureProps},
{NUM_TERMINAL_FIXTURE, sizeof(TerminalFixtureProp), (char *)&TerminalFixtureProps},
{NUM_PANEL_FIXTURE, sizeof(PanelFixtureProp), (char *)&PanelFixtureProps},
{NUM_VENDING_FIXTURE, sizeof(VendingFixtureProp), (char *)&VendingFixtureProps},
{NUM_CYBER_FIXTURE, sizeof(CyberFixtureProp), (char *)&CyberFixtureProps},
{NUM_NORMAL_DOOR, sizeof(NormalDoorProp), (char *)&NormalDoorProps},
{NUM_DOORWAYS_DOOR, sizeof(DoorwaysDoorProp), (char *)&DoorwaysDoorProps},
{NUM_FORCE_DOOR, sizeof(ForceDoorProp), (char *)&ForceDoorProps},
{NUM_ELEVATOR_DOOR, sizeof(ElevatorDoorProp), (char *)&ElevatorDoorProps},
{NUM_SPECIAL_DOOR, sizeof(SpecialDoorProp), (char *)&SpecialDoorProps},
{NUM_OBJECT_ANIMATING, sizeof(ObjectsAnimatingProp), (char *)&ObjectsAnimatingProps},
{NUM_TRANSITORY_ANIMATING, sizeof(TransitoryAnimatingProp), (char *)&TransitoryAnimatingProps},
{NUM_EXPLOSION_ANIMATING, sizeof(ExplosionAnimatingProp), (char *)&ExplosionAnimatingProps},
{NUM_TRIGGER_TRAP, sizeof(TriggerTrapProp), (char *)&TriggerTrapProps},
{NUM_FEEDBACKS_TRAP, sizeof(FeedbacksTrapProp), (char *)&FeedbacksTrapProps},
{NUM_SECRET_TRAP, sizeof(SecretTrapProp), (char *)&SecretTrapProps},
{NUM_ACTUAL_CONTAINER, sizeof(ActualContainerProp), (char *)&ActualContainerProps},
{NUM_WASTE_CONTAINER, sizeof(WasteContainerProp), (char *)&WasteContainerProps},
{NUM_LIQUID_CONTAINER, sizeof(LiquidContainerProp), (char *)&LiquidContainerProps},
{NUM_MUTANT_CORPSE_CONTAINER, sizeof(MutantCorpseContainerProp), (char *)&MutantCorpseContainerProps},
{NUM_ROBOT_CORPSE_CONTAINER, sizeof(RobotCorpseContainerProp), (char *)&RobotCorpseContainerProps},
{NUM_CYBORG_CORPSE_CONTAINER, sizeof(CyborgCorpseContainerProp), (char *)&CyborgCorpseContainerProps},
{NUM_OTHER_CORPSE_CONTAINER, sizeof(OtherCorpseContainerProp), (char *)&OtherCorpseContainerProps},
{NUM_MUTANT_CRITTER, sizeof(MutantCritterProp), (char *)&MutantCritterProps},
{NUM_ROBOT_CRITTER, sizeof(RobotCritterProp), (char *)&RobotCritterProps},
{NUM_CYBORG_CRITTER, sizeof(CyborgCritterProp), (char *)&CyborgCritterProps},
{NUM_CYBER_CRITTER, sizeof(CyberCritterProp), (char *)&CyberCritterProps},
{NUM_ROBOBABE_CRITTER, sizeof(RobobabeCritterProp), (char *)&RobobabeCritterProps},
};
////////////////////////////// APPLICATION-SPECIFIC FUNCTIONS
static int map_x, map_y;
void ObjInfoInit(ObjInfo *info) {
info->type = 0;
info->ph = -1;
}
void ObjRefStateBinIteratorInit(void) { map_x = map_y = 0; }
uchar ObjRefStateBinIterator(ObjRefStateBin *bin) {
if (map_y == MAP_YSIZE)
return FALSE;
bin->sq.x = map_x;
bin->sq.y = map_y;
if (++map_x == MAP_XSIZE) {
map_x = 0;
map_y++;
}
return TRUE;
}