1 #ifndef VEHICLE_BUMBLEBEE_WEAPONS_H
2 #define VEHICLE_BUMBLEBEE_WEAPONS_H
4 #include "../../weapons/all.qh"
12 float autocvar_g_vehicle_bumblebee_cannon_cost;
13 float autocvar_g_vehicle_bumblebee_cannon_damage;
14 float autocvar_g_vehicle_bumblebee_cannon_radius;
15 float autocvar_g_vehicle_bumblebee_cannon_refire;
16 float autocvar_g_vehicle_bumblebee_cannon_speed;
17 float autocvar_g_vehicle_bumblebee_cannon_spread;
18 float autocvar_g_vehicle_bumblebee_cannon_force;
20 bool bumble_raygun_send(entity this, entity to, int sf);
22 void bumblebee_fire_cannon(entity _gun, string _tagname, entity _owner)
24 vector v = gettaginfo(_gun, gettagindex(_gun, _tagname));
25 vehicles_projectile(EFFECT_BIGPLASMA_MUZZLEFLASH.eent_eff_name, SND(VEH_BUMBLEBEE_FIRE),
26 v, normalize(v_forward + randomvec() * autocvar_g_vehicle_bumblebee_cannon_spread) * autocvar_g_vehicle_bumblebee_cannon_speed,
27 autocvar_g_vehicle_bumblebee_cannon_damage, autocvar_g_vehicle_bumblebee_cannon_radius, autocvar_g_vehicle_bumblebee_cannon_force, 0,
28 DEATH_VH_BUMB_GUN.m_id, PROJECTILE_BUMBLE_GUN, 0, true, true, _owner);
31 bool bumble_raygun_send(entity this, entity to, float sf)
33 WriteByte(MSG_ENTITY, ENT_CLIENT_BUMBLE_RAYGUN);
35 WriteByte(MSG_ENTITY, sf);
38 WriteByte(MSG_ENTITY, num_for_edict(self.realowner));
39 WriteByte(MSG_ENTITY, self.realowner.team);
40 WriteByte(MSG_ENTITY, self.cnt);
45 WriteCoord(MSG_ENTITY, self.hook_start_x);
46 WriteCoord(MSG_ENTITY, self.hook_start_y);
47 WriteCoord(MSG_ENTITY, self.hook_start_z);
52 WriteCoord(MSG_ENTITY, self.hook_end_x);
53 WriteCoord(MSG_ENTITY, self.hook_end_y);
54 WriteCoord(MSG_ENTITY, self.hook_end_z);
64 void bumble_raygun_draw(entity this);
66 void bumble_raygun_read(bool bIsNew)
72 self.cnt = ReadByte();
73 self.team = ReadByte();
74 self.cnt = ReadByte();
77 self.colormod = '1 0 0';
79 self.colormod = '0 1 0';
81 self.traileffect = EFFECT_BUMBLEBEE_HEAL_MUZZLEFLASH.m_id;
82 self.lip = particleeffectnum(EFFECT_BUMBLEBEE_HEAL_IMPACT);
84 self.draw = bumble_raygun_draw;
90 self.origin_x = ReadCoord();
91 self.origin_y = ReadCoord();
92 self.origin_z = ReadCoord();
93 setorigin(self, self.origin);
98 self.move_origin_x = ReadCoord();
99 self.move_origin_y = ReadCoord();
100 self.move_origin_z = ReadCoord();
104 void bumble_raygun_draw(entity this)
108 vector _vtmp1, _vtmp2;
110 _len = vlen(self.origin - self.move_origin);
111 _dir = normalize(self.move_origin - self.origin);
113 if(self.total_damages < time)
115 boxparticles(particleeffectnum(Effects_from(self.traileffect)), self, self.origin, self.origin + _dir * -64, _dir * -_len , _dir * -_len, 1, PARTICLES_USEALPHA);
116 boxparticles(self.lip, self, self.move_origin, self.move_origin + _dir * -64, _dir * -200 , _dir * -200, 1, PARTICLES_USEALPHA);
117 self.total_damages = time + 0.1;
121 for(i = -0.1; i < 0.2; i += 0.1)
123 df = DRAWFLAG_NORMAL; //((random() < 0.5) ? DRAWFLAG_ADDITIVE : DRAWFLAG_SCREEN);
124 sz = 5 + random() * 5;
125 al = 0.25 + random() * 0.5;
126 _vtmp1 = self.origin + _dir * _len * (0.25 + i);
127 _vtmp1 += (randomvec() * (_len * 0.2) * (frametime * 2)); //self.raygun_l1;
128 Draw_CylindricLine(self.origin, _vtmp1, sz, "gfx/colors/white.tga", 1, 1, self.colormod, al, df, view_origin);
130 _vtmp2 = self.origin + _dir * _len * (0.5 + i);
131 _vtmp2 += (randomvec() * (_len * 0.2) * (frametime * 5)); //self.raygun_l2;
132 Draw_CylindricLine(_vtmp1, _vtmp2, sz, "gfx/colors/white.tga", 1, 1, self.colormod, al, df, view_origin);
134 _vtmp1 = self.origin + _dir * _len * (0.75 + i);
135 _vtmp1 += randomvec() * (_len * 0.2) * (frametime * 10); //self.raygun_l3;
136 Draw_CylindricLine(_vtmp2, _vtmp1, sz, "gfx/colors/white.tga", 1, 1, self.colormod, al, df, view_origin);
138 Draw_CylindricLine(_vtmp1, self.move_origin + randomvec() * 32, sz, "gfx/colors/white.tga", 1, 1, self.colormod, al, df, view_origin);