From f8058ceeb0fe68ff9521e27b1ae84537071dea95 Mon Sep 17 00:00:00 2001 From: Marco Hladik Date: Tue, 20 Aug 2019 08:53:57 -0700 Subject: [PATCH] Weapon prediction experiments --- Source/client/cstrike.src | 1 - Source/client/entry.c | 15 -- Source/client/player.c | 111 ------------- Source/client/predict.c | 3 + Source/client/rewolf.src | 1 - Source/client/scihunt.src | 1 - Source/client/valve.src | 1 - Source/client/valve/player.c | 13 +- Source/client/view.c | 6 +- Source/events.h | 2 - Source/gs-entbase/server/monstermaker.cpp | 36 ++++ Source/math.h | 1 + Source/server/client.c | 21 --- Source/server/cstrike.src | 174 ++++++++++---------- Source/server/entry.c | 2 +- Source/server/rewolf.src | 161 +++++++++--------- Source/server/scihunt.src | 159 +++++++++--------- Source/server/scihunt/client.c | 12 +- Source/server/scihunt/monster_scientist.cpp | 6 +- Source/server/valve.src | 153 ++++++++--------- Source/server/valve/damage.c | 5 +- Source/server/valve/item_weaponbox.cpp | 76 +++++++++ Source/server/valve/player.c | 24 +-- Source/shared/pmove.c | 3 +- Source/shared/scihunt/player.cpp | 3 +- Source/shared/scihunt/w_cannon.c | 23 +-- Source/shared/scihunt/w_chainsaw.c | 17 +- Source/shared/scihunt/w_hammer.c | 35 +--- Source/shared/spraylogo.cpp | 2 +- Source/shared/valve/animations.c | 98 +---------- Source/shared/valve/animations.h | 55 ------- Source/shared/valve/player.cpp | 4 +- Source/shared/valve/w_crossbow.c | 42 ++--- Source/shared/valve/w_crowbar.c | 55 +++---- Source/shared/valve/w_egon.c | 28 +++- Source/shared/valve/w_gauss.c | 160 +++++++++++------- Source/shared/valve/w_glock.c | 42 +++-- Source/shared/valve/w_hornetgun.c | 111 +++++++++---- Source/shared/valve/w_mp5.c | 26 ++- Source/shared/valve/w_python.c | 20 +-- Source/shared/valve/w_rpg.c | 12 +- Source/shared/valve/w_satchel.c | 21 ++- Source/shared/valve/w_shotgun.c | 19 +-- Source/shared/valve/w_snark.c | 14 +- Source/shared/valve/w_tripmine.c | 11 +- Source/shared/valve/weapon_common.c | 6 +- 46 files changed, 826 insertions(+), 965 deletions(-) create mode 100644 Source/gs-entbase/server/monstermaker.cpp create mode 100644 Source/server/valve/item_weaponbox.cpp diff --git a/Source/client/cstrike.src b/Source/client/cstrike.src index 77d3db2f..ea338ca2 100755 --- a/Source/client/cstrike.src +++ b/Source/client/cstrike.src @@ -75,7 +75,6 @@ cstrike/hudscope.c cstrike/hudweaponselect.c cstrike/hudorbituaries.c cstrike/hud.c -corpse.c vgui.cpp cstrike/vgui_buymenu.cpp cstrike/vgui_chooseteam.cpp diff --git a/Source/client/entry.c b/Source/client/entry.c index b0eca3d1..a6f7c38c 100644 --- a/Source/client/entry.c +++ b/Source/client/entry.c @@ -39,7 +39,6 @@ void CSQC_Init(float apilevel, string enginename, float engineversion) registercommand("invprev"); registercommand("+showscores"); registercommand("-showscores"); - registercommand("wave"); registercommand("buildcubemaps"); precache_model("sprites/640_pain.spr"); @@ -438,9 +437,6 @@ void CSQC_Parse_Event(void) float fHeader = readbyte(); switch (fHeader) { - case EV_CORPSE: - Corpse_Parse(); - break; case EV_SPEAK: string msg; float pit; @@ -449,11 +445,6 @@ void CSQC_Parse_Event(void) pit = readfloat(); sound(t, CHAN_VOICE, msg, 1.0, ATTN_NORM, pit); break; - case EV_TAUNT: -#ifdef VALVE - Animation_Q2PlayerTaunt(); -#endif - break; case EV_FADE: Fade_Parse(); break; @@ -561,12 +552,6 @@ float CSQC_ConsoleCommand(string sCMD) tokenize(sCMD); switch (argv(0)) { - case "wave": - float numt = stof(argv(1)); - if (numt >= 0 && numt <= 4) { - sendevent("Taunt", "f", numt); - } - break; case "+zoomin": pSeat->iZoomed = TRUE; break; diff --git a/Source/client/player.c b/Source/client/player.c index f644447a..f53cb507 100644 --- a/Source/client/player.c +++ b/Source/client/player.c @@ -51,21 +51,6 @@ string sPModels[CS_WEAPON_COUNT - 1] = { void player::gun_offset(void) { vector v1, v2; -#ifdef VALVE - if (playertype == PLAYERTYPE_Q2) { - p_model.scale = 1.4; - if (flags & FL_CROUCHING) { - setorigin(p_model, origin + [0,0, 16]); - } else { - setorigin(p_model, origin + [0,0, -2]); - } - p_model.angles = this.angles; - p_model.frame = frame; - p_model.frame2 = frame2; - p_model.lerpfrac = lerpfrac; - return; - } -#endif /* Set it to something consistent */ this.p_model.angles = this.angles; @@ -103,39 +88,7 @@ void player::draw(void) this.subblendfrac = this.subblend2frac = this.pitch / 90; -#warning "FIXME: This ifdef needs to go in the future" -#ifdef VALVE - if (playertype == PLAYERTYPE_HL) { - /* Only bother updating the model if the weapon has changed */ - if (this.lastweapon != this.activeweapon) { - if (this.activeweapon) { - #ifdef CSTRIKE - setmodel(this.p_model, sPModels[this.activeweapon - 1]); - #else - setmodel(this. p_model, Weapons_GetPlayermodel(this.activeweapon)); - #endif - } else { - setmodel(this.p_model, ""); - } - this.lastweapon = this.activeweapon; - - /* Update the bone index of the current p_ model so we can calculate the offset - * and get the weapon bone ID for the current player model */ - this.p_hand_bone = gettagindex(this, "Bip01 R Hand"); - this.p_model_bone = gettagindex(this.p_model, "Bip01 R Hand"); - } - Animation_PlayerUpdate(); - } else { - if (!this.p_model.modelindex) { - tokenizebyseparator(getplayerkeyvalue(entnum-1, "model"), "/"); - setmodel(this.p_model, sprintf("players/%s/weapon.md2", argv(0))); - } - Animation_Q2PlayerUpdate(); - return; - } -#else Animation_PlayerUpdate(); -#endif /*makevectors([0, this.angles[1], 0]); float fDirection = dotproduct(this.velocity, v_forward); @@ -225,18 +178,6 @@ float player::predraw(void) draw(); gun_offset(); -#ifdef VALVE - /* Size of appearance and bounding box is different from game to game */ - if (playertype == PLAYERTYPE_Q2) { - scale = 1.4; - if (flags & FL_CROUCHING) { - setorigin(this, this.origin + [0,0, 16]); - } else { - setorigin(this, this.origin + [0,0, -2]); - } - } -#endif - if (autocvar_cl_thirdperson == TRUE || this.entnum != player_localentnum) { Voice_Draw3D(this); addentity(this); @@ -250,56 +191,4 @@ float player::predraw(void) void player::postdraw(void) { -#ifdef VALVE - /* Correct offsets */ - if (playertype == PLAYERTYPE_Q2) { - if (flags & FL_CROUCHING) { - setorigin(this, this.origin - [0,0, 16]); - } else { - setorigin(this, this.origin - [0,0, -2]); - } - scale = 1.0; - } -#endif -} - -void player::set_model(string mpath) -{ -#ifdef VALVE - string modelout; - string skinpath = ""; - string skinout = ""; - int i; - - i = tokenizebyseparator(mpath, "/"); - if (i == 1) { - playertype = PLAYERTYPE_HL; - modelout = sprintf("models/player/%s/%s.mdl", argv(0), argv(0)); - } else { - playertype = PLAYERTYPE_Q2; - modelout = sprintf("players/%s/tris.md2", argv(0)); - skinout = sprintf("players/%s/%s.pcx", argv(0), argv(1)); - skinpath = sprintf("players/%s/%s.skin", argv(0), argv(1)); - - /* If the skin doesn't exist, make sure we fail */ - if (whichpack(skinout)) { - } else { - print( sprintf( "Skin %s does not exist.\n", skinout ) ); - skinpath = __NULL__; - skinout = __NULL__; - modelout = __NULL__; - } - } - - if (modelout && whichpack(modelout)) { - setmodel(this, modelout); - if (playertype == PLAYERTYPE_Q2) { - setcustomskin(this, skinpath, sprintf("replace \"\" \"%s\"", skinout)); - } - } else { - modelout = "models/player.mdl"; - setmodel(this, modelout); - playertype = PLAYERTYPE_HL; - } -#endif } diff --git a/Source/client/predict.c b/Source/client/predict.c index 7c94f67a..12b08d4e 100644 --- a/Source/client/predict.c +++ b/Source/client/predict.c @@ -29,6 +29,7 @@ void Predict_PreFrame(player pl) pl.net_ammo1 = pl.a_ammo1; pl.net_ammo2 = pl.a_ammo2; pl.net_ammo3 = pl.a_ammo3; + pl.net_weapontime = pSeat->eViewModel.frame1time; #endif //self.netpmove_flags = self.pmove_flags; @@ -77,6 +78,8 @@ void Predict_PostFrame(player pl) pl.a_ammo1 = pl.net_ammo1; pl.a_ammo2 = pl.net_ammo2; pl.a_ammo3 = pl.net_ammo3; + pSeat->eViewModel.frame1time = pl.net_weapontime; + pSeat->eViewModel.frame2time = pl.net_weapontime; #endif //self.pmove_flags = self.netpmove_flags; diff --git a/Source/client/rewolf.src b/Source/client/rewolf.src index 050641cf..f91a3164 100755 --- a/Source/client/rewolf.src +++ b/Source/client/rewolf.src @@ -69,7 +69,6 @@ valve/view.c view.c damage.c chat.c -corpse.c vgui.cpp rewolf/hud.c diff --git a/Source/client/scihunt.src b/Source/client/scihunt.src index 81767043..9bd2a88e 100644 --- a/Source/client/scihunt.src +++ b/Source/client/scihunt.src @@ -70,7 +70,6 @@ valve/view.c view.c damage.c chat.c -corpse.c vgui.cpp valve/hud.c diff --git a/Source/client/valve.src b/Source/client/valve.src index 8d743755..5df63c6e 100755 --- a/Source/client/valve.src +++ b/Source/client/valve.src @@ -66,7 +66,6 @@ valve/view.c view.c damage.c chat.c -corpse.c vgui.cpp valve/hud.c diff --git a/Source/client/valve/player.c b/Source/client/valve/player.c index a21d1b0a..0cc4a998 100644 --- a/Source/client/valve/player.c +++ b/Source/client/valve/player.c @@ -16,10 +16,9 @@ void Player_ReadEntity(float flIsNew) pl.drawmask = MASK_ENGINE; pl.customphysics = Empty; setsize( pl, VEC_HULL_MIN, VEC_HULL_MAX ); - pl.set_model(getplayerkeyvalue(pl.entnum - 1, "model")); } - readshort(); + pl.modelindex = readshort(); pl.origin[0] = readcoord(); pl.origin[1] = readcoord(); pl.origin[2] = readcoord(); @@ -31,6 +30,7 @@ void Player_ReadEntity(float flIsNew) pl.velocity[2] = readcoord(); pl.flags = readfloat(); pl.activeweapon = readbyte(); + pl.weapontime = readfloat(); pl.g_items = readfloat(); pl.health = readbyte(); pl.armor = readbyte(); @@ -40,13 +40,8 @@ void Player_ReadEntity(float flIsNew) pl.jumptime = readfloat(); pl.teleport_time = readfloat(); - if (pl.playertype == 0) { - pl.baseframe = readbyte(); - pl.frame = readbyte(); - } else { - readbyte(); - readbyte(); - } + pl.baseframe = readbyte(); + pl.frame = readbyte(); pl.a_ammo1 = readbyte(); pl.a_ammo2 = readbyte(); diff --git a/Source/client/view.c b/Source/client/view.c index ee78fe66..5f0ec2b1 100644 --- a/Source/client/view.c +++ b/Source/client/view.c @@ -191,9 +191,9 @@ void View_DrawViewModel(void) View_CalcBob(); View_UpdateWeapon(eViewModel, eMuzzleflash); float fBaseTime = eViewModel.frame1time; - eViewModel.frame1time += clframetime; - eViewModel.frame2time += clframetime; - processmodelevents(eViewModel.modelindex, eViewModel.frame, fBaseTime, eViewModel.frame1time, Event_ProcessModel); + eViewModel.frame2time = pl.weapontime; + eViewModel.frame1time = pl.weapontime; + //processmodelevents(eViewModel.modelindex, eViewModel.frame, fBaseTime, eViewModel.frame1time, Event_ProcessModel); } makevectors(view_angles); diff --git a/Source/events.h b/Source/events.h index 219f5cce..938ccdf2 100644 --- a/Source/events.h +++ b/Source/events.h @@ -26,8 +26,6 @@ enum { EV_CAMERATRIGGER, EV_ORBITUARY, EV_SPEAK, - EV_TAUNT, - EV_CORPSE, EV_CHAT, EV_CHAT_TEAM, EV_CHAT_VOX, diff --git a/Source/gs-entbase/server/monstermaker.cpp b/Source/gs-entbase/server/monstermaker.cpp new file mode 100644 index 00000000..e4710b5b --- /dev/null +++ b/Source/gs-entbase/server/monstermaker.cpp @@ -0,0 +1,36 @@ +/*** +* +* Copyright (c) 2016-2019 Marco 'eukara' Hladik. All rights reserved. +* +* See the file LICENSE attached with the sources for usage details. +* +****/ + +#ifdef VALVE +void() w_snark_deploy; +#endif + +class monstermaker : CBaseTrigger +{ + void() monstermaker; + virtual void() Trigger; +}; + +void monstermaker :: Trigger ( void ) +{ +#ifdef VALVE + w_snark_deploy(); +#endif +} + +void monstermaker :: monstermaker ( void ) +{ + CBaseTrigger::CBaseTrigger(); + + for ( int i = 1; i < ( tokenize( __fullspawndata ) - 1 ); i += 2 ) { + switch ( argv( i ) ) { + default: + break; + } + } +} diff --git a/Source/math.h b/Source/math.h index db8d40a2..c2c14370 100755 --- a/Source/math.h +++ b/Source/math.h @@ -99,6 +99,7 @@ void QPhysics_Run ( entity eTarget ) if ( ( self.flags & FL_ONGROUND ) && self.movetype == MOVETYPE_WALK && ( flFallVel > 580 )) { float fFallDamage = ( flFallVel - 580 ) * ( 100 / ( 1024 - 580 ) ); Damage_Apply( self, world, fFallDamage, self.origin, FALSE ); + sound(self, CHAN_AUTO, "player/pl_fallpain3.wav", 1.0, ATTN_NORM); } #endif diff --git a/Source/server/client.c b/Source/server/client.c index 1d87563d..15156d29 100644 --- a/Source/server/client.c +++ b/Source/server/client.c @@ -20,24 +20,3 @@ void Client_TriggerCamera(entity target, vector pos, vector end, float wait) msg_entity = target; multicast([0,0,0], MULTICAST_ONE); } - -void CSEv_Taunt_f(float num) -{ - WriteByte(MSG_MULTICAST, SVC_CGAMEPACKET); - WriteByte(MSG_MULTICAST, EV_TAUNT); - WriteEntity(MSG_MULTICAST, self); - WriteByte(MSG_MULTICAST, num); - msg_entity = self; - multicast(self.origin, MULTICAST_PVS); - -#ifdef SCIHUNT - for (entity b = world; (b = find(b, ::classname, "monster_scientist"));) { - if (vlen(b.origin - self.origin) < 256) { - monster_scientist sci = (monster_scientist)b; - sci.m_iFlags |= SCIF_FEAR | SCIF_SEEN; - sci.m_eUser = world; - sci.m_eRescuer = world; - } - } -#endif -} \ No newline at end of file diff --git a/Source/server/cstrike.src b/Source/server/cstrike.src index 17aa23ce..f86f7469 100755 --- a/Source/server/cstrike.src +++ b/Source/server/cstrike.src @@ -1,89 +1,89 @@ -#pragma target fte -#pragma progs_dat "../../cstrike/data.pk3dir/progs.dat" - -#define QWSSQC -#define CSTRIKE - -#includelist -../builtins.h -../defs.h -cstrike/defs.h -../shared/cstrike/defs.h -../math.h -../materials.h -../events.h -../entities.h -defs.h -cstrike/defsfields.h +#pragma target fte +#pragma progs_dat "../../cstrike/data.pk3dir/progs.dat" + +#define QWSSQC +#define CSTRIKE + +#includelist +../builtins.h +../defs.h +cstrike/defs.h +../shared/cstrike/defs.h +../math.h +../materials.h +../events.h +../entities.h +defs.h +cstrike/defsfields.h plugins.c - -../gs-entbase/server.src - -cstrike/money.c -../shared/cstrike/animations.c -../shared/cstrike/radio.c -../shared/cstrike/weaponak47.c -../shared/cstrike/weaponaug.c -../shared/cstrike/weaponawp.c -../shared/cstrike/weaponc4bomb.c -../shared/cstrike/weapondeagle.c -../shared/cstrike/weaponelites.c -../shared/cstrike/weaponfiveseven.c -../shared/cstrike/weaponflashbang.c -../shared/cstrike/weapong3sg1.c -../shared/cstrike/weaponglock18.c -../shared/cstrike/weaponhegrenade.c -../shared/cstrike/weaponknife.c -../shared/cstrike/weaponm3.c -../shared/cstrike/weaponm4a1.c -../shared/cstrike/weaponmac10.c -../shared/cstrike/weaponmp5.c -../shared/cstrike/weaponp228.c -../shared/cstrike/weaponp90.c -../shared/cstrike/weaponpara.c -../shared/cstrike/weaponscout.c -../shared/cstrike/weaponsg550.c -../shared/cstrike/weaponsg552.c -../shared/cstrike/weaponsmokegrenade.c -../shared/cstrike/weapontmp.c -../shared/cstrike/weaponump45.c -../shared/cstrike/weaponusp45.c -../shared/cstrike/weaponxm1014.c -../shared/cstrike/basegun.c -../shared/cstrike/basemelee.c -../shared/cstrike/weapons.c -../shared/cstrike/equipment.c -../shared/decals.c -../shared/effects.c -../shared/spraylogo.cpp -../shared/pmove.c - -cstrike/armoury_entity.cpp -cstrike/hostage_entity.cpp -cstrike/func_hostage_rescue.cpp -cstrike/info_hostage_rescue.cpp -cstrike/func_vip_safetyzone.cpp -cstrike/info_map_parameters.cpp - -vox.c -cstrike/ammo.c -cstrike/damage.c -traceattack.c -cstrike/rules.c -cstrike/timer.c - -cstrike/func_bomb_target.cpp -cstrike/func_buyzone.cpp -cstrike/func_escapezone.cpp -cstrike/main.c -cstrike/player.c -cstrike/spawn.c -footsteps.c -flashlight.c -cstrike/input.c -cstrike/client.c -client.c - -entry.c -#endlist + +../gs-entbase/server.src + +cstrike/money.c +../shared/cstrike/animations.c +../shared/cstrike/radio.c +../shared/cstrike/weaponak47.c +../shared/cstrike/weaponaug.c +../shared/cstrike/weaponawp.c +../shared/cstrike/weaponc4bomb.c +../shared/cstrike/weapondeagle.c +../shared/cstrike/weaponelites.c +../shared/cstrike/weaponfiveseven.c +../shared/cstrike/weaponflashbang.c +../shared/cstrike/weapong3sg1.c +../shared/cstrike/weaponglock18.c +../shared/cstrike/weaponhegrenade.c +../shared/cstrike/weaponknife.c +../shared/cstrike/weaponm3.c +../shared/cstrike/weaponm4a1.c +../shared/cstrike/weaponmac10.c +../shared/cstrike/weaponmp5.c +../shared/cstrike/weaponp228.c +../shared/cstrike/weaponp90.c +../shared/cstrike/weaponpara.c +../shared/cstrike/weaponscout.c +../shared/cstrike/weaponsg550.c +../shared/cstrike/weaponsg552.c +../shared/cstrike/weaponsmokegrenade.c +../shared/cstrike/weapontmp.c +../shared/cstrike/weaponump45.c +../shared/cstrike/weaponusp45.c +../shared/cstrike/weaponxm1014.c +../shared/cstrike/basegun.c +../shared/cstrike/basemelee.c +../shared/cstrike/weapons.c +../shared/cstrike/equipment.c +../shared/decals.c +../shared/effects.c +../shared/spraylogo.cpp +../shared/pmove.c + +cstrike/armoury_entity.cpp +cstrike/hostage_entity.cpp +cstrike/func_hostage_rescue.cpp +cstrike/info_hostage_rescue.cpp +cstrike/func_vip_safetyzone.cpp +cstrike/info_map_parameters.cpp + +vox.c +cstrike/ammo.c +cstrike/damage.c +traceattack.c +cstrike/rules.c +cstrike/timer.c + +cstrike/func_bomb_target.cpp +cstrike/func_buyzone.cpp +cstrike/func_escapezone.cpp +cstrike/main.c +cstrike/player.c +cstrike/spawn.c +footsteps.c +flashlight.c +cstrike/input.c +cstrike/client.c +client.c + +entry.c +#endlist diff --git a/Source/server/entry.c b/Source/server/entry.c index 56e482ec..975cf060 100644 --- a/Source/server/entry.c +++ b/Source/server/entry.c @@ -171,7 +171,7 @@ void initents(void) precache_sound("player/pl_step2.wav"); precache_sound("player/pl_step3.wav"); precache_sound("player/pl_step4.wav"); - + precache_sound("player/pl_fallpain3.wav"); precache_sound("items/9mmclip1.wav"); precache_sound("items/gunpickup2.wav"); precache_sound("common/wpn_select.wav"); diff --git a/Source/server/rewolf.src b/Source/server/rewolf.src index 0afe9463..baede380 100755 --- a/Source/server/rewolf.src +++ b/Source/server/rewolf.src @@ -1,82 +1,85 @@ -#pragma target fte -#pragma progs_dat "../../rewolf/data.pk3dir/progs.dat" - -#define QWSSQC -#define VALVE - -#includelist -../builtins.h -../defs.h -valve/defs.h -../math.h -../materials.h -../events.h -../entities.h +#pragma target fte +#pragma progs_dat "../../rewolf/data.pk3dir/progs.dat" + +#define QWSSQC +#define VALVE + +#includelist +../builtins.h +../defs.h +valve/defs.h +../math.h +../materials.h +../events.h +../entities.h ../shared/valve/animations.h -defs.h +defs.h plugins.c - -../gs-entbase/server.src -valve/monster_rat.cpp -valve/monster_scientist_dead.cpp -rewolf/gunman_cycler.cpp -rewolf/monster_human_bandit.cpp -rewolf/monster_human_chopper.cpp -rewolf/monster_human_demoman.cpp -rewolf/monster_human_gunman.cpp -rewolf/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/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 -valve/item_longjump.cpp -valve/item_suit.cpp -valve/item_healthkit.cpp -valve/ammo.cpp -../shared/valve/weapons.c -../shared/valve/weapon_common.c - -spawn.c -vox.c - -../shared/valve/animations.c -valve/client.c -client.c - -valve/server.c -server.c - -valve/damage.c -traceattack.c - -footsteps.c -flashlight.c -valve/input.c - -valve/spawn.c -entry.c -#endlist + +../gs-entbase/server.src +valve/monster_rat.cpp +valve/monster_scientist_dead.cpp +rewolf/gunman_cycler.cpp +rewolf/monster_human_bandit.cpp +rewolf/monster_human_chopper.cpp +rewolf/monster_human_demoman.cpp +rewolf/monster_human_gunman.cpp +rewolf/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/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 +valve/item_longjump.cpp +valve/item_suit.cpp +valve/item_healthkit.cpp +valve/item_battery.cpp +valve/item_weaponbox.cpp +valve/world_items.cpp +valve/ammo.cpp +../shared/valve/weapons.c +../shared/valve/weapon_common.c + +spawn.c +vox.c + +../shared/valve/animations.c +valve/client.c +client.c + +valve/server.c +server.c + +valve/damage.c +traceattack.c + +footsteps.c +flashlight.c +valve/input.c + +valve/spawn.c +entry.c +#endlist diff --git a/Source/server/scihunt.src b/Source/server/scihunt.src index cb7b729b..7dbf5cfd 100755 --- a/Source/server/scihunt.src +++ b/Source/server/scihunt.src @@ -1,82 +1,85 @@ -#pragma target fte -#pragma progs_dat "../../scihunt/data.pk3dir/progs.dat" - -#define QWSSQC -#define VALVE +#pragma target fte +#pragma progs_dat "../../scihunt/data.pk3dir/progs.dat" + +#define QWSSQC +#define VALVE #define SCIHUNT - -#includelist -../builtins.h -../defs.h -valve/defs.h -../math.h -../materials.h -../events.h -../entities.h + +#includelist +../builtins.h +../defs.h +valve/defs.h +../math.h +../materials.h +../events.h +../entities.h ../shared/valve/animations.h -defs.h +defs.h plugins.c - -../gs-entbase/server.src -valve/monster_rat.cpp -scihunt/monster_scientist.cpp -valve/monster_scientist_dead.cpp - -../shared/decals.c -../shared/effects.c -../shared/spraylogo.cpp - -../shared/scihunt/player.cpp -valve/player.c -../shared/pmove.c -valve/spectator.c -../shared/scihunt/items.h -../shared/valve/crosshair.h -../shared/scihunt/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 -../shared/scihunt/w_cannon.c -../shared/scihunt/w_chainsaw.c -../shared/scihunt/w_hammer.c -valve/items.cpp -valve/ammo.cpp -valve/item_longjump.cpp -valve/item_suit.cpp -valve/item_healthkit.cpp -../shared/scihunt/weapons.c -../shared/valve/weapon_common.c - -scihunt/shdata_parse.c -spawn.c -vox.c - -../shared/valve/animations.c -scihunt/client.c -client.c - -scihunt/server.c -server.c - -valve/damage.c -traceattack.c - -footsteps.c -flashlight.c -scihunt/input.c - -valve/spawn.c -entry.c -#endlist + +../gs-entbase/server.src +valve/monster_rat.cpp +scihunt/monster_scientist.cpp +valve/monster_scientist_dead.cpp + +../shared/decals.c +../shared/effects.c +../shared/spraylogo.cpp + +../shared/scihunt/player.cpp +valve/player.c +../shared/pmove.c +valve/spectator.c +../shared/scihunt/items.h +../shared/valve/crosshair.h +../shared/scihunt/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 +../shared/scihunt/w_cannon.c +../shared/scihunt/w_chainsaw.c +../shared/scihunt/w_hammer.c +valve/items.cpp +valve/item_longjump.cpp +valve/item_suit.cpp +valve/item_healthkit.cpp +valve/item_battery.cpp +valve/item_weaponbox.cpp +valve/world_items.cpp +valve/ammo.cpp +../shared/scihunt/weapons.c +../shared/valve/weapon_common.c + +scihunt/shdata_parse.c +spawn.c +vox.c + +../shared/valve/animations.c +scihunt/client.c +client.c + +scihunt/server.c +server.c + +valve/damage.c +traceattack.c + +footsteps.c +flashlight.c +scihunt/input.c + +valve/spawn.c +entry.c +#endlist diff --git a/Source/server/scihunt/client.c b/Source/server/scihunt/client.c index 395b216a..c5703f09 100644 --- a/Source/server/scihunt/client.c +++ b/Source/server/scihunt/client.c @@ -93,7 +93,17 @@ void Game_PutClientInServer(void) pl.movetype = MOVETYPE_WALK; pl.flags = FL_CLIENT; pl.viewzoom = 1.0; - setmodel(pl, "models/player.mdl"); + 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]; diff --git a/Source/server/scihunt/monster_scientist.cpp b/Source/server/scihunt/monster_scientist.cpp index 0cfb5b89..73e81233 100644 --- a/Source/server/scihunt/monster_scientist.cpp +++ b/Source/server/scihunt/monster_scientist.cpp @@ -439,7 +439,6 @@ void monster_scientist::Physics(void) input_angles = angles = v_angle; input_timelength = frametime; - movetype = MOVETYPE_WALK; if (m_flPainTime > time) { input_movevalues = [0,0,0]; @@ -466,8 +465,6 @@ void monster_scientist::Physics(void) } else { m_iFlags -= (flags & SCIF_FALLING); } - - movetype = MOVETYPE_NONE; } void monster_scientist::touch(void) @@ -545,6 +542,7 @@ void monster_scientist::vDeath(int iHitBody) return; } + movetype = MOVETYPE_NONE; solid = SOLID_CORPSE; //takedamage = DAMAGE_NO; @@ -572,7 +570,7 @@ void monster_scientist::Respawn(void) setorigin(this, m_oldOrigin); angles = v_angle; solid = SOLID_SLIDEBOX; - movetype = MOVETYPE_NONE; + movetype = MOVETYPE_WALK; setmodel(this, m_oldModel); setsize(this, VEC_HULL_MIN + [0,0,36], VEC_HULL_MAX + [0,0,36]); m_eUser = world; diff --git a/Source/server/valve.src b/Source/server/valve.src index 8b77cf72..8fd6622a 100755 --- a/Source/server/valve.src +++ b/Source/server/valve.src @@ -1,79 +1,80 @@ -#pragma target fte -#pragma progs_dat "../../valve/data.pk3dir/progs.dat" - -#define QWSSQC -#define VALVE - -#includelist -../builtins.h -../defs.h -valve/defs.h -../math.h -../materials.h -../events.h -../entities.h +#pragma target fte +#pragma progs_dat "../../valve/data.pk3dir/progs.dat" + +#define QWSSQC +#define VALVE + +#includelist +../builtins.h +../defs.h +valve/defs.h +../math.h +../materials.h +../events.h +../entities.h ../shared/valve/animations.h -defs.h +defs.h plugins.c - -../gs-entbase/server.src -valve/monster_rat.cpp -valve/monster_scientist.cpp -valve/monster_scientist_dead.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 -valve/item_longjump.cpp -valve/item_suit.cpp -valve/item_healthkit.cpp -valve/item_battery.cpp -valve/world_items.cpp -valve/ammo.cpp -../shared/valve/weapons.c -../shared/valve/weapon_common.c - -spawn.c -vox.c - -../shared/valve/animations.c -valve/client.c -client.c - -valve/server.c -server.c - -valve/damage.c -traceattack.c - -footsteps.c -flashlight.c -valve/input.c - -valve/spawn.c -entry.c -#endlist + +../gs-entbase/server.src +valve/monster_rat.cpp +valve/monster_scientist.cpp +valve/monster_scientist_dead.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 +valve/item_longjump.cpp +valve/item_suit.cpp +valve/item_healthkit.cpp +valve/item_battery.cpp +valve/item_weaponbox.cpp +valve/world_items.cpp +valve/ammo.cpp +../shared/valve/weapons.c +../shared/valve/weapon_common.c + +spawn.c +vox.c + +../shared/valve/animations.c +valve/client.c +client.c + +valve/server.c +server.c + +valve/damage.c +traceattack.c + +footsteps.c +flashlight.c +valve/input.c + +valve/spawn.c +entry.c +#endlist diff --git a/Source/server/valve/damage.c b/Source/server/valve/damage.c index 8983254f..9ee1a47c 100644 --- a/Source/server/valve/damage.c +++ b/Source/server/valve/damage.c @@ -170,8 +170,11 @@ void Damage_Radius(vector org, entity eAttacker, float fDamage, float fRadius, i if (fDiff > 0) { Damage_Apply(c, eAttacker, fDamage, vecRealPos, 0); + if (c.movetype == MOVETYPE_WALK) { + makevectors(vectoangles(c.origin - org)); + c.velocity += v_forward * (fDamage * 5); + } } - } } } diff --git a/Source/server/valve/item_weaponbox.cpp b/Source/server/valve/item_weaponbox.cpp new file mode 100644 index 00000000..2a290bcc --- /dev/null +++ b/Source/server/valve/item_weaponbox.cpp @@ -0,0 +1,76 @@ +class item_weaponbox +{ + int ammo_9mm; + int ammo_357; + int ammo_buckshot; + int ammo_m203_grenade; + int ammo_bolt; + int ammo_rocket; + int ammo_uranium; + int ammo_handgrenade; + int ammo_satchel; + int ammo_tripmine; + int ammo_snark; + int ammo_hornet; + int weapon_items; + + void(void) item_weaponbox; + virtual void() touch; + virtual void(player) setup; +}; + +void item_weaponbox::touch(void) +{ + if (other.classname != "player") { + return; + } + + player pl = (player)other; + pl.ammo_9mm += ammo_9mm; + pl.ammo_357 += ammo_357; + pl.ammo_buckshot += ammo_buckshot; + pl.ammo_m203_grenade += ammo_m203_grenade; + pl.ammo_bolt += ammo_bolt; + pl.ammo_rocket += ammo_rocket; + pl.ammo_uranium += ammo_uranium; + pl.ammo_handgrenade += ammo_handgrenade; + pl.ammo_satchel += ammo_satchel; + pl.ammo_tripmine += ammo_tripmine; + pl.ammo_snark += ammo_snark; + pl.ammo_hornet += ammo_hornet; + pl.g_items |= weapon_items; + remove(this); +} + +void item_weaponbox::setup(player pl) +{ + /* TODO: Should the magazine bits be transferred too? */ + ammo_9mm = pl.ammo_9mm; + ammo_357 = pl.ammo_357; + ammo_buckshot = pl.ammo_buckshot; + ammo_m203_grenade = pl.ammo_m203_grenade; + ammo_bolt = pl.ammo_bolt; + ammo_rocket = pl.ammo_rocket; + ammo_uranium = pl.ammo_uranium; + ammo_handgrenade = pl.ammo_handgrenade; + ammo_satchel = pl.ammo_satchel; + ammo_tripmine = pl.ammo_tripmine; + ammo_snark = pl.ammo_snark; + ammo_hornet = pl.ammo_hornet; + weapon_items = pl.g_items; +} + +void item_weaponbox::item_weaponbox(void) +{ + setmodel(this, "models/w_weaponbox.mdl"); + setsize(this, [-16,-16,0], [16,16,16]); + solid = SOLID_TRIGGER; + movetype = MOVETYPE_TOSS; +} + +void weaponbox_spawn(player spawner) +{ + item_weaponbox weaponbox = spawn(item_weaponbox); + setorigin(weaponbox, spawner.origin); + weaponbox.setup(spawner); +} diff --git a/Source/server/valve/player.c b/Source/server/valve/player.c index 1e3c4d90..3d47b1a8 100644 --- a/Source/server/valve/player.c +++ b/Source/server/valve/player.c @@ -11,9 +11,11 @@ void Player_Pain(int hit) } +void weaponbox_spawn(player); void Player_Death(int hit) { player pl = (player)self; + weaponbox_spawn(pl); pl.movetype = MOVETYPE_NONE; pl.solid = SOLID_NOT; pl.takedamage = DAMAGE_NO; @@ -24,17 +26,16 @@ void Player_Death(int hit) sound(pl, CHAN_AUTO, "fvox/flatline.wav", 1.0, ATTN_NORM); /* Let's handle corpses on the clientside */ - WriteByte(MSG_MULTICAST, SVC_CGAMEPACKET); - WriteByte(MSG_MULTICAST, EV_CORPSE); - WriteByte(MSG_MULTICAST, num_for_edict(pl) - 1); - WriteCoord(MSG_MULTICAST, pl.origin[0]); - WriteCoord(MSG_MULTICAST, pl.origin[1]); - WriteCoord(MSG_MULTICAST, pl.origin[2]); - WriteCoord(MSG_MULTICAST, pl.angles[0]); - WriteCoord(MSG_MULTICAST, pl.angles[1]); - WriteCoord(MSG_MULTICAST, pl.angles[2]); - msg_entity = pl; - multicast(pl.origin, MULTICAST_PVS); + entity corpse = spawn(); + setorigin(corpse, pl.origin + [0,0,32]); + setmodel(corpse, pl.model); + setsize(corpse, VEC_HULL_MIN, VEC_HULL_MAX); + corpse.movetype = MOVETYPE_TOSS; + corpse.solid = SOLID_TRIGGER; + corpse.modelindex = pl.modelindex; + corpse.frame = ANIM_DIESIMPLE; + corpse.angles = pl.angles; + corpse.velocity = pl.velocity; } /* @@ -121,6 +122,7 @@ float Player_SendEntity(entity ePEnt, float fChanged) WriteCoord(MSG_ENTITY, pl.velocity[2]); WriteFloat(MSG_ENTITY, pl.flags); WriteByte(MSG_ENTITY, pl.activeweapon); + WriteFloat(MSG_ENTITY, pl.weapontime); WriteFloat(MSG_ENTITY, pl.g_items); WriteByte(MSG_ENTITY, pl.health); WriteByte(MSG_ENTITY, pl.armor); diff --git a/Source/shared/pmove.c b/Source/shared/pmove.c index 92b99c2a..2126bbd6 100644 --- a/Source/shared/pmove.c +++ b/Source/shared/pmove.c @@ -720,9 +720,10 @@ void PMove_Run(void) #ifdef VALVE player pl = (player)self; + pl.w_attack_next -= input_timelength; pl.w_idle_next -= input_timelength; - + pl.weapontime += input_timelength; if (pl.w_attack_next <= 0) { pl.w_attack_next = 0; } diff --git a/Source/shared/scihunt/player.cpp b/Source/shared/scihunt/player.cpp index 4c92dfe2..f94e119f 100644 --- a/Source/shared/scihunt/player.cpp +++ b/Source/shared/scihunt/player.cpp @@ -23,6 +23,7 @@ class player float activeweapon; float viewzoom; vector view_ofs; + float weapontime; /* Weapon specific */ int glock_mag; @@ -49,12 +50,12 @@ class player float netflags; float net_w_attack_next; float net_w_idle_next; + float net_weapontime; float netjumptime; float netteleport_time; int net_ammo1; int net_ammo2; int net_ammo3; - virtual void(string) set_model; virtual void() gun_offset; virtual void() draw; virtual float() predraw; diff --git a/Source/shared/scihunt/w_cannon.c b/Source/shared/scihunt/w_cannon.c index 75dc0a4a..aabe3c60 100644 --- a/Source/shared/scihunt/w_cannon.c +++ b/Source/shared/scihunt/w_cannon.c @@ -54,8 +54,6 @@ void w_cannon_reload(void) if (!pl.a_ammo2) { return; } - - Weapons_ViewAnimation(CANNON_RELOAD); #else if (pl.cannon_mag >= 2) { return; @@ -66,8 +64,8 @@ void w_cannon_reload(void) Weapons_ReloadWeapon(pl, player::cannon_mag, player::ammo_buckshot, 2); Weapons_UpdateAmmo(pl, pl.cannon_mag, pl.ammo_buckshot, __NULL__); - #endif + Weapons_ViewAnimation(CANNON_RELOAD); pl.w_attack_next = 3.0f; pl.w_idle_next = 3.0f; @@ -85,16 +83,14 @@ void w_cannon_draw(void) { #ifdef SSQC player pl = (player)self; - Weapons_ViewAnimation(CANNON_DEPLOY); Weapons_UpdateAmmo(pl, pl.cannon_mag, pl.ammo_buckshot, __NULL__); #endif + Weapons_ViewAnimation(CANNON_DEPLOY); } void w_cannon_holster(void) { -#ifdef SSQC Weapons_ViewAnimation(CANNON_PUTAWAY); -#endif } void w_cannon_primary(void) { @@ -110,7 +106,6 @@ void w_cannon_primary(void) return; } - Weapons_ViewAnimation(CANNON_FIREBOTH); Weapons_ViewPunchAngle([-5,0,0]); #else if (pl.cannon_mag != 2) { @@ -123,7 +118,7 @@ void w_cannon_primary(void) Weapons_PlaySound(pl, CHAN_WEAPON, "cannon/fire.wav", 1, ATTN_NORM); Weapons_UpdateAmmo(pl, pl.cannon_mag, pl.ammo_buckshot, __NULL__); #endif - + Weapons_ViewAnimation(CANNON_FIREBOTH); pl.w_attack_next = 1.5f; pl.w_idle_next = 2.5f; } @@ -141,12 +136,6 @@ void w_cannon_secondary(void) return; } - if (pl.a_ammo1 == 2) { - Weapons_ViewAnimation(CANNON_FIRELEFT); - } else { - Weapons_ViewAnimation(CANNON_FIRERIGHT); - } - Weapons_ViewPunchAngle([-5,0,0]); #else if (!pl.cannon_mag) { @@ -160,6 +149,12 @@ void w_cannon_secondary(void) Weapons_UpdateAmmo(pl, pl.cannon_mag, pl.ammo_buckshot, __NULL__); #endif + if (pl.a_ammo1 == 2) { + Weapons_ViewAnimation(CANNON_FIRELEFT); + } else { + Weapons_ViewAnimation(CANNON_FIRERIGHT); + } + pl.w_attack_next = 1.5f; pl.w_idle_next = 2.5f; } diff --git a/Source/shared/scihunt/w_chainsaw.c b/Source/shared/scihunt/w_chainsaw.c index 0e415124..0509637f 100644 --- a/Source/shared/scihunt/w_chainsaw.c +++ b/Source/shared/scihunt/w_chainsaw.c @@ -44,19 +44,16 @@ string w_chainsaw_deathmsg(void) void w_chainsaw_draw(void) { -#ifdef CSQC - Weapons_ViewAnimation(CHAINSAW_DEPLOY); -#else +#ifdef SSQC player pl = (player)self; Weapons_UpdateAmmo(pl, __NULL__, __NULL__, __NULL__); #endif + Weapons_ViewAnimation(CHAINSAW_DEPLOY); } void w_chainsaw_holster(void) { -#ifdef CSQC Weapons_ViewAnimation(CHAINSAW_HOLSTER); -#endif } void w_chainsaw_primary(void) { @@ -67,13 +64,7 @@ void w_chainsaw_primary(void) } pl.a_ammo3 = 1; -#ifdef CSQC - if (pSeat->eViewModel.frame == CHAINSAW_STARTFIRE || pSeat->eViewModel.frame == CHAINSAW_CONTINUEFIRE) { - Weapons_ViewAnimation(CHAINSAW_CONTINUEFIRE); - } else { - Weapons_ViewAnimation(CHAINSAW_STARTFIRE); - } -#else +#ifdef SSQC Weapons_MakeVectors(); vector src = pl.origin + pl.view_ofs; traceline(src, src + (v_forward * 32), FALSE, pl); @@ -125,7 +116,6 @@ void w_chainsaw_release(void) pl.w_idle_next = 10.0f; } -#ifdef CSQC int r = floor(random(0,2)); switch (r) { case 0: @@ -135,7 +125,6 @@ void w_chainsaw_release(void) Weapons_ViewAnimation(CHAINSAW_IDLE2); break; } -#endif } float w_chainsaw_aimanim(void) diff --git a/Source/shared/scihunt/w_hammer.c b/Source/shared/scihunt/w_hammer.c index c010e461..5154f9f4 100644 --- a/Source/shared/scihunt/w_hammer.c +++ b/Source/shared/scihunt/w_hammer.c @@ -45,9 +45,8 @@ string w_hammer_deathmsg(void) void w_hammer_draw(void) { -#ifdef CSQC Weapons_ViewAnimation(HAMMER_DRAW); -#else +#ifdef SSQC player pl = (player)self; Weapons_UpdateAmmo(pl, __NULL__, __NULL__, __NULL__); #endif @@ -55,52 +54,34 @@ void w_hammer_draw(void) void w_hammer_holster(void) { -#ifdef CSQC Weapons_ViewAnimation(HAMMER_HOLSTER); -#endif } void w_hammer_primary(void) { player pl = (player)self; -#ifdef CSQC - if (!pl.w_attack_next) { - if (pSeat->eViewModel.frame != HAMMER_HOLSTER2) { - Weapons_ViewAnimation(HAMMER_HOLSTER2); - pl.w_attack_next = 0.5f; - } - } -#else if (!pl.w_attack_next) { /* Hack */ if (pl.a_ammo1 != 1) { + Weapons_ViewAnimation(HAMMER_HOLSTER2); pl.a_ammo1 = 1; pl.w_attack_next = 0.5f; } } -#endif pl.w_idle_next = 2.5f; } void w_hammer_secondary(void) { player pl = (player)self; -#ifdef CSQC - if (!pl.w_attack_next) { - if (pSeat->eViewModel.frame != HAMMER_HOLSTER3) { - Weapons_ViewAnimation(HAMMER_HOLSTER3); - pl.w_attack_next = 0.5f; - } - } -#else if (!pl.w_attack_next) { /* Hack */ if (pl.a_ammo1 != 2) { + Weapons_ViewAnimation(HAMMER_HOLSTER3); pl.a_ammo1 = 2; pl.w_attack_next = 0.5f; } } -#endif pl.w_idle_next = 2.5f; } void w_hammer_reload(void) @@ -115,11 +96,10 @@ void w_hammer_release(void) return; } -#ifdef CSQC - if (pSeat->eViewModel.frame == HAMMER_HOLSTER2) { + if (pl.a_ammo1 == 1) { Weapons_ViewAnimation(HAMMER_ATTACK1); pl.w_attack_next = 1.0f; - } else if (pSeat->eViewModel.frame == HAMMER_HOLSTER3) { + } else if (pl.a_ammo1 == 2) { Weapons_ViewAnimation(HAMMER_ATTACK2); pl.w_attack_next = 0.75f; } @@ -142,7 +122,8 @@ void w_hammer_release(void) break; } pl.w_idle_next = 10.0f; -#else + +#ifdef SSQC int hitsound = 0; vector src = pl.origin + pl.view_ofs; makevectors(pl.v_angle); @@ -202,8 +183,8 @@ void w_hammer_release(void) } /* Reset the hack */ - pl.a_ammo1 = 0; #endif + pl.a_ammo1 = 0; } float w_hammer_aimanim(void) diff --git a/Source/shared/spraylogo.cpp b/Source/shared/spraylogo.cpp index 2b58e822..c44b4b32 100644 --- a/Source/shared/spraylogo.cpp +++ b/Source/shared/spraylogo.cpp @@ -99,7 +99,7 @@ float CSpraylogo::predraw(void) getplayerkeyvalue(m_iOwnerID, "name"))); shaderforname(m_strLogoname, - sprintf("{\ncull disable\npolygonOffset\n{\nmap $rt:%s\nblendFunc add\n}\n}", + sprintf("{\ncull disable\npolygonOffset\n{\nmap $rt:%s\n}\n}", m_strLogopath)); } else { makevectors(m_vecAngles); diff --git a/Source/shared/valve/animations.c b/Source/shared/valve/animations.c index e42dc3e0..ccbbadef 100755 --- a/Source/shared/valve/animations.c +++ b/Source/shared/valve/animations.c @@ -14,7 +14,6 @@ #ifdef CSQC .float frame_last; .float baseframe_last; -.float q2frameoverride; #else .float subblendfrac; .float subblend2frac; @@ -28,101 +27,6 @@ void Animation_Print( string sWow ) { #endif } -int Animation_Q2PlayerUpdate_Taunt(void) -{ -#ifdef CSQC - if (!self.q2frameoverride) { - return 0; - } - - /* Interpolation */ - self.lerpfrac -= clframetime * 10; - if (self.lerpfrac < 0.0) { - self.lerpfrac = 0.0f; - } - if (self.frame_time > cltime) { - return 1; - } - - /* Next animationf rame inbound, reset interpolation */ - self.frame2 = self.frame; - self.lerpfrac = 1.0f; - - /* Either advance frame (if we're in framgroup) or start new one */ - if (self.frame >= q2_anims[self.q2frameoverride].start && self.frame < q2_anims[self.q2frameoverride].end) { - self.frame += 1; - } else if (self.frame == q2_anims[self.q2frameoverride].end) { - self.q2frameoverride = 0; - } else { - self.frame = q2_anims[self.q2frameoverride].start; - } - - /* Q2 runs at 10 Hz */ - self.frame_time = cltime + 0.1f; -#endif - return 1; -} - -void Animation_Q2PlayerUpdate_Run(int id) -{ -#ifdef CSQC - /* Interpolation */ - self.lerpfrac -= clframetime * 10; - if (self.lerpfrac < 0.0) { - self.lerpfrac = 0.0f; - } - - if (self.frame_time > cltime) { - return; - } - - /* Next animationf rame inbound, reset interpolation */ - self.frame2 = self.frame; - self.lerpfrac = 1.0f; - - /* Either advance frame (if we're in framgroup) or start new one */ - if (self.frame >= q2_anims[id].start && self.frame < q2_anims[id].end) { - self.frame += 1; - } else { - self.frame = q2_anims[id].start; - } - - /* Q2 runs at 10 Hz */ - self.frame_time = cltime + 0.1f; -#endif -} - -void Animation_Q2PlayerUpdate(void) -{ - if (Animation_Q2PlayerUpdate_Taunt() == 1) { - return; - } - if ( !( self.flags & FL_ONGROUND ) ) { - Animation_Q2PlayerUpdate_Run(Q2ANIM_JUMP); - } else if ( vlen( self.velocity ) == 0 ) { - if ( self.flags & FL_CROUCHING ) { - Animation_Q2PlayerUpdate_Run(Q2ANIM_CR_STAND); - } else { - Animation_Q2PlayerUpdate_Run(Q2ANIM_STAND); - } - } else { - if ( self.flags & FL_CROUCHING ) { - Animation_Q2PlayerUpdate_Run(Q2ANIM_CR_WALK); - } else { - Animation_Q2PlayerUpdate_Run(Q2ANIM_RUN); - } - } -} - -#ifdef CSQC -void Animation_Q2PlayerTaunt(void) -{ - entity boo = findfloat( world, entnum, readentitynum() ); - boo.q2frameoverride = Q2ANIM_FLIP + readbyte(); - print( sprintf("Taunt %d %s!\n", boo.q2frameoverride, boo.model)); -} -#endif - /* ================= Animation_PlayerUpdate @@ -246,4 +150,4 @@ void Animation_PlayerTop( float fFrame ) { void Animation_PlayerTopTemp( float fFrame, float fTime ) { self.frame = fFrame; self.frame_time = time + fTime; -} \ No newline at end of file +} diff --git a/Source/shared/valve/animations.h b/Source/shared/valve/animations.h index 4279d1dc..bdbcc3d7 100644 --- a/Source/shared/valve/animations.h +++ b/Source/shared/valve/animations.h @@ -82,60 +82,5 @@ enum { ANIM_CR_SHOOTBOW }; -typedef struct { - string name; - float start; - float end; -} q2_anim_t; - -q2_anim_t q2_anims[] = { - { "stand", 0, 39 }, - { "run", 40, 45 }, - { "attack", 46, 53 }, - { "pain1", 54, 57 }, - { "pain2", 58, 65 }, - { "jump", 66, 71 }, - { "flip", 72, 83 }, - { "salute", 84, 94 }, - { "taunt", 95, 111 }, - { "wave", 112, 122 }, - { "point", 123, 134 }, - { "cr_stand", 135, 153 }, - { "cr_walk", 154, 159 }, - { "cr_attack", 160, 168 }, - { "cr_pain", 169, 172 }, - { "cr_death", 173, 177 }, - { "death1", 178, 183 }, - { "death2", 184, 189 }, - { "death3", 190, 197 } -}; - -enum { - Q2ANIM_STAND, - Q2ANIM_RUN, - Q2ANIM_ATTACK, - Q2ANIM_PAIN1, - Q2ANIM_PAIN2, - Q2ANIM_JUMP, - Q2ANIM_FLIP, - Q2ANIM_SALUTE, - Q2ANIM_TAUNT, - Q2ANIM_WAVE, - Q2ANIM_POINT, - Q2ANIM_CR_STAND, - Q2ANIM_CR_WALK, - Q2ANIM_CR_ATTACK, - Q2ANIM_CR_PAIN, - Q2ANIM_CR_DEATH, - Q2ANIM_DEATH1, - Q2ANIM_DEATH2, - Q2ANIM_DEATH3, -}; - -enum { - PLAYERTYPE_HL, - PLAYERTYPE_Q2 -}; - void Animation_PlayerTop(float); void Animation_PlayerTopTemp(float, float); diff --git a/Source/shared/valve/player.cpp b/Source/shared/valve/player.cpp index 7c8c97d9..84e410d3 100644 --- a/Source/shared/valve/player.cpp +++ b/Source/shared/valve/player.cpp @@ -22,6 +22,7 @@ class player float activeweapon; float viewzoom; vector view_ofs; + float weapontime; /* Weapon specific */ int glock_mag; @@ -35,7 +36,6 @@ class player #ifdef CSQC /* External model */ entity p_model; - int playertype; int p_hand_bone; int p_model_bone; float pitch; @@ -49,11 +49,11 @@ class player float net_w_idle_next; float netjumptime; float netteleport_time; + float net_weapontime; int net_ammo1; int net_ammo2; int net_ammo3; - virtual void(string) set_model; virtual void() gun_offset; virtual void() draw; virtual float() predraw; diff --git a/Source/shared/valve/w_crossbow.c b/Source/shared/valve/w_crossbow.c index fe1d84f1..7257e452 100644 --- a/Source/shared/valve/w_crossbow.c +++ b/Source/shared/valve/w_crossbow.c @@ -60,27 +60,26 @@ void w_crossbow_pickup(void) void w_crossbow_draw(void) { player pl = (player)self; -#ifdef CSQC - if (pl.a_ammo1) { - Weapons_ViewAnimation(CROSSBOW_DRAW1); - } else { - Weapons_ViewAnimation(CROSSBOW_DRAW2); - } -#else + +#ifdef SSQC Weapons_UpdateAmmo(pl, pl.crossbow_mag, pl.ammo_bolt, __NULL__); #endif + + if (pl.a_ammo1) { + Weapons_ViewAnimation(CROSSBOW_DRAW1); + } else { + Weapons_ViewAnimation(CROSSBOW_DRAW2); + } } void w_crossbow_holster(void) { player pl = (player)self; -#ifdef CSQC if (pl.a_ammo1) { Weapons_ViewAnimation(CROSSBOW_HOLSTER1); } else { Weapons_ViewAnimation(CROSSBOW_HOLSTER2); } -#endif } void w_crossbow_primary(void) { @@ -93,6 +92,11 @@ void w_crossbow_primary(void) static void Crossbolt_Touch(void) { Effect_CreateSpark(self.origin, trace_plane_normal); + if (self.weapon) { + Effect_CreateExplosion(self.origin); + Damage_Radius(self.origin, self.owner, 40, 40 * 2.5, TRUE); + sound(self, CHAN_WEAPON, sprintf( "weapons/explode%d.wav", floor( random() * 2 ) + 3 ), 1, ATTN_NORM); + } if (other.takedamage == DAMAGE_YES) { Damage_Apply(other, self.owner, 50, trace_endpos, FALSE); if (random() < 0.5) { @@ -123,6 +127,7 @@ void w_crossbow_primary(void) bolt.angles = vectoangles(bolt.velocity); bolt.avelocity[2] = 10; bolt.touch = Crossbolt_Touch; + bolt.weapon = pl.viewzoom == 1.0 ? 1 : 0; setsize(bolt, [0,0,0], [0,0,0]); if (pl.crossbow_mag) { @@ -133,14 +138,13 @@ void w_crossbow_primary(void) Weapons_UpdateAmmo(pl, pl.crossbow_mag, pl.ammo_bolt, __NULL__); Weapons_PlaySound(pl, CHAN_WEAPON, "weapons/xbow_fire1.wav", 1, ATTN_NORM); #else - if (pl.a_ammo1) { - Weapons_ViewAnimation(CROSSBOW_FIRE1); - } else { - Weapons_ViewAnimation(CROSSBOW_FIRE3); - } Weapons_ViewPunchAngle([-2,0,0]); #endif - + if (pl.a_ammo1) { + Weapons_ViewAnimation(CROSSBOW_FIRE1); + } else { + Weapons_ViewAnimation(CROSSBOW_FIRE3); + } pl.w_attack_next = 0.75f; pl.w_idle_next = 10.0f; } @@ -186,9 +190,8 @@ void w_crossbow_reload(void) Weapons_UpdateAmmo(pl, pl.crossbow_mag, pl.ammo_bolt, __NULL__); #else Weapons_PlaySound(pl, CHAN_ITEM, "weapons/xbow_reload1.wav", 1, ATTN_NORM); - Weapons_ViewAnimation(CROSSBOW_RELOAD); #endif - + Weapons_ViewAnimation(CROSSBOW_RELOAD); pl.w_attack_next = 4.5f; pl.w_idle_next = 10.0f; } @@ -199,23 +202,20 @@ void w_crossbow_release(void) return; } -#ifdef CSQC if (random() < 0.75) { if (pl.a_ammo1) { Weapons_ViewAnimation(CROSSBOW_IDLE1); } else { Weapons_ViewAnimation(CROSSBOW_IDLE2); } - pl.w_idle_next = 10.0f; } else { if (pl.a_ammo1) { Weapons_ViewAnimation(CROSSBOW_FIDGET1); } else { Weapons_ViewAnimation(CROSSBOW_FIDGET2); } - pl.w_idle_next = 3.0f; } -#endif + pl.w_idle_next = 3.0f; } void w_crossbow_crosshair(void) { diff --git a/Source/shared/valve/w_crowbar.c b/Source/shared/valve/w_crowbar.c index afd6ba7e..0ff3d56c 100644 --- a/Source/shared/valve/w_crowbar.c +++ b/Source/shared/valve/w_crowbar.c @@ -51,19 +51,16 @@ string w_crowbar_deathmsg(void) void w_crowbar_draw(void) { -#ifdef CSQC - Weapons_ViewAnimation(CROWBAR_DRAW); -#else +#ifdef SSQC player pl = (player)self; Weapons_UpdateAmmo(pl, __NULL__, __NULL__, __NULL__); #endif + Weapons_ViewAnimation(CROWBAR_DRAW); } void w_crowbar_holster(void) { -#ifdef CSQC Weapons_ViewAnimation(CROWBAR_HOLSTER); -#endif } void w_crowbar_primary(void) { @@ -73,34 +70,30 @@ void w_crowbar_primary(void) return; } -#ifdef CSQC Weapons_MakeVectors(); - vector src = pl.origin + pl.view_ofs; - traceline(src, src + (v_forward * 32), FALSE, pl); + vector src = pl.origin + pl.view_ofs; + traceline(src, src + (v_forward * 32), FALSE, pl); - int r = floor(random(0,3)); - switch (r) { - case 0: - Weapons_ViewAnimation(trace_fraction >= 1 ? CROWBAR_ATTACK1MISS:CROWBAR_ATTACK1HIT); - break; - case 1: - Weapons_ViewAnimation(trace_fraction >= 1 ? CROWBAR_ATTACK2MISS:CROWBAR_ATTACK2HIT); - break; - default: - Weapons_ViewAnimation(trace_fraction >= 1 ? CROWBAR_ATTACK3MISS:CROWBAR_ATTACK3HIT); - } + int r = floor(random(0,3)); + switch (r) { + case 0: + Weapons_ViewAnimation(trace_fraction >= 1 ? CROWBAR_ATTACK1MISS:CROWBAR_ATTACK1HIT); + break; + case 1: + Weapons_ViewAnimation(trace_fraction >= 1 ? CROWBAR_ATTACK2MISS:CROWBAR_ATTACK2HIT); + break; + default: + Weapons_ViewAnimation(trace_fraction >= 1 ? CROWBAR_ATTACK3MISS:CROWBAR_ATTACK3HIT); + } - if (trace_fraction >= 1.0) { - pl.w_attack_next = 0.5f; - } else { - pl.w_attack_next = 0.25f; - } -#else - Weapons_MakeVectors(); - vector src = pl.origin + pl.view_ofs; - traceline(src, src + (v_forward * 32), FALSE, pl); + if (trace_fraction >= 1.0) { + pl.w_attack_next = 0.5f; + } else { + pl.w_attack_next = 0.25f; + } - if (self.flags & FL_CROUCHING) +#ifdef SSQC + if (pl.flags & FL_CROUCHING) Animation_PlayerTopTemp(ANIM_SHOOTCROWBAR, 0.5f); else Animation_PlayerTopTemp(ANIM_CR_SHOOTCROWBAR, 0.42f); @@ -108,9 +101,7 @@ void w_crowbar_primary(void) Weapons_PlaySound(pl, CHAN_WEAPON, "weapons/cbar_miss1.wav", 1, ATTN_NORM); if (trace_fraction >= 1.0) { - pl.w_attack_next = 0.5f; } else { - pl.w_attack_next = 0.25f; Effect_Impact(IMPACT_MELEE, trace_endpos, trace_plane_normal); if (trace_ent.takedamage) { @@ -147,7 +138,6 @@ void w_crowbar_reload(void) } void w_crowbar_release(void) { -#ifdef CSQC player pl = (player)self; if (pl.w_idle_next) { return; @@ -155,7 +145,6 @@ void w_crowbar_release(void) Weapons_ViewAnimation(CROWBAR_IDLE); pl.w_idle_next = 15.0f; -#endif } float w_crowbar_aimanim(void) diff --git a/Source/shared/valve/w_egon.c b/Source/shared/valve/w_egon.c index 83b3395f..a559eabe 100644 --- a/Source/shared/valve/w_egon.c +++ b/Source/shared/valve/w_egon.c @@ -44,6 +44,14 @@ string w_egon_deathmsg(void) return ""; } +void w_egon_pickup(void) +{ +#ifdef SSQC + player pl = (player)self; + pl.ammo_uranium = bound(0, pl.ammo_uranium +20, 100); +#endif +} + void w_egon_draw(void) { player pl = (player)self; @@ -66,17 +74,32 @@ void w_egon_primary(void) return; } + /* Ammo check */ +#ifdef CSQC + if (pl.a_ammo2 <= 0) { + return; + } +#else + if (pl.ammo_uranium <= 0) { + return; + } +#endif + #ifdef CSQC if (Weapons_GetAnimation() == EGON_IDLE1) Weapons_ViewAnimation(EGON_ALTFIREON); else if (Weapons_GetAnimation() == EGON_ALTFIREON) Weapons_ViewAnimation(EGON_ALTFIRECYCLE); + + pl.a_ammo2--; #else Weapons_MakeVectors(); vector src = Weapons_GetCameraPos(); vector endpos = src + v_forward * 1024; traceline(src, endpos, FALSE, pl); - Damage_Radius(trace_endpos, pl, 10, 64, TRUE); + Damage_Radius(trace_endpos, pl, 14, 64, TRUE); + pl.ammo_uranium--; + Weapons_UpdateAmmo(pl, __NULL__, pl.ammo_uranium, __NULL__); #endif pl.w_attack_next = 0.2f; @@ -111,6 +134,7 @@ void w_egon_crosshair(void) static vector cross_pos; cross_pos = (video_res / 2) + [-12,-12]; drawsubpic(cross_pos, [24,24], "sprites/crosshairs.spr_0.tga", [72/128,48/128], [0.1875, 0.1875], [1,1,1], 1, DRAWFLAG_NORMAL); + HUD_DrawAmmo2(); #endif } @@ -143,7 +167,7 @@ weapon_t w_egon = w_egon_release, w_egon_crosshair, w_egon_precache, - __NULL__, + w_egon_pickup, w_egon_vmodel, w_egon_wmodel, w_egon_pmodel, diff --git a/Source/shared/valve/w_gauss.c b/Source/shared/valve/w_gauss.c index f281ce99..39a92850 100644 --- a/Source/shared/valve/w_gauss.c +++ b/Source/shared/valve/w_gauss.c @@ -19,6 +19,8 @@ enum GAUSS_DRAW }; +void w_gauss_release(void); + void w_gauss_precache(void) { precache_model("models/v_gauss.mdl"); @@ -48,11 +50,18 @@ string w_gauss_deathmsg(void) return ""; } +void w_gauss_pickup(void) +{ +#ifdef SSQC + player pl = (player)self; + pl.ammo_uranium = bound(0, pl.ammo_uranium +20, 100); +#endif +} + void w_gauss_draw(void) { -#ifdef CSQC Weapons_ViewAnimation(GAUSS_DRAW); -#else +#ifdef SSQC player pl = (player)self; Weapons_UpdateAmmo(pl, __NULL__, pl.ammo_uranium, __NULL__); #endif @@ -202,8 +211,23 @@ void w_gauss_primary(void) return; } + /* Ammo check */ #ifdef CSQC + if (pl.a_ammo2 < 2) { + return; + } +#else + if (pl.ammo_uranium < 2) { + return; + } +#endif + Weapons_ViewAnimation(GAUSS_FIRE2); +#ifdef CSQC + pl.a_ammo2 -= 2; +#else + pl.ammo_uranium -= 2; + Weapons_UpdateAmmo(pl, __NULL__, pl.ammo_uranium, __NULL__); #endif w_gauss_fire(1); @@ -216,7 +240,7 @@ void w_gauss_secondary(void) #ifdef CSQC if (pl.a_ammo3) - soundupdate(pl, CHAN_WEAPON, "", 2, ATTN_NORM, 100 + (200 * (pl.a_ammo2/255)), 0, 0); + soundupdate(pl, CHAN_WEAPON, "", 2, ATTN_NORM, 100 + (200 * (pl.a_ammo1/255)), 0, 0); #endif if (pl.w_attack_next) { @@ -224,75 +248,98 @@ void w_gauss_secondary(void) } pl.w_attack_next = 0.1f; + /* Ammo check */ +#ifdef CSQC + if (pl.a_ammo2 <= 0) { + if (pl.a_ammo3 > 0) { + w_gauss_release(); + } + return; + } +#else + if (pl.ammo_uranium <= 0) { + if (pl.a_ammo3 > 0) { + w_gauss_release(); + } + return; + } +#endif + +#ifdef CSQC + if (pl.a_ammo1 < 255) + pl.a_ammo2--; +#else + if (pl.a_ammo1 < 255) + pl.ammo_uranium--; + Weapons_UpdateAmmo(pl, pl.a_ammo1, pl.ammo_uranium, pl.a_ammo3); +#endif + /* Set pitch sound shift */ - pl.a_ammo2 += 16; - if (pl.a_ammo2 > 255) { - pl.a_ammo2 = 255; + pl.a_ammo1 += 16; + if (pl.a_ammo1 > 255) { + pl.a_ammo1 = 255; } if (pl.a_ammo3 == 1) { -#ifdef CSQC Weapons_ViewAnimation(GAUSS_SPIN); -#endif pl.a_ammo3 = 2; pl.w_idle_next = 0.0f; } else if (!pl.a_ammo3) { -#ifdef CSQC Weapons_ViewAnimation(GAUSS_SPINUP); +#ifdef CSQC sound(pl, CHAN_WEAPON, "ambience/pulsemachine.wav", 2, ATTN_NORM); #endif pl.a_ammo3 = 1; } - } + +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; + + 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; + } + + 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; +} + void w_gauss_reload(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_ammo2 = 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); -#ifdef CSQC - Weapons_ViewAnimation(GAUSS_FIRE1); - 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; - } - - int r = floor(random(0,3)); - switch (r) { - case 0: - Weapons_ViewAnimation(GAUSS_IDLE1); - pl.w_idle_next = 10.0f; - break; - case 1: - Weapons_ViewAnimation(GAUSS_IDLE2); - pl.w_idle_next = 10.0f; - break; - case 2: - Weapons_ViewAnimation(GAUSS_FIDGET); - pl.w_idle_next = 3.0f; - break; - } - } void w_gauss_crosshair(void) @@ -301,6 +348,7 @@ void w_gauss_crosshair(void) static vector cross_pos; cross_pos = (video_res / 2) + [-12,-12]; drawsubpic(cross_pos, [24,24], "sprites/crosshairs.spr_0.tga", [48/128,48/128], [0.1875, 0.1875], [1,1,1], 1, DRAWFLAG_NORMAL); + HUD_DrawAmmo2(); #endif } @@ -333,7 +381,7 @@ weapon_t w_gauss = w_gauss_release, w_gauss_crosshair, w_gauss_precache, - __NULL__, + w_gauss_pickup, w_gauss_vmodel, w_gauss_wmodel, w_gauss_pmodel, diff --git a/Source/shared/valve/w_glock.c b/Source/shared/valve/w_glock.c index c993dadd..a00b74c2 100644 --- a/Source/shared/valve/w_glock.c +++ b/Source/shared/valve/w_glock.c @@ -53,18 +53,15 @@ void w_glock_pickup(void) void w_glock_draw(void) { -#ifdef CSQC Weapons_ViewAnimation(GLOCK_DRAW); -#else +#ifdef SSQC player pl = (player)self; Weapons_UpdateAmmo(pl, pl.glock_mag, pl.ammo_9mm, __NULL__); #endif } void w_glock_holster(void) { -#ifdef CSQC Weapons_ViewAnimation(GLOCK_HOLSTER); -#endif } void w_glock_primary(void) { @@ -79,12 +76,6 @@ void w_glock_primary(void) return; } - if (pl.a_ammo1) { - Weapons_ViewAnimation(GLOCK_SHOOT); - } else { - Weapons_ViewAnimation(GLOCK_SHOOT_EMPTY); - } - Weapons_ViewPunchAngle([-2,0,0]); #else if (!pl.glock_mag) { @@ -104,6 +95,12 @@ void w_glock_primary(void) Weapons_UpdateAmmo(pl, pl.glock_mag, pl.ammo_9mm, __NULL__); #endif + if (pl.a_ammo1) { + Weapons_ViewAnimation(GLOCK_SHOOT); + } else { + Weapons_ViewAnimation(GLOCK_SHOOT_EMPTY); + } + pl.w_attack_next = 0.3f; pl.w_idle_next = 5.0f; } @@ -120,12 +117,6 @@ void w_glock_secondary(void) return; } - if (pl.a_ammo1) { - Weapons_ViewAnimation(GLOCK_SHOOT); - } else { - Weapons_ViewAnimation(GLOCK_SHOOT_EMPTY); - } - Weapons_ViewPunchAngle([-2,0,0]); #else if (!pl.glock_mag) { @@ -146,6 +137,12 @@ void w_glock_secondary(void) Weapons_UpdateAmmo(pl, pl.glock_mag, pl.ammo_9mm, __NULL__); #endif + if (pl.a_ammo1) { + Weapons_ViewAnimation(GLOCK_SHOOT); + } else { + Weapons_ViewAnimation(GLOCK_SHOOT_EMPTY); + } + pl.w_attack_next = 0.2f; pl.w_idle_next = 5.0f; } @@ -163,11 +160,6 @@ void w_glock_reload(void) return; } - if (pl.a_ammo1) { - Weapons_ViewAnimation(GLOCK_RELOAD); - } else { - Weapons_ViewAnimation(GLOCK_RELOAD_EMPTY); - } #else if (pl.glock_mag >= 18) { return; @@ -180,12 +172,17 @@ void w_glock_reload(void) Weapons_UpdateAmmo(pl, pl.glock_mag, pl.ammo_9mm, __NULL__); #endif + if (pl.a_ammo1) { + Weapons_ViewAnimation(GLOCK_RELOAD); + } else { + Weapons_ViewAnimation(GLOCK_RELOAD_EMPTY); + } + pl.w_attack_next = 2.0f; pl.w_idle_next = 10.0f; } void w_glock_release(void) { -#ifdef CSQC player pl = (player)self; if (pl.w_idle_next > 0) { return; @@ -204,7 +201,6 @@ void w_glock_release(void) break; } pl.w_idle_next = 10.0f; -#endif } float w_glock_aimanim(void) diff --git a/Source/shared/valve/w_hornetgun.c b/Source/shared/valve/w_hornetgun.c index cc850a55..8878a865 100644 --- a/Source/shared/valve/w_hornetgun.c +++ b/Source/shared/valve/w_hornetgun.c @@ -53,9 +53,8 @@ string w_hornetgun_deathmsg(void) void w_hornetgun_draw(void) { -#ifdef CSQC Weapons_ViewAnimation(HORNETGUN_DRAW); -#else +#ifdef SSQC player pl = (player)self; Weapons_UpdateAmmo(pl, __NULL__, pl.ammo_hornet, __NULL__); #endif @@ -91,6 +90,37 @@ void w_hornetgun_shoothornet(void) } #endif +void w_hornetgun_release(void) +{ + player pl = (player)self; + + if (pl.w_idle_next) { + return; + } + + int r; + r = floor(random(0,3)); + switch (r) { + case 0: + Weapons_ViewAnimation(HORNETGUN_IDLE); + break; + case 1: + Weapons_ViewAnimation(HORNETGUN_FIDGET1); + break; + default: + Weapons_ViewAnimation(HORNETGUN_FIDGET2); + break; + } + +#ifdef CSQC + pl.a_ammo2 = bound(0, pl.a_ammo2 + 1, 8); +#else + pl.ammo_hornet = bound(0, pl.ammo_hornet + 1, 8); + Weapons_UpdateAmmo(pl, __NULL__, pl.ammo_hornet, __NULL__); +#endif + pl.w_idle_next = 1.0f; +} + void w_hornetgun_primary(void) { player pl = (player)self; @@ -98,15 +128,34 @@ void w_hornetgun_primary(void) return; } + /* Ammo check */ +#ifdef CSQC + if (pl.a_ammo2 <= 0) { + w_hornetgun_release(); + return; + } +#else + if (pl.ammo_hornet <= 0) { + w_hornetgun_release(); + return; + } +#endif + + #ifdef SSQC w_hornetgun_shoothornet(); Weapons_PlaySound(pl, CHAN_WEAPON, sprintf("agrunt/ag_fire%d.wav", floor(random(1,4))), 1, ATTN_NORM); + + pl.ammo_hornet--; + Weapons_UpdateAmmo(pl, __NULL__, pl.ammo_hornet, __NULL__); #else - Weapons_ViewAnimation(HORNETGUN_SHOOT); + pl.a_ammo2--; #endif + Weapons_ViewAnimation(HORNETGUN_SHOOT); + pl.w_attack_next = 0.25; - pl.w_idle_next = 2.5f; + pl.w_idle_next = 1.0f; } void w_hornetgun_secondary(void) { @@ -115,53 +164,45 @@ void w_hornetgun_secondary(void) return; } -#ifdef SSQC - w_hornetgun_shoothornet(); - Weapons_PlaySound(pl, CHAN_WEAPON, sprintf("agrunt/ag_fire%d.wav", floor(random(1,4))), 1, ATTN_NORM); + /* Ammo check */ +#ifdef CSQC + if (pl.a_ammo2 <= 0) { + w_hornetgun_release(); + return; + } #else - Weapons_ViewAnimation(HORNETGUN_SHOOT); + if (pl.ammo_hornet <= 0) { + w_hornetgun_release(); + return; + } #endif +#ifdef SSQC + pl.ammo_hornet--; + w_hornetgun_shoothornet(); + Weapons_PlaySound(pl, CHAN_WEAPON, sprintf("agrunt/ag_fire%d.wav", floor(random(1,4))), 1, ATTN_NORM); + Weapons_UpdateAmmo(pl, __NULL__, pl.ammo_hornet, __NULL__); +#else + pl.a_ammo2--; +#endif + + Weapons_ViewAnimation(HORNETGUN_SHOOT); + pl.w_attack_next = 0.1; - pl.w_idle_next = 2.5f; + pl.w_idle_next = 1.0f; } void w_hornetgun_reload(void) { } -void w_hornetgun_release(void) -{ - player pl = (player)self; - if (pl.w_idle_next) { - return; - } - -#ifdef CSQC - int r; - - r = floor(random(0,3)); - - switch (r) { - case 0: - Weapons_ViewAnimation(HORNETGUN_IDLE); - break; - case 1: - Weapons_ViewAnimation(HORNETGUN_FIDGET1); - break; - default: - Weapons_ViewAnimation(HORNETGUN_FIDGET2); - break; - } -#endif - pl.w_idle_next = 2.5f; -} void w_hornetgun_crosshair(void) { #ifdef CSQC static vector cross_pos; cross_pos = (video_res / 2) + [-12,-12]; drawsubpic(cross_pos, [24,24], "sprites/crosshairs.spr_0.tga", [72/128,24/128], [0.1875, 0.1875], [1,1,1], 1, DRAWFLAG_NORMAL); + HUD_DrawAmmo2(); #endif } diff --git a/Source/shared/valve/w_mp5.c b/Source/shared/valve/w_mp5.c index b102d871..fe787b10 100644 --- a/Source/shared/valve/w_mp5.c +++ b/Source/shared/valve/w_mp5.c @@ -57,9 +57,8 @@ string w_mp5_deathmsg(void) void w_mp5_draw(void) { -#ifdef CSQC Weapons_ViewAnimation(MP5_DRAW); -#else +#ifdef SSQC player pl = (player)self; Weapons_UpdateAmmo(pl, pl.mp5_mag, pl.ammo_9mm, pl.ammo_m203_grenade); #endif @@ -67,9 +66,7 @@ void w_mp5_draw(void) void w_mp5_holster(void) { -#ifdef CSQC Weapons_ViewAnimation(MP5_DRAW); -#endif } void w_mp5_primary(void) @@ -90,14 +87,14 @@ void w_mp5_primary(void) } #endif + if (random() < 0.5) { + Weapons_ViewAnimation(MP5_FIRE1); + } else { + Weapons_ViewAnimation(MP5_FIRE2); + } + /* Actual firing */ #ifdef CSQC - if (random() < 0.5) { - Weapons_ViewAnimation(MP5_FIRE1); - } else { - Weapons_ViewAnimation(MP5_FIRE2); - } - pl.a_ammo1--; Weapons_ViewPunchAngle([random(-2, 2),0,0]); #else @@ -134,7 +131,6 @@ void w_mp5_secondary(void) if (pl.a_ammo3 <= 0) { return; } - Weapons_ViewAnimation(MP5_GRENADE); Weapons_ViewPunchAngle([-10,0,0]); pl.a_ammo3--; #else @@ -167,7 +163,7 @@ void w_mp5_secondary(void) pl.ammo_m203_grenade--; Weapons_UpdateAmmo(pl, pl.mp5_mag, pl.ammo_9mm, pl.ammo_m203_grenade); #endif - + Weapons_ViewAnimation(MP5_GRENADE); pl.w_attack_next = 1.0f; pl.w_idle_next = 10.0f; } @@ -196,9 +192,9 @@ void w_mp5_reload(void) } #endif -#ifdef CSQC Weapons_ViewAnimation(MP5_RELOAD); -#else + +#ifdef SSQC Weapons_ReloadWeapon(pl, player::mp5_mag, player::ammo_9mm, 50); Weapons_UpdateAmmo(pl, pl.mp5_mag, pl.ammo_9mm, pl.ammo_m203_grenade); #endif @@ -209,7 +205,6 @@ void w_mp5_reload(void) void w_mp5_release(void) { -#ifdef CSQC player pl = (player)self; if (pl.w_idle_next > 0.0) { return; @@ -222,7 +217,6 @@ void w_mp5_release(void) } pl.w_idle_next = 15.0f; -#endif } void w_mp5_crosshair(void) diff --git a/Source/shared/valve/w_python.c b/Source/shared/valve/w_python.c index fdaf5dd0..2fd41107 100644 --- a/Source/shared/valve/w_python.c +++ b/Source/shared/valve/w_python.c @@ -52,9 +52,8 @@ string w_python_deathmsg(void) void w_python_draw(void) { -#ifdef CSQC Weapons_ViewAnimation(PYTHON_DRAW); -#else +#ifdef SSQC player pl = (player)self; Weapons_UpdateAmmo(pl, pl.python_mag, pl.ammo_357, __NULL__); #endif @@ -62,9 +61,7 @@ void w_python_draw(void) void w_python_holster(void) { -#ifdef CSQC Weapons_ViewAnimation(PYTHON_HOLSTER); -#endif } void w_python_primary(void) { @@ -97,10 +94,9 @@ void w_python_primary(void) Weapons_UpdateAmmo(pl, pl.python_mag, pl.ammo_357, __NULL__); #else pl.a_ammo1--; - Weapons_ViewAnimation(PYTHON_FIRE1); Weapons_ViewPunchAngle([-10,0,0]); #endif - + Weapons_ViewAnimation(PYTHON_FIRE1); pl.w_attack_next = 0.75f; pl.w_idle_next = 10.0f; } @@ -143,25 +139,21 @@ void w_python_reload(void) #endif /* Audio-Visual bit */ -#ifdef CSQC Weapons_ViewAnimation(PYTHON_RELOAD); -#else +#ifdef SSQC Weapons_ReloadWeapon(pl, player::python_mag, player::ammo_357, 6); Weapons_UpdateAmmo(pl, pl.python_mag, pl.ammo_357, __NULL__); #endif - pl.w_attack_next = 3.25f; pl.w_idle_next = 10.0f; } void w_python_release(void) { -#ifdef CSQC player pl = (player)self; - if (pl.w_idle_next > Math_Time()) { + if (pl.w_idle_next) { return; } - int r = floor(random(0,3)); switch (r) { case 0: @@ -174,9 +166,7 @@ void w_python_release(void) Weapons_ViewAnimation(PYTHON_IDLE3); break; } - - pl.w_idle_next = Math_Time() + 15.0f; -#endif + pl.w_idle_next = 15.0f; } void w_python_crosshair(void) { diff --git a/Source/shared/valve/w_rpg.c b/Source/shared/valve/w_rpg.c index 891d6078..c7c3b0a5 100644 --- a/Source/shared/valve/w_rpg.c +++ b/Source/shared/valve/w_rpg.c @@ -56,9 +56,8 @@ void w_rpg_pickup(void) void w_rpg_draw(void) { -#ifdef CSQC Weapons_ViewAnimation(RPG_DRAW1); -#else +#ifdef SSQC player pl = (player)self; Weapons_UpdateAmmo(pl, pl.rpg_mag, pl.ammo_rocket, __NULL__); #endif @@ -86,8 +85,9 @@ void w_rpg_primary(void) } #endif -#ifdef CSQC Weapons_ViewAnimation(RPG_FIRE2); + +#ifdef CSQC pl.a_ammo1--; #else static void Rocket_Touch(void) { @@ -163,13 +163,11 @@ void w_rpg_reload(void) #endif /* Audio-Visual Bit */ -#ifdef CSQC - Weapons_ViewAnimation(RPG_RELOAD); -#else +#ifdef SSQC Weapons_ReloadWeapon(pl, player::rpg_mag, player::ammo_rocket, 1); Weapons_UpdateAmmo(pl, pl.rpg_mag, pl.ammo_rocket, __NULL__); #endif - + Weapons_ViewAnimation(RPG_RELOAD); pl.w_attack_next = 2.25f; pl.w_idle_next = 10.0f; diff --git a/Source/shared/valve/w_satchel.c b/Source/shared/valve/w_satchel.c index d67999dc..e4fba7e1 100644 --- a/Source/shared/valve/w_satchel.c +++ b/Source/shared/valve/w_satchel.c @@ -51,15 +51,14 @@ void w_satchel_pickup(void) { #ifdef SSQC player pl = (player)self; - pl.ammo_satchel = bound(0, pl.ammo_satchel + 1, 15); + pl.ammo_satchel = bound(0, pl.ammo_satchel + 1, 5); #endif } void w_satchel_draw(void) { -#ifdef CSQC Weapons_ViewAnimation(SATCHEL_DRAW); -#else +#ifdef SSQC player pl = (player)self; Weapons_UpdateAmmo(pl, pl.satchel_chg, pl.ammo_satchel, __NULL__); #endif @@ -120,6 +119,12 @@ void w_satchel_primary(void) } #endif + if (pl.a_ammo1 <= 0) { + Weapons_ViewAnimation(RADIO_DRAW); + } else { + Weapons_ViewAnimation(RADIO_USE); + } + #ifdef SSQC if (!pl.satchel_chg) { vector throw; @@ -140,11 +145,6 @@ void w_satchel_primary(void) Weapons_UpdateAmmo(pl, pl.satchel_chg, pl.ammo_satchel, __NULL__); #else setmodel(pSeat->eViewModel, "models/v_satchel_radio.mdl"); - if (pl.a_ammo1 <= 0) { - Weapons_ViewAnimation(RADIO_DRAW); - } else { - Weapons_ViewAnimation(RADIO_USE); - } pl.a_ammo1++; pl.a_ammo2--; #endif @@ -183,9 +183,10 @@ void w_satchel_secondary(void) pl.a_ammo1++; pl.a_ammo2--; setmodel(pSeat->eViewModel, "models/v_satchel_radio.mdl"); - Weapons_ViewAnimation(RADIO_DRAW); #endif + Weapons_ViewAnimation(RADIO_DRAW); + pl.w_attack_next = 1.0f; pl.w_idle_next = 2.5f; } @@ -201,13 +202,11 @@ void w_satchel_release(void) return; } -#ifdef CSQC if (pl.a_ammo1 <= 0) { Weapons_ViewAnimation(SATCHEL_FIDGET); } else { Weapons_ViewAnimation(RADIO_FIDGET); } -#endif pl.w_idle_next = 15.0f; } diff --git a/Source/shared/valve/w_shotgun.c b/Source/shared/valve/w_shotgun.c index 26a2f919..689cc7b3 100644 --- a/Source/shared/valve/w_shotgun.c +++ b/Source/shared/valve/w_shotgun.c @@ -65,9 +65,8 @@ void w_shotgun_pickup(void) void w_shotgun_draw(void) { -#ifdef CSQC Weapons_ViewAnimation(SHOTGUN_DRAW); -#else +#ifdef SSQC player pl = (player)self; Weapons_UpdateAmmo(pl, pl.shotgun_mag, pl.ammo_buckshot, __NULL__); #endif @@ -75,9 +74,7 @@ void w_shotgun_draw(void) void w_shotgun_holster(void) { -#ifdef CSQC Weapons_ViewAnimation(SHOTGUN_HOLSTER); -#endif } void w_shotgun_primary(void) { @@ -112,10 +109,10 @@ void w_shotgun_primary(void) pl.shotgun_mag--; Weapons_UpdateAmmo(pl, pl.shotgun_mag, pl.ammo_buckshot, __NULL__); #else - Weapons_ViewAnimation(SHOTGUN_FIRE1); Weapons_ViewPunchAngle([-5,0,0]); pl.a_ammo1--; #endif + Weapons_ViewAnimation(SHOTGUN_FIRE1); pl.w_attack_next = 0.75; pl.w_idle_next = 2.5f; @@ -153,11 +150,10 @@ void w_shotgun_secondary(void) pl.shotgun_mag -= 2; Weapons_UpdateAmmo(pl, pl.shotgun_mag, pl.ammo_buckshot, __NULL__); #else - Weapons_ViewAnimation(SHOTGUN_FIRE2); Weapons_ViewPunchAngle([-10,0,0]); pl.a_ammo1 -= 2; #endif - + Weapons_ViewAnimation(SHOTGUN_FIRE2); pl.w_attack_next = 1.5f; pl.w_idle_next = 2.5f; } @@ -195,7 +191,6 @@ void w_shotgun_release(void) } if (pl.a_ammo3 == SHOTTY_IDLE) { -#ifdef CSQC int r = floor(random(0,3)); switch (r) { case 0: @@ -208,17 +203,14 @@ void w_shotgun_release(void) Weapons_ViewAnimation(SHOTGUN_IDLE3); break; } -#endif pl.w_idle_next = 15.0f; } else if (pl.a_ammo3 == SHOTTY_RELOAD_START) { -#ifdef CSQC Weapons_ViewAnimation(SHOTGUN_START_RELOAD); -#endif pl.a_ammo3 = SHOTTY_RELOAD; pl.w_idle_next = 0.65f; } else if (pl.a_ammo3 == SHOTTY_RELOAD) { -#ifdef CSQC Weapons_ViewAnimation(SHOTGUN_RELOAD); +#ifdef CSQC pl.a_ammo1++; pl.a_ammo2--; @@ -236,9 +228,8 @@ void w_shotgun_release(void) #endif pl.w_idle_next = 0.5f; } else if (pl.a_ammo3 == SHOTTY_RELOAD_END) { -#ifdef CSQC Weapons_ViewAnimation(SHOTGUN_PUMP); -#else +#ifdef SSQC sound(pl, CHAN_WEAPON, "weapons/scock1.wav", 1.0, ATTN_NORM); #endif pl.a_ammo3 = SHOTTY_IDLE; diff --git a/Source/shared/valve/w_snark.c b/Source/shared/valve/w_snark.c index c3630e54..a9269986 100644 --- a/Source/shared/valve/w_snark.c +++ b/Source/shared/valve/w_snark.c @@ -26,9 +26,8 @@ void w_snark_pickup(void) void w_snark_draw(void) { -#ifdef CSQC Weapons_ViewAnimation(SNARK_DRAW); -#else +#ifdef SSQC player pl = (player)self; Weapons_UpdateAmmo(pl, __NULL__, pl.ammo_snark, __NULL__); #endif @@ -56,13 +55,12 @@ void w_snark_deploy(void) if (self.weapon <= 0.0 && self.aiment == __NULL__) { float shortest = 999999; - for (entity ef = world; (ef = find(ef, classname, "player"));) { + for (entity ef = world; (ef = findfloat(ef, movetype, MOVETYPE_WALK));) { float len = vlen(ef.origin - self.origin); - if (len < shortest && ef.health > 0) { + if (ef.classname != "snark" && len < shortest && ef.health > 0) { self.owner = __NULL__; self.aiment = ef; shortest = len; - setsize(self, [-16,-16,0],[16,16,32]); } } } @@ -80,7 +78,7 @@ void w_snark_deploy(void) makevectors(self.angles); traceline(self.origin, self.origin + (v_forward * 128), 0, self); - if (trace_ent.classname == "player") { + if (trace_ent.takedamage == DAMAGE_YES) { float pit = 100 + random(0,10); sound(self, CHAN_BODY, "squeek/sqk_deploy1.wav", 1.0, ATTN_NORM, pit); Damage_Apply(trace_ent, self, 10, trace_endpos, FALSE); @@ -102,6 +100,7 @@ void w_snark_deploy(void) static void snark_pain(int i) { } entity snark = spawn(); snark.owner = self; + snark.classname = "snark"; setmodel(snark, "models/w_squeak.mdl"); makevectors(self.v_angle); setorigin(snark, self.origin + v_forward * 32); @@ -137,9 +136,10 @@ void w_snark_primary(void) } #endif + Weapons_ViewAnimation(SNARK_THROW); + /* Audio-Visual Bit */ #ifdef CSQC - Weapons_ViewAnimation(SNARK_THROW); pl.a_ammo2--; #else w_snark_deploy(); diff --git a/Source/shared/valve/w_tripmine.c b/Source/shared/valve/w_tripmine.c index 86afd2db..ea040129 100644 --- a/Source/shared/valve/w_tripmine.c +++ b/Source/shared/valve/w_tripmine.c @@ -53,9 +53,8 @@ void w_tripmine_pickup(void) void w_tripmine_draw(void) { -#ifdef CSQC Weapons_ViewAnimation(TRIPMINE_DRAW); -#else +#ifdef SSQC player pl = (player)self; Weapons_UpdateAmmo(pl, __NULL__, pl.ammo_tripmine, __NULL__); #endif @@ -175,9 +174,8 @@ void w_tripmine_primary(void) return; } -#ifdef CSQC Weapons_ViewAnimation(TRIPMINE_FIRE2); -#else +#ifdef SSQC entity mine = spawn(); setmodel(mine, "models/v_tripmine.mdl"); setorigin(mine, trace_endpos); @@ -197,7 +195,6 @@ void w_tripmine_primary(void) } else { Weapons_UpdateAmmo(pl, __NULL__, pl.ammo_tripmine, __NULL__); } - #endif pl.w_attack_next = 0.5f; @@ -224,17 +221,15 @@ void w_tripmine_release(void) switch (r) { case 0: Weapons_ViewAnimation(TRIPMINE_IDLE1); - pl.w_idle_next = 3.0f; break; case 1: Weapons_ViewAnimation(TRIPMINE_IDLE2); - pl.w_idle_next = 2.0f; break; default: Weapons_ViewAnimation(TRIPMINE_FIDGET); - pl.w_idle_next = 3.333333f; break; } + pl.w_idle_next = 3.0f; } float w_tripmine_aimanim(void) diff --git a/Source/shared/valve/weapon_common.c b/Source/shared/valve/weapon_common.c index 7cfb06d4..e0685d3c 100644 --- a/Source/shared/valve/weapon_common.c +++ b/Source/shared/valve/weapon_common.c @@ -167,12 +167,14 @@ void Weapons_ViewAnimation(int i) #ifdef CSQC View_PlayAnimation(i); #else - WriteByte( MSG_MULTICAST, SVC_CGAMEPACKET ); + /*WriteByte( MSG_MULTICAST, SVC_CGAMEPACKET ); WriteByte( MSG_MULTICAST, EV_VIEWMODEL ); WriteByte( MSG_MULTICAST, i ); msg_entity = self; - multicast( [0,0,0], MULTICAST_ONE ); + multicast( [0,0,0], MULTICAST_ONE );*/ #endif + player pl = (player)self; + pl.weapontime = 0.0f; } #ifdef CSQC