]> icculus.org git repositories - divverent/nexuiz.git/blob - TeamNexuiz/game/gamec/w_electro.c
Added a Game C folder
[divverent/nexuiz.git] / TeamNexuiz / game / gamec / w_electro.c
1 void() electro_ready_01;\r
2 void() electro_fire1_01;\r
3 void() electro_deselect_01;\r
4 void() electro_select_01;\r
5 \r
6 float() electro_check =\r
7 {\r
8         if (self.ammo_cells > 2)\r
9                 return TRUE;\r
10         return FALSE;\r
11 };\r
12 \r
13 void(float req) w_electro =\r
14 {\r
15         if (req == WR_IDLE)\r
16                 electro_ready_01();\r
17         else if (req == WR_FIRE1 || req == WR_FIRE2)\r
18                 weapon_prepareattack(electro_check, electro_check, electro_fire1_01, cvar("g_balance_electro_refire"));\r
19         else if (req == WR_RAISE)\r
20                 electro_select_01();\r
21         else if (req == WR_UPDATECOUNTS)\r
22                 self.currentammo = floor(self.ammo_cells / 2);\r
23         else if (req == WR_DROP)\r
24                 electro_deselect_01();\r
25         else if (req == WR_SETUP)\r
26                 weapon_setup(WEP_ELECTRO, "w_electro.zym", IT_CELLS);\r
27         else if (req == WR_CHECKAMMO)\r
28                 weapon_hasammo = electro_check();\r
29 };\r
30 \r
31 void W_Plasma_Explode (void)\r
32 {\r
33         WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);\r
34         WriteByte (MSG_BROADCAST, 79);\r
35         WriteCoord (MSG_BROADCAST, self.origin_x);\r
36         WriteCoord (MSG_BROADCAST, self.origin_y);\r
37         WriteCoord (MSG_BROADCAST, self.origin_z);\r
38         WriteCoord (MSG_BROADCAST, 0);          // SeienAbunae: groan... Useless clutter\r
39         WriteCoord (MSG_BROADCAST, 0);\r
40         WriteCoord (MSG_BROADCAST, 0);\r
41         WriteByte (MSG_BROADCAST, 155);\r
42 \r
43         self.event_damage = SUB_Null;\r
44         RadiusDamage (self, self.owner, cvar("g_balance_electro_damage"), cvar("g_balance_electro_edgedamage"), cvar("g_balance_electro_radius"), world, cvar("g_balance_electro_force"), WEP_ELECTRO);\r
45         sound (self, CHAN_BODY, "weapons/electro_impact.wav", 1, ATTN_NORM);\r
46 \r
47         remove (self);\r
48 }\r
49 \r
50 void W_Plasma_Touch (void)\r
51 {\r
52         if (other.classname == "player" || other.classname == "corpse")\r
53                 W_Plasma_Explode ();\r
54         else\r
55                 sound (self, CHAN_IMPACT, "weapons/grenade_bounce.wav", 1, ATTN_NORM);\r
56 }\r
57 \r
58 void W_Plasma_Damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)\r
59 {\r
60         self.health = self.health - damage;\r
61         if (self.health <= 0)\r
62                 W_Plasma_Explode ();\r
63 }\r
64 \r
65 void() W_Electro_Attack\r
66 {\r
67         local entity proj;\r
68         local vector org;\r
69         local float postion;\r
70 \r
71         postion = self.electrocount;\r
72         sound (self, CHAN_WEAPON, "weapons/electro_fire.wav", 1, ATTN_NORM);\r
73 \r
74         self.punchangle_x = -2;\r
75 \r
76         self.ammo_cells = self.ammo_cells - 2;\r
77 \r
78         if (self.electrocount == 0)\r
79         {\r
80                 self.electrocount = 1;\r
81                 org = self.origin + self.view_ofs + v_forward * 15 + v_right * 5 + v_up * -14;\r
82         }\r
83         else if (self.electrocount == 1)\r
84         {\r
85                 self.electrocount = 2;\r
86                 org = self.origin + self.view_ofs + v_forward * 15 + v_right * 10 + v_up * -12;\r
87         }\r
88         else\r
89         {\r
90                 self.electrocount = 0;\r
91                 org = self.origin + self.view_ofs + v_forward * 15 + v_right * 15 + v_up * -14;\r
92         }\r
93 \r
94         proj = spawn ();\r
95         proj.classname = "plasma";\r
96         proj.owner = self;\r
97         proj.effects = EF_BRIGHTFIELD | EF_ADDITIVE;\r
98         proj.think = W_Plasma_Explode;\r
99         proj.nextthink = time + 2;\r
100         proj.solid = SOLID_BBOX;\r
101         setorigin(proj, org);\r
102 \r
103         if (self.button3)\r
104         {\r
105                 proj.movetype = MOVETYPE_BOUNCE;\r
106                 proj.velocity = v_forward * cvar("g_balance_electro_ballspeed") + v_up * cvar("g_balance_electro_ballspeed_up");\r
107                 proj.touch = W_Plasma_Touch;\r
108                 setmodel(proj, "models/ebomb.mdl");\r
109                 setsize(proj, '-6 -6 -3', '6 6 3');\r
110                 proj.takedamage = DAMAGE_YES;\r
111                 proj.damageforcescale = 4;\r
112                 proj.health = 5;\r
113                 proj.event_damage = W_Plasma_Damage;\r
114         }\r
115         else\r
116         {\r
117                 proj.movetype = MOVETYPE_FLY;\r
118                 proj.velocity = v_forward * cvar("g_balance_electro_speed");\r
119                 proj.angles = vectoangles(proj.velocity);\r
120                 proj.touch = W_Plasma_Explode;\r
121                 setmodel(proj, "models/elaser.mdl");\r
122                 setsize(proj, '0 0 0', '0 0 0');\r
123         }\r
124         sound (proj, CHAN_BODY, "weapons/electro_fly.wav", 1, ATTN_NORM);\r
125 }\r
126 \r
127 // weapon frames\r
128 \r
129 void()  electro_ready_01 =      {weapon_thinkf(WFRAME_IDLE, 0.1, electro_ready_01); self.weaponentity.state = WS_READY;};\r
130 void()  electro_select_01 =     {weapon_thinkf(-1, cvar("g_balance_weaponswitchdelay"), w_ready); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, '0 0 0');};\r
131 void()  electro_deselect_01 =   {weapon_thinkf(-1, cvar("g_balance_weaponswitchdelay"), w_clear); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, PLAYER_WEAPONSELECTION_RANGE);};\r
132 void()  electro_fire1_01 =\r
133 {\r
134         weapon_doattack(electro_check, electro_check, W_Electro_Attack);\r
135         weapon_thinkf(WFRAME_FIRE1, 0.3, electro_ready_01);\r
136 };\r
137 \r