/* ammotype */ ATTRIB(Arc, ammo_field, .int, ammo_cells);
/* impulse */ ATTRIB(Arc, impulse, int, 3);
/* flags */ ATTRIB(Arc, spawnflags, int, WEP_FLAG_NORMAL);
-/* rating */ ATTRIB(Arc, bot_pickupbasevalue, float, BOT_PICKUP_RATING_HIGH);
+/* rating */ ATTRIB(Arc, bot_pickupbasevalue, float, 8000);
/* color */ ATTRIB(Arc, wpcolor, vector, '1 1 1');
/* modelname */ ATTRIB(Arc, mdl, string, "arc");
#ifdef GAMEQC
missile.damageforcescale = WEP_CVAR(arc, bolt_damageforcescale);
missile.event_damage = W_Arc_Bolt_Damage;
missile.damagedbycontents = true;
+ IL_PUSH(g_damagedbycontents, missile);
settouch(missile, W_Arc_Bolt_Touch);
missile.use = W_Arc_Bolt_Explode_use;
void W_Arc_Beam_Think(entity this)
{
.entity weaponentity = this.weaponentity_fld;
- if(this != this.owner.(weaponentity).arc_beam)
+ entity own = this.owner;
+ if(this != own.(weaponentity).arc_beam)
{
delete(this);
return;
}
float burst = 0;
- if( (PHYS_INPUT_BUTTON_ATCK2(this.owner) && !WEP_CVAR(arc, bolt)) || this.beam_bursting)
+ if( (PHYS_INPUT_BUTTON_ATCK2(own) && !WEP_CVAR(arc, bolt)) || this.beam_bursting)
{
if(!this.beam_bursting)
this.beam_bursting = true;
Weapon thiswep = WEP_ARC;
if(
- !IS_PLAYER(this.owner)
+ !IS_PLAYER(own)
||
- (this.owner.(thiswep.ammo_field) <= 0 && !(this.owner.items & IT_UNLIMITED_WEAPON_AMMO))
+ (!thiswep.wr_checkammo1(thiswep, own, weaponentity) && !(own.items & IT_UNLIMITED_WEAPON_AMMO))
||
- IS_DEAD(this.owner)
+ IS_DEAD(own)
||
- forbidWeaponUse(this.owner)
+ forbidWeaponUse(own)
||
- (!PHYS_INPUT_BUTTON_ATCK(this.owner) && !burst )
+ own.(weaponentity).m_switchweapon != WEP_ARC
||
- this.owner.vehicle
+ (!PHYS_INPUT_BUTTON_ATCK(own) && !burst )
+ ||
+ own.vehicle
||
(WEP_CVAR(arc, overheat_max) > 0 && this.beam_heat >= WEP_CVAR(arc, overheat_max))
)
if ( cooldown_speed )
{
if ( WEP_CVAR(arc, cooldown_release) || (WEP_CVAR(arc, overheat_max) > 0 && this.beam_heat >= WEP_CVAR(arc, overheat_max)) )
- this.owner.arc_overheat = time + this.beam_heat / cooldown_speed;
- this.owner.arc_cooldown = cooldown_speed;
+ own.arc_overheat = time + this.beam_heat / cooldown_speed;
+ own.arc_cooldown = cooldown_speed;
}
if ( WEP_CVAR(arc, overheat_max) > 0 && this.beam_heat >= WEP_CVAR(arc, overheat_max) )
}
}
- if(this == this.owner.(weaponentity).arc_beam) { this.owner.(weaponentity).arc_beam = NULL; }
- entity own = this.owner;
- Weapon w = WEP_ARC;
- if(!w.wr_checkammo1(w, own, weaponentity) && !w.wr_checkammo2(w, own, weaponentity))
- if(!(own.items & IT_UNLIMITED_WEAPON_AMMO))
+ if(this == own.(weaponentity).arc_beam) { own.(weaponentity).arc_beam = NULL; }
+ if(!thiswep.wr_checkammo1(thiswep, own, weaponentity) && !(own.items & IT_UNLIMITED_WEAPON_AMMO))
{
// note: this doesn't force the switch
W_SwitchToOtherWeapon(own, weaponentity);
+ own.(weaponentity).arc_BUTTON_ATCK_prev = false; // hax
}
delete(this);
return;
// decrease ammo
float coefficient = frametime;
- if(!(this.owner.items & IT_UNLIMITED_WEAPON_AMMO))
+ if(!(own.items & IT_UNLIMITED_WEAPON_AMMO))
{
float rootammo;
if(burst)
if(rootammo)
{
- coefficient = min(coefficient, this.owner.(thiswep.ammo_field) / rootammo);
- this.owner.(thiswep.ammo_field) = max(0, this.owner.(thiswep.ammo_field) - (rootammo * frametime));
+ coefficient = min(coefficient, own.(thiswep.ammo_field) / rootammo);
+ own.(thiswep.ammo_field) = max(0, own.(thiswep.ammo_field) - (rootammo * frametime));
}
}
float heat_speed = burst ? WEP_CVAR(arc, burst_heat) : WEP_CVAR(arc, beam_heat);
this.beam_heat = min( WEP_CVAR(arc, overheat_max), this.beam_heat + heat_speed*frametime );
- makevectors(this.owner.v_angle);
+ makevectors(own.v_angle);
W_SetupShot_Range(
- this.owner,
+ own,
weaponentity, // TODO
true,
0,
);
// After teleport, "lock" the beam until the teleport is confirmed.
- if (time < this.beam_teleporttime + ANTILAG_LATENCY(this.owner)) {
+ if (time < this.beam_teleporttime + ANTILAG_LATENCY(own)) {
w_shotdir = this.beam_dir;
}
vector new_dir = normalize(new_origin - last_origin);
WarpZone_traceline_antilag(
- this.owner,
+ own,
last_origin,
new_origin,
MOVE_NORMAL,
- this.owner,
- ANTILAG_LATENCY(this.owner)
+ own,
+ ANTILAG_LATENCY(own)
);
// Do all the transforms for warpzones right now, as we already
vlen(WarpZone_UnTransformOrigin(WarpZone_trace_transform, hitorigin) - w_shotorg)
);
- if(is_player && SAME_TEAM(this.owner, trace_ent))
+ if(is_player && SAME_TEAM(own, trace_ent))
{
float roothealth, rootarmor;
if(burst)
else
{ rootdamage = WEP_CVAR(arc, beam_nonplayerdamage); }
- if(accuracy_isgooddamage(this.owner, trace_ent))
+ if(accuracy_isgooddamage(own, trace_ent))
{
accuracy_add(
- this.owner,
+ own,
WEP_ARC.m_id,
0,
rootdamage * coefficient * falloff
Damage(
trace_ent,
- this.owner,
- this.owner,
+ own,
+ own,
rootdamage * coefficient * falloff,
WEP_ARC.m_id,
hitorigin,
this.beam_type = new_beam_type;
}
- this.owner.(weaponentity).beam_prev = time;
+ own.(weaponentity).beam_prev = time;
this.nextthink = time;
}
}
}
-METHOD(Arc, wr_aim, void(entity thiswep, entity actor))
+METHOD(Arc, wr_aim, void(entity thiswep, entity actor, .entity weaponentity))
{
if(WEP_CVAR(arc, beam_botaimspeed))
{
PHYS_INPUT_BUTTON_ATCK(actor) = bot_aim(
actor,
+ weaponentity,
WEP_CVAR(arc, beam_botaimspeed),
0,
WEP_CVAR(arc, beam_botaimlifetime),
{
PHYS_INPUT_BUTTON_ATCK(actor) = bot_aim(
actor,
+ weaponentity,
1000000,
0,
0.001,