X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Fweapons%2Fweapon%2Farc.qc;h=7a26bcdb7cf804d4cf69e14091d07d9472ce20ea;hp=5b982219e7cc6708dd0ba994b0e5d2501be34797;hb=7b059069be81cc44b313c4b6ff896efedcaf120d;hpb=585860c962df7da3cdc76f0b4e87ba4e028e42d5 diff --git a/qcsrc/common/weapons/weapon/arc.qc b/qcsrc/common/weapons/weapon/arc.qc index 5b982219e7..7a26bcdb7c 100644 --- a/qcsrc/common/weapons/weapon/arc.qc +++ b/qcsrc/common/weapons/weapon/arc.qc @@ -1,7 +1,6 @@ #include "arc.qh" #ifdef SVQC -spawnfunc(weapon_arc) { weapon_defaultspawnfunc(this, WEP_ARC); } bool W_Arc_Beam_Send(entity this, entity to, int sf) { @@ -31,21 +30,17 @@ bool W_Arc_Beam_Send(entity this, entity to, int sf) } if(sf & ARC_SF_START) // starting location { - WriteCoord(MSG_ENTITY, this.beam_start.x); - WriteCoord(MSG_ENTITY, this.beam_start.y); - WriteCoord(MSG_ENTITY, this.beam_start.z); + WriteVector(MSG_ENTITY, this.beam_start); } if(sf & ARC_SF_WANTDIR) // want/aim direction { - WriteCoord(MSG_ENTITY, this.beam_wantdir.x); - WriteCoord(MSG_ENTITY, this.beam_wantdir.y); - WriteCoord(MSG_ENTITY, this.beam_wantdir.z); + WriteVector(MSG_ENTITY, this.beam_wantdir); } if(sf & ARC_SF_BEAMDIR) // beam direction { - WriteCoord(MSG_ENTITY, this.beam_dir.x); - WriteCoord(MSG_ENTITY, this.beam_dir.y); - WriteCoord(MSG_ENTITY, this.beam_dir.z); + WriteAngle(MSG_ENTITY, this.beam_dir.x); + WriteAngle(MSG_ENTITY, this.beam_dir.y); + WriteAngle(MSG_ENTITY, this.beam_dir.z); } if(sf & ARC_SF_BEAMTYPE) // beam type { @@ -88,14 +83,14 @@ float Arc_GetHeat_Percent(entity player, .entity weaponentity) } void Arc_Player_SetHeat(entity player, .entity weaponentity) { - player.arc_heat_percent = Arc_GetHeat_Percent(player, weaponentity); + player.(weaponentity).arc_heat_percent = Arc_GetHeat_Percent(player, weaponentity); //dprint("Heat: ",ftos(player.arc_heat_percent*100),"%\n"); } void W_Arc_Bolt_Explode(entity this, entity directhitentity) { this.event_damage = func_null; - RadiusDamage(this, this.realowner, WEP_CVAR(arc, bolt_damage), WEP_CVAR(arc, bolt_edgedamage), WEP_CVAR(arc, bolt_radius), NULL, NULL, WEP_CVAR(arc, bolt_force), this.projectiledeathtype, directhitentity); + RadiusDamage(this, this.realowner, WEP_CVAR(arc, bolt_damage), WEP_CVAR(arc, bolt_edgedamage), WEP_CVAR(arc, bolt_radius), NULL, NULL, WEP_CVAR(arc, bolt_force), this.projectiledeathtype, this.weaponentity_fld, directhitentity); delete(this); } @@ -105,7 +100,7 @@ void W_Arc_Bolt_Explode_use(entity this, entity actor, entity trigger) W_Arc_Bolt_Explode(this, trigger); } -void W_Arc_Bolt_Damage(entity this, entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force) +void W_Arc_Bolt_Damage(entity this, entity inflictor, entity attacker, float damage, int deathtype, .entity weaponentity, vector hitloc, vector force) { if(this.health <= 0) return; @@ -132,7 +127,7 @@ void W_Arc_Attack_Bolt(Weapon thiswep, entity actor, .entity weaponentity) W_DecreaseAmmo(thiswep, actor, WEP_CVAR(arc, bolt_ammo), weaponentity); - W_SetupShot(actor, weaponentity, false, 2, SND_LASERGUN_FIRE, CH_WEAPON_A, WEP_CVAR(arc, bolt_damage)); + W_SetupShot(actor, weaponentity, false, 2, SND_LASERGUN_FIRE, CH_WEAPON_A, WEP_CVAR(arc, bolt_damage), WEP_ARC.m_id | HITTYPE_SECONDARY); Send_Effect(EFFECT_ARC_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1); @@ -155,6 +150,7 @@ void W_Arc_Attack_Bolt(Weapon thiswep, entity actor, .entity weaponentity) missile.nextthink = time + WEP_CVAR(arc, bolt_lifetime); PROJECTILE_MAKETRIGGER(missile); missile.projectiledeathtype = WEP_ARC.m_id | HITTYPE_SECONDARY; + missile.weaponentity_fld = weaponentity; setorigin(missile, w_shotorg); setsize(missile, '0 0 0', '0 0 0'); @@ -275,7 +271,8 @@ void W_Arc_Beam_Think(entity this) SND_Null, 0, WEP_CVAR(arc, beam_damage) * coefficient, - WEP_CVAR(arc, beam_range) + WEP_CVAR(arc, beam_range), + WEP_ARC.m_id ); // After teleport, "lock" the beam until the teleport is confirmed. @@ -505,6 +502,7 @@ void W_Arc_Beam_Think(entity this) own, rootdamage * coefficient * falloff, WEP_ARC.m_id, + weaponentity, hitorigin, WEP_CVAR(arc, beam_force) * new_dir * coefficient * falloff ); @@ -561,12 +559,12 @@ void W_Arc_Beam(float burst, entity actor, .entity weaponentity) void Arc_Smoke(entity actor, .entity weaponentity) { makevectors(actor.v_angle); - W_SetupShot_Range(actor,weaponentity,true,0,SND_Null,0,0,0); + W_SetupShot_Range(actor,weaponentity,true,0,SND_Null,0,0,0,WEP_ARC.m_id); // TODO: probably doesn't need deathtype, since this is just a prefire effect vector smoke_origin = w_shotorg + actor.velocity*frametime; if ( actor.arc_overheat > time ) { - if ( random() < actor.arc_heat_percent ) + if ( random() < actor.(weaponentity).arc_heat_percent ) Send_Effect(EFFECT_ARC_SMOKE, smoke_origin, '0 0 0', 1 ); if ( PHYS_INPUT_BUTTON_ATCK(actor) || PHYS_INPUT_BUTTON_ATCK2(actor) ) { @@ -754,6 +752,7 @@ METHOD(Arc, wr_playerdeath, void(entity thiswep, entity actor, .entity weaponent #endif #ifdef CSQC bool autocvar_cl_arcbeam_teamcolor = true; +bool autocvar_cl_arcbeam_simple = true; METHOD(Arc, wr_impacteffect, void(entity thiswep, entity actor)) { @@ -804,32 +803,37 @@ void Draw_ArcBeam_callback(vector start, vector hit, vector end) vector last_top = WarpZone_TransformOrigin(WarpZone_trace_transform, Draw_ArcBeam_callback_last_top); vector last_bottom = WarpZone_TransformOrigin(WarpZone_trace_transform, Draw_ArcBeam_callback_last_bottom); - R_BeginPolygon(beam.beam_image, DRAWFLAG_NORMAL); // DRAWFLAG_ADDITIVE - R_PolygonVertex( - top, - '0 0.5 0' + ('0 0.5 0' * (thickness / beam.beam_thickness)), - beam.beam_color, - beam.beam_alpha - ); - R_PolygonVertex( - last_top, - '0 0.5 0' + ('0 0.5 0' * (Draw_ArcBeam_callback_last_thickness / beam.beam_thickness)), - beam.beam_color, - beam.beam_alpha - ); - R_PolygonVertex( - last_bottom, - '0 0.5 0' * (1 - (Draw_ArcBeam_callback_last_thickness / beam.beam_thickness)), - beam.beam_color, - beam.beam_alpha - ); - R_PolygonVertex( - bottom, - '0 0.5 0' * (1 - (thickness / beam.beam_thickness)), - beam.beam_color, - beam.beam_alpha - ); - R_EndPolygon(); + if(autocvar_cl_arcbeam_simple) + Draw_CylindricLine(start, end, thickness, beam.beam_image, 0.25, -time * 3, beam.beam_color, beam.beam_alpha, DRAWFLAG_NORMAL, transformed_view_org); + else + { + R_BeginPolygon(beam.beam_image, DRAWFLAG_NORMAL); // DRAWFLAG_ADDITIVE + R_PolygonVertex( + top, + '0 0.5 0' + ('0 0.5 0' * (thickness / beam.beam_thickness)), + beam.beam_color, + beam.beam_alpha + ); + R_PolygonVertex( + last_top, + '0 0.5 0' + ('0 0.5 0' * (Draw_ArcBeam_callback_last_thickness / beam.beam_thickness)), + beam.beam_color, + beam.beam_alpha + ); + R_PolygonVertex( + last_bottom, + '0 0.5 0' * (1 - (Draw_ArcBeam_callback_last_thickness / beam.beam_thickness)), + beam.beam_color, + beam.beam_alpha + ); + R_PolygonVertex( + bottom, + '0 0.5 0' * (1 - (thickness / beam.beam_thickness)), + beam.beam_color, + beam.beam_alpha + ); + R_EndPolygon(); + } // draw trailing particles // NOTES: @@ -1225,9 +1229,7 @@ NET_HANDLE(ENT_CLIENT_ARC_BEAM, bool isnew) if(sf & ARC_SF_START) // starting location { - this.origin_x = ReadCoord(); - this.origin_y = ReadCoord(); - this.origin_z = ReadCoord(); + this.origin = ReadVector(); } else if(this.beam_usevieworigin) // infer the location from player location { @@ -1247,16 +1249,14 @@ NET_HANDLE(ENT_CLIENT_ARC_BEAM, bool isnew) if(sf & ARC_SF_WANTDIR) // want/aim direction { - this.v_angle_x = ReadCoord(); - this.v_angle_y = ReadCoord(); - this.v_angle_z = ReadCoord(); + this.v_angle = ReadVector(); } if(sf & ARC_SF_BEAMDIR) // beam direction { - this.angles_x = ReadCoord(); - this.angles_y = ReadCoord(); - this.angles_z = ReadCoord(); + this.angles_x = ReadAngle(); + this.angles_y = ReadAngle(); + this.angles_z = ReadAngle(); } if(sf & ARC_SF_BEAMTYPE) // beam type @@ -1277,17 +1277,18 @@ NET_HANDLE(ENT_CLIENT_ARC_BEAM, bool isnew) this.beam_hitlight[1] = 1; this.beam_hitlight[2] = 1; this.beam_hitlight[3] = 1; - this.beam_muzzleeffect = NULL; //(EFFECT_VORTEX_MUZZLEFLASH); + this.beam_muzzleeffect = EFFECT_Null; this.beam_muzzlelight[0] = 0; this.beam_muzzlelight[1] = 1; this.beam_muzzlelight[2] = 1; this.beam_muzzlelight[3] = 1; + this.beam_image = "particles/lgbeam"; if(this.beam_muzzleeffect) { setmodel(flash, MDL_ARC_MUZZLEFLASH); flash.alpha = this.beam_alpha; flash.colormod = this.beam_color; - flash.scale = 0.5; + flash.scale = 0.35; } break; } @@ -1302,7 +1303,7 @@ NET_HANDLE(ENT_CLIENT_ARC_BEAM, bool isnew) this.beam_hitlight[1] = 1; this.beam_hitlight[2] = 1; this.beam_hitlight[3] = 1; - this.beam_muzzleeffect = NULL; // (EFFECT_GRENADE_MUZZLEFLASH); + this.beam_muzzleeffect = EFFECT_Null; // (EFFECT_GRENADE_MUZZLEFLASH); this.beam_muzzlelight[0] = 0; this.beam_muzzlelight[1] = 1; this.beam_muzzlelight[2] = 1; @@ -1313,7 +1314,7 @@ NET_HANDLE(ENT_CLIENT_ARC_BEAM, bool isnew) setmodel(flash, MDL_ARC_MUZZLEFLASH); flash.alpha = this.beam_alpha; flash.colormod = this.beam_color; - flash.scale = 0.5; + flash.scale = 0.35; } break; } @@ -1328,7 +1329,7 @@ NET_HANDLE(ENT_CLIENT_ARC_BEAM, bool isnew) this.beam_hitlight[1] = 1; this.beam_hitlight[2] = 1; this.beam_hitlight[3] = 1; - this.beam_muzzleeffect = NULL; //(EFFECT_VORTEX_MUZZLEFLASH); + this.beam_muzzleeffect = EFFECT_Null; this.beam_muzzlelight[0] = 0; this.beam_muzzlelight[1] = 1; this.beam_muzzlelight[2] = 1; @@ -1339,7 +1340,7 @@ NET_HANDLE(ENT_CLIENT_ARC_BEAM, bool isnew) setmodel(flash, MDL_ARC_MUZZLEFLASH); flash.alpha = this.beam_alpha; flash.colormod = this.beam_color; - flash.scale = 0.5; + flash.scale = 0.35; } break; } @@ -1354,7 +1355,7 @@ NET_HANDLE(ENT_CLIENT_ARC_BEAM, bool isnew) this.beam_hitlight[1] = 1; this.beam_hitlight[2] = 0; this.beam_hitlight[3] = 0; - this.beam_muzzleeffect = NULL; //(EFFECT_VORTEX_MUZZLEFLASH); + this.beam_muzzleeffect = EFFECT_Null; this.beam_muzzlelight[0] = 50; this.beam_muzzlelight[1] = 1; this.beam_muzzlelight[2] = 0; @@ -1365,7 +1366,7 @@ NET_HANDLE(ENT_CLIENT_ARC_BEAM, bool isnew) setmodel(flash, MDL_ARC_MUZZLEFLASH); flash.alpha = this.beam_alpha; flash.colormod = this.beam_color; - flash.scale = 0.5; + flash.scale = 0.35; } break; } @@ -1380,7 +1381,7 @@ NET_HANDLE(ENT_CLIENT_ARC_BEAM, bool isnew) this.beam_hitlight[1] = 1; this.beam_hitlight[2] = 1; this.beam_hitlight[3] = 1; - this.beam_muzzleeffect = NULL; //(EFFECT_VORTEX_MUZZLEFLASH); + this.beam_muzzleeffect = EFFECT_Null; this.beam_muzzlelight[0] = 0; this.beam_muzzlelight[1] = 1; this.beam_muzzlelight[2] = 1; @@ -1391,7 +1392,7 @@ NET_HANDLE(ENT_CLIENT_ARC_BEAM, bool isnew) setmodel(flash, MDL_ARC_MUZZLEFLASH); flash.alpha = this.beam_alpha; flash.colormod = this.beam_color; - flash.scale = 0.5; + flash.scale = 0.35; } break; } @@ -1406,7 +1407,7 @@ NET_HANDLE(ENT_CLIENT_ARC_BEAM, bool isnew) this.beam_hitlight[1] = 1; this.beam_hitlight[2] = 1; this.beam_hitlight[3] = 1; - this.beam_muzzleeffect = NULL; //(EFFECT_VORTEX_MUZZLEFLASH); + this.beam_muzzleeffect = EFFECT_Null; this.beam_muzzlelight[0] = 0; this.beam_muzzlelight[1] = 1; this.beam_muzzlelight[2] = 1; @@ -1417,7 +1418,7 @@ NET_HANDLE(ENT_CLIENT_ARC_BEAM, bool isnew) setmodel(flash, MDL_ARC_MUZZLEFLASH); flash.alpha = this.beam_alpha; flash.colormod = this.beam_color; - flash.scale = 0.5; + flash.scale = 0.35; } break; } @@ -1432,7 +1433,7 @@ NET_HANDLE(ENT_CLIENT_ARC_BEAM, bool isnew) this.beam_hitlight[1] = 1; this.beam_hitlight[2] = 1; this.beam_hitlight[3] = 1; - this.beam_muzzleeffect = NULL; //(EFFECT_VORTEX_MUZZLEFLASH); + this.beam_muzzleeffect = EFFECT_Null; this.beam_muzzlelight[0] = 0; this.beam_muzzlelight[1] = 1; this.beam_muzzlelight[2] = 1; @@ -1443,7 +1444,7 @@ NET_HANDLE(ENT_CLIENT_ARC_BEAM, bool isnew) setmodel(flash, MDL_ARC_MUZZLEFLASH); flash.alpha = this.beam_alpha; flash.colormod = this.beam_color; - flash.scale = 0.5; + flash.scale = 0.35; } break; } @@ -1458,7 +1459,7 @@ NET_HANDLE(ENT_CLIENT_ARC_BEAM, bool isnew) this.beam_hitlight[1] = 1; this.beam_hitlight[2] = 1; this.beam_hitlight[3] = 1; - this.beam_muzzleeffect = NULL; //(EFFECT_VORTEX_MUZZLEFLASH); + this.beam_muzzleeffect = EFFECT_Null; this.beam_muzzlelight[0] = 0; this.beam_muzzlelight[1] = 1; this.beam_muzzlelight[2] = 1; @@ -1469,7 +1470,7 @@ NET_HANDLE(ENT_CLIENT_ARC_BEAM, bool isnew) setmodel(flash, MDL_ARC_MUZZLEFLASH); flash.alpha = this.beam_alpha; flash.colormod = this.beam_color; - flash.scale = 0.5; + flash.scale = 0.35; } break; } @@ -1486,7 +1487,7 @@ NET_HANDLE(ENT_CLIENT_ARC_BEAM, bool isnew) this.beam_hitlight[1] = 1; this.beam_hitlight[2] = 1; this.beam_hitlight[3] = 1; - this.beam_muzzleeffect = NULL; //(EFFECT_VORTEX_MUZZLEFLASH); + this.beam_muzzleeffect = EFFECT_Null; this.beam_muzzlelight[0] = 0; this.beam_muzzlelight[1] = 1; this.beam_muzzlelight[2] = 1; @@ -1497,7 +1498,7 @@ NET_HANDLE(ENT_CLIENT_ARC_BEAM, bool isnew) setmodel(flash, MDL_ARC_MUZZLEFLASH); flash.alpha = this.beam_alpha; flash.colormod = this.beam_color; - flash.scale = 0.5; + flash.scale = 0.35; } break; }