From: Lyberta Date: Sat, 11 Mar 2017 13:41:47 +0000 (+0300) Subject: Reduce code duplication in overkill machinegun. X-Git-Tag: xonotic-v0.8.5~2119^2~87 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=ab6abfdce28cd96c1b56ae2cd28d05941f25dd3b;p=xonotic%2Fxonotic-data.pk3dir.git Reduce code duplication in overkill machinegun. --- diff --git a/bal-wep-overkill.cfg b/bal-wep-overkill.cfg index e166459bc..430cbf56f 100644 --- a/bal-wep-overkill.cfg +++ b/bal-wep-overkill.cfg @@ -876,7 +876,6 @@ set g_balance_okmachinegun_secondary_refire 0.7 set g_balance_okmachinegun_secondary_shotangle 0 set g_balance_okmachinegun_secondary_speed 6000 set g_balance_okmachinegun_secondary_spread 0 -set g_balance_okmachinegun_secondary_type 2 set g_balance_okmachinegun_solidpenetration 13.1 set g_balance_okmachinegun_spread_add 0.012 set g_balance_okmachinegun_spread_max 0.05 diff --git a/bal-wep-xonotic.cfg b/bal-wep-xonotic.cfg index b204dffe1..e4c11b474 100644 --- a/bal-wep-xonotic.cfg +++ b/bal-wep-xonotic.cfg @@ -877,7 +877,6 @@ set g_balance_okmachinegun_secondary_refire 0.7 set g_balance_okmachinegun_secondary_shotangle 0 set g_balance_okmachinegun_secondary_speed 6000 set g_balance_okmachinegun_secondary_spread 0 -set g_balance_okmachinegun_secondary_type 1 set g_balance_okmachinegun_solidpenetration 13.1 set g_balance_okmachinegun_spread_add 0.012 set g_balance_okmachinegun_spread_max 0.05 diff --git a/qcsrc/common/mutators/mutator/overkill/okmachinegun.qc b/qcsrc/common/mutators/mutator/overkill/okmachinegun.qc index 76ec56fc2..b08f506a1 100644 --- a/qcsrc/common/mutators/mutator/overkill/okmachinegun.qc +++ b/qcsrc/common/mutators/mutator/overkill/okmachinegun.qc @@ -13,43 +13,6 @@ spawnfunc(weapon_okmachinegun) weapon_defaultspawnfunc(this, WEP_OVERKILL_MACHINEGUN); } -void W_OverkillMachineGun_MuzzleFlash_Think(entity this) -{ - this.frame += 2; - this.scale *= 0.5; - this.alpha -= 0.25; - this.nextthink = time + 0.05; - - if(this.alpha <= 0) - { - setthink(this, SUB_Remove); - this.nextthink = time; - this.realowner.muzzle_flash = NULL; - return; - } - -} - -void W_OverkillMachineGun_MuzzleFlash(entity actor, .entity weaponentity) -{ - entity wepent = actor.(weaponentity); - - if(wepent.muzzle_flash == NULL) - wepent.muzzle_flash = spawn(); - - // muzzle flash for 1st person view - setmodel(wepent.muzzle_flash, MDL_MACHINEGUN_MUZZLEFLASH); // precision set below - - wepent.muzzle_flash.scale = 0.75; - setthink(wepent.muzzle_flash, W_OverkillMachineGun_MuzzleFlash_Think); - wepent.muzzle_flash.nextthink = time + 0.02; - wepent.muzzle_flash.frame = 2; - wepent.muzzle_flash.alpha = 0.75; - wepent.muzzle_flash.angles_z = random() * 180; - wepent.muzzle_flash.effects = EF_ADDITIVE | EF_FULLBRIGHT | EF_LOWPRECISION; - wepent.muzzle_flash.owner = wepent.muzzle_flash.realowner = wepent; -} - void W_OverkillMachineGun_Attack(Weapon thiswep, int deathtype, entity actor, .entity weaponentity) { W_SetupShot(actor, weaponentity, true, 0, SND_UZI_FIRE, CH_WEAPON_A, ((actor.(weaponentity).misc_bulletcounter == 1) ? WEP_CVAR(okmachinegun, first_damage) : WEP_CVAR(okmachinegun, sustained_damage))); @@ -69,7 +32,7 @@ void W_OverkillMachineGun_Attack(Weapon thiswep, int deathtype, entity actor, .e Send_Effect(EFFECT_MACHINEGUN_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1); - W_OverkillMachineGun_MuzzleFlash(actor, weaponentity); + W_MachineGun_MuzzleFlash(actor, weaponentity); W_AttachToShotorg(actor, weaponentity, actor.(weaponentity).muzzle_flash, '5 0 0'); // casing code @@ -144,7 +107,7 @@ void W_OverkillMachineGun_Attack_Auto(Weapon thiswep, entity actor, .entity weap Send_Effect(EFFECT_MACHINEGUN_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1); - W_OverkillMachineGun_MuzzleFlash(actor, weaponentity); + W_MachineGun_MuzzleFlash(actor, weaponentity); W_AttachToShotorg(actor, weaponentity, actor.(weaponentity).muzzle_flash, '5 0 0'); if(autocvar_g_casings >= 2) // casing code @@ -158,42 +121,6 @@ void W_OverkillMachineGun_Attack_Auto(Weapon thiswep, entity actor, .entity weap weapon_thinkf(actor, weaponentity, WFRAME_FIRE1, WEP_CVAR(okmachinegun, sustained_refire), W_OverkillMachineGun_Attack_Auto); } -void W_OverkillMachineGun_Attack_Burst(Weapon thiswep, entity actor, .entity weaponentity, int fire) -{ - W_SetupShot(actor, weaponentity, true, 0, SND_UZI_FIRE, CH_WEAPON_A, WEP_CVAR(okmachinegun, sustained_damage)); - if(!autocvar_g_norecoil) - { - actor.punchangle_x = random() - 0.5; - actor.punchangle_y = random() - 0.5; - } - - fireBullet(actor, weaponentity, w_shotorg, w_shotdir, WEP_CVAR(okmachinegun, burst_speed), WEP_CVAR(okmachinegun, solidpenetration), WEP_CVAR(okmachinegun, sustained_damage), WEP_CVAR(okmachinegun, sustained_force), WEP_OVERKILL_MACHINEGUN.m_id, 0); - - Send_Effect(EFFECT_MACHINEGUN_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1); - - W_OverkillMachineGun_MuzzleFlash(actor, weaponentity); - W_AttachToShotorg(actor, weaponentity, actor.(weaponentity).muzzle_flash, '5 0 0'); - - if(autocvar_g_casings >= 2) // casing code - { - makevectors(actor.v_angle); // for some reason, this is lost - SpawnCasing(((random() * 50 + 50) * v_right) - (v_forward * (random() * 25 + 25)) - ((random() * 5 - 70) * v_up), 2, vectoangles(v_forward),'0 250 0', 100, 3, actor, weaponentity); - } - - actor.(weaponentity).misc_bulletcounter = actor.(weaponentity).misc_bulletcounter + 1; - if(actor.(weaponentity).misc_bulletcounter == 0) - { - int slot = weaponslot(weaponentity); - ATTACK_FINISHED(actor, slot) = time + WEP_CVAR(okmachinegun, burst_refire2) * W_WeaponRateFactor(actor); - weapon_thinkf(actor, weaponentity, WFRAME_FIRE2, WEP_CVAR(okmachinegun, burst_animtime), w_ready); - } - else - { - weapon_thinkf(actor, weaponentity, WFRAME_FIRE2, WEP_CVAR(okmachinegun, burst_refire), W_OverkillMachineGun_Attack_Burst); - } - -} - METHOD(OverkillMachineGun, wr_aim, void(entity thiswep, entity actor, .entity weaponentity)) { if(vdist(actor.origin - actor.enemy.origin, <, 3000 - bound(0, skill, 10) * 200)) @@ -210,65 +137,44 @@ METHOD(OverkillMachineGun, wr_think, void(entity thiswep, entity actor, .entity } else if (WEP_CVAR(okmachinegun, mode) == 1) { - if(fire & 1) + if(fire & 1) // Primary attack if(weapon_prepareattack(thiswep, actor, weaponentity, false, 0)) { actor.(weaponentity).misc_bulletcounter = 0; W_OverkillMachineGun_Attack_Auto(thiswep, actor, weaponentity, fire); } - if (fire & 2) + if (fire & 2) // Secondary attack { - if (WEP_CVAR_SEC(okmachinegun, type) == 1) - { - if (weapon_prepareattack(thiswep, actor, weaponentity, true, 0)) - { - if (!thiswep.wr_checkammo2(thiswep, actor, weaponentity)) - if (!(actor.items & IT_UNLIMITED_WEAPON_AMMO)) - { - W_SwitchWeapon_Force(actor, w_getbestweapon(actor, weaponentity), weaponentity); - w_ready(thiswep, actor, weaponentity, fire); - return; - } - - W_DecreaseAmmo(thiswep, actor, WEP_CVAR(okmachinegun, burst_ammo), weaponentity); - - actor.(weaponentity).misc_bulletcounter = WEP_CVAR(okmachinegun, burst) * -1; - W_OverkillMachineGun_Attack_Burst(thiswep, actor, weaponentity, fire); - } - } - else + if (!weapon_prepareattack(thiswep, actor, weaponentity, false, WEP_CVAR_SEC(okmachinegun, refire))) { - if (!weapon_prepareattack(thiswep, actor, weaponentity, false, WEP_CVAR_SEC(okmachinegun, refire))) - { - return; - } - // ugly instagib hack to reuse the fire mode of the laser - makevectors(actor.v_angle); - Weapon oldwep = actor.(weaponentity).m_weapon; // we can't avoid this hack - actor.(weaponentity).m_weapon = WEP_BLASTER; - W_Blaster_Attack( - actor, - weaponentity, - WEP_BLASTER.m_id | HITTYPE_SECONDARY, - WEP_CVAR_SEC(okmachinegun, shotangle), - WEP_CVAR_SEC(okmachinegun, damage), - WEP_CVAR_SEC(okmachinegun, edgedamage), - WEP_CVAR_SEC(okmachinegun, radius), - WEP_CVAR_SEC(okmachinegun, force), - WEP_CVAR_SEC(okmachinegun, speed), - WEP_CVAR_SEC(okmachinegun, spread), - WEP_CVAR_SEC(okmachinegun, delay), - WEP_CVAR_SEC(okmachinegun, lifetime) - ); - actor.(weaponentity).m_weapon = oldwep; - weapon_thinkf(actor, weaponentity, WFRAME_FIRE2, WEP_CVAR_SEC(okmachinegun, animtime), w_ready); + return; } + // ugly instagib hack to reuse the fire mode of the laser + makevectors(actor.v_angle); + Weapon oldwep = actor.(weaponentity).m_weapon; // we can't avoid this hack + actor.(weaponentity).m_weapon = WEP_BLASTER; + W_Blaster_Attack( + actor, + weaponentity, + WEP_BLASTER.m_id | HITTYPE_SECONDARY, + WEP_CVAR_SEC(okmachinegun, shotangle), + WEP_CVAR_SEC(okmachinegun, damage), + WEP_CVAR_SEC(okmachinegun, edgedamage), + WEP_CVAR_SEC(okmachinegun, radius), + WEP_CVAR_SEC(okmachinegun, force), + WEP_CVAR_SEC(okmachinegun, speed), + WEP_CVAR_SEC(okmachinegun, spread), + WEP_CVAR_SEC(okmachinegun, delay), + WEP_CVAR_SEC(okmachinegun, lifetime) + ); + actor.(weaponentity).m_weapon = oldwep; + weapon_thinkf(actor, weaponentity, WFRAME_FIRE2, WEP_CVAR_SEC(okmachinegun, animtime), w_ready); } } else { - if(fire & 1) + if(fire & 1) // Primary attack if(weapon_prepareattack(thiswep, actor, weaponentity, false, 0)) { actor.(weaponentity).misc_bulletcounter = 1; @@ -276,47 +182,32 @@ METHOD(OverkillMachineGun, wr_think, void(entity thiswep, entity actor, .entity weapon_thinkf(actor, weaponentity, WFRAME_FIRE1, WEP_CVAR(okmachinegun, sustained_refire), W_OverkillMachineGun_Attack_Frame); } - if (fire & 2) + if (fire & 2) // Secondary attack { - if (WEP_CVAR_SEC(okmachinegun, type) == 1) - { - if (WEP_CVAR(okmachinegun, first)) - { - if (weapon_prepareattack(thiswep, actor, weaponentity, true, 0)) - { - actor.(weaponentity).misc_bulletcounter = 1; - W_OverkillMachineGun_Attack(WEP_OVERKILL_MACHINEGUN, WEP_OVERKILL_MACHINEGUN.m_id | HITTYPE_SECONDARY, actor, weaponentity); // sets attack_finished - weapon_thinkf(actor, weaponentity, WFRAME_FIRE2, WEP_CVAR(okmachinegun, first_refire), w_ready); - } - } - } - else + if (!weapon_prepareattack(thiswep, actor, weaponentity, false, WEP_CVAR_SEC(okmachinegun, refire))) { - if (!weapon_prepareattack(thiswep, actor, weaponentity, false, WEP_CVAR_SEC(okmachinegun, refire))) - { - return; - } - // ugly instagib hack to reuse the fire mode of the laser - makevectors(actor.v_angle); - Weapon oldwep = actor.(weaponentity).m_weapon; // we can't avoid this hack - actor.(weaponentity).m_weapon = WEP_BLASTER; - W_Blaster_Attack( - actor, - weaponentity, - WEP_BLASTER.m_id | HITTYPE_SECONDARY, - WEP_CVAR_SEC(okmachinegun, shotangle), - WEP_CVAR_SEC(okmachinegun, damage), - WEP_CVAR_SEC(okmachinegun, edgedamage), - WEP_CVAR_SEC(okmachinegun, radius), - WEP_CVAR_SEC(okmachinegun, force), - WEP_CVAR_SEC(okmachinegun, speed), - WEP_CVAR_SEC(okmachinegun, spread), - WEP_CVAR_SEC(okmachinegun, delay), - WEP_CVAR_SEC(okmachinegun, lifetime) - ); - actor.(weaponentity).m_weapon = oldwep; - weapon_thinkf(actor, weaponentity, WFRAME_FIRE2, WEP_CVAR_SEC(okmachinegun, animtime), w_ready); + return; } + // ugly instagib hack to reuse the fire mode of the laser + makevectors(actor.v_angle); + Weapon oldwep = actor.(weaponentity).m_weapon; // we can't avoid this hack + actor.(weaponentity).m_weapon = WEP_BLASTER; + W_Blaster_Attack( + actor, + weaponentity, + WEP_BLASTER.m_id | HITTYPE_SECONDARY, + WEP_CVAR_SEC(okmachinegun, shotangle), + WEP_CVAR_SEC(okmachinegun, damage), + WEP_CVAR_SEC(okmachinegun, edgedamage), + WEP_CVAR_SEC(okmachinegun, radius), + WEP_CVAR_SEC(okmachinegun, force), + WEP_CVAR_SEC(okmachinegun, speed), + WEP_CVAR_SEC(okmachinegun, spread), + WEP_CVAR_SEC(okmachinegun, delay), + WEP_CVAR_SEC(okmachinegun, lifetime) + ); + actor.(weaponentity).m_weapon = oldwep; + weapon_thinkf(actor, weaponentity, WFRAME_FIRE2, WEP_CVAR_SEC(okmachinegun, animtime), w_ready); } } }