X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fmutators%2Fmutator%2Foverkill%2Foknex.qc;h=85f33714054e1560f40c0ccf28a12a83b1b0c048;hb=f021fcfd75f824918bb2593cc58302ffa8377b77;hp=83a3a3cc052c3e9adbaf0143af71242def1946a5;hpb=ad2d918472c84295255fba550959b58cacc9cfb1;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/mutators/mutator/overkill/oknex.qc b/qcsrc/common/mutators/mutator/overkill/oknex.qc index 83a3a3cc0..85f337140 100644 --- a/qcsrc/common/mutators/mutator/overkill/oknex.qc +++ b/qcsrc/common/mutators/mutator/overkill/oknex.qc @@ -7,22 +7,18 @@ #if defined(GAMEQC) -METHOD(OverkillNex, wr_glow, vector(OverkillNex this, entity actor, entity wepent)) +METHOD(OverkillNex, wr_glow, vector(OverkillNex this, int actor_colors, entity wepent)) { if (!WEP_CVAR(oknex, charge)) return '0 0 0'; - float charge = wepent.oknex_charge; + float charge = max(0.25, wepent.oknex_charge); float animlimit = WEP_CVAR(oknex, charge_animlimit); - float f = autocvar_g_weapon_charge_colormod_hdrmultiplier * min(1, charge / animlimit); - vector g; - g.x = f * autocvar_g_weapon_charge_colormod_red_half; - g.y = f * autocvar_g_weapon_charge_colormod_green_half; - g.z = f * autocvar_g_weapon_charge_colormod_blue_half; + float f = min(1, charge / animlimit); + vector mycolors = colormapPaletteColor(actor_colors & 0x0F, true); + vector g = f * (mycolors * 0.3); if (charge > animlimit) { - f = autocvar_g_weapon_charge_colormod_hdrmultiplier * (charge - animlimit) / (1 - animlimit); - g.x += f * autocvar_g_weapon_charge_colormod_red_full; - g.y += f * autocvar_g_weapon_charge_colormod_green_full; - g.z += f * autocvar_g_weapon_charge_colormod_blue_full; + f = (charge - animlimit) / (1 - animlimit); + g += f * (mycolors * 0.7); } // transition color can't be '0 0 0' as it defaults to player model glow color if (g == '0 0 0') @@ -94,18 +90,18 @@ void W_OverkillNex_Attack(Weapon thiswep, entity actor, .entity weaponentity, fl } yoda = 0; - damage_goodhits = 0; - FireRailgunBullet(actor, weaponentity, w_shotorg, w_shotorg + w_shotdir * max_shot_distance, mydmg, myforce, mymindist, mymaxdist, myhalflife, myforcehalflife, thiswep.m_id); + impressive_hits = 0; + FireRailgunBullet(actor, weaponentity, w_shotorg, w_shotorg + w_shotdir * max_shot_distance, mydmg, true, myforce, mymindist, mymaxdist, myhalflife, myforcehalflife, thiswep.m_id); if(yoda && flying) Send_Notification(NOTIF_ONE, actor, MSG_ANNCE, ANNCE_ACHIEVEMENT_YODA); - if(damage_goodhits && actor.oknex_lasthit) + if(impressive_hits && actor.oknex_lasthit) { Send_Notification(NOTIF_ONE, actor, MSG_ANNCE, ANNCE_ACHIEVEMENT_IMPRESSIVE); - damage_goodhits = 0; // only every second time + impressive_hits = 0; // only every second time } - actor.oknex_lasthit = damage_goodhits; + actor.oknex_lasthit = impressive_hits; //beam and muzzle flash done on client SendCSQCVortexBeamParticle(charge); @@ -117,7 +113,7 @@ void W_OverkillNex_Attack(Weapon thiswep, entity actor, .entity weaponentity, fl METHOD(OverkillNex, wr_aim, void(entity thiswep, entity actor, .entity weaponentity)) { - if(bot_aim(actor, weaponentity, 1000000, 0, 1, false)) + if(bot_aim(actor, weaponentity, 1000000, 0, 1, false, true)) PHYS_INPUT_BUTTON_ATCK(actor) = true; else { @@ -150,14 +146,11 @@ METHOD(OverkillNex, wr_think, void(entity thiswep, entity actor, .entity weapone (actor.(weaponentity).wframe == WFRAME_FIRE2)) { // Set secondary fire animation. - vector a = '0 0 0'; actor.(weaponentity).wframe = WFRAME_FIRE2; - a = actor.(weaponentity).anim_fire2; - a.z *= g_weaponratefactor; FOREACH_CLIENT(true, LAMBDA( if (it == actor || (IS_SPEC(it) && it.enemy == actor)) { - wframe_send(it, actor.(weaponentity), a, true); + wframe_send(it, actor.(weaponentity), WFRAME_FIRE2, autocvar_g_weaponratefactor, true); } )); animdecide_setaction(actor, ANIMACTION_SHOOT, true);