X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fweapons%2Fweapon%2Fhlac.qc;h=3bc2258207990046fa27fc71cc8428e45b00c709;hb=HEAD;hp=71c2c73202bf10a65bbd2a02967a4ab20269ccb1;hpb=90d9f7c775306324957323d53d5a4ad995d999e3;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/weapons/weapon/hlac.qc b/qcsrc/common/weapons/weapon/hlac.qc index 71c2c7320..18dde7440 100644 --- a/qcsrc/common/weapons/weapon/hlac.qc +++ b/qcsrc/common/weapons/weapon/hlac.qc @@ -21,17 +21,16 @@ void W_HLAC_Touch(entity this, entity toucher) void W_HLAC_Attack(Weapon thiswep, entity actor, .entity weaponentity) { entity missile; - float spread; W_DecreaseAmmo(thiswep, actor, WEP_CVAR_PRI(hlac, ammo), weaponentity); - spread = WEP_CVAR_PRI(hlac, spread_min) + (WEP_CVAR_PRI(hlac, spread_add) * actor.(weaponentity).misc_bulletcounter); - spread = min(spread,WEP_CVAR_PRI(hlac, spread_max)); - if(actor.crouch) - spread = spread * WEP_CVAR_PRI(hlac, spread_crouchmod); + float spread = WEP_CVAR_PRI(hlac, spread_min) + (WEP_CVAR_PRI(hlac, spread_add) * actor.(weaponentity).misc_bulletcounter); + spread = min(spread,WEP_CVAR_PRI(hlac, spread_max)); + if(IS_DUCKED(actor)) + spread = spread * WEP_CVAR_PRI(hlac, spread_crouchmod); W_SetupShot(actor, weaponentity, false, 3, SND_LASERGUN_FIRE, CH_WEAPON_A, WEP_CVAR_PRI(hlac, damage), thiswep.m_id); - W_MuzzleFlash(actor, weaponentity, EFFECT_BLASTER_MUZZLEFLASH, w_shotorg, w_shotdir * 1000); + W_MuzzleFlash(thiswep, actor, weaponentity, w_shotorg, w_shotdir); if(!autocvar_g_norecoil) { actor.punchangle_x = random() - 0.5; @@ -42,7 +41,7 @@ void W_HLAC_Attack(Weapon thiswep, entity actor, .entity weaponentity) missile.owner = missile.realowner = actor; missile.bot_dodge = true; - missile.bot_dodgerating = WEP_CVAR_PRI(hlac, damage); + missile.bot_dodgerating = WEP_CVAR_PRI(hlac, damage); set_movetype(missile, MOVETYPE_FLY); PROJECTILE_MAKETRIGGER(missile); @@ -56,7 +55,7 @@ void W_HLAC_Attack(Weapon thiswep, entity actor, .entity weaponentity) settouch(missile, W_HLAC_Touch); setthink(missile, SUB_Remove); - missile.nextthink = time + WEP_CVAR_PRI(hlac, lifetime); + missile.nextthink = time + WEP_CVAR_PRI(hlac, lifetime); missile.flags = FL_PROJECTILE; IL_PUSH(g_projectiles, missile); @@ -72,47 +71,54 @@ void W_HLAC_Attack(Weapon thiswep, entity actor, .entity weaponentity) void W_HLAC_Attack2(Weapon thiswep, entity actor, .entity weaponentity) { entity missile; - float spread; + float spread = WEP_CVAR_SEC(hlac, spread); - spread = WEP_CVAR_SEC(hlac, spread); + if(IS_DUCKED(actor)) + spread = spread * WEP_CVAR_SEC(hlac, spread_crouchmod); + W_SetupShot(actor, weaponentity, false, 3, SND_LASERGUN_FIRE, CH_WEAPON_A, WEP_CVAR_SEC(hlac, damage) * WEP_CVAR_SEC(hlac, shots), thiswep.m_id | HITTYPE_SECONDARY); + W_MuzzleFlash(thiswep, actor, weaponentity, w_shotorg, w_shotdir); + W_DecreaseAmmo(thiswep, actor, WEP_CVAR_SEC(hlac, ammo), weaponentity); - if(actor.crouch) - spread = spread * WEP_CVAR_SEC(hlac, spread_crouchmod); + for(int j = WEP_CVAR_SEC(hlac, shots); j > 0; --j) + { + missile = new(hlacbolt); + missile.owner = missile.realowner = actor; + missile.bot_dodge = true; - W_SetupShot(actor, weaponentity, false, 3, SND_LASERGUN_FIRE, CH_WEAPON_A, WEP_CVAR_SEC(hlac, damage), thiswep.m_id | HITTYPE_SECONDARY); - W_MuzzleFlash(actor, weaponentity, EFFECT_BLASTER_MUZZLEFLASH, w_shotorg, w_shotdir * 1000); + missile.bot_dodgerating = WEP_CVAR_SEC(hlac, damage); - missile = new(hlacbolt); - missile.owner = missile.realowner = actor; - missile.bot_dodge = true; + set_movetype(missile, MOVETYPE_FLY); + PROJECTILE_MAKETRIGGER(missile); - missile.bot_dodgerating = WEP_CVAR_SEC(hlac, damage); + setorigin(missile, w_shotorg); + setsize(missile, '0 0 0', '0 0 0'); - set_movetype(missile, MOVETYPE_FLY); - PROJECTILE_MAKETRIGGER(missile); + W_SetupProjVelocity_Basic(missile, WEP_CVAR_SEC(hlac, speed), spread); + //missile.angles = vectoangles(missile.velocity); // csqc - setorigin(missile, w_shotorg); - setsize(missile, '0 0 0', '0 0 0'); + settouch(missile, W_HLAC_Touch); + setthink(missile, SUB_Remove); - W_SetupProjVelocity_Basic(missile, WEP_CVAR_SEC(hlac, speed), spread); - //missile.angles = vectoangles(missile.velocity); // csqc + missile.nextthink = time + WEP_CVAR_SEC(hlac, lifetime); - settouch(missile, W_HLAC_Touch); - setthink(missile, SUB_Remove); + missile.flags = FL_PROJECTILE; + IL_PUSH(g_projectiles, missile); + IL_PUSH(g_bot_dodge, missile); + missile.missile_flags = MIF_SPLASH; + missile.projectiledeathtype = thiswep.m_id | HITTYPE_SECONDARY; + missile.weaponentity_fld = weaponentity; - missile.nextthink = time + WEP_CVAR_SEC(hlac, lifetime); + CSQCProjectile(missile, true, PROJECTILE_HLAC, true); - missile.flags = FL_PROJECTILE; - IL_PUSH(g_projectiles, missile); - IL_PUSH(g_bot_dodge, missile); - missile.missile_flags = MIF_SPLASH; - missile.projectiledeathtype = thiswep.m_id | HITTYPE_SECONDARY; - missile.weaponentity_fld = weaponentity; - - CSQCProjectile(missile, true, PROJECTILE_HLAC, true); + MUTATOR_CALLHOOK(EditProjectile, actor, missile); + } - MUTATOR_CALLHOOK(EditProjectile, actor, missile); + if(!autocvar_g_norecoil) + { + actor.punchangle_x = random() - 0.5; + actor.punchangle_y = random() - 0.5; + } } // weapon frames @@ -137,7 +143,7 @@ void W_HLAC_Attack_Frame(Weapon thiswep, entity actor, .entity weaponentity, int ATTACK_FINISHED(actor, weaponentity) = time + WEP_CVAR_PRI(hlac, refire) * W_WeaponRateFactor(actor); W_HLAC_Attack(thiswep, actor, weaponentity); actor.(weaponentity).misc_bulletcounter = actor.(weaponentity).misc_bulletcounter + 1; - weapon_thinkf(actor, weaponentity, WFRAME_FIRE1, WEP_CVAR_PRI(hlac, refire), W_HLAC_Attack_Frame); + weapon_thinkf(actor, weaponentity, WFRAME_FIRE1, WEP_CVAR_PRI(hlac, refire), W_HLAC_Attack_Frame); } else { @@ -145,25 +151,9 @@ void W_HLAC_Attack_Frame(Weapon thiswep, entity actor, .entity weaponentity, int } } -void W_HLAC_Attack2_Frame(Weapon thiswep, entity actor, .entity weaponentity) -{ - float i; - - W_DecreaseAmmo(thiswep, actor, WEP_CVAR_SEC(hlac, ammo), weaponentity); - - for(i=WEP_CVAR_SEC(hlac, shots);i>0;--i) - W_HLAC_Attack2(thiswep, actor, weaponentity); - - if(!autocvar_g_norecoil) - { - actor.punchangle_x = random() - 0.5; - actor.punchangle_y = random() - 0.5; - } -} - METHOD(HLAC, wr_aim, void(entity thiswep, entity actor, .entity weaponentity)) { - PHYS_INPUT_BUTTON_ATCK(actor) = bot_aim(actor, weaponentity, WEP_CVAR_PRI(hlac, speed), 0, WEP_CVAR_PRI(hlac, lifetime), false); + PHYS_INPUT_BUTTON_ATCK(actor) = bot_aim(actor, weaponentity, WEP_CVAR_PRI(hlac, speed), 0, WEP_CVAR_PRI(hlac, lifetime), false, true); } METHOD(HLAC, wr_think, void(entity thiswep, entity actor, .entity weaponentity, int fire)) { @@ -183,7 +173,7 @@ METHOD(HLAC, wr_think, void(entity thiswep, entity actor, .entity weaponentity, { if(weapon_prepareattack(thiswep, actor, weaponentity, true, WEP_CVAR_SEC(hlac, refire))) { - W_HLAC_Attack2_Frame(thiswep, actor, weaponentity); + W_HLAC_Attack2(thiswep, actor, weaponentity); weapon_thinkf(actor, weaponentity, WFRAME_FIRE2, WEP_CVAR_SEC(hlac, animtime), w_ready); } } @@ -218,8 +208,7 @@ METHOD(HLAC, wr_killmessage, Notification(entity thiswep)) METHOD(HLAC, wr_impacteffect, void(entity thiswep, entity actor)) { - vector org2; - org2 = w_org + w_backoff * 6; + vector org2 = w_org + w_backoff * 2; pointparticles(EFFECT_BLASTER_IMPACT, org2, w_backoff * 1000, 1); if(!w_issilent) sound(actor, CH_SHOTS, SND_LASERIMPACT, VOL_BASE, ATTN_NORM);