diff --git a/Source/Makefile b/Source/Makefile index 81c4219b..a2200e82 100644 --- a/Source/Makefile +++ b/Source/Makefile @@ -4,5 +4,6 @@ qc-progs: $(CC) menu-fn/progs.src $(CC) client/valve.src $(CC) server/valve.src + $(CC) server/scihunt.src $(CC) client/cstrike.src $(CC) server/cstrike.src diff --git a/Source/defs.h b/Source/defs.h index 60f4cc67..b633860d 100644 --- a/Source/defs.h +++ b/Source/defs.h @@ -35,9 +35,9 @@ const vector VEC_PLAYER_CVIEWPOS = [0,0,12]; #define INPUT_BUTTON8 0x00000080 #define FL_USERELEASED (1<<13) -#define FL_CROUCHING (1<<19) +#define FL_CROUCHING (1<<19) #define FL_SEMI_TOGGLED (1<<15) -#define FL_FROZEN (1<<17) -#define FL_REMOVEME (1<<18) +#define FL_FROZEN (1<<17) +#define FL_REMOVEME (1<<18) #define clamp(d,min,max) bound(min,d,max) diff --git a/Source/server/scihunt.src b/Source/server/scihunt.src new file mode 100755 index 00000000..35267038 --- /dev/null +++ b/Source/server/scihunt.src @@ -0,0 +1,67 @@ +#pragma target fte +#pragma progs_dat "../../scihunt/progs.dat" + +#define QWSSQC +#define VALVE + +#includelist +../builtins.h +../defs.h +valve/defs.h +../math.h +../materials.h +../events.h +../entities.h +defs.h + +../gs-entbase/server.src +valve/monster_rat.cpp +scihunt/monster_scientist.cpp + +../shared/decals.c +../shared/effects.c +../shared/spraylogo.cpp + +../shared/valve/player.cpp +valve/player.c +../shared/pmove.c +valve/spectator.c +../shared/valve/items.h +../shared/valve/crosshair.h +../shared/valve/weapons.h +../shared/valve/w_crowbar.c +../shared/valve/w_glock.c +../shared/valve/w_python.c +../shared/valve/w_mp5.c +../shared/valve/w_crossbow.c +../shared/valve/w_shotgun.c +../shared/valve/w_rpg.c +../shared/valve/w_gauss.c +../shared/valve/w_egon.c +../shared/valve/w_hornetgun.c +../shared/valve/w_handgrenade.c +../shared/valve/w_tripmine.c +../shared/valve/w_satchel.c +../shared/valve/w_snark.c +valve/items.cpp +../shared/valve/weapons.c + +scihunt/shdata_parse.c +spawn.c + +valve/client.c +client.c + +scihunt/server.c +server.c + +valve/damage.c +traceattack.c +vox.c + +valve/input.c + +valve/spawn.c +footsteps.c +entry.c +#endlist diff --git a/Source/server/valve/monster_scientist.cpp b/Source/server/scihunt/monster_scientist.cpp similarity index 100% rename from Source/server/valve/monster_scientist.cpp rename to Source/server/scihunt/monster_scientist.cpp diff --git a/Source/server/scihunt/server.c b/Source/server/scihunt/server.c new file mode 100644 index 00000000..abf78b1e --- /dev/null +++ b/Source/server/scihunt/server.c @@ -0,0 +1,24 @@ +/*** +* +* Copyright (c) 2016-2019 Marco 'eukara' Hladik. All rights reserved. +* +* See the file LICENSE attached with the sources for usage details. +* +****/ + +void Game_StartFrame(void) +{ + +} + +float Game_ConsoleCmd(string cmd) +{ + return FALSE; +} + +void Game_Worldspawn(void) +{ + precache_model("models/player.mdl"); + Weapons_Init(); + SHData_Parse(mapname); +} diff --git a/Source/server/scihunt/shdata_parse.c b/Source/server/scihunt/shdata_parse.c new file mode 100644 index 00000000..199850f0 --- /dev/null +++ b/Source/server/scihunt/shdata_parse.c @@ -0,0 +1,76 @@ +/*** +* +* Copyright (c) 2016-2019 Marco 'eukara' Hladik. All rights reserved. +* +* See the file LICENSE attached with the sources for usage details. +* +****/ + +void SHData_New(void) +{ + entity new = spawn(); + new.origin[0] = stof(argv(1)); + new.origin[1] = stof(argv(2)); + new.origin[2] = stof(argv(3)); + setorigin(new, new.origin); + + entity oldself = self; + self = new; + + if (argv(0) == "monster_scientist") { + spawnfunc_monster_scientist(); + } else if (argv(0) == "info_player_team1") { + self.classname = "info_player_deathmatch"; + } else if (argv(0) == "info_player_team2") { + self.classname = "info_player_deathmatch"; + } + self = oldself; +} + +void SHData_NewAngles(void) +{ + entity new = spawn(); + new.origin[0] = stof(argv(1)); + new.origin[1] = stof(argv(2)); + new.origin[2] = stof(argv(3)); + new.angles[0] = stof(argv(4)); + new.angles[1] = stof(argv(5)); + new.angles[2] = stof(argv(6)); + setorigin(new, new.origin); + + entity oldself = self; + self = new; + + if (argv(0) == "monster_scientist") { + spawnfunc_monster_scientist(); + } else if (argv(0) == "info_player_team1") { + self.classname = "info_player_deathmatch"; + } else if (argv(0) == "info_player_team2") { + self.classname = "info_player_deathmatch"; + } + self = oldself; +} + +void SHData_Parse(string map) +{ + int c; + string temp; + filestream shdfile = fopen(sprintf("SH_Data/%s.shd", map), FILE_READ); + + if (shdfile < 0) { + dprint(sprintf("^1WARNING^7: Could not load SH_Data/%s.shd\n", map)); + return; + } + + if (shdfile >= 0) { + while ((temp = fgets(shdfile))) { + c = tokenize(temp); + + if (c == 4) { + SHData_New(); + } else if (c == 7) { + SHData_NewAngles(); + } + } + } +} diff --git a/Source/server/valve.src b/Source/server/valve.src index f0a6ccca..6167de5f 100755 --- a/Source/server/valve.src +++ b/Source/server/valve.src @@ -16,7 +16,6 @@ defs.h ../gs-entbase/server.src valve/monster_rat.cpp -valve/monster_scientist.cpp ../shared/decals.c ../shared/effects.c diff --git a/Source/server/valve/damage.c b/Source/server/valve/damage.c index a4bd009b..c9fbabd5 100644 --- a/Source/server/valve/damage.c +++ b/Source/server/valve/damage.c @@ -67,7 +67,7 @@ void Damage_Apply(entity eTarget, entity eAttacker, float fDamage, vector vHitPo if ((eTarget.flags & FL_CLIENT) && (eAttacker.flags & FL_CLIENT)) { eAttacker.frags++; - Damage_CastOrbituary(eAttacker, eTarget, eAttacker.weapon); + //Damage_CastOrbituary(eAttacker, eTarget, eAttacker.weapon); } } diff --git a/scihunt/progs.dat b/scihunt/progs.dat new file mode 100644 index 00000000..a5bfa1de Binary files /dev/null and b/scihunt/progs.dat differ diff --git a/valve/progs.dat b/valve/progs.dat index 3b03ae75..9989f043 100644 Binary files a/valve/progs.dat and b/valve/progs.dat differ