a5ec8db5f7
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.
108 lines
2.9 KiB
C
108 lines
2.9 KiB
C
/*
|
|
|
|
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/>.
|
|
|
|
*/
|
|
/*
|
|
* $Source: r:/prj/cit/src/RCS/gametime.c $
|
|
* $Revision: 1.16 $
|
|
* $Author: minman $
|
|
* $Date: 1994/09/11 07:42:01 $
|
|
*
|
|
*/
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include "gametime.h"
|
|
#include "faketime.h"
|
|
#include "player.h"
|
|
#include "schedule.h"
|
|
#include "drugs.h"
|
|
#include "lvldata.h"
|
|
#include "dirac.h"
|
|
#include "framer8.h"
|
|
|
|
ulong last_real_time = 0;
|
|
char reflex_remainder = 0;
|
|
|
|
long gNewShockTicks; // whyyyyyy
|
|
|
|
#define MAX_DELTAT (CIT_CYCLE / MIN_FRAME_RATE)
|
|
#define MIN_DELTAT (CIT_CYCLE / MAX_FRAME_RATE)
|
|
|
|
errtype update_state(uchar time_running) {
|
|
uchar update = TRUE;
|
|
if (time_running) {
|
|
ulong deltat;
|
|
if (player_struct.drug_status[DRUG_REFLEX] > 0 && !global_fullmap->cyber) {
|
|
// So we effectively downshift deltat by 2 to divide by 4
|
|
// we keep the remainder around so that we don't screw up the universe badly
|
|
deltat = *tmd_ticks + reflex_remainder - last_real_time;
|
|
reflex_remainder = deltat & 0x3;
|
|
deltat = deltat >> 2;
|
|
} else
|
|
deltat = *tmd_ticks - last_real_time;
|
|
|
|
if (deltat > MAX_DELTAT)
|
|
deltat = MAX_DELTAT;
|
|
if (deltat < MIN_DELTAT) {
|
|
deltat = 0;
|
|
update = FALSE;
|
|
}
|
|
|
|
// update game time.
|
|
player_struct.deltat = deltat;
|
|
player_struct.game_time += deltat;
|
|
}
|
|
if (update)
|
|
last_real_time = *tmd_ticks;
|
|
|
|
run_schedules();
|
|
|
|
return (OK);
|
|
}
|
|
|
|
// static ulong time_at_suspend = 0;
|
|
|
|
void suspend_game_time(void) {
|
|
// if (time_at_suspend == 0)
|
|
// time_at_suspend = *tmd_ticks;
|
|
}
|
|
|
|
void resume_game_time(void) {
|
|
// last_real_time += *tmd_ticks - time_at_suspend;
|
|
last_real_time = *tmd_ticks;
|
|
// time_at_suspend = 0;
|
|
}
|
|
|
|
#define MAX_PHYSICS_RUNTIME fix_make(10, 0)
|
|
|
|
void update_level_gametime(void) {
|
|
ulong oldtime = level_gamedata.exit_time;
|
|
ulong deltat = player_struct.game_time - oldtime;
|
|
run_schedules();
|
|
// run ai's
|
|
// KLC ai_time_passes(&deltat);
|
|
// KLC ai_freeze_tag();
|
|
// run physics
|
|
if (global_fullmap->cyber) {
|
|
EDMS_control_Dirac_frame(PLAYER_PHYSICS, 0, 0, 0, 0);
|
|
} else {
|
|
EDMS_control_pelvis(PLAYER_PHYSICS, 0, 0, 0, 0, 0, 0);
|
|
}
|
|
EDMS_soliton_vector(lg_min(MAX_PHYSICS_RUNTIME, deltat / CIT_CYCLE));
|
|
}
|