Xonotic
bumblebee_weapons.qc
Go to the documentation of this file.
1 #include "bumblebee_weapons.qh"
2 
3 #ifdef GAMEQC
4 REGISTER_NET_LINKED(ENT_CLIENT_BUMBLE_RAYGUN)
5 #endif
6 
7 #ifdef SVQC
8 
9 void bumblebee_fire_cannon(entity this, entity _gun, string _tagname, entity _owner)
10 {
11  vector v = gettaginfo(_gun, gettagindex(_gun, _tagname));
12  vehicles_projectile(this, EFFECT_BIGPLASMA_MUZZLEFLASH, SND_VEH_BUMBLEBEE_FIRE,
13  v, normalize(v_forward + randomvec() * autocvar_g_vehicle_bumblebee_cannon_spread) * autocvar_g_vehicle_bumblebee_cannon_speed,
14  autocvar_g_vehicle_bumblebee_cannon_damage, autocvar_g_vehicle_bumblebee_cannon_radius, autocvar_g_vehicle_bumblebee_cannon_force, 0,
15  DEATH_VH_BUMB_GUN.m_id, PROJECTILE_BUMBLE_GUN, 0, true, true, _owner);
16 }
17 
18 bool bumble_raygun_send(entity this, entity to, float sf)
19 {
20  WriteHeader(MSG_ENTITY, ENT_CLIENT_BUMBLE_RAYGUN);
21 
22  WriteByte(MSG_ENTITY, sf);
23  if(sf & BRG_SETUP)
24  {
25  WriteByte(MSG_ENTITY, etof(this.realowner));
26  WriteByte(MSG_ENTITY, this.realowner.team);
27  WriteByte(MSG_ENTITY, this.cnt);
28  }
29 
30  if(sf & BRG_START)
31  {
32  WriteVector(MSG_ENTITY, this.hook_start);
33  }
34 
35  if(sf & BRG_END)
36  {
37  WriteVector(MSG_ENTITY, this.hook_end);
38  }
39 
40  return true;
41 }
42 
43 #endif
44 
45 #ifdef CSQC
46 
47 void bumble_raygun_draw(entity this);
48 
49 .vector bumble_origin;
50 
51 NET_HANDLE(ENT_CLIENT_BUMBLE_RAYGUN, bool isnew)
52 {
53  int sf = ReadByte();
54 
55  if(sf & BRG_SETUP)
56  {
57  this.cnt = ReadByte();
58  this.team = ReadByte();
59  this.count = ReadByte();
60 
61  if(this.count)
62  this.colormod = '1 0 0';
63  else
64  this.colormod = '0 1 0';
65 
66  this.traileffect = EFFECT_BUMBLEBEE_HEAL_MUZZLEFLASH.m_id;
67  this.lip = particleeffectnum(EFFECT_BUMBLEBEE_HEAL_IMPACT);
68 
69  this.draw = bumble_raygun_draw;
70  if (isnew) IL_PUSH(g_drawables, this);
71  }
72 
73 
74  if(sf & BRG_START)
75  {
76  this.origin = ReadVector();
77  setorigin(this, this.origin);
78  }
79 
80  if(sf & BRG_END)
81  {
82  this.bumble_origin = ReadVector();
83  }
84  return true;
85 }
86 
87 .float bumble_raygun_nextdraw;
88 void bumble_raygun_draw(entity this)
89 {
90  float _len;
91  vector _dir;
92  vector _vtmp1, _vtmp2;
93 
94  _len = vlen(this.origin - this.bumble_origin);
95  _dir = normalize(this.bumble_origin - this.origin);
96 
97  if(this.bumble_raygun_nextdraw < time)
98  {
99  entity eff = REGISTRY_GET(Effects, this.traileffect);
100  boxparticles(particleeffectnum(eff), this, this.origin, this.origin + _dir * -64, _dir * -_len , _dir * -_len, 1, PARTICLES_USEALPHA);
101  boxparticles(this.lip, this, this.bumble_origin, this.bumble_origin + _dir * -64, _dir * -200 , _dir * -200, 1, PARTICLES_USEALPHA);
102  this.bumble_raygun_nextdraw = time + 0.1;
103  }
104 
105  float i, df, sz, al;
106  for(i = -0.1; i < 0.2; i += 0.1)
107  {
108  df = DRAWFLAG_NORMAL; //((random() < 0.5) ? DRAWFLAG_ADDITIVE : DRAWFLAG_SCREEN);
109  sz = 5 + random() * 5;
110  al = 0.25 + random() * 0.5;
111  _vtmp1 = this.origin + _dir * _len * (0.25 + i);
112  _vtmp1 += (randomvec() * (_len * 0.2) * (frametime * 2)); //this.raygun_l1;
113  Draw_CylindricLine(this.origin, _vtmp1, sz, "gfx/colors/white", 1, 1, this.colormod, al, df, view_origin);
114 
115  _vtmp2 = this.origin + _dir * _len * (0.5 + i);
116  _vtmp2 += (randomvec() * (_len * 0.2) * (frametime * 5)); //this.raygun_l2;
117  Draw_CylindricLine(_vtmp1, _vtmp2, sz, "gfx/colors/white", 1, 1, this.colormod, al, df, view_origin);
118 
119  _vtmp1 = this.origin + _dir * _len * (0.75 + i);
120  _vtmp1 += randomvec() * (_len * 0.2) * (frametime * 10); //this.raygun_l3;
121  Draw_CylindricLine(_vtmp2, _vtmp1, sz, "gfx/colors/white", 1, 1, this.colormod, al, df, view_origin);
122 
123  Draw_CylindricLine(_vtmp1, this.bumble_origin + randomvec() * 32, sz, "gfx/colors/white", 1, 1, this.colormod, al, df, view_origin);
124  }
125 }
126 
127 #endif
#define REGISTER_NET_LINKED(id)
Definition: net.qh:67
vector colormod
Definition: powerups.qc:21
int team
Definition: main.qh:157
entity() spawn
#define REGISTRY_GET(id, i)
Definition: registry.qh:43
vector view_origin
Definition: main.qh:93
#define NET_HANDLE(id, param)
Definition: net.qh:12
entity to
Definition: self.qh:96
origin
Definition: ent_cs.qc:114
#define gettaginfo
Definition: post.qh:32
vector hook_end
Definition: hook.qc:128
#define gettagindex
Definition: dpextensions.qh:16
vector hook_start
Definition: hook.qc:128
float PARTICLES_USEALPHA
const int PROJECTILE_BUMBLE_GUN
Definition: projectiles.qh:31
float cnt
Definition: powerups.qc:24
ERASEABLE entity IL_PUSH(IntrusiveList this, entity it)
Push to tail.
float frametime
Definition: csprogsdefs.qc:17
const float DRAWFLAG_NORMAL
Definition: csprogsdefs.qc:317
vector(float skel, float bonenum) _skel_get_boneabs_hidden
vector v
Definition: ent_cs.qc:116
float count
Definition: powerups.qc:22
float lip
Definition: subs.qh:40
entity realowner
Definition: common.qh:25
setorigin(ent, v)
entity vehicles_projectile(entity this, entity _mzlfx, Sound _mzlsound, vector _org, vector _vel, float _dmg, float _radi, float _force, float _size, int _deahtype, float _projtype, float _health, bool _cull, bool _clianim, entity _owner)
Definition: sv_vehicles.qc:223
float time
Definition: csprogsdefs.qc:16
IntrusiveList g_drawables
Definition: main.qh:77
vector v_forward
Definition: csprogsdefs.qc:31
#define particleeffectnum(e)
Definition: effect.qh:3