Xonotic QuakeC
The free, fast arena FPS with crisp movement and a wide array of weapons
bumblebee_weapons.qc
Go to the documentation of this file.
2
3#ifdef GAMEQC
4REGISTER_NET_LINKED(ENT_CLIENT_BUMBLE_RAYGUN)
5#endif
6
7#ifdef SVQC
8
9void 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,
15 DEATH_VH_BUMB_GUN.m_id, PROJECTILE_BUMBLE_GUN, 0, true, true, _owner);
16}
17
18bool bumble_raygun_send(entity this, entity to, float sf)
19{
20 WriteHeader(MSG_ENTITY, ENT_CLIENT_BUMBLE_RAYGUN);
21
23 if(sf & BRG_SETUP)
24 {
26 WriteByte(MSG_ENTITY, this.realowner.team);
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
47void bumble_raygun_draw(entity this);
48
50
51NET_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 {
83 }
84 return true;
85}
86
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
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
const float BRG_SETUP
Definition bumblebee.qc:9
const float BRG_START
Definition bumblebee.qc:10
const float BRG_END
Definition bumblebee.qc:11
vector bumble_origin
void bumble_raygun_draw(entity this)
float bumble_raygun_nextdraw
void bumblebee_fire_cannon(entity this, entity _gun, string _tagname, entity _owner)
bool bumble_raygun_send(entity this, entity to, float sf)
float autocvar_g_vehicle_bumblebee_cannon_speed
float autocvar_g_vehicle_bumblebee_cannon_radius
float autocvar_g_vehicle_bumblebee_cannon_damage
float autocvar_g_vehicle_bumblebee_cannon_force
float autocvar_g_vehicle_bumblebee_cannon_spread
var entity(vector mins, vector maxs,.entity tofield) findbox_tofield_OrFallback
float cnt
Definition powerups.qc:24
vector colormod
Definition powerups.qc:21
float count
Definition powerups.qc:22
IntrusiveList g_drawables
Definition main.qh:91
vector view_origin
Definition main.qh:109
int team
Definition main.qh:188
void Draw_CylindricLine(vector from, vector to, float thickness, string texture, float aspect, float shift, vector rgb, float theAlpha, float drawflag, vector vieworg)
Definition draw.qh:11
const float DRAWFLAG_NORMAL
float frametime
float time
vector v_forward
vector origin
float PARTICLES_USEALPHA
#define gettagindex
#define particleeffectnum(e)
Definition effect.qh:3
ERASEABLE entity IL_PUSH(IntrusiveList this, entity it)
Push to tail.
#define NET_HANDLE(id, param)
Definition net.qh:15
const int MSG_ENTITY
Definition net.qh:115
#define ReadVector()
Definition net.qh:367
#define WriteHeader(to, id)
Definition net.qh:221
#define REGISTER_NET_LINKED(id)
Definition net.qh:55
int ReadByte()
float random(void)
float vlen(vector v)
vector randomvec(void)
vector normalize(vector v)
void WriteByte(float data, float dest, float desto)
#define etof(e)
Definition misc.qh:25
#define gettaginfo
Definition post.qh:32
const int PROJECTILE_BUMBLE_GUN
#define REGISTRY_GET(id, i)
Definition registry.qh:43
vector
Definition self.qh:92
vector hook_start
Definition hook.qc:80
vector hook_end
Definition hook.qc:80
float lip
Definition subs.qh:40
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)
entity realowner