1 void() rincendiary_ready_01;
\r
2 void() rincendiary_fire1_01;
\r
3 void() rincendiary_deselect_01;
\r
4 void() rincendiary_select_01;
\r
6 float() rincendiary_check =
\r
8 if (self.ammo_rockets >= 5)
\r
13 void(float req) w_rincendiary =
\r
16 rincendiary_ready_01();
\r
17 else if (req == WR_FIRE1)
\r
18 weapon_prepareattack(rincendiary_check, rincendiary_check, rincendiary_fire1_01, cvar("g_balance_incendiaryrocket_refire"));
\r
19 else if (req == WR_RAISE)
\r
20 rincendiary_select_01();
\r
21 else if (req == WR_UPDATECOUNTS)
\r
22 self.currentammo = floor(self.ammo_rockets / 5);
\r
23 else if (req == WR_DROP)
\r
24 rincendiary_deselect_01();
\r
25 else if (req == WR_SETUP)
\r
26 weapon_setup(WEP_ROCKET_INCENDIARY, "w_rli.zym", IT_ROCKETS);
\r
27 else if (req == WR_CHECKAMMO)
\r
28 weapon_hasammo = rincendiary_check();
\r
32 void W_IncendiaryRocket_Explode (void)
\r
37 float flametime, flamedmg, flamerate, flameedge, flameradius, distratio;
\r
39 flameradius = cvar("g_balance_incendiaryrocket_burnradius");
\r
40 flamedmg = cvar("g_balance_incendiaryrocket_burndamage");
\r
41 flamerate = cvar("g_balance_incendiaryrocket_burnrate");
\r
42 flametime = cvar("g_balance_incendiaryrocket_burntime");
\r
43 flameedge = cvar("g_balance_incendiaryrocket_burnedge_ratio");
\r
45 org2 = findbetterlocation (self.origin);
\r
46 te_explosion (org2);
\r
47 effect (org2, "models/sprites/rocketexplosion.spr32", 0, 20, 40);
\r
48 sound (self, CHAN_BODY, "weapons/rocket_impact.wav", 1, ATTN_NORM);
\r
50 self.event_damage = SUB_Null;
\r
51 RadiusDamage (self, self.owner, cvar("g_balance_incendiaryrocket_damage"), cvar("g_balance_incendiaryrocket_edgedamage"), cvar("g_balance_incendiaryrocket_radius"), world, cvar("g_balance_incendiaryrocket_force"), WEP_ROCKET_INCENDIARY);
\r
53 // fixme: need better way to set on fire...
\r
54 head = findradius(self.origin, flameradius);
\r
57 if(head.takedamage == DAMAGE_AIM)//head.classname == "player" || head.classname == "turret")
\r
59 traceline(self.origin, head.origin, TRUE, self);
\r
60 if(trace_fraction >= 1)
\r
62 distratio = 1 - (vlen(head.origin - self.origin) / flameradius);
\r
63 IgniteTarget(head, self.owner,
\r
64 (flametime*flameedge) + (flametime - flameedge)*distratio,
\r
76 void W_IncendiaryRocket_Think (void)
\r
78 self.nextthink = time;
\r
79 if (time > self.cnt)
\r
81 W_IncendiaryRocket_Explode ();
\r
86 if (self.owner.deadflag)
\r
88 else if (self.owner.wpn == WEP_ROCKET_INCENDIARY && self.owner.button3)
\r
89 W_IncendiaryRocket_Explode ();
\r
93 void W_IncendiaryRocket_Touch (void)
\r
95 if (pointcontents (self.origin) == CONTENT_SKY)
\r
101 W_IncendiaryRocket_Explode ();
\r
104 void W_IncendiaryRocket_Damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
\r
106 self.health = self.health - damage;
\r
107 if (self.health <= 0)
\r
108 W_IncendiaryRocket_Explode();
\r
111 void W_IncendiaryRocket_Attack (void)
\r
113 local entity missile;
\r
114 local entity flash;
\r
116 sound (self, CHAN_WEAPON, "weapons/rocket_fire.wav", 1, ATTN_NORM);
\r
117 if (cvar("g_rocketarena") == 0)
\r
118 self.ammo_rockets = self.ammo_rockets - 5;
\r
119 self.punchangle_x = -4;
\r
120 org = self.origin + self.view_ofs + v_forward * 15 + v_right * 3 + v_up * -11;
\r
121 te_smallflash(org);
\r
123 missile = spawn ();
\r
124 missile.owner = self;
\r
125 missile.classname = "missile";
\r
127 missile.takedamage = DAMAGE_YES;
\r
128 //missile.damageforcescale = 4;
\r
129 missile.health = 30;
\r
130 missile.event_damage = W_IncendiaryRocket_Damage;
\r
132 missile.movetype = MOVETYPE_FLY;
\r
133 missile.solid = SOLID_BBOX;
\r
134 setmodel (missile, "models/rocket.md3");
\r
135 setsize (missile, '0 0 0', '0 0 0');
\r
137 setorigin (missile, org);
\r
138 missile.velocity = v_forward * cvar("g_balance_incendiaryrocket_speed");
\r
139 missile.angles = vectoangles (missile.velocity);
\r
141 missile.touch = W_IncendiaryRocket_Touch;
\r
142 missile.think = W_IncendiaryRocket_Think;
\r
143 missile.nextthink = time;
\r
144 missile.cnt = time + 9;
\r
145 sound (missile, CHAN_BODY, "weapons/rocket_fly.wav", 0.4, ATTN_NORM);
\r
148 setorigin (flash, org);
\r
149 setmodel (flash, "models/flash.md3");
\r
150 flash.velocity = v_forward * 20;
\r
151 flash.angles = vectoangles (flash.velocity);
\r
152 SUB_SetFade (flash, time, 0.4);
\r
153 flash.effects = flash.effects | EF_ADDITIVE | EF_FULLBRIGHT;
\r
158 void() rincendiary_ready_01 = {weapon_thinkf(WFRAME_IDLE, 0.1, rincendiary_ready_01); self.weaponentity.state = WS_READY;};
\r
159 void() rincendiary_select_01 = {weapon_thinkf(-1, cvar("g_balance_weaponswitchdelay"), w_ready); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, '0 0 0');};
\r
160 void() rincendiary_deselect_01 = {weapon_thinkf(-1, cvar("g_balance_weaponswitchdelay"), w_clear); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, PLAYER_WEAPONSELECTION_RANGE);};
\r
161 void() rincendiary_fire1_01 =
\r
163 weapon_doattack(rincendiary_check, rincendiary_check, W_IncendiaryRocket_Attack);
\r
164 weapon_thinkf(WFRAME_FIRE1, 0.3, rincendiary_ready_01);
\r