]> icculus.org git repositories - divverent/nexuiz.git/blob - TeamNexuiz/game/gamec/w_bombletts.c
bumps for morphed's teleporter model
[divverent/nexuiz.git] / TeamNexuiz / game / gamec / w_bombletts.c
1 void() bombletts_ready_01;\r
2 void() bombletts_fire1_01;\r
3 void() bombletts_deselect_01;\r
4 void() bombletts_select_01;\r
5 \r
6 float() bombletts_check =\r
7 {\r
8         return TRUE;\r
9 }\r
10 \r
11 void(float req) w_bombletts =\r
12 {\r
13         if (req == WR_IDLE)\r
14                 bombletts_ready_01();\r
15         else if (req == WR_FIRE1)\r
16                 weapon_prepareattack(bombletts_check, bombletts_check, bombletts_fire1_01, cvar("g_balance_bombletts_refire"));\r
17         else if (req == WR_RAISE)\r
18                 bombletts_select_01();\r
19         else if (req == WR_UPDATECOUNTS)\r
20                 self.currentammo = 1;\r
21         else if (req == WR_DROP)\r
22                 bombletts_deselect_01();\r
23         else if (req == WR_SETUP)\r
24         {\r
25                 weapon_setup(WEP_BOMBLETTS, "w_bombletts.zym", IT_ROCKETS);\r
26                 //self.weaponentity.colormod = '0 4 0';\r
27                 //self.weaponentity.scale = 0.65;\r
28         }\r
29         else if (req == WR_CHECKAMMO)\r
30                 weapon_hasammo = bombletts_check();\r
31 }\r
32 \r
33 void W_Bombletts_Explode (void)\r
34 {\r
35         vector  org2;\r
36         org2 = findbetterlocation (self.origin);\r
37         te_explosion (org2);\r
38         effect (org2, "models/sprites/grenadeexplosion.spr32", 0, 20, 30);\r
39         sound (self, CHAN_BODY, "weapons/grenade_impact.wav", 1, ATTN_NORM);\r
40 \r
41         self.event_damage = SUB_Null;\r
42         RadiusDamage (self, self.owner, cvar("g_balance_bombletts_damage"), cvar("g_balance_bombletts_edgedamage"), cvar("g_balance_bombletts_radius"), world, cvar("g_balance_bombletts_force"), WEP_BOMBLETTS);\r
43 \r
44         remove (self);\r
45 }\r
46 \r
47 void W_Bombletts_Touch (void)\r
48 {\r
49         sound (self, CHAN_IMPACT, "weapons/grenade_bounce.wav", 1, ATTN_NORM);\r
50         self.velocity = self.velocity * cvar("g_balance_bombletts_bounce_speed");\r
51 }\r
52 \r
53 void W_Bombletts_Damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)\r
54 {\r
55         self.health = self.health - damage;\r
56         if (self.health <= 0)\r
57                 W_Bombletts_Explode();\r
58 }\r
59 \r
60 void W_Bombletts_Think (void)\r
61 {\r
62         self.nextthink = time;\r
63         if (time > self.cnt)\r
64         {\r
65                 W_Bombletts_Explode ();\r
66                 return;\r
67         }\r
68         if (self.owner)\r
69         {\r
70                 if (self.owner.deadflag)\r
71                         self.owner = self;\r
72                 else if (self.owner.wpn == WEP_BOMBLETTS && self.owner.button3)\r
73                         W_Bombletts_Explode ();\r
74         }\r
75 }\r
76 \r
77 void W_Bombletts_Attack (void)\r
78 {\r
79         local entity gren;\r
80         local vector org;\r
81 \r
82         sound (self, CHAN_WEAPON, "weapons/grenade_fire.wav", 1, ATTN_NORM);\r
83         self.punchangle_x = -4;\r
84         org = self.origin + self.view_ofs + v_forward * 15 + v_right * 5 + v_up * -12;\r
85 \r
86         gren = spawn ();\r
87         gren.owner = self;\r
88         gren.classname = "grenade";\r
89         gren.movetype = MOVETYPE_BOUNCE;\r
90         gren.solid = SOLID_BBOX;\r
91         setmodel(gren, "models/grenademodel.md3");\r
92         setsize(gren, '-6 -6 -3', '6 6 3');\r
93         setorigin(gren, org);\r
94 \r
95         gren.cnt = time + 1.5 + random()*0.5;\r
96         gren.think = W_Bombletts_Think;\r
97         gren.nextthink = time + 0.1;\r
98         //gren.think = W_Bombletts_Explode;\r
99         gren.touch = W_Bombletts_Touch;\r
100         gren.takedamage = DAMAGE_YES;\r
101         gren.health = 2;\r
102         //gren.damageforcescale = 4;\r
103         gren.event_damage = W_Bombletts_Damage;\r
104         gren.velocity = v_forward * cvar("g_balance_bombletts_speed")\r
105                 + v_up * cvar("g_balance_bombletts_speed_up");\r
106         gren.avelocity = '100 150 100';\r
107 \r
108         gren.angles = vectoangles (gren.velocity);\r
109 \r
110         gren.scale = 0.5;\r
111         gren.colormod = '1 .5 0'*4;//'0 0 1.9';\r
112 \r
113         self.clip_pipegrenades = self.clip_pipegrenades - 1;\r
114         if (self.clip_pipegrenades <= 0)\r
115         {\r
116                 DoReload (4, 6);        // weapon type 4 is Pipe Grenade, and reload 6 Grenades.\r
117         }\r
118 }\r
119 \r
120 // weapon frames\r
121 \r
122 void()  bombletts_ready_01 =    {weapon_thinkf(WFRAME_IDLE, 0.1, bombletts_ready_01); self.weaponentity.state = WS_READY;};\r
123 void()  bombletts_select_01 =   {weapon_thinkf(-1, cvar("g_balance_weaponswitchdelay"), w_ready); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, '0 0 0');};\r
124 void()  bombletts_deselect_01 = {weapon_thinkf(-1, cvar("g_balance_weaponswitchdelay"), w_clear); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, PLAYER_WEAPONSELECTION_RANGE);};\r
125 void()  bombletts_fire1_01 =\r
126 {\r
127         weapon_doattack(bombletts_check, bombletts_check, W_Bombletts_Attack);\r
128         weapon_thinkf(WFRAME_FIRE1, 0.3, bombletts_ready_01);\r
129 };