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 WriteVector(MSG_ENTITY, this.hook_start);
32 if (sf & BRG_END)
33 WriteVector(MSG_ENTITY, this.hook_end);
34
35 return true;
36}
37
38#endif // SVQC
39#ifdef CSQC
40
41void bumble_raygun_draw(entity this);
42
44
45NET_HANDLE(ENT_CLIENT_BUMBLE_RAYGUN, bool isNew)
46{
47 int sf = ReadByte();
48
49 if (sf & BRG_SETUP)
50 {
51 this.cnt = ReadByte();
52 this.team = ReadByte();
53 this.count = ReadByte();
54
55 this.colormod = (this.count ? '1 0 0' : '0 1 0');
56
57 this.traileffect = EFFECT_BUMBLEBEE_HEAL_MUZZLEFLASH.m_id;
58 this.lip = particleeffectnum(EFFECT_BUMBLEBEE_HEAL_IMPACT);
59
60 this.draw = bumble_raygun_draw;
61 if (isNew)
62 IL_PUSH(g_drawables, this);
63 }
64
65
66 if (sf & BRG_START)
67 {
68 this.origin = ReadVector();
69 setorigin(this, this.origin);
70 }
71
72 if (sf & BRG_END)
74
75 return true;
76}
77
80{
81 float _len = vlen(this.origin - this.bumble_origin);
82 vector _dir = normalize(this.bumble_origin - this.origin);
83
85 {
86 entity eff = REGISTRY_GET(Effects, this.traileffect);
87 boxparticles(particleeffectnum(eff), this, this.origin, this.origin + _dir * -64, _dir * -_len, _dir * -_len, 1, PARTICLES_USEALPHA);
88 boxparticles(this.lip, this, this.bumble_origin, this.bumble_origin + _dir * -64, _dir * -200, _dir * -200, 1, PARTICLES_USEALPHA);
89 this.bumble_raygun_nextdraw = time + 0.1;
90 }
91
92 vector _vtmp1, _vtmp2;
93 float df = DRAWFLAG_NORMAL; //(random() < 0.5 ? DRAWFLAG_ADDITIVE : DRAWFLAG_SCREEN);
94 float sz, al;
95 for (float i = -0.1; i < 0.2; i += 0.1)
96 {
97 sz = 5 + random() * 5;
98 al = 0.25 + random() * 0.5;
99 _vtmp1 = this.origin + _dir * _len * (0.25 + i);
100 _vtmp1 += (randomvec() * (_len * 0.2) * (frametime * 2)); //this.raygun_l1;
101 Draw_CylindricLine(this.origin, _vtmp1, sz, "gfx/colors/white", 1, 1, this.colormod, al, df, view_origin);
102
103 _vtmp2 = this.origin + _dir * _len * (0.5 + i);
104 _vtmp2 += (randomvec() * (_len * 0.2) * (frametime * 5)); //this.raygun_l2;
105 Draw_CylindricLine(_vtmp1, _vtmp2, sz, "gfx/colors/white", 1, 1, this.colormod, al, df, view_origin);
106
107 _vtmp1 = this.origin + _dir * _len * (0.75 + i);
108 _vtmp1 += randomvec() * (_len * 0.2) * (frametime * 10); //this.raygun_l3;
109 Draw_CylindricLine(_vtmp2, _vtmp1, sz, "gfx/colors/white", 1, 1, this.colormod, al, df, view_origin);
110
111 Draw_CylindricLine(_vtmp1, this.bumble_origin + randomvec() * 32, sz, "gfx/colors/white", 1, 1, this.colormod, al, df, view_origin);
112 }
113}
114
115#endif // CSQC
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:156
#define ReadVector()
Definition net.qh:350
#define WriteHeader(to, id)
Definition net.qh:265
#define REGISTER_NET_LINKED(id)
Definition net.qh:91
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