X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Fweapons%2Fweapon%2Fhlac.qc;h=d89cdb1287051f2d49ed6d12f89d9f66a15492f2;hp=8f501653869caad8908a2723ad435dbfd70ff243;hb=6411a86b7a90e28527ce219c13e2d37c527f2ed6;hpb=195d267efd270e8d9ff9b4565f67d5aa4dc7681f diff --git a/qcsrc/common/weapons/weapon/hlac.qc b/qcsrc/common/weapons/weapon/hlac.qc index 8f50165386..d89cdb1287 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), WEP_HLAC.m_id); - Send_Effect(EFFECT_BLASTER_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1); + W_SetupShot(actor, weaponentity, false, 3, SND_LASERGUN_FIRE, CH_WEAPON_A, WEP_CVAR_PRI(hlac, damage), thiswep.m_id); + 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,12 +55,12 @@ 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); IL_PUSH(g_bot_dodge, missile); - missile.projectiledeathtype = WEP_HLAC.m_id; + missile.projectiledeathtype = thiswep.m_id; missile.weaponentity_fld = weaponentity; CSQCProjectile(missile, true, PROJECTILE_HLAC, true); @@ -69,50 +68,57 @@ void W_HLAC_Attack(Weapon thiswep, entity actor, .entity weaponentity) MUTATOR_CALLHOOK(EditProjectile, actor, missile); } -void W_HLAC_Attack2(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), WEP_HLAC.m_id | HITTYPE_SECONDARY); - Send_Effect(EFFECT_BLASTER_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1); + 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 = WEP_HLAC.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 @@ -127,18 +133,17 @@ void W_HLAC_Attack_Frame(Weapon thiswep, entity actor, .entity weaponentity, int if(PHYS_INPUT_BUTTON_ATCK(actor)) { if(!thiswep.wr_checkammo1(thiswep, actor, weaponentity)) - if(!(actor.items & IT_UNLIMITED_WEAPON_AMMO)) + if(!(actor.items & IT_UNLIMITED_AMMO)) { W_SwitchWeapon_Force(actor, w_getbestweapon(actor, weaponentity), weaponentity); w_ready(thiswep, actor, weaponentity, fire); return; } - int slot = weaponslot(weaponentity); - ATTACK_FINISHED(actor, slot) = time + WEP_CVAR_PRI(hlac, refire) * W_WeaponRateFactor(actor); - W_HLAC_Attack(WEP_HLAC, actor, weaponentity); + 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 { @@ -146,22 +151,6 @@ 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(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); @@ -184,21 +173,21 @@ 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); } } } METHOD(HLAC, wr_checkammo1, bool(entity thiswep, entity actor, .entity weaponentity)) { - float ammo_amount = GetResourceAmount(actor, thiswep.ammo_type) >= WEP_CVAR_PRI(hlac, ammo); - ammo_amount += actor.(weaponentity).(weapon_load[WEP_HLAC.m_id]) >= WEP_CVAR_PRI(hlac, ammo); + float ammo_amount = GetResource(actor, thiswep.ammo_type) >= WEP_CVAR_PRI(hlac, ammo); + ammo_amount += actor.(weaponentity).(weapon_load[thiswep.m_id]) >= WEP_CVAR_PRI(hlac, ammo); return ammo_amount; } METHOD(HLAC, wr_checkammo2, bool(entity thiswep, entity actor, .entity weaponentity)) { - float ammo_amount = GetResourceAmount(actor, thiswep.ammo_type) >= WEP_CVAR_SEC(hlac, ammo); - ammo_amount += actor.(weaponentity).(weapon_load[WEP_HLAC.m_id]) >= WEP_CVAR_SEC(hlac, ammo); + float ammo_amount = GetResource(actor, thiswep.ammo_type) >= WEP_CVAR_SEC(hlac, ammo); + ammo_amount += actor.(weaponentity).(weapon_load[thiswep.m_id]) >= WEP_CVAR_SEC(hlac, ammo); return ammo_amount; } METHOD(HLAC, wr_reload, void(entity thiswep, entity actor, .entity weaponentity))