X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fweapons%2Fweapon%2Farc.qc;h=c4c396fce597d44f796b826ccfebeb41a95a9307;hb=71eb8f743b4e5cb924087f07995a6ef3f2180861;hp=44fd539bebc5feca780e89e059f5a5f7de1c8461;hpb=86ffc5c159e147eed742ec9169c37cbf137df852;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/weapons/weapon/arc.qc b/qcsrc/common/weapons/weapon/arc.qc index 44fd539be..c4c396fce 100644 --- a/qcsrc/common/weapons/weapon/arc.qc +++ b/qcsrc/common/weapons/weapon/arc.qc @@ -1,8 +1,8 @@ #include "arc.qh" #ifdef SVQC -#include #include +#include bool W_Arc_Beam_Send(entity this, entity to, int sf) { @@ -207,11 +207,16 @@ void W_Arc_Beam_Think(entity this) Weapon thiswep = WEP_ARC; + // TODO: use standard weapon use checks here! if( !IS_PLAYER(own) || IS_DEAD(own) || + STAT(FROZEN, own) + || + game_stopped + || !weapon_prepareattack_check(thiswep, own, weaponentity, this.beam_bursting, -1) || own.(weaponentity).m_switchweapon != WEP_ARC @@ -575,9 +580,14 @@ void W_Arc_Attack(Weapon thiswep, entity actor, .entity weaponentity, int fire) } void Arc_Smoke(Weapon thiswep, entity actor, .entity weaponentity, int fire) { - // TODO: spamming this without checking any refires is asking for trouble! + // calculate a rough shot origin to show the effect from TODO: move this to the client side! makevectors(actor.v_angle); - W_SetupShot_Range(actor,weaponentity,false,0,SND_Null,0,0,0,thiswep.m_id); // TODO: probably doesn't need deathtype, since this is just a prefire effect + w_shotdir = v_forward; + vector md = actor.(weaponentity).movedir; + vector vecs = ((md.x > 0) ? md : '0 0 0'); + vector dv = v_forward * vecs.x + v_right * -vecs.y + v_up * vecs.z; + w_shotorg = actor.origin + actor.view_ofs + dv; + //W_SetupShot_Range(actor,weaponentity,false,0,SND_Null,0,0,0,thiswep.m_id); vector smoke_origin = w_shotorg + actor.velocity*frametime; if ( actor.arc_overheat > time ) @@ -679,7 +689,7 @@ METHOD(Arc, wr_think, void(entity thiswep, entity actor, .entity weaponentity, i { if(weapon_prepareattack(thiswep, actor, weaponentity, true, 0)) { - if(!thiswep.wr_checkammo2(thiswep, actor, weaponentity)) + if(!thiswep.wr_checkammo2(thiswep, actor, weaponentity)) if(!(actor.items & IT_UNLIMITED_AMMO)) { W_SwitchWeapon_Force(actor, w_getbestweapon(actor, weaponentity), weaponentity); @@ -930,7 +940,14 @@ void Draw_ArcBeam(entity this) // into a weapon system for client code. // find where we are aiming - vector myviewangle = ((autocvar_chase_active) ? warpzone_save_view_angles : view_angles); + vector myviewangle = view_angles; + if (autocvar_chase_active) + { + if (autocvar_cl_lockview) + myviewangle = eX * csqcplayer.v_angle.x + eY * csqcplayer.angles.y; + else + myviewangle = warpzone_save_view_angles; + } vector forward, right, up; MAKE_VECTORS(myviewangle, forward, right, up); entity wepent = viewmodels[this.beam_slot]; @@ -1237,7 +1254,7 @@ NET_HANDLE(ENT_CLIENT_ARC_BEAM, bool isnew) this.move_time = time; loopsound(this, CH_SHOTS_SINGLE, SND_ARC_LOOP, VOL_BASE, ATTEN_NORM); - flash = spawn(); + flash = new(arc_flash); flash.owner = this; flash.effects = EF_ADDITIVE | EF_FULLBRIGHT; //flash.drawmask = MASK_NORMAL;