Vendor the Shockolate engine and build it via a Docker image with every
build / build (push) Failing after 5s
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:
@@ -0,0 +1,166 @@
|
||||
/*
|
||||
|
||||
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/>.
|
||||
|
||||
*/
|
||||
#include "shodan.h"
|
||||
#include "player.h"
|
||||
#include "objclass.h"
|
||||
#include "otrip.h"
|
||||
#include "trigger.h"
|
||||
#include "newmfd.h"
|
||||
#include "hud.h"
|
||||
#include "faketime.h"
|
||||
|
||||
// ---------------
|
||||
// Internal Prototypes
|
||||
// ---------------
|
||||
errtype update_shodometer(short new_val, uchar game_stuff);
|
||||
|
||||
short compute_shodometer_value(uchar game_stuff) {
|
||||
if (player_struct.level <= MAX_SHODOMETER_LEVEL) {
|
||||
QUESTVAR_SET(SHODAN_QV, 0);
|
||||
for (ObjID oid = (objs[OBJ_NULL]).headused; oid != OBJ_NULL; oid = objs[oid].next) {
|
||||
increment_shodan_value(oid, game_stuff);
|
||||
}
|
||||
return (QUESTVAR_GET(SHODAN_QV));
|
||||
} else
|
||||
return (0);
|
||||
}
|
||||
|
||||
#define HUD_SHODOMETER_TICKS (CIT_CYCLE << 1)
|
||||
|
||||
errtype update_shodometer(short new_val, uchar game_stuff) {
|
||||
QUESTVAR_SET(SHODAN_QV, new_val);
|
||||
if (game_stuff) {
|
||||
mfd_notify_func(MFD_PLOTWARE_FUNC, MFD_INFO_SLOT, FALSE, MFD_ACTIVE, FALSE);
|
||||
do_shodan_triggers();
|
||||
hud_set_time(HUD_SHODOMETER, HUD_SHODOMETER_TICKS);
|
||||
}
|
||||
return (OK);
|
||||
}
|
||||
|
||||
short increment_shodan_value(ObjID oid, uchar game_stuff) {
|
||||
short curr_shodan_val = QUESTVAR_GET(SHODAN_QV);
|
||||
|
||||
if (player_struct.level <= MAX_SHODOMETER_LEVEL) {
|
||||
switch (ID2TRIP(oid)) {
|
||||
#ifdef CREATURE_SHODOMETER
|
||||
case CYBORG_DRONE_TRIPLE:
|
||||
curr_shodan_val += CYBORG_DRONE_TRIPLE_VALUE;
|
||||
break;
|
||||
case WARRIOR_TRIPLE:
|
||||
curr_shodan_val += WARRIOR_TRIPLE_VALUE;
|
||||
break;
|
||||
case ASSASSIN_TRIPLE:
|
||||
curr_shodan_val += ASSASSIN_TRIPLE_VALUE;
|
||||
break;
|
||||
case CYBERBABE_TRIPLE:
|
||||
curr_shodan_val += CYBERBABE_TRIPLE_VALUE;
|
||||
break;
|
||||
case ELITE_GUARD_TRIPLE:
|
||||
curr_shodan_val += ELITE_GUARD_TRIPLE_VALUE;
|
||||
break;
|
||||
case CORTEX_REAVER_TRIPLE:
|
||||
curr_shodan_val += CORTEX_REAVER_TRIPLE_VALUE;
|
||||
break;
|
||||
case MUTANT_BORG_TRIPLE:
|
||||
curr_shodan_val += MUTANT_BORG_TRIPLE_VALUE;
|
||||
break;
|
||||
case SECURITY_BOT1_TRIPLE:
|
||||
curr_shodan_val += SECURITY_BOT1_TRIPLE_VALUE;
|
||||
break;
|
||||
case SECURITY_BOT2_TRIPLE:
|
||||
curr_shodan_val += SECURITY_BOT2_TRIPLE_VALUE;
|
||||
break;
|
||||
case EXECBOT_TRIPLE:
|
||||
curr_shodan_val += EXECBOT_TRIPLE_VALUE;
|
||||
break;
|
||||
#endif
|
||||
case CAMERA_TRIPLE:
|
||||
curr_shodan_val += CAMERA_TRIPLE_VALUE;
|
||||
break;
|
||||
case SMALL_CPU_TRIPLE:
|
||||
curr_shodan_val += SMALL_CPU_TRIPLE_VALUE;
|
||||
break;
|
||||
case LARGCPU_TRIPLE:
|
||||
curr_shodan_val += LARGCPU_TRIPLE_VALUE;
|
||||
break;
|
||||
}
|
||||
if (curr_shodan_val != QUESTVAR_GET(SHODAN_QV))
|
||||
update_shodometer(curr_shodan_val, game_stuff);
|
||||
return (curr_shodan_val);
|
||||
} else
|
||||
return (0);
|
||||
}
|
||||
|
||||
short decrement_shodan_value(ObjID oid, uchar game_stuff) {
|
||||
short curr_shodan_val = QUESTVAR_GET(SHODAN_QV);
|
||||
|
||||
if (player_struct.level <= MAX_SHODOMETER_LEVEL) {
|
||||
switch (ID2TRIP(oid)) {
|
||||
#ifdef CREATURE_SHODOMETER
|
||||
case CYBORG_DRONE_TRIPLE:
|
||||
curr_shodan_val -= CYBORG_DRONE_TRIPLE_VALUE;
|
||||
break;
|
||||
case WARRIOR_TRIPLE:
|
||||
curr_shodan_val -= WARRIOR_TRIPLE_VALUE;
|
||||
break;
|
||||
case ASSASSIN_TRIPLE:
|
||||
curr_shodan_val -= ASSASSIN_TRIPLE_VALUE;
|
||||
break;
|
||||
case CYBERBABE_TRIPLE:
|
||||
curr_shodan_val -= CYBERBABE_TRIPLE_VALUE;
|
||||
break;
|
||||
case ELITE_GUARD_TRIPLE:
|
||||
curr_shodan_val -= ELITE_GUARD_TRIPLE_VALUE;
|
||||
break;
|
||||
case CORTEX_REAVER_TRIPLE:
|
||||
curr_shodan_val -= CORTEX_REAVER_TRIPLE_VALUE;
|
||||
break;
|
||||
case MUTANT_BORG_TRIPLE:
|
||||
curr_shodan_val -= MUTANT_BORG_TRIPLE_VALUE;
|
||||
break;
|
||||
case SECURITY_BOT1_TRIPLE:
|
||||
curr_shodan_val -= SECURITY_BOT1_TRIPLE_VALUE;
|
||||
break;
|
||||
case SECURITY_BOT2_TRIPLE:
|
||||
curr_shodan_val -= SECURITY_BOT2_TRIPLE_VALUE;
|
||||
break;
|
||||
case EXECBOT_TRIPLE:
|
||||
curr_shodan_val -= EXECBOT_TRIPLE_VALUE;
|
||||
break;
|
||||
#endif
|
||||
case CAMERA_TRIPLE:
|
||||
curr_shodan_val -= CAMERA_TRIPLE_VALUE;
|
||||
break;
|
||||
case SMALL_CPU_TRIPLE:
|
||||
curr_shodan_val -= SMALL_CPU_TRIPLE_VALUE;
|
||||
break;
|
||||
case LARGCPU_TRIPLE:
|
||||
curr_shodan_val -= LARGCPU_TRIPLE_VALUE;
|
||||
break;
|
||||
}
|
||||
if (curr_shodan_val < 0) {
|
||||
// Warning(("SHODOMETER negative after decrementing of id = 0x%x\n",oid));
|
||||
curr_shodan_val = 0;
|
||||
}
|
||||
if (curr_shodan_val != QUESTVAR_GET(SHODAN_QV))
|
||||
update_shodometer(curr_shodan_val, game_stuff);
|
||||
return (curr_shodan_val);
|
||||
} else
|
||||
return (0);
|
||||
}
|
||||
Reference in New Issue
Block a user