From: Lyberta Date: Fri, 16 Feb 2018 08:02:12 +0000 (+0300) Subject: Added offhand blaster. X-Git-Tag: xonotic-v0.8.5~2303^2~2 X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=commitdiff_plain;h=6bbf3d6cc5c99bbc80f26b070fa918755e6420f9;ds=sidebyside Added offhand blaster. --- diff --git a/qcsrc/common/mutators/mutator/_mod.inc b/qcsrc/common/mutators/mutator/_mod.inc index 9d52fa20c4..40a763c8ec 100644 --- a/qcsrc/common/mutators/mutator/_mod.inc +++ b/qcsrc/common/mutators/mutator/_mod.inc @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include diff --git a/qcsrc/common/mutators/mutator/_mod.qh b/qcsrc/common/mutators/mutator/_mod.qh index f9edf4c56c..6a9261dd41 100644 --- a/qcsrc/common/mutators/mutator/_mod.qh +++ b/qcsrc/common/mutators/mutator/_mod.qh @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include diff --git a/qcsrc/common/mutators/mutator/offhand_blaster/_mod.inc b/qcsrc/common/mutators/mutator/offhand_blaster/_mod.inc new file mode 100644 index 0000000000..41bb01e55e --- /dev/null +++ b/qcsrc/common/mutators/mutator/offhand_blaster/_mod.inc @@ -0,0 +1,4 @@ +// generated file; do not modify +#ifdef SVQC + #include +#endif diff --git a/qcsrc/common/mutators/mutator/offhand_blaster/_mod.qh b/qcsrc/common/mutators/mutator/offhand_blaster/_mod.qh new file mode 100644 index 0000000000..98fb4815c1 --- /dev/null +++ b/qcsrc/common/mutators/mutator/offhand_blaster/_mod.qh @@ -0,0 +1 @@ +// generated file; do not modify diff --git a/qcsrc/common/mutators/mutator/offhand_blaster/sv_offhand_blaster.qc b/qcsrc/common/mutators/mutator/offhand_blaster/sv_offhand_blaster.qc new file mode 100644 index 0000000000..a4b9b1826b --- /dev/null +++ b/qcsrc/common/mutators/mutator/offhand_blaster/sv_offhand_blaster.qc @@ -0,0 +1,24 @@ +string autocvar_g_offhand_blaster; + +REGISTER_MUTATOR(offhand_blaster, expr_evaluate(autocvar_g_offhand_blaster)); + +MUTATOR_HOOKFUNCTION(offhand_blaster, BuildMutatorsString) +{ + M_ARGV(0, string) = strcat(M_ARGV(0, string), ":offhand_blaster"); +} + +MUTATOR_HOOKFUNCTION(offhand_blaster, BuildMutatorsPrettyString) +{ + M_ARGV(0, string) = strcat(M_ARGV(0, string), ", Offhand blaster"); +} + +MUTATOR_HOOKFUNCTION(offhand_blaster, BuildGameplayTipsString) +{ + M_ARGV(0, string) = strcat(M_ARGV(0, string), "\n\n^3offhand blaster^8 is enabled, press 'e' to use it\n"); +} + +MUTATOR_HOOKFUNCTION(offhand_blaster, PlayerSpawn) +{ + entity player = M_ARGV(0, entity); + player.offhand = OFFHAND_BLASTER; +} diff --git a/qcsrc/common/mutators/mutator/overkill/sv_overkill.qc b/qcsrc/common/mutators/mutator/overkill/sv_overkill.qc index fab0b6ff96..cb790afc1e 100644 --- a/qcsrc/common/mutators/mutator/overkill/sv_overkill.qc +++ b/qcsrc/common/mutators/mutator/overkill/sv_overkill.qc @@ -144,23 +144,7 @@ MUTATOR_HOOKFUNCTION(ok, PlayerPreThink) if(player.(weaponentity).m_weapon == WEP_Null && slot != 0) continue; - Weapon oldwep = player.(weaponentity).m_weapon; - player.(weaponentity).m_weapon = WEP_BLASTER; - W_Blaster_Attack( - player, - weaponentity, - WEP_BLASTER.m_id | HITTYPE_SECONDARY, - WEP_CVAR_SEC(vaporizer, shotangle), - WEP_CVAR_SEC(vaporizer, damage), - WEP_CVAR_SEC(vaporizer, edgedamage), - WEP_CVAR_SEC(vaporizer, radius), - WEP_CVAR_SEC(vaporizer, force), - WEP_CVAR_SEC(vaporizer, speed), - WEP_CVAR_SEC(vaporizer, spread), - WEP_CVAR_SEC(vaporizer, delay), - WEP_CVAR_SEC(vaporizer, lifetime) - ); - player.(weaponentity).m_weapon = oldwep; + BLASTER_SECONDARY_ATTACK_HACK(vaporizer, player, weaponentity); } } diff --git a/qcsrc/common/weapons/weapon/blaster.qc b/qcsrc/common/weapons/weapon/blaster.qc index 2189c1db20..9ca40be757 100644 --- a/qcsrc/common/weapons/weapon/blaster.qc +++ b/qcsrc/common/weapons/weapon/blaster.qc @@ -193,6 +193,17 @@ METHOD(Blaster, wr_killmessage, Notification(entity thiswep)) return WEAPON_BLASTER_MURDER; } +METHOD(OffhandBlaster, offhand_think, void(OffhandBlaster this, entity actor, bool key_pressed)) +{ + if (!key_pressed || (time < actor.jump_interval)) + { + return; + } + actor.jump_interval = time + WEP_CVAR_SEC(blaster, refire) * W_WeaponRateFactor(actor); + .entity weaponentity = weaponentities[1]; + BLASTER_SECONDARY_ATTACK_HACK(blaster, actor, weaponentity); +} + #endif #ifdef CSQC diff --git a/qcsrc/common/weapons/weapon/blaster.qh b/qcsrc/common/weapons/weapon/blaster.qh index 0a0e7c17d2..9d28e73772 100644 --- a/qcsrc/common/weapons/weapon/blaster.qh +++ b/qcsrc/common/weapons/weapon/blaster.qh @@ -48,6 +48,10 @@ REGISTER_WEAPON(BLASTER, blaster, NEW(Blaster)); SPAWNFUNC_WEAPON(weapon_blaster, WEP_BLASTER) SPAWNFUNC_WEAPON(weapon_laser, WEP_BLASTER) +CLASS(OffhandBlaster, OffhandWeapon) +ENDCLASS(OffhandBlaster) +OffhandBlaster OFFHAND_BLASTER; STATIC_INIT(OFFHAND_BLASTER) { OFFHAND_BLASTER = NEW(OffhandBlaster); } + #ifdef SVQC .float blaster_damage; .float blaster_edgedamage; @@ -55,4 +59,24 @@ SPAWNFUNC_WEAPON(weapon_laser, WEP_BLASTER) .float blaster_force; .float blaster_lifetime; +#define BLASTER_SECONDARY_ATTACK_HACK(weapon_name, actor, weaponentity) \ + makevectors(actor.v_angle); \ + Weapon oldwep = actor.(weaponentity).m_weapon; \ + actor.(weaponentity).m_weapon = WEP_BLASTER; \ + W_Blaster_Attack( \ + actor, \ + weaponentity, \ + WEP_BLASTER.m_id | HITTYPE_SECONDARY, \ + WEP_CVAR_SEC(weapon_name, shotangle), \ + WEP_CVAR_SEC(weapon_name, damage), \ + WEP_CVAR_SEC(weapon_name, edgedamage), \ + WEP_CVAR_SEC(weapon_name, radius), \ + WEP_CVAR_SEC(weapon_name, force), \ + WEP_CVAR_SEC(weapon_name, speed), \ + WEP_CVAR_SEC(weapon_name, spread), \ + WEP_CVAR_SEC(weapon_name, delay), \ + WEP_CVAR_SEC(weapon_name, lifetime) \ + ); \ + actor.(weaponentity).m_weapon = oldwep; + #endif diff --git a/qcsrc/common/weapons/weapon/vaporizer.qc b/qcsrc/common/weapons/weapon/vaporizer.qc index 4a9475a9cc..0cb3883f42 100644 --- a/qcsrc/common/weapons/weapon/vaporizer.qc +++ b/qcsrc/common/weapons/weapon/vaporizer.qc @@ -342,25 +342,7 @@ METHOD(Vaporizer, wr_think, void(entity thiswep, entity actor, .entity weaponent if(WEP_CVAR_SEC(vaporizer, ammo)) W_DecreaseAmmo(thiswep, actor, WEP_CVAR_SEC(vaporizer, ammo), weaponentity); - // 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(vaporizer, shotangle), - WEP_CVAR_SEC(vaporizer, damage), - WEP_CVAR_SEC(vaporizer, edgedamage), - WEP_CVAR_SEC(vaporizer, radius), - WEP_CVAR_SEC(vaporizer, force), - WEP_CVAR_SEC(vaporizer, speed), - WEP_CVAR_SEC(vaporizer, spread), - WEP_CVAR_SEC(vaporizer, delay), - WEP_CVAR_SEC(vaporizer, lifetime) - ); - actor.(weaponentity).m_weapon = oldwep; + BLASTER_SECONDARY_ATTACK_HACK(vaporizer, actor, weaponentity); // now do normal refire weapon_thinkf(actor, weaponentity, WFRAME_FIRE2, WEP_CVAR_SEC(vaporizer, animtime), w_ready);