From 0844eedba41c3b02c74be3ebaf3aa58a5bcfc4a5 Mon Sep 17 00:00:00 2001 From: TimePath Date: Thu, 1 Oct 2015 09:40:19 +1000 Subject: [PATCH] Vehicles: factor out some bumblebee attacks --- qcsrc/common/vehicles/vehicle/bumblebee.qc | 134 +--------------- .../vehicles/vehicle/bumblebee_weapons.qc | 144 ++++++++++++++++++ 2 files changed, 151 insertions(+), 127 deletions(-) create mode 100644 qcsrc/common/vehicles/vehicle/bumblebee_weapons.qc diff --git a/qcsrc/common/vehicles/vehicle/bumblebee.qc b/qcsrc/common/vehicles/vehicle/bumblebee.qc index b4fcd182d..717614213 100644 --- a/qcsrc/common/vehicles/vehicle/bumblebee.qc +++ b/qcsrc/common/vehicles/vehicle/bumblebee.qc @@ -2,6 +2,8 @@ #define VEHICLE_BUMBLEBEE #include "bumblebee.qh" +#include "bumblebee_weapons.qc" + CLASS(Bumblebee, Vehicle) /* spawnflags */ ATTRIB(Bumblebee, spawnflags, int, VHF_DMGSHAKE); /* mins */ ATTRIB(Bumblebee, mins, vector, '-245 -130 -130'); @@ -17,8 +19,8 @@ CLASS(Bumblebee, Vehicle) /* fullname */ ATTRIB(Bumblebee, vehicle_name, string, _("Bumblebee")); /* icon */ ATTRIB(Bumblebee, m_icon, string, "vehicle_bumble"); ENDCLASS(Bumblebee) - REGISTER_VEHICLE(BUMBLEBEE, NEW(Bumblebee)); + #endif #ifdef IMPLEMENTATION @@ -27,6 +29,8 @@ const float BRG_SETUP = 2; const float BRG_START = 4; const float BRG_END = 8; +#include "bumblebee_weapons.qc" + #ifdef SVQC float autocvar_g_vehicle_bumblebee_speed_forward; float autocvar_g_vehicle_bumblebee_speed_strafe; @@ -49,14 +53,6 @@ float autocvar_g_vehicle_bumblebee_shield; float autocvar_g_vehicle_bumblebee_shield_regen; float autocvar_g_vehicle_bumblebee_shield_regen_pause; -float autocvar_g_vehicle_bumblebee_cannon_cost; -float autocvar_g_vehicle_bumblebee_cannon_damage; -float autocvar_g_vehicle_bumblebee_cannon_radius; -float autocvar_g_vehicle_bumblebee_cannon_refire; -float autocvar_g_vehicle_bumblebee_cannon_speed; -float autocvar_g_vehicle_bumblebee_cannon_spread; -float autocvar_g_vehicle_bumblebee_cannon_force; - float autocvar_g_vehicle_bumblebee_cannon_ammo; float autocvar_g_vehicle_bumblebee_cannon_ammo_regen; float autocvar_g_vehicle_bumblebee_cannon_ammo_regen_pause; @@ -98,17 +94,6 @@ vector autocvar_g_vehicle_bumblebee_bouncepain; bool autocvar_g_vehicle_bumblebee = 0; -float bumble_raygun_send(entity to, int sf); - -void bumblebee_fire_cannon(entity _gun, string _tagname, entity _owner) -{ - vector v = gettaginfo(_gun, gettagindex(_gun, _tagname)); - vehicles_projectile(EFFECT_BIGPLASMA_MUZZLEFLASH.eent_eff_name, SND(VEH_BUMBLEBEE_FIRE), - v, normalize(v_forward + randomvec() * autocvar_g_vehicle_bumblebee_cannon_spread) * autocvar_g_vehicle_bumblebee_cannon_speed, - autocvar_g_vehicle_bumblebee_cannon_damage, autocvar_g_vehicle_bumblebee_cannon_radius, autocvar_g_vehicle_bumblebee_cannon_force, 0, - DEATH_VH_BUMB_GUN, PROJECTILE_BUMBLE_GUN, 0, true, true, _owner); -} - float bumblebee_gunner_frame() {SELFPARAM(); entity vehic = self.vehicle.owner; @@ -738,35 +723,6 @@ void bumblebee_diethink() self.nextthink = time + 0.1; } -float bumble_raygun_send(entity to, float sf) -{SELFPARAM(); - WriteByte(MSG_ENTITY, ENT_CLIENT_BUMBLE_RAYGUN); - - WriteByte(MSG_ENTITY, sf); - if(sf & BRG_SETUP) - { - WriteByte(MSG_ENTITY, num_for_edict(self.realowner)); - WriteByte(MSG_ENTITY, self.realowner.team); - WriteByte(MSG_ENTITY, self.cnt); - } - - if(sf & BRG_START) - { - WriteCoord(MSG_ENTITY, self.hook_start_x); - WriteCoord(MSG_ENTITY, self.hook_start_y); - WriteCoord(MSG_ENTITY, self.hook_start_z); - } - - if(sf & BRG_END) - { - WriteCoord(MSG_ENTITY, self.hook_end_x); - WriteCoord(MSG_ENTITY, self.hook_end_y); - WriteCoord(MSG_ENTITY, self.hook_end_z); - } - - return true; -} - void spawnfunc_vehicle_bumblebee() {SELFPARAM(); if(!autocvar_g_vehicle_bumblebee) { remove(self); return; } @@ -1014,82 +970,6 @@ void CSQC_BUMBLE_GUN_HUD() string_null); } -void bumble_raygun_draw() -{SELFPARAM(); - float _len; - vector _dir; - vector _vtmp1, _vtmp2; - - _len = vlen(self.origin - self.move_origin); - _dir = normalize(self.move_origin - self.origin); - - if(self.total_damages < time) - { - boxparticles(self.traileffect, self, self.origin, self.origin + _dir * -64, _dir * -_len , _dir * -_len, 1, PARTICLES_USEALPHA); - boxparticles(self.lip, self, self.move_origin, self.move_origin + _dir * -64, _dir * -200 , _dir * -200, 1, PARTICLES_USEALPHA); - self.total_damages = time + 0.1; - } - - float i, df, sz, al; - for(i = -0.1; i < 0.2; i += 0.1) - { - df = DRAWFLAG_NORMAL; //((random() < 0.5) ? DRAWFLAG_ADDITIVE : DRAWFLAG_SCREEN); - sz = 5 + random() * 5; - al = 0.25 + random() * 0.5; - _vtmp1 = self.origin + _dir * _len * (0.25 + i); - _vtmp1 += (randomvec() * (_len * 0.2) * (frametime * 2)); //self.raygun_l1; - Draw_CylindricLine(self.origin, _vtmp1, sz, "gfx/colors/white.tga", 1, 1, self.colormod, al, df, view_origin); - - _vtmp2 = self.origin + _dir * _len * (0.5 + i); - _vtmp2 += (randomvec() * (_len * 0.2) * (frametime * 5)); //self.raygun_l2; - Draw_CylindricLine(_vtmp1, _vtmp2, sz, "gfx/colors/white.tga", 1, 1, self.colormod, al, df, view_origin); - - _vtmp1 = self.origin + _dir * _len * (0.75 + i); - _vtmp1 += randomvec() * (_len * 0.2) * (frametime * 10); //self.raygun_l3; - Draw_CylindricLine(_vtmp2, _vtmp1, sz, "gfx/colors/white.tga", 1, 1, self.colormod, al, df, view_origin); - - Draw_CylindricLine(_vtmp1, self.move_origin + randomvec() * 32, sz, "gfx/colors/white.tga", 1, 1, self.colormod, al, df, view_origin); - } -} - -void bumble_raygun_read(bool bIsNew) -{SELFPARAM(); - int sf = ReadByte(); - - if(sf & BRG_SETUP) - { - self.cnt = ReadByte(); - self.team = ReadByte(); - self.cnt = ReadByte(); - - if(self.cnt) - self.colormod = '1 0 0'; - else - self.colormod = '0 1 0'; - - self.traileffect = particleeffectnum(EFFECT_BUMBLEBEE_HEAL_MUZZLEFLASH); - self.lip = particleeffectnum(EFFECT_BUMBLEBEE_HEAL_IMPACT); - - self.draw = bumble_raygun_draw; - } - - - if(sf & BRG_START) - { - self.origin_x = ReadCoord(); - self.origin_y = ReadCoord(); - self.origin_z = ReadCoord(); - setorigin(self, self.origin); - } - - if(sf & BRG_END) - { - self.move_origin_x = ReadCoord(); - self.move_origin_y = ReadCoord(); - self.move_origin_z = ReadCoord(); - } -} - METHOD(Bumblebee, vr_hud, bool(Bumblebee thisveh)) { Vehicles_drawHUD(VEH_BUMBLEBEE.m_icon, "vehicle_bumble_weapon1", "vehicle_bumble_weapon2", @@ -1110,5 +990,5 @@ void bumble_raygun_read(bool bIsNew) return true; } -#endif // CSQC -#endif // REGISTER_VEHICLE +#endif +#endif diff --git a/qcsrc/common/vehicles/vehicle/bumblebee_weapons.qc b/qcsrc/common/vehicles/vehicle/bumblebee_weapons.qc new file mode 100644 index 000000000..5838b7358 --- /dev/null +++ b/qcsrc/common/vehicles/vehicle/bumblebee_weapons.qc @@ -0,0 +1,144 @@ +#ifndef VEHICLE_BUMBLEBEE_WEAPONS_H +#define VEHICLE_BUMBLEBEE_WEAPONS_H + +#include "../../weapons/all.qh" + +#endif + +#ifdef IMPLEMENTATION + +#ifdef SVQC + +float autocvar_g_vehicle_bumblebee_cannon_cost; +float autocvar_g_vehicle_bumblebee_cannon_damage; +float autocvar_g_vehicle_bumblebee_cannon_radius; +float autocvar_g_vehicle_bumblebee_cannon_refire; +float autocvar_g_vehicle_bumblebee_cannon_speed; +float autocvar_g_vehicle_bumblebee_cannon_spread; +float autocvar_g_vehicle_bumblebee_cannon_force; + +float bumble_raygun_send(entity to, int sf); + +void bumblebee_fire_cannon(entity _gun, string _tagname, entity _owner) +{ + vector v = gettaginfo(_gun, gettagindex(_gun, _tagname)); + vehicles_projectile(EFFECT_BIGPLASMA_MUZZLEFLASH.eent_eff_name, SND(VEH_BUMBLEBEE_FIRE), + v, normalize(v_forward + randomvec() * autocvar_g_vehicle_bumblebee_cannon_spread) * autocvar_g_vehicle_bumblebee_cannon_speed, + autocvar_g_vehicle_bumblebee_cannon_damage, autocvar_g_vehicle_bumblebee_cannon_radius, autocvar_g_vehicle_bumblebee_cannon_force, 0, + DEATH_VH_BUMB_GUN, PROJECTILE_BUMBLE_GUN, 0, true, true, _owner); +} + +float bumble_raygun_send(entity to, float sf) +{SELFPARAM(); + WriteByte(MSG_ENTITY, ENT_CLIENT_BUMBLE_RAYGUN); + + WriteByte(MSG_ENTITY, sf); + if(sf & BRG_SETUP) + { + WriteByte(MSG_ENTITY, num_for_edict(self.realowner)); + WriteByte(MSG_ENTITY, self.realowner.team); + WriteByte(MSG_ENTITY, self.cnt); + } + + if(sf & BRG_START) + { + WriteCoord(MSG_ENTITY, self.hook_start_x); + WriteCoord(MSG_ENTITY, self.hook_start_y); + WriteCoord(MSG_ENTITY, self.hook_start_z); + } + + if(sf & BRG_END) + { + WriteCoord(MSG_ENTITY, self.hook_end_x); + WriteCoord(MSG_ENTITY, self.hook_end_y); + WriteCoord(MSG_ENTITY, self.hook_end_z); + } + + return true; +} + +#endif + +#ifdef CSQC + +void bumble_raygun_draw(); + +void bumble_raygun_read(bool bIsNew) +{SELFPARAM(); + int sf = ReadByte(); + + if(sf & BRG_SETUP) + { + self.cnt = ReadByte(); + self.team = ReadByte(); + self.cnt = ReadByte(); + + if(self.cnt) + self.colormod = '1 0 0'; + else + self.colormod = '0 1 0'; + + self.traileffect = particleeffectnum(EFFECT_BUMBLEBEE_HEAL_MUZZLEFLASH); + self.lip = particleeffectnum(EFFECT_BUMBLEBEE_HEAL_IMPACT); + + self.draw = bumble_raygun_draw; + } + + + if(sf & BRG_START) + { + self.origin_x = ReadCoord(); + self.origin_y = ReadCoord(); + self.origin_z = ReadCoord(); + setorigin(self, self.origin); + } + + if(sf & BRG_END) + { + self.move_origin_x = ReadCoord(); + self.move_origin_y = ReadCoord(); + self.move_origin_z = ReadCoord(); + } +} + +void bumble_raygun_draw() +{SELFPARAM(); + float _len; + vector _dir; + vector _vtmp1, _vtmp2; + + _len = vlen(self.origin - self.move_origin); + _dir = normalize(self.move_origin - self.origin); + + if(self.total_damages < time) + { + boxparticles(self.traileffect, self, self.origin, self.origin + _dir * -64, _dir * -_len , _dir * -_len, 1, PARTICLES_USEALPHA); + boxparticles(self.lip, self, self.move_origin, self.move_origin + _dir * -64, _dir * -200 , _dir * -200, 1, PARTICLES_USEALPHA); + self.total_damages = time + 0.1; + } + + float i, df, sz, al; + for(i = -0.1; i < 0.2; i += 0.1) + { + df = DRAWFLAG_NORMAL; //((random() < 0.5) ? DRAWFLAG_ADDITIVE : DRAWFLAG_SCREEN); + sz = 5 + random() * 5; + al = 0.25 + random() * 0.5; + _vtmp1 = self.origin + _dir * _len * (0.25 + i); + _vtmp1 += (randomvec() * (_len * 0.2) * (frametime * 2)); //self.raygun_l1; + Draw_CylindricLine(self.origin, _vtmp1, sz, "gfx/colors/white.tga", 1, 1, self.colormod, al, df, view_origin); + + _vtmp2 = self.origin + _dir * _len * (0.5 + i); + _vtmp2 += (randomvec() * (_len * 0.2) * (frametime * 5)); //self.raygun_l2; + Draw_CylindricLine(_vtmp1, _vtmp2, sz, "gfx/colors/white.tga", 1, 1, self.colormod, al, df, view_origin); + + _vtmp1 = self.origin + _dir * _len * (0.75 + i); + _vtmp1 += randomvec() * (_len * 0.2) * (frametime * 10); //self.raygun_l3; + Draw_CylindricLine(_vtmp2, _vtmp1, sz, "gfx/colors/white.tga", 1, 1, self.colormod, al, df, view_origin); + + Draw_CylindricLine(_vtmp1, self.move_origin + randomvec() * 32, sz, "gfx/colors/white.tga", 1, 1, self.colormod, al, df, view_origin); + } +} + +#endif + +#endif -- 2.39.2