]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/turrets/turret/plasma.qc
7b71ccfc7fa78be080d7b1fa1dba7f189550111d
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / turrets / turret / plasma.qc
1 #ifndef TURRET_PLASMA_H
2 #define TURRET_PLASMA_H
3
4 #include "plasma_weapon.qh"
5
6 CLASS(PlasmaTurret, Turret)
7 /* spawnflags */ ATTRIB(PlasmaTurret, spawnflags, int, TUR_FLAG_SPLASH | TUR_FLAG_MEDPROJ | TUR_FLAG_PLAYER);
8 /* mins       */ ATTRIB(PlasmaTurret, mins, vector, '-32 -32 0');
9 /* maxs       */ ATTRIB(PlasmaTurret, maxs, vector, '32 32 64');
10 /* modelname  */ ATTRIB(PlasmaTurret, mdl, string, "base.md3");
11 /* model      */ ATTRIB_STRZONE(PlasmaTurret, model, string, strcat("models/turrets/", this.mdl));
12 /* head_model */ ATTRIB_STRZONE(PlasmaTurret, head_model, string, strcat("models/turrets/", "plasma.md3"));
13 /* netname    */ ATTRIB(PlasmaTurret, netname, string, "plasma");
14 /* fullname   */ ATTRIB(PlasmaTurret, turret_name, string, _("Plasma Cannon"));
15     ATTRIB(PlasmaTurret, m_weapon, Weapon, WEP_PLASMA);
16 ENDCLASS(PlasmaTurret)
17 REGISTER_TURRET(PLASMA, NEW(PlasmaTurret));
18
19 #endif
20
21 #ifdef IMPLEMENTATION
22
23 #ifdef SVQC
24
25 spawnfunc(turret_plasma) { if (!turret_initialize(this, TUR_PLASMA)) remove(this); }
26
27 METHOD(PlasmaTurret, tr_attack, void(PlasmaTurret this, entity it))
28 {
29     if(g_instagib)
30     {
31         FireRailgunBullet (it, it.tur_shotorg, it.tur_shotorg + it.tur_shotdir_updated * MAX_SHOT_DISTANCE, 10000000000,
32                            800, 0, 0, 0, 0, DEATH_TURRET_PLASMA.m_id);
33
34         Send_Effect(EFFECT_VORTEX_MUZZLEFLASH, it.tur_shotorg, it.tur_shotdir_updated * 1000, 1);
35
36         // teamcolor / hit beam effect
37         vector v = WarpZone_UnTransformOrigin(WarpZone_trace_transform, trace_endpos);
38         WarpZone_TrailParticles(NULL, particleeffectnum(EFFECT_VAPORIZER(it.team)), it.tur_shotorg, v);
39     }
40     else
41     {
42         SUPER(PlasmaTurret).tr_attack(this, it);
43     }
44     if (it.tur_head.frame == 0)
45         it.tur_head.frame = 1;
46 }
47 METHOD(PlasmaTurret, tr_think, void(PlasmaTurret thistur, entity it))
48 {
49     if (it.tur_head.frame != 0)
50         it.tur_head.frame = it.tur_head.frame + 1;
51
52     if (it.tur_head.frame > 5)
53         it.tur_head.frame = 0;
54 }
55 METHOD(PlasmaTurret, tr_setup, void(PlasmaTurret this, entity it))
56 {
57     it.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIEVE;
58     it.damage_flags |= TFL_DMG_HEADSHAKE;
59     it.firecheck_flags |= TFL_FIRECHECK_AFF;
60     it.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_SPLASH;
61
62     turret_do_updates(it);
63 }
64
65 #endif
66 #endif