More tweaks for both Half-Life and Opposing Force weapons and behaviour.
Also added Gunman stubs.
This commit is contained in:
parent
0952fc197c
commit
fcc9643190
22 changed files with 612 additions and 88 deletions
|
@ -3,6 +3,7 @@
|
|||
|
||||
#define CSQC
|
||||
#define VALVE
|
||||
#define GEARBOX
|
||||
|
||||
#includelist
|
||||
../../shared/fteextensions.qc
|
||||
|
|
26
src/client/rewolf/entities.c
Normal file
26
src/client/rewolf/entities.c
Normal file
|
@ -0,0 +1,26 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2019 Marco Hladik <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
int
|
||||
Game_Entity_Update(float id, float new)
|
||||
{
|
||||
switch (id) {
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
|
@ -40,28 +40,21 @@ decore.cpp
|
|||
../../shared/spraylogo.cpp
|
||||
../npc.c
|
||||
|
||||
../../shared/valve/items.h
|
||||
../../shared/rewolf/items.h
|
||||
../../shared/valve/weapon_common.h
|
||||
../../shared/valve/weapons.h
|
||||
../../shared/valve/w_crossbow.c
|
||||
../../shared/valve/w_crowbar.c
|
||||
../../shared/valve/w_egon.c
|
||||
../../shared/valve/w_gauss.c
|
||||
../../shared/valve/w_glock.c
|
||||
../../shared/valve/w_handgrenade.c
|
||||
../../shared/valve/w_hornetgun.c
|
||||
../../shared/valve/w_mp5.c
|
||||
../../shared/valve/w_python.c
|
||||
../../shared/valve/w_rpg.c
|
||||
../../shared/valve/w_satchel.c
|
||||
../../shared/valve/w_shotgun.c
|
||||
../../shared/valve/w_snark.c
|
||||
../../shared/valve/w_tripmine.c
|
||||
../../shared/valve/weapons.c
|
||||
../../shared/rewolf/weapons.h
|
||||
../../shared/rewolf/w_fists.c
|
||||
../../shared/rewolf/w_gausspistol.c
|
||||
../../shared/rewolf/w_beamgun.c
|
||||
../../shared/rewolf/w_chemicalgun.c
|
||||
../../shared/rewolf/w_dml.c
|
||||
../../shared/rewolf/w_minigun.c
|
||||
../../shared/rewolf/w_aicore.c
|
||||
../../shared/rewolf/weapons.c
|
||||
../../shared/valve/weapon_common.c
|
||||
|
||||
../valve/player.c
|
||||
../valve/entities.c
|
||||
entities.c
|
||||
../entities.c
|
||||
|
||||
../valve/cmds.c
|
||||
|
|
316
src/server/rewolf/client.c
Normal file
316
src/server/rewolf/client.c
Normal file
|
@ -0,0 +1,316 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2019 Marco Hladik <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
var int autocvar_sv_networkeverything = FALSE;
|
||||
|
||||
void
|
||||
Game_ClientConnect(void)
|
||||
{
|
||||
entity a;
|
||||
bprint(PRINT_HIGH, sprintf("%s connected\n", self.netname));
|
||||
|
||||
int playercount = 0;
|
||||
for (a = world; (a = find(a, classname, "player"));) {
|
||||
playercount++;
|
||||
}
|
||||
|
||||
/* we're the first. respawn all entities? */
|
||||
if (playercount == 0) {
|
||||
for (a = world; (a = findfloat(a, gflags, GF_CANRESPAWN));) {
|
||||
CBaseEntity caw = (CBaseEntity)a;
|
||||
caw.Respawn();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
Game_ClientDisconnect(void)
|
||||
{
|
||||
bprint(PRINT_HIGH, sprintf("%s disconnected\n", self.netname));
|
||||
|
||||
/* Make this unusable */
|
||||
self.solid = SOLID_NOT;
|
||||
self.movetype = MOVETYPE_NONE;
|
||||
self.modelindex = 0;
|
||||
self.health = 0;
|
||||
self.takedamage = 0;
|
||||
self.SendFlags = PLAYER_MODELINDEX;
|
||||
}
|
||||
|
||||
void
|
||||
Game_ClientKill(void)
|
||||
{
|
||||
Damage_Apply(self, self, self.health, self.origin, TRUE);
|
||||
}
|
||||
|
||||
void
|
||||
Game_PlayerPreThink(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
Game_PlayerPostThink(void)
|
||||
{
|
||||
player pl = (player)self;
|
||||
Animation_PlayerUpdate();
|
||||
|
||||
pl.SendFlags |= PLAYER_KEEPALIVE;
|
||||
|
||||
if (pl.old_modelindex != pl.modelindex) {
|
||||
pl.SendFlags |= PLAYER_MODELINDEX;
|
||||
}
|
||||
if (pl.old_origin[0] != pl.origin[0]) {
|
||||
pl.SendFlags |= PLAYER_ORIGIN;
|
||||
}
|
||||
if (pl.old_origin[1] != pl.origin[1]) {
|
||||
pl.SendFlags |= PLAYER_ORIGIN;
|
||||
}
|
||||
if (pl.old_origin[2] != pl.origin[2]) {
|
||||
pl.SendFlags |= PLAYER_ORIGIN_Z;
|
||||
}
|
||||
if (pl.old_angles[0] != pl.angles[0]) {
|
||||
pl.SendFlags |= PLAYER_ANGLES_X;
|
||||
}
|
||||
if (pl.old_angles[1] != pl.angles[1]) {
|
||||
pl.SendFlags |= PLAYER_ANGLES_Y;
|
||||
}
|
||||
if (pl.old_angles[2] != pl.angles[2]) {
|
||||
pl.SendFlags |= PLAYER_ANGLES_Z;
|
||||
}
|
||||
if (pl.old_velocity[0] != pl.velocity[0]) {
|
||||
pl.SendFlags |= PLAYER_VELOCITY;
|
||||
}
|
||||
if (pl.old_velocity[1] != pl.velocity[1]) {
|
||||
pl.SendFlags |= PLAYER_VELOCITY;
|
||||
}
|
||||
if (pl.old_velocity[2] != pl.velocity[2]) {
|
||||
pl.SendFlags |= PLAYER_VELOCITY_Z;
|
||||
}
|
||||
if (pl.old_flags != pl.flags) {
|
||||
pl.SendFlags |= PLAYER_FLAGS;
|
||||
}
|
||||
if (pl.old_activeweapon != pl.activeweapon) {
|
||||
pl.SendFlags |= PLAYER_WEAPON;
|
||||
}
|
||||
if (pl.old_items != pl.g_items) {
|
||||
pl.SendFlags |= PLAYER_ITEMS;
|
||||
}
|
||||
if (pl.old_health != pl.health) {
|
||||
pl.SendFlags |= PLAYER_HEALTH;
|
||||
}
|
||||
if (pl.old_armor != pl.armor) {
|
||||
pl.SendFlags |= PLAYER_ARMOR;
|
||||
}
|
||||
if (pl.old_movetype != pl.movetype) {
|
||||
pl.SendFlags |= PLAYER_MOVETYPE;
|
||||
}
|
||||
if (pl.old_viewofs != pl.view_ofs[2]) {
|
||||
pl.SendFlags |= PLAYER_VIEWOFS;
|
||||
}
|
||||
if (pl.old_baseframe != pl.baseframe) {
|
||||
pl.SendFlags |= PLAYER_BASEFRAME;
|
||||
}
|
||||
if (pl.old_frame != pl.frame) {
|
||||
pl.SendFlags |= PLAYER_FRAME;
|
||||
}
|
||||
if (pl.old_a_ammo1 != pl.a_ammo1) {
|
||||
pl.SendFlags |= PLAYER_AMMO1;
|
||||
}
|
||||
if (pl.old_a_ammo2 != pl.a_ammo2) {
|
||||
pl.SendFlags |= PLAYER_AMMO2;
|
||||
}
|
||||
if (pl.old_a_ammo3 != pl.a_ammo3) {
|
||||
pl.SendFlags |= PLAYER_AMMO3;
|
||||
}
|
||||
|
||||
pl.old_modelindex = pl.modelindex;
|
||||
pl.old_origin = pl.origin;
|
||||
pl.old_angles = pl.angles;
|
||||
pl.old_velocity = pl.velocity;
|
||||
pl.old_flags = pl.flags;
|
||||
pl.old_activeweapon = pl.activeweapon;
|
||||
pl.old_items = pl.g_items;
|
||||
pl.old_health = pl.health;
|
||||
pl.old_armor = pl.armor;
|
||||
pl.old_movetype = pl.movetype;
|
||||
pl.old_viewofs = pl.view_ofs[2];
|
||||
pl.old_baseframe = pl.baseframe;
|
||||
pl.old_frame = pl.frame;
|
||||
pl.old_a_ammo1 = pl.a_ammo1;
|
||||
pl.old_a_ammo2 = pl.a_ammo2;
|
||||
pl.old_a_ammo3 = pl.a_ammo3;
|
||||
}
|
||||
void
|
||||
Game_RunClientCommand(void)
|
||||
{
|
||||
Footsteps_Update();
|
||||
QPhysics_Run(self);
|
||||
}
|
||||
|
||||
void
|
||||
Game_DecodeChangeParms(void)
|
||||
{
|
||||
player pl = (player)self;
|
||||
g_landmarkpos[0] = parm1;
|
||||
g_landmarkpos[1] = parm2;
|
||||
g_landmarkpos[2] = parm3;
|
||||
pl.angles[0] = parm4;
|
||||
pl.angles[1] = parm5;
|
||||
pl.angles[2] = parm6;
|
||||
pl.velocity[0] = parm7;
|
||||
pl.velocity[1] = parm8;
|
||||
pl.velocity[2] = parm9;
|
||||
pl.g_items = parm10;
|
||||
pl.activeweapon = parm11;
|
||||
}
|
||||
|
||||
void
|
||||
Game_SetChangeParms(void)
|
||||
{
|
||||
player pl = (player)self;
|
||||
parm1 = g_landmarkpos[0];
|
||||
parm2 = g_landmarkpos[1];
|
||||
parm3 = g_landmarkpos[2];
|
||||
parm4 = pl.angles[0];
|
||||
parm5 = pl.angles[1];
|
||||
parm6 = pl.angles[2];
|
||||
parm7 = pl.velocity[0];
|
||||
parm8 = pl.velocity[1];
|
||||
parm9 = pl.velocity[2];
|
||||
parm10 = pl.g_items;
|
||||
parm11 = pl.activeweapon;
|
||||
}
|
||||
|
||||
void
|
||||
Game_PutClientInServer(void)
|
||||
{
|
||||
if (self.classname != "player") {
|
||||
spawnfunc_player();
|
||||
}
|
||||
player pl = (player)self;
|
||||
|
||||
entity spot;
|
||||
pl.classname = "player";
|
||||
pl.health = self.max_health = 100;
|
||||
|
||||
pl.takedamage = DAMAGE_YES;
|
||||
pl.solid = SOLID_SLIDEBOX;
|
||||
pl.movetype = MOVETYPE_WALK;
|
||||
pl.flags = FL_CLIENT;
|
||||
pl.viewzoom = 1.0;
|
||||
pl.model = "models/player.mdl";
|
||||
|
||||
string mymodel = infokey(pl, "model");
|
||||
|
||||
if (mymodel) {
|
||||
mymodel = sprintf("models/player/%s/%s.mdl", mymodel, mymodel);
|
||||
if (whichpack(mymodel)) {
|
||||
pl.model = mymodel;
|
||||
}
|
||||
}
|
||||
setmodel(pl, pl.model);
|
||||
|
||||
setsize(pl, VEC_HULL_MIN, VEC_HULL_MAX);
|
||||
pl.view_ofs = VEC_PLAYER_VIEWPOS;
|
||||
pl.velocity = [0,0,0];
|
||||
pl.gravity = __NULL__;
|
||||
pl.frame = 1;
|
||||
pl.SendEntity = Player_SendEntity;
|
||||
pl.SendFlags = UPDATE_ALL;
|
||||
|
||||
pl.customphysics = Empty;
|
||||
pl.vPain = Player_Pain;
|
||||
pl.vDeath = Player_Death;
|
||||
pl.iBleeds = TRUE;
|
||||
forceinfokey(pl, "*spec", "0");
|
||||
forceinfokey(self, "*deaths", ftos(self.deaths));
|
||||
|
||||
if (cvar("sv_playerslots") == 1) {
|
||||
Game_DecodeChangeParms();
|
||||
|
||||
if (startspot != "") {
|
||||
setorigin(pl, Landmark_GetSpot());
|
||||
} else {
|
||||
spot = find(world, classname, "info_player_start");
|
||||
setorigin(pl, spot.origin);
|
||||
pl.angles = spot.angles;
|
||||
pl.fixangle = TRUE;
|
||||
}
|
||||
} else {
|
||||
spot = Spawn_SelectRandom("info_player_deathmatch");
|
||||
setorigin(pl, spot.origin);
|
||||
pl.angles = spot.angles;
|
||||
pl.fixangle = TRUE;
|
||||
pl.g_items |= ITEM_SUIT;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
SV_SendChat(entity sender, string msg, entity eEnt, float fType)
|
||||
{
|
||||
WriteByte(MSG_MULTICAST, SVC_CGAMEPACKET);
|
||||
WriteByte(MSG_MULTICAST, fType == 0 ? EV_CHAT:EV_CHAT_TEAM);
|
||||
WriteByte(MSG_MULTICAST, num_for_edict(sender) - 1);
|
||||
WriteByte(MSG_MULTICAST, sender.team);
|
||||
WriteString(MSG_MULTICAST, msg);
|
||||
if (eEnt) {
|
||||
msg_entity = eEnt;
|
||||
multicast([0,0,0], MULTICAST_ONE);
|
||||
} else {
|
||||
multicast([0,0,0], MULTICAST_ALL);
|
||||
}
|
||||
|
||||
localcmd(sprintf("echo [SERVER] %s: %s\n", sender.netname, msg));
|
||||
}
|
||||
|
||||
void
|
||||
Game_ParseClientCommand(string cmd)
|
||||
{
|
||||
tokenize(cmd);
|
||||
|
||||
if (argv(1) == "timeleft") {
|
||||
string msg;
|
||||
string timestring;
|
||||
float timeleft;
|
||||
timeleft = cvar("mp_timelimit") - (time / 60);
|
||||
timestring = Vox_TimeToString(timeleft);
|
||||
msg = sprintf("we have %s minutes remaining", timestring);
|
||||
Vox_Singlecast(self, msg);
|
||||
return;
|
||||
}
|
||||
|
||||
if (argv(0) == "say") {
|
||||
SV_SendChat(self, argv(1), world, 0);
|
||||
return;
|
||||
} else if (argv(0) == "say_team") {
|
||||
entity a;
|
||||
for (a = world; (a = find(a, classname, "player"));) {
|
||||
if (a.team == self.team) {
|
||||
SV_SendChat(self, argv(1), a, 1);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
clientcommand(self, cmd);
|
||||
}
|
||||
|
||||
void
|
||||
Game_SetNewParms(void)
|
||||
{
|
||||
|
||||
}
|
58
src/server/rewolf/input.c
Normal file
58
src/server/rewolf/input.c
Normal file
|
@ -0,0 +1,58 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2019 Marco Hladik <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
void
|
||||
Game_Input(void)
|
||||
{
|
||||
if (input_buttons & INPUT_BUTTON0) {
|
||||
Weapons_Primary();
|
||||
} else if (input_buttons & INPUT_BUTTON4) {
|
||||
Weapons_Reload();
|
||||
} else if (input_buttons & INPUT_BUTTON3) {
|
||||
Weapons_Secondary();
|
||||
} else {
|
||||
Weapons_Release();
|
||||
}
|
||||
|
||||
if (input_buttons & INPUT_BUTTON5) {
|
||||
Player_UseDown();
|
||||
} else {
|
||||
Player_UseUp();
|
||||
}
|
||||
|
||||
if (self.impulse == 100) {
|
||||
Flashlight_Toggle();
|
||||
}
|
||||
|
||||
if (cvar("sv_cheats") == 1) {
|
||||
player pl = (player)self;
|
||||
if (self.impulse == 101) {
|
||||
pl.health = 100;
|
||||
pl.armor = 100;
|
||||
}
|
||||
|
||||
if (self.impulse == 102) {
|
||||
// Respawn all the entities
|
||||
for (entity a = world; (a = findfloat(a, gflags, GF_CANRESPAWN));) {
|
||||
CBaseEntity caw = (CBaseEntity)a;
|
||||
caw.Respawn();
|
||||
}
|
||||
bprint(PRINT_HIGH, "Respawning all map entities...\n");
|
||||
}
|
||||
}
|
||||
|
||||
self.impulse = 0;
|
||||
}
|
|
@ -14,10 +14,8 @@
|
|||
../../shared/entities.h
|
||||
../../shared/valve/animations.h
|
||||
../defs.h
|
||||
|
||||
../plugins.c
|
||||
../logging.c
|
||||
|
||||
../../gs-entbase/server.src
|
||||
../valve/monster_rat.cpp
|
||||
../valve/monster_scientist_dead.cpp
|
||||
|
@ -27,32 +25,23 @@ monster_human_chopper.cpp
|
|||
monster_human_demoman.cpp
|
||||
monster_human_gunman.cpp
|
||||
monster_human_unarmed.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/rewolf/items.h
|
||||
../../shared/valve/weapon_common.h
|
||||
../../shared/valve/weapons.h
|
||||
../../shared/valve/w_crossbow.c
|
||||
../../shared/valve/w_crowbar.c
|
||||
../../shared/valve/w_egon.c
|
||||
../../shared/valve/w_gauss.c
|
||||
../../shared/valve/w_glock.c
|
||||
../../shared/valve/w_handgrenade.c
|
||||
../../shared/valve/w_hornetgun.c
|
||||
../../shared/valve/w_mp5.c
|
||||
../../shared/valve/w_python.c
|
||||
../../shared/valve/w_rpg.c
|
||||
../../shared/valve/w_satchel.c
|
||||
../../shared/valve/w_shotgun.c
|
||||
../../shared/valve/w_snark.c
|
||||
../../shared/valve/w_tripmine.c
|
||||
../../shared/rewolf/weapons.h
|
||||
../../shared/rewolf/w_fists.c
|
||||
../../shared/rewolf/w_gausspistol.c
|
||||
../../shared/rewolf/w_beamgun.c
|
||||
../../shared/rewolf/w_chemicalgun.c
|
||||
../../shared/rewolf/w_dml.c
|
||||
../../shared/rewolf/w_minigun.c
|
||||
../../shared/rewolf/w_aicore.c
|
||||
../valve/items.cpp
|
||||
../valve/item_longjump.cpp
|
||||
../valve/item_suit.cpp
|
||||
|
@ -61,26 +50,20 @@ monster_human_unarmed.cpp
|
|||
../valve/item_weaponbox.cpp
|
||||
../valve/world_items.cpp
|
||||
../valve/ammo.cpp
|
||||
../../shared/valve/weapons.c
|
||||
../../shared/rewolf/weapons.c
|
||||
../../shared/valve/weapon_common.c
|
||||
|
||||
../spawn.c
|
||||
../vox.c
|
||||
|
||||
../../shared/valve/animations.c
|
||||
../valve/client.c
|
||||
client.c
|
||||
../client.c
|
||||
|
||||
../valve/server.c
|
||||
../server.c
|
||||
|
||||
../valve/damage.c
|
||||
../traceattack.c
|
||||
|
||||
../footsteps.c
|
||||
../flashlight.c
|
||||
../valve/input.c
|
||||
|
||||
input.c
|
||||
../valve/spawn.c
|
||||
../entry.c
|
||||
#endlist
|
||||
|
|
|
@ -134,7 +134,7 @@ w_m249_primary(void)
|
|||
Weapons_UpdateAmmo(pl, pl.m249_mag, pl.ammo_556, __NULL__);
|
||||
#endif
|
||||
|
||||
pl.w_attack_next = 0.1f;
|
||||
pl.w_attack_next = 0.075f;
|
||||
pl.w_idle_next = 10.0f;
|
||||
}
|
||||
|
||||
|
@ -178,6 +178,7 @@ void
|
|||
w_m249_release(void)
|
||||
{
|
||||
player pl = (player)self;
|
||||
|
||||
if (pl.w_idle_next > 0.0) {
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -108,9 +108,9 @@ w_pipewrench_primary(void)
|
|||
traceline(src, src + (v_forward * 32), FALSE, pl);
|
||||
|
||||
if (trace_fraction >= 1.0) {
|
||||
pl.w_attack_next = 0.9f;
|
||||
} else {
|
||||
pl.w_attack_next = 0.7f;
|
||||
} else {
|
||||
pl.w_attack_next = 0.53f;
|
||||
}
|
||||
pl.w_idle_next = 2.5f;
|
||||
|
||||
|
@ -181,7 +181,7 @@ w_pipewrench_secondary(void)
|
|||
if (pl.a_ammo1 != 1) {
|
||||
Weapons_ViewAnimation(PIPE_ATTACKBIGWIND);
|
||||
pl.a_ammo1 = 1;
|
||||
pl.w_attack_next = 0.86f;
|
||||
pl.w_attack_next = 0.75f;
|
||||
}
|
||||
}
|
||||
pl.w_idle_next = 2.5f;
|
||||
|
|
|
@ -127,13 +127,13 @@ w_shockrifle_release(void)
|
|||
#ifdef CSQC
|
||||
if (pl.a_ammo2 < 10) {
|
||||
pl.a_ammo2 = bound(0, pl.a_ammo2 + 1, 10);
|
||||
pl.w_idle_next = 0.5f;
|
||||
pl.w_idle_next = 0.35f;
|
||||
}
|
||||
#else
|
||||
if (pl.ammo_shock < 10) {
|
||||
pl.ammo_shock = bound(0, pl.ammo_shock + 1, 10);
|
||||
Weapons_UpdateAmmo(pl, -1, pl.ammo_shock, -1);
|
||||
pl.w_idle_next = 0.5f;
|
||||
pl.w_idle_next = 0.35f;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -183,7 +183,7 @@ w_shockrifle_primary(void)
|
|||
|
||||
Weapons_ViewAnimation(SHOCKRIFLE_SHOOT);
|
||||
pl.w_attack_next = 0.1f;
|
||||
pl.w_idle_next = 0.75f;
|
||||
pl.w_idle_next = 0.5f;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -170,6 +170,7 @@ void
|
|||
w_sporelauncher_reload(void)
|
||||
{
|
||||
player pl = (player)self;
|
||||
|
||||
#ifdef CSQC
|
||||
if (pl.a_ammo1 >= 5) {
|
||||
return;
|
||||
|
|
51
src/shared/rewolf/items.h
Normal file
51
src/shared/rewolf/items.h
Normal file
|
@ -0,0 +1,51 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2019 Marco Hladik <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#define ITEM_FISTS 0x00000001i
|
||||
#define ITEM_GAUSSPISTOL 0x00000002i
|
||||
#define ITEM_BEAMGUN 0x00000004i
|
||||
#define ITEM_CHEMICALGUN 0x00000008i
|
||||
#define ITEM_DML 0x00000010i
|
||||
#define ITEM_MINIGUN 0x00000020i
|
||||
#define ITEM_AICORE 0x00000040i
|
||||
#define ITEM_UNUSED8 0x00000080i
|
||||
|
||||
#define ITEM_UNUSED9 0x00000100i
|
||||
#define ITEM_UNUSED10 0x00000200i
|
||||
#define ITEM_UNUSED11 0x00000400i
|
||||
#define ITEM_UNUSED12 0x00000800i
|
||||
#define ITEM_UNUSED13 0x00001000i
|
||||
#define ITEM_UNUSED14 0x00002000i
|
||||
#define ITEM_SUIT 0x00004000i
|
||||
#define ITEM_LONGJUMP 0x00008000i
|
||||
|
||||
#define ITEM_UNUSED17 0x00010000i
|
||||
#define ITEM_UNUSED18 0x00020000i
|
||||
#define ITEM_UNUSED19 0x00040000i
|
||||
#define ITEM_UNUSED20 0x00080000i
|
||||
#define ITEM_UNUSED21 0x00100000i
|
||||
#define ITEM_UNUSED22 0x00200000i
|
||||
#define ITEM_UNUSED23 0x00400000i
|
||||
#define ITEM_UNUSED24 0x00800000i
|
||||
|
||||
#define ITEM_UNUSED25 0x01000000i
|
||||
#define ITEM_UNUSED26 0x02000000i
|
||||
#define ITEM_UNUSED27 0x04000000i
|
||||
#define ITEM_UNUSED28 0x08000000i
|
||||
#define ITEM_UNUSED29 0x10000000i
|
||||
#define ITEM_UNUSED30 0x20000000i
|
||||
#define ITEM_UNUSED31 0x40000000i
|
||||
#define ITEM_UNUSED32 0x80000000i
|
2
src/shared/rewolf/w_aicore.c
Normal file
2
src/shared/rewolf/w_aicore.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
|
||||
weapon_t w_aicore = {};
|
2
src/shared/rewolf/w_beamgun.c
Normal file
2
src/shared/rewolf/w_beamgun.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
|
||||
weapon_t w_beamgun = {};
|
2
src/shared/rewolf/w_chemicalgun.c
Normal file
2
src/shared/rewolf/w_chemicalgun.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
|
||||
weapon_t w_chemicalgun = {};
|
2
src/shared/rewolf/w_dml.c
Normal file
2
src/shared/rewolf/w_dml.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
|
||||
weapon_t w_dml = {};
|
2
src/shared/rewolf/w_fists.c
Normal file
2
src/shared/rewolf/w_fists.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
|
||||
weapon_t w_fists = {};
|
2
src/shared/rewolf/w_gausspistol.c
Normal file
2
src/shared/rewolf/w_gausspistol.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
|
||||
weapon_t w_gausspistol = {};
|
2
src/shared/rewolf/w_minigun.c
Normal file
2
src/shared/rewolf/w_minigun.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
|
||||
weapon_t w_minigun = {};
|
27
src/shared/rewolf/weapons.c
Normal file
27
src/shared/rewolf/weapons.c
Normal file
|
@ -0,0 +1,27 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2019 Marco Hladik <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
weapon_t w_null = {};
|
||||
weapon_t g_weapons[] = {
|
||||
w_null,
|
||||
w_fists,
|
||||
w_gausspistol,
|
||||
w_beamgun,
|
||||
w_chemicalgun,
|
||||
w_dml,
|
||||
w_minigun,
|
||||
w_aicore
|
||||
};
|
47
src/shared/rewolf/weapons.h
Normal file
47
src/shared/rewolf/weapons.h
Normal file
|
@ -0,0 +1,47 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2019 Marco Hladik <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* Weapon Indices for the weapon table */
|
||||
enum
|
||||
{
|
||||
WEAPON_NONE,
|
||||
WEAPON_FISTS,
|
||||
WEAPON_GAUSSPISTOL,
|
||||
WEAPON_BEAMGUN,
|
||||
WEAPON_CHEMICALGUN,
|
||||
WEAPON_DML,
|
||||
WEAPON_MINIGUN,
|
||||
WEAPON_AICORE
|
||||
};
|
||||
|
||||
/* What the weapons do support and stuff */
|
||||
enum
|
||||
{
|
||||
AMMO_9MM,
|
||||
AMMO_357,
|
||||
AMMO_BUCKSHOT,
|
||||
AMMO_M203_GRENADE,
|
||||
AMMO_BOLT,
|
||||
AMMO_ROCKET,
|
||||
AMMO_URANIUM,
|
||||
AMMO_HANDGRENADE,
|
||||
AMMO_SATCHEL,
|
||||
AMMO_TRIPMINE,
|
||||
AMMO_SNARK,
|
||||
AMMO_556,
|
||||
AMMO_762,
|
||||
AMMO_SPORE
|
||||
};
|
|
@ -302,46 +302,49 @@ void w_gauss_secondary(void)
|
|||
|
||||
void w_gauss_release(void)
|
||||
{
|
||||
player pl = (player)self;
|
||||
if (pl.w_idle_next > 0.0) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* Reset the pitch sound shift */
|
||||
pl.a_ammo1 = 0;
|
||||
player pl = (player)self;
|
||||
if (pl.w_idle_next > 0.0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (pl.a_ammo3 == 1) {
|
||||
pl.w_attack_next = 0.0f;
|
||||
pl.w_idle_next = 4.0f;
|
||||
w_gauss_primary();
|
||||
pl.a_ammo3 = 0;
|
||||
return;
|
||||
} else if (pl.a_ammo3 == 2) {
|
||||
w_gauss_fire(0);
|
||||
Weapons_ViewAnimation(GAUSS_FIRE1);
|
||||
/* Reset the pitch sound shift */
|
||||
pl.a_ammo1 = 0;
|
||||
|
||||
if (pl.a_ammo3 == 1) {
|
||||
pl.w_attack_next = 0.0f;
|
||||
pl.w_idle_next = 4.0f;
|
||||
w_gauss_primary();
|
||||
pl.a_ammo3 = 0;
|
||||
return;
|
||||
} else if (pl.a_ammo3 == 2) {
|
||||
w_gauss_fire(0);
|
||||
Weapons_ViewAnimation(GAUSS_FIRE1);
|
||||
#ifdef CSQC
|
||||
soundupdate(pl, CHAN_WEAPON, "", -1, ATTN_NORM, 0, 0, 0);
|
||||
#endif
|
||||
pl.w_attack_next = 1.5f;
|
||||
pl.w_idle_next = 4.0f;
|
||||
pl.a_ammo3 = 0;
|
||||
return;
|
||||
}
|
||||
pl.w_attack_next = 1.5f;
|
||||
pl.w_idle_next = 4.0f;
|
||||
pl.a_ammo3 = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
int r = floor(random(0,3));
|
||||
switch (r) {
|
||||
case 0:
|
||||
Weapons_ViewAnimation(GAUSS_IDLE1);
|
||||
break;
|
||||
case 1:
|
||||
Weapons_ViewAnimation(GAUSS_IDLE2);
|
||||
break;
|
||||
case 2:
|
||||
Weapons_ViewAnimation(GAUSS_FIDGET);
|
||||
break;
|
||||
}
|
||||
pl.w_idle_next = 3.0f;
|
||||
int r = (float)input_sequence % 3;
|
||||
switch (r) {
|
||||
case 1:
|
||||
Weapons_ViewAnimation(GAUSS_IDLE2);
|
||||
pl.w_idle_next = 4.0f;
|
||||
break;
|
||||
#ifndef GEARBOX
|
||||
case 2:
|
||||
Weapons_ViewAnimation(GAUSS_FIDGET);
|
||||
pl.w_idle_next = 3.0f;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
Weapons_ViewAnimation(GAUSS_IDLE1);
|
||||
pl.w_idle_next = 4.0f;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void w_gauss_reload(void)
|
||||
|
|
|
@ -21,6 +21,9 @@ enum {
|
|||
MP5_GRENADE,
|
||||
MP5_RELOAD,
|
||||
MP5_DRAW,
|
||||
#ifdef GEARBOX
|
||||
MP5_DEPLOY, /* not sure what this is about */
|
||||
#endif
|
||||
MP5_FIRE1,
|
||||
MP5_FIRE2,
|
||||
MP5_FIRE3
|
||||
|
|
Loading…
Reference in a new issue