Rev 1 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1 | Rev 66 | ||
---|---|---|---|
1 | /* |
1 | /* |
2 | -------------------------------------------------------------------------------- |
2 | -------------------------------------------------------------------------------- |
3 | Duke: Nuclear Winter |
3 | Duke: Nuclear Winter |
4 | By Joris Weimar |
4 | By Joris Weimar |
5 | © 1997 Simply Silly Software |
5 | © 1997 Simply Silly Software |
6 | -------------------------------------------------------------------------------- |
6 | -------------------------------------------------------------------------------- |
7 | Duke: Nuclear Winter Plus |
7 | Duke: Nuclear Winter Plus |
8 | By Hendricks266 |
8 | By Hendricks266 |
9 | -------------------------------------------------------------------------------- |
9 | -------------------------------------------------------------------------------- |
10 | */ |
10 | */ |
11 | 11 | ||
12 | state checkcommhitstate |
12 | state checkcommhitstate |
13 | 13 | ||
14 | ifhitweapon |
14 | ifhitweapon |
15 | { |
15 | { |
16 | guts JIBS6 2 |
16 | guts JIBS6 2 |
17 | 17 | ||
18 | ifdead |
18 | ifdead |
19 | { |
19 | { |
20 | ifwasweapon FREEZEBLAST |
20 | ifwasweapon FREEZEBLAST |
21 | { |
21 | { |
22 | sound SOMETHINGFROZE |
22 | sound SOMETHINGFROZE |
23 | spritepal 1 |
23 | spritepal 1 |
24 | move 0 |
24 | move 0 |
25 | action ACOMMFROZEN |
25 | action ACOMMFROZEN |
26 | strength 0 |
26 | strength 0 |
27 | state icesmoke |
27 | state icesmoke |
28 | break |
28 | break |
29 | } |
29 | } |
30 | else |
30 | else |
31 | ifwasweapon GROWSPARK |
31 | ifwasweapon GROWSPARK |
32 | { |
32 | { |
33 | sound ACTOR_GROWING |
33 | sound ACTOR_GROWING |
34 | ai AICOMMGROW |
34 | ai AICOMMGROW |
35 | break |
35 | break |
36 | } |
36 | } |
37 | 37 | ||
38 | addkills 1 state specialdeath |
38 | addkills 1 state specialdeath |
39 | 39 | ||
40 | ifwasweapon RADIUSEXPLOSION |
40 | ifwasweapon RADIUSEXPLOSION |
41 | { |
41 | { |
42 | spawn BLOODPOOL |
42 | spawn BLOODPOOL |
43 | sound SQUISHED |
43 | sound SQUISHED |
44 | state standard_jibs |
44 | state standard_jibs |
45 | killit |
45 | killit |
46 | } |
46 | } |
47 | else |
47 | else |
48 | ifwasweapon RPG |
48 | ifwasweapon RPG |
49 | { |
49 | { |
50 | sound SQUISHED |
50 | sound SQUISHED |
51 | spawn BLOODPOOL |
51 | spawn BLOODPOOL |
52 | state standard_jibs |
52 | state standard_jibs |
53 | killit |
53 | killit |
54 | } |
54 | } |
55 | 55 | ||
56 | sound COMM_DYING |
56 | sound COMM_DYING |
57 | ai AICOMMDYING |
57 | ai AICOMMDYING |
58 | } |
58 | } |
59 | else |
59 | else |
60 | { |
60 | { |
61 | soundonce COMM_PAIN |
61 | soundonce COMM_PAIN |
62 | ifwasweapon SHRINKSPARK |
62 | ifwasweapon SHRINKSPARK |
63 | { |
63 | { |
64 | sound ACTOR_SHRINKING |
64 | sound ACTOR_SHRINKING |
65 | ai AICOMMSHRUNK |
65 | ai AICOMMSHRUNK |
66 | } |
66 | } |
67 | else |
67 | else |
68 | ifwasweapon GROWSPARK |
68 | ifwasweapon GROWSPARK |
69 | sound EXPANDERHIT |
69 | sound EXPANDERHIT |
70 | else |
70 | else |
71 | ifrnd 24 |
71 | ifrnd 24 |
72 | ai AICOMMABOUTTOSHOOT |
72 | ai AICOMMABOUTTOSHOOT |
73 | } |
73 | } |
74 | } |
74 | } |
75 | ends |
75 | ends |
76 | 76 | ||
77 | state commshootbot |
77 | state commshootbot |
78 | 78 | ||
79 | state calczdist |
79 | state calczdist |
80 | ldist xydist THISACTOR target |
80 | ldist xydist THISACTOR target |
81 | ifvare xydist 0 setvar xydist 1 |
81 | ifvare xydist 0 setvar xydist 1 |
82 | 82 | ||
83 | ifvarand monstflags 32 |
83 | ifvarand monstflags 32 |
84 | { |
84 | { |
85 | mulvar zdist 768 |
85 | mulvar zdist 768 |
86 | divvarvar zdist xydist |
86 | divvarvar zdist xydist |
87 | setprojectile[ELECTROPROJ].workslike 36866 |
87 | setprojectile[ELECTROPROJ].workslike 36866 |
88 | ezshoot zdist ELECTROPROJ |
88 | ezshoot zdist ELECTROPROJ |
89 | setthisprojectile[RETURN].extra 50 |
89 | setthisprojectile[RETURN].extra 50 |
90 | ifvarand monstflags 8 |
90 | ifvarand monstflags 8 |
91 | { |
91 | { |
92 | ezshoot zdist ELECTROPROJ |
92 | ezshoot zdist ELECTROPROJ |
93 | setthisprojectile[RETURN].extra 50 |
93 | setthisprojectile[RETURN].extra 50 |
94 | } |
94 | } |
95 | setprojectile[ELECTROPROJ].workslike 32770 |
95 | setprojectile[ELECTROPROJ].workslike 32770 |
96 | } |
96 | } |
97 | ifvarand monstflags 16 |
97 | ifvarand monstflags 16 |
98 | { |
98 | { |
99 | eshoot FIREBALLPROJ |
99 | eshoot FIREBALLPROJ |
100 | ifvarand monstflags 8 |
100 | ifvarand monstflags 8 |
101 | { |
101 | { |
102 | setthisprojectile[RETURN].pal 13 |
102 | setthisprojectile[RETURN].pal 13 |
103 | setthisprojectile[RETURN].extra 64 |
103 | setthisprojectile[RETURN].extra 64 |
104 | } |
104 | } |
105 | } |
105 | } |
106 | else |
106 | else |
107 | { |
107 | { |
108 | mulvar zdist 644 |
108 | mulvar zdist 644 |
109 | divvarvar zdist xydist |
109 | divvarvar zdist xydist |
110 | ezshoot zdist FREEZEBLAST // NOAIM |
110 | ezshoot zdist FREEZEBLAST // NOAIM |
111 | ifvarand monstflags 8 setactor[RETURN].extra 100 |
111 | ifvarand monstflags 8 setactor[RETURN].extra 100 |
112 | setactor[RETURN].ang sprite[THISACTOR].ang |
112 | setactor[RETURN].ang sprite[THISACTOR].ang |
113 | 113 | ||
114 | } |
114 | } |
115 | 115 | ||
116 | 116 | ||
117 | resetactioncount |
117 | resetactioncount |
118 | 118 | ||
119 | ends |
119 | ends |
120 | 120 | ||
121 | state commshooting |
121 | state commshooting |
122 | 122 | ||
123 | ifvarn target -1 { state commshootbot break } |
123 | ifvarn target -1 { state commshootbot break } |
124 | 124 | ||
125 | ifvarand monstflags 32 |
125 | ifvarand monstflags 32 |
126 | { |
126 | { |
127 | eshoot ELECTROPROJ |
127 | eshoot ELECTROPROJ |
128 | setthisprojectile[RETURN].extra 50 |
128 | setthisprojectile[RETURN].extra 50 |
129 | ifvarand monstflags 8 |
129 | ifvarand monstflags 8 |
130 | { |
130 | { |
131 | eshoot ELECTROPROJ |
131 | eshoot ELECTROPROJ |
132 | setthisprojectile[RETURN].extra 50 |
132 | setthisprojectile[RETURN].extra 50 |
133 | } |
133 | } |
134 | } else |
134 | } else |
135 | ifvarand monstflags 16 |
135 | ifvarand monstflags 16 |
136 | { |
136 | { |
137 | eshoot FIREBALLPROJ |
137 | eshoot FIREBALLPROJ |
138 | ifvarand monstflags 8 |
138 | ifvarand monstflags 8 |
139 | { |
139 | { |
140 | setthisprojectile[RETURN].pal 13 |
140 | setthisprojectile[RETURN].pal 13 |
141 | setthisprojectile[RETURN].extra 64 |
141 | setthisprojectile[RETURN].extra 64 |
142 | } |
142 | } |
143 | } |
143 | } |
144 | else |
144 | else |
145 | { |
145 | { |
146 | shoot FREEZEBLAST |
146 | shoot FREEZEBLAST |
147 | ifvarand monstflags 8 shoot FREEZEBLAST |
147 | ifvarand monstflags 8 shoot FREEZEBLAST |
148 | } |
148 | } |
149 | 149 | ||
150 | 150 | ||
151 | resetactioncount |
151 | resetactioncount |
152 | 152 | ||
153 | ends |
153 | ends |
154 | 154 | ||
155 | actor COMMANDERSTAYPUT COMMANDERSTRENGTH |
155 | actor COMMANDERSTAYPUT COMMANDERSTRENGTH |
156 | cactor COMMANDER |
156 | cactor COMMANDER |
157 | ai AICOMMABOUTTOSHOOT |
157 | ai AICOMMABOUTTOSHOOT |
158 | enda |
158 | enda |
159 | 159 | ||
160 | state commspinbotstate |
160 | state commspinbotstate |
161 | 161 | ||
162 | getactor[target].x mx |
162 | getactor[target].x mx |
163 | getactor[target].y my |
163 | getactor[target].y my |
164 | getactor[target].z mz |
164 | getactor[target].z mz |
165 | getactor[THISACTOR].x x |
165 | getactor[THISACTOR].x x |
166 | getactor[THISACTOR].y y |
166 | getactor[THISACTOR].y y |
167 | getactor[THISACTOR].z z |
167 | getactor[THISACTOR].z z |
168 | subvarvar mx x |
168 | subvarvar mx x |
169 | subvarvar my y |
169 | subvarvar my y |
170 | getangle angvar mx my |
170 | getangle angvar mx my |
171 | 171 | ||
172 | cos xvel angvar |
172 | cos xvel angvar |
173 | sin yvel angvar |
173 | sin yvel angvar |
174 | shiftvarr xvel 7 |
174 | shiftvarr xvel 7 |
175 | shiftvarr yvel 7 |
175 | shiftvarr yvel 7 |
176 | subvarvar z mz |
176 | subvarvar z mz |
177 | ifvarg z 2048 |
177 | ifvarg z 2048 |
178 | setvar zvel -512 else |
178 | setvar zvel -512 else |
179 | ifvarl z -2048 setvar zvel 512 |
179 | ifvarl z -2048 setvar zvel 512 |
180 | movesprite THISACTOR xvel yvel zvel CLIPMASK0 RETURN |
180 | movesprite THISACTOR xvel yvel zvel CLIPMASK0 RETURN |
181 | 181 | ||
182 | soundonce COMM_SPIN |
182 | soundonce COMM_SPIN |
183 | ifcount 16 |
183 | ifcount 16 |
184 | { |
184 | { |
185 | ifvarl xydist 1280 |
185 | ifvarl xydist 1280 |
186 | { |
186 | { |
187 | setvar temp CAPTSPINNINGPLAYER |
187 | setvar nw_temp CAPTSPINNINGPLAYER |
188 | ifvarand monstflags 8 mulvar temp -2 else mulvar temp -1 |
188 | ifvarand monstflags 8 mulvar nw_temp -2 else mulvar nw_temp -1 |
189 | setactor[target].htextra temp |
189 | setactor[target].htextra nw_temp |
190 | setactor[target].htpicnum RPG |
190 | setactor[target].htpicnum RPG |
191 | setactor[target].htowner THISACTOR |
191 | setactor[target].htowner THISACTOR |
192 | //sound DUKE_GRUNT |
192 | //sound DUKE_GRUNT |
193 | resetcount |
193 | resetcount |
194 | } |
194 | } |
195 | else |
195 | else |
196 | ifvarg xydist 2300 |
196 | ifvarg xydist 2300 |
197 | ai AICOMMWAIT |
197 | ai AICOMMWAIT |
198 | } |
198 | } |
199 | ifactioncount 52 |
199 | ifactioncount 52 |
200 | ai AICOMMWAIT |
200 | ai AICOMMWAIT |
201 | ifnotmoving |
201 | ifnotmoving |
202 | ifrnd 32 |
202 | ifrnd 32 |
203 | operate |
203 | operate |
204 | 204 | ||
205 | ends |
205 | ends |
206 | 206 | ||
207 | state commspinstate |
207 | state commspinstate |
208 | 208 | ||
209 | getplayer[THISACTOR].posx mx |
209 | getplayer[THISACTOR].posx mx |
210 | getplayer[THISACTOR].posy my |
210 | getplayer[THISACTOR].posy my |
211 | getactor[THISACTOR].x x |
211 | getactor[THISACTOR].x x |
212 | getactor[THISACTOR].y y |
212 | getactor[THISACTOR].y y |
213 | subvarvar mx x |
213 | subvarvar mx x |
214 | subvarvar my y |
214 | subvarvar my y |
215 | getangle angvar mx my |
215 | getangle angvar mx my |
216 | 216 | ||
217 | cos xvel angvar |
217 | cos xvel angvar |
218 | sin yvel angvar |
218 | sin yvel angvar |
219 | shiftvarr xvel 7 |
219 | shiftvarr xvel 7 |
220 | shiftvarr yvel 7 |
220 | shiftvarr yvel 7 |
221 | setvar zvel 0 |
221 | setvar zvel 0 |
222 | movesprite THISACTOR xvel yvel zvel CLIPMASK0 RETURN |
222 | movesprite THISACTOR xvel yvel zvel CLIPMASK0 RETURN |
223 | 223 | ||
224 | soundonce COMM_SPIN |
224 | soundonce COMM_SPIN |
225 | ifcount 16 |
225 | ifcount 16 |
226 | { |
226 | { |
227 | ifpdistl 1280 ifvarg canshootplayer 0 |
227 | ifpdistl 1280 ifvarg canshootplayer 0 |
228 | { |
228 | { |
229 | addphealth CAPTSPINNINGPLAYER |
229 | addphealth CAPTSPINNINGPLAYER |
230 | ifvarand monstflags 8 addphealth CAPTSPINNINGPLAYER |
230 | ifvarand monstflags 8 addphealth CAPTSPINNINGPLAYER |
231 | sound DUKE_GRUNT |
231 | sound DUKE_GRUNT |
232 | palfrom 32 16 |
232 | palfrom 32 16 |
233 | resetcount |
233 | resetcount |
234 | } |
234 | } |
235 | else |
235 | else |
236 | ifpdistg 2300 |
236 | ifpdistg 2300 |
237 | ai AICOMMWAIT |
237 | ai AICOMMWAIT |
238 | } |
238 | } |
239 | ifactioncount 52 |
239 | ifactioncount 52 |
240 | ai AICOMMWAIT |
240 | ai AICOMMWAIT |
241 | ifnotmoving |
241 | ifnotmoving |
242 | ifrnd 32 |
242 | ifrnd 32 |
243 | operate |
243 | operate |
244 | 244 | ||
245 | ends |
245 | ends |
246 | 246 | ||
247 | state commfrisbeestate |
247 | state commfrisbeestate |
248 | 248 | ||
249 | setvar weapcount -1 |
249 | setvar weapcount -1 |
250 | ifcount 6 |
250 | ifcount 6 |
251 | { |
251 | { |
252 | ifcount 7 nullop else |
252 | ifcount 7 nullop else |
253 | { |
253 | { |
254 | getplayer[THISACTOR].posx mx |
254 | getplayer[THISACTOR].posx mx |
255 | getplayer[THISACTOR].posy my |
255 | getplayer[THISACTOR].posy my |
256 | getactor[THISACTOR].x x |
256 | getactor[THISACTOR].x x |
257 | getactor[THISACTOR].y y |
257 | getactor[THISACTOR].y y |
258 | subvarvar mx x |
258 | subvarvar mx x |
259 | subvarvar my y |
259 | subvarvar my y |
260 | getangle peractor5 mx my |
260 | getangle peractor5 mx my |
261 | } |
261 | } |
262 | 262 | ||
263 | cos xvel peractor5 |
263 | cos xvel peractor5 |
264 | sin yvel peractor5 |
264 | sin yvel peractor5 |
265 | shiftvarr xvel 5 |
265 | shiftvarr xvel 5 |
266 | shiftvarr yvel 5 |
266 | shiftvarr yvel 5 |
267 | setvar zvel 0 |
267 | setvar zvel 0 |
268 | movesprite THISACTOR xvel yvel zvel CLIPMASK0 RETURN |
268 | movesprite THISACTOR xvel yvel zvel CLIPMASK0 RETURN |
269 | ifvarn RETURN 0 |
269 | ifvarn RETURN 0 |
270 | { |
270 | { |
271 | addvar RETURN 16384 |
271 | addvar RETURN 16384 |
272 | ifvarl RETURN 16384 |
272 | ifvarl RETURN 16384 |
273 | ifvarg RETURN -1 // hit a sprite |
273 | ifvarg RETURN -1 // hit a sprite |
274 | { |
274 | { |
275 | getactor[RETURN].picnum picnum |
275 | getactor[RETURN].picnum nw_picnum |
276 | getactorvar[RETURN].monstatus temp |
276 | getactorvar[RETURN].monstatus nw_temp |
277 | ifvare picnum APLAYER sound SQUISHED else |
277 | ifvare nw_picnum APLAYER sound SQUISHED else |
278 | ifvare temp 1 sound SQUISHED |
278 | ifvare nw_temp 1 sound SQUISHED |
279 | setactor[RETURN].htpicnum RPG |
279 | setactor[RETURN].htpicnum RPG |
280 | setactor[RETURN].htextra 100 |
280 | setactor[RETURN].htextra 100 |
281 | setactor[RETURN].htowner THISACTOR |
281 | setactor[RETURN].htowner THISACTOR |
282 | setactor[RETURN].htang peractor5 |
282 | setactor[RETURN].htang peractor5 |
283 | sound COMM_ATTACK |
283 | sound COMM_ATTACK |
284 | 284 | ||
285 | } |
285 | } |
286 | ai AICOMMWAIT |
286 | ai AICOMMWAIT |
287 | setvar weapcount 0 |
287 | setvar weapcount 0 |
288 | } |
288 | } |
289 | } |
289 | } |
290 | 290 | ||
291 | soundonce COMM_SPIN |
291 | soundonce COMM_SPIN |
292 | 292 | ||
293 | ifpdistl 1280 |
293 | ifpdistl 1280 |
294 | ifvarg canseeplayer 0 |
294 | ifvarg canseeplayer 0 |
295 | { |
295 | { |
296 | addphealth -1 |
296 | addphealth -1 |
297 | ifvarand monstflags 8 addphealth -1 |
297 | ifvarand monstflags 8 addphealth -1 |
298 | sound DUKE_GRUNT |
298 | sound DUKE_GRUNT |
299 | palfrom 32 16 |
299 | palfrom 32 16 |
300 | } |
300 | } |
301 | 301 | ||
302 | 302 | ||
303 | ifactioncount 52 |
303 | ifactioncount 52 |
304 | { |
304 | { |
305 | ai AICOMMWAIT |
305 | ai AICOMMWAIT |
306 | setvar weapcount 0 |
306 | setvar weapcount 0 |
307 | } |
307 | } |
308 | ends |
308 | ends |
309 | 309 | ||
310 | actor COMMANDER COMMANDERSTRENGTH |
310 | actor COMMANDER COMMANDERSTRENGTH |
311 | 311 | ||
312 | ifvarn target -1 |
312 | ifvarn target -1 |
313 | { |
313 | { |
314 | getactor[THISACTOR].z z |
314 | getactor[THISACTOR].z z |
315 | getactor[target].z mz |
315 | getactor[target].z mz |
316 | } |
316 | } |
317 | 317 | ||
318 | state checksquished |
318 | state checksquished |
319 | state monsterai |
319 | state monsterai |
320 | ifaction ACOMMFROZEN |
320 | ifaction ACOMMFROZEN |
321 | { |
321 | { |
322 | fall |
322 | fall |
323 | 323 | ||
324 | ifcount THAWTIME |
324 | ifcount THAWTIME |
325 | { |
325 | { |
326 | getlastpal |
326 | getlastpal |
327 | ai AICOMMWAIT |
327 | ai AICOMMWAIT |
328 | } |
328 | } |
329 | else |
329 | else |
330 | ifcount FROZENDRIPTIME |
330 | ifcount FROZENDRIPTIME |
331 | { |
331 | { |
332 | ifactioncount 26 |
332 | ifactioncount 26 |
333 | { |
333 | { |
334 | spawn WATERDRIP |
334 | spawn WATERDRIP |
335 | resetactioncount |
335 | resetactioncount |
336 | } |
336 | } |
337 | } |
337 | } |
338 | 338 | ||
339 | ifhitweapon |
339 | ifhitweapon |
340 | { |
340 | { |
341 | ifwasweapon FREEZEBLAST |
341 | ifwasweapon FREEZEBLAST |
342 | { |
342 | { |
343 | strength 0 |
343 | strength 0 |
344 | break |
344 | break |
345 | } |
345 | } |
346 | addkills 1 state specialdeath |
346 | addkills 1 state specialdeath |
347 | 347 | ||
348 | ifrnd 84 |
348 | ifrnd 84 |
349 | spawn BLOODPOOL |
349 | spawn BLOODPOOL |
350 | lotsofglass 30 |
350 | lotsofglass 30 |
351 | state standard_jibs |
351 | state standard_jibs |
352 | sound GLASS_BREAKING |
352 | sound GLASS_BREAKING |
353 | killit |
353 | killit |
354 | } |
354 | } |
355 | ifp pfacing |
355 | ifp pfacing |
356 | ifpdistl FROZENQUICKKICKDIST |
356 | ifpdistl FROZENQUICKKICKDIST |
357 | ifvare superkicking 0 |
357 | ifvare superkicking 0 |
358 | pkick |
358 | pkick |
359 | break |
359 | break |
360 | } |
360 | } |
361 | ifai 0 |
361 | ifai 0 |
362 | ai AICOMMSHOOT |
362 | ai AICOMMSHOOT |
363 | else |
363 | else |
364 | ifai AICOMMWAIT |
364 | ifai AICOMMWAIT |
365 | { |
365 | { |
366 | ifcount 20 |
366 | ifcount 20 |
367 | { |
367 | { |
368 | ifvarn target -1 |
368 | ifvarn target -1 |
369 | { |
369 | { |
370 | ifrnd 96 |
370 | ifrnd 96 |
371 | ai AICOMMGET |
371 | ai AICOMMGET |
372 | else |
372 | else |
373 | ai AICOMMABOUTTOSHOOT |
373 | ai AICOMMABOUTTOSHOOT |
374 | } |
374 | } |
375 | else |
375 | else |
376 | { |
376 | { |
377 | ifvarand monstflags 2048 |
377 | ifvarand monstflags 2048 |
378 | { |
378 | { |
379 | ifvarg targetlock 0 |
379 | ifvarg targetlock 0 |
380 | { |
380 | { |
381 | ifrnd 96 |
381 | ifrnd 96 |
382 | ai AICOMMGET |
382 | ai AICOMMGET |
383 | else ifvare playerally 0 |
383 | else ifvare playerally 0 |
384 | ai AICOMMABOUTTOSHOOT |
384 | ai AICOMMABOUTTOSHOOT |
385 | } |
385 | } |
386 | else |
386 | else |
387 | ai AICOMMGET |
387 | ai AICOMMGET |
388 | } |
388 | } |
389 | else |
389 | else |
390 | 390 | ||
391 | ifvarg canseeplayer 0 |
391 | ifvarg canseeplayer 0 |
392 | { |
392 | { |
393 | ifvarg canshootplayer 0 |
393 | ifvarg canshootplayer 0 |
394 | { |
394 | { |
395 | ifrnd 96 |
395 | ifrnd 96 |
396 | ai AICOMMGET |
396 | ai AICOMMGET |
397 | else ifvare playerally 0 |
397 | else ifvare playerally 0 |
398 | ai AICOMMABOUTTOSHOOT |
398 | ai AICOMMABOUTTOSHOOT |
399 | } |
399 | } |
400 | } |
400 | } |
401 | else |
401 | else |
402 | ai AICOMMGET |
402 | ai AICOMMGET |
403 | } |
403 | } |
404 | } |
404 | } |
405 | } |
405 | } |
406 | else |
406 | else |
407 | ifai AICOMMABOUTTOSHOOT |
407 | ifai AICOMMABOUTTOSHOOT |
408 | { |
408 | { |
409 | ifvare target -1 ifvarn playerally 0 { ai AICOMMGET break } |
409 | ifvare target -1 ifvarn playerally 0 { ai AICOMMGET break } |
410 | ifactioncount 2 |
410 | ifactioncount 2 |
411 | { |
411 | { |
412 | ifvarn target -1 ai AICOMMSHOOT else |
412 | ifvarn target -1 ai AICOMMSHOOT else |
413 | ifvarg canseeplayer 0 ifvare playerally 0 |
413 | ifvarg canseeplayer 0 ifvare playerally 0 |
414 | ai AICOMMSHOOT |
414 | ai AICOMMSHOOT |
415 | else |
415 | else |
416 | { |
416 | { |
417 | ai AICOMMGET |
417 | ai AICOMMGET |
418 | break |
418 | break |
419 | } |
419 | } |
420 | } |
420 | } |
421 | ifrnd 32 soundonce COMM_ATTACK |
421 | ifrnd 32 soundonce COMM_ATTACK |
422 | } |
422 | } |
423 | else |
423 | else |
424 | ifai AICOMMSHOOT |
424 | ifai AICOMMSHOOT |
425 | { |
425 | { |
426 | ifvare target -1 ifvarn playerally 0 { ai AICOMMGET break } |
426 | ifvare target -1 ifvarn playerally 0 { ai AICOMMGET break } |
427 | setvar temp 0 |
427 | setvar nw_temp 0 |
428 | ifvarn target -1 setvar temp 1 |
428 | ifvarn target -1 setvar nw_temp 1 |
429 | ifvarand monstflags 2048 |
429 | ifvarand monstflags 2048 |
430 | ifvare playerally 0 |
430 | ifvare playerally 0 |
431 | { |
431 | { |
432 | ifangdiffl 512 |
432 | ifangdiffl 512 |
433 | { |
433 | { |
434 | ai AICOMMFRISBEE |
434 | ai AICOMMFRISBEE |
435 | break |
435 | break |
436 | } |
436 | } |
437 | else ifvarg targetlock 0 setvar temp 1 |
437 | else ifvarg targetlock 0 setvar nw_temp 1 |
438 | } else |
438 | } else |
439 | ifvarg canshootplayer 0 setvar temp 1 |
439 | ifvarg canshootplayer 0 setvar nw_temp 1 |
440 | ifvare temp 1 |
440 | ifvare nw_temp 1 |
441 | { |
441 | { |
442 | ifcount 24 |
442 | ifcount 24 |
443 | ifrnd 16 |
443 | ifrnd 16 |
444 | ai AICOMMWAIT |
444 | ai AICOMMWAIT |
445 | ifactioncount 2 |
445 | ifactioncount 2 |
446 | { |
446 | { |
447 | state commshooting |
447 | state commshooting |
448 | } |
448 | } |
449 | } |
449 | } |
450 | else |
450 | else |
451 | ai AICOMMGET |
451 | ai AICOMMGET |
452 | } |
452 | } |
453 | else |
453 | else |
454 | ifai AICOMMSHRUNK |
454 | ifai AICOMMSHRUNK |
455 | { |
455 | { |
456 | ifcount SHRUNKDONECOUNT |
456 | ifcount SHRUNKDONECOUNT |
457 | ai AICOMMGET |
457 | ai AICOMMGET |
458 | else |
458 | else |
459 | ifcount SHRUNKCOUNT |
459 | ifcount SHRUNKCOUNT |
460 | sizeto 48 40 |
460 | sizeto 48 40 |
461 | else |
461 | else |
462 | state genericshrunkcode |
462 | state genericshrunkcode |
463 | } |
463 | } |
464 | else |
464 | else |
465 | ifai AICOMMGROW |
465 | ifai AICOMMGROW |
466 | state genericgrowcode |
466 | state genericgrowcode |
467 | else |
467 | else |
468 | ifai AICOMMGET |
468 | ifai AICOMMGET |
469 | { |
469 | { |
470 | ifvarn playerally 0 ifvare target -1 ifpdistl 1280 { ai AICOMMWAIT break } |
470 | ifvarn playerally 0 ifvare target -1 ifpdistl 1280 { ai AICOMMWAIT break } |
471 | ifnotmoving |
471 | ifnotmoving |
472 | ifrnd 4 |
472 | ifrnd 4 |
473 | operate |
473 | operate |
474 | ifvare playerally 0 |
474 | ifvare playerally 0 |
475 | ifpdistl 1280 |
475 | ifpdistl 1280 |
476 | ifp palive |
476 | ifp palive |
477 | { |
477 | { |
478 | sound COMM_SPIN |
478 | sound COMM_SPIN |
479 | ai AICOMMSPIN |
479 | ai AICOMMSPIN |
480 | break |
480 | break |
481 | } |
481 | } |
482 | ifvarn target -1 |
482 | ifvarn target -1 |
483 | ifvarl xydist 1280 |
483 | ifvarl xydist 1280 |
484 | { |
484 | { |
485 | sound COMM_SPIN |
485 | sound COMM_SPIN |
486 | ai AICOMMSPIN |
486 | ai AICOMMSPIN |
487 | break |
487 | break |
488 | } |
488 | } |
489 | 489 | ||
490 | ifvarg canseeplayer 0 |
490 | ifvarg canseeplayer 0 |
491 | { |
491 | { |
492 | setvar temp 0 |
492 | setvar nw_temp 0 |
493 | ifp phigher setvar temp 1 |
493 | ifp phigher setvar nw_temp 1 |
494 | ifvarn target -1 |
494 | ifvarn target -1 |
495 | ifvarvarg z mz setvar temp 1 |
495 | ifvarvarg z mz setvar nw_temp 1 |
496 | 496 | ||
497 | ifvare temp 1 |
497 | ifvare nw_temp 1 |
498 | move COMMGETUPVELS getv geth faceplayer |
498 | move COMMGETUPVELS getv geth faceplayer |
499 | else |
499 | else |
500 | move COMMGETVELS getv geth faceplayer |
500 | move COMMGETVELS getv geth faceplayer |
501 | } |
501 | } |
502 | ifactioncount 8 |
502 | ifactioncount 8 |
503 | ifrnd 2 |
503 | ifrnd 2 |
504 | ai AICOMMABOUTTOSHOOT |
504 | ai AICOMMABOUTTOSHOOT |
505 | } |
505 | } |
506 | else |
506 | else |
507 | ifai AICOMMSPIN |
507 | ifai AICOMMSPIN |
508 | { |
508 | { |
509 | ifvarn target -1 state commspinbotstate else |
509 | ifvarn target -1 state commspinbotstate else |
510 | state commspinstate |
510 | state commspinstate |
511 | } |
511 | } |
512 | else ifai AICOMMFRISBEE state commfrisbeestate |
512 | else ifai AICOMMFRISBEE state commfrisbeestate |
513 | 513 | ||
514 | ifai AICOMMDYING |
514 | ifai AICOMMDYING |
515 | { |
515 | { |
516 | fall |
516 | fall |
517 | strength 0 |
517 | strength 0 |
518 | 518 | ||
519 | ifhitweapon |
519 | ifhitweapon |
520 | ifwasweapon RADIUSEXPLOSION |
520 | ifwasweapon RADIUSEXPLOSION |
521 | { |
521 | { |
522 | sound SQUISHED |
522 | sound SQUISHED |
523 | spawn BLOODPOOL |
523 | spawn BLOODPOOL |
524 | state standard_jibs |
524 | state standard_jibs |
525 | killit |
525 | killit |
526 | } |
526 | } |
527 | 527 | ||
528 | ifaction ACOMMDYING |
528 | ifaction ACOMMDYING |
529 | ifactioncount 8 |
529 | ifactioncount 8 |
530 | { |
530 | { |
531 | iffloordistl 8 |
531 | iffloordistl 8 |
532 | sound THUD |
532 | sound THUD |
533 | cstat 0 |
533 | cstat 0 |
534 | action ANULLACTION |
534 | action ANULLACTION |
535 | //action ACOMMDEAD |
535 | //action ACOMMDEAD |
536 | move 0 |
536 | move 0 |
537 | cactor COMMANDERCORPSE |
537 | cactor COMMANDERCORPSE |
538 | } |
538 | } |
539 | } |
539 | } |
540 | else |
540 | else |
541 | { |
541 | { |
542 | ifrnd 2 |
542 | ifrnd 2 |
543 | soundonce COMM_ROAM |
543 | soundonce COMM_ROAM |
544 | state checkcommhitstate |
544 | state checkcommhitstate |
545 | } |
545 | } |
546 | enda |
546 | enda |
547 | 547 | ||
548 | 548 | ||
549 | 549 | ||
550 | 550 | ||
551 | useractor enemy TANK TANKSTRENGTH fall |
551 | useractor enemy TANK TANKSTRENGTH fall |
552 | state monsterai |
552 | state monsterai |
553 | ifaction 0 |
553 | ifaction 0 |
554 | { |
554 | { |
555 | // sizeat 60 60 |
555 | // sizeat 60 60 |
556 | action ATANKWAIT |
556 | action ATANKWAIT |
557 | cstat 257 |
557 | cstat 257 |
558 | clipdist 100 |
558 | clipdist 100 |
559 | } |
559 | } |
560 | else |
560 | else |
561 | ifaction ATANKSPIN |
561 | ifaction ATANKSPIN |
562 | { |
562 | { |
563 | soundonce TANK_ROAM |
563 | soundonce TANK_ROAM |
564 | 564 | ||
565 | ifactioncount 20 |
565 | ifactioncount 20 |
566 | { |
566 | { |
567 | ifvare target -1 ifvarn playerally 0 nullop else |
567 | ifvare target -1 ifvarn playerally 0 nullop else |
568 | ifrnd 16 |
568 | ifrnd 16 |
569 | ifvarg canseeplayer 0 |
569 | ifvarg canseeplayer 0 |
570 | ifvarg canshootplayer 0 |
570 | ifvarg canshootplayer 0 |
571 | { |
571 | { |
572 | move STOPPED geth |
572 | move STOPPED geth |
573 | action ATANKSHOOTING |
573 | action ATANKSHOOTING |
574 | stopsound TANK_ROAM |
574 | stopsound TANK_ROAM |
575 | } |
575 | } |
576 | } |
576 | } |
577 | 577 | ||
578 | ifrnd 16 |
578 | ifrnd 16 |
579 | move TANKFORWARD seekplayer |
579 | move TANKFORWARD seekplayer |
580 | } |
580 | } |
581 | else |
581 | else |
582 | ifaction ATANKSHOOTING |
582 | ifaction ATANKSHOOTING |
583 | { |
583 | { |
584 | ifvarn target -1 state tankshootbot else |
584 | ifvarn target -1 state tankshootbot else |
585 | { |
585 | { |
586 | ifvarn playerally 0 { move 0 action ATANKWAIT break } |
586 | ifvarn playerally 0 { move 0 action ATANKWAIT break } |
587 | ifactioncount 22 |
587 | ifactioncount 22 |
588 | { |
588 | { |
589 | ifpdistg 8192 |
589 | ifpdistg 8192 |
590 | { |
590 | { |
591 | sound BOS1_ATTACK2 |
591 | sound BOS1_ATTACK2 |
592 | shoot MORTER |
592 | shoot MORTER |
593 | ifvarand monstflags 8 shoot MORTER |
593 | ifvarand monstflags 8 shoot MORTER |
594 | } |
594 | } |
595 | resetcount |
595 | resetcount |
596 | move 0 action ATANKWAIT |
596 | move 0 action ATANKWAIT |
597 | } |
597 | } |
598 | else |
598 | else |
599 | ifactioncount 2 |
599 | ifactioncount 2 |
600 | { |
600 | { |
601 | ifvarg canseeplayer 0 |
601 | ifvarg canseeplayer 0 |
602 | { |
602 | { |
603 | ifpdistl 16384 |
603 | ifpdistl 16384 |
604 | { |
604 | { |
605 | ifrnd 128 |
605 | ifrnd 128 |
606 | { |
606 | { |
607 | ifvarand monstflags 16 |
607 | ifvarand monstflags 16 |
608 | { |
608 | { |
609 | ifvarand morefx 16 |
609 | ifvarand morefx 16 |
610 | ifvarn rendmode 0 espawn SHOTSPARK5 |
610 | ifvarn rendmode 0 espawn SHOTSPARK5 |
611 | sound PISTOL_LOW |
611 | sound PISTOL_LOW |
612 | shoot STARPROJ |
612 | shoot STARPROJ |
613 | ifvarand monstflags 8 shoot STARPROJ |
613 | ifvarand monstflags 8 shoot STARPROJ |
614 | } else |
614 | } else |
615 | { |
615 | { |
616 | ifvarand morefx 16 |
616 | ifvarand morefx 16 |
617 | ifvarn rendmode 0 espawn SHOTSPARK5 |
617 | ifvarn rendmode 0 espawn SHOTSPARK5 |
618 | addvar position 1 ifvarg position 3 setvar position 0 |
618 | addvar position 1 ifvarg position 3 setvar position 0 |
619 | setactorvar[RETURN].position position |
619 | setactorvar[RETURN].position position |
620 | ifvare dpsounds YES sound DPCHAINGUNFIRE else |
620 | ifvare dpsounds YES sound DPCHAINGUNFIRE else |
621 | sound PISTOL_FIRE |
621 | sound PISTOL_FIRE |
622 | shoot SHOTSPARK1 |
622 | shoot SHOTSPARK1 |
623 | ifvarand monstflags 8 shoot SHOTSPARK1 |
623 | ifvarand monstflags 8 shoot SHOTSPARK1 |
624 | } |
624 | } |
625 | } |
625 | } |
626 | } |
626 | } |
627 | else |
627 | else |
628 | ifrnd 128 |
628 | ifrnd 128 |
629 | { |
629 | { |
630 | ifvarand monstflags 16 |
630 | ifvarand monstflags 16 |
631 | { |
631 | { |
632 | sound RPG_SHOOT |
632 | sound RPG_SHOOT |
633 | shoot FIREBULLET |
633 | shoot FIREBULLET |
634 | ifvarand monstflags 8 shoot FIREBULLET |
634 | ifvarand monstflags 8 shoot FIREBULLET |
635 | } |
635 | } |
636 | else |
636 | else |
637 | { |
637 | { |
638 | ifvare dpsounds YES sound PRED_ATTACK2 else |
638 | ifvare dpsounds YES sound PRED_ATTACK2 else |
639 | sound PRED_ATTACK |
639 | sound PRED_ATTACK |
640 | shoot FIRELASER |
640 | shoot FIRELASER |
641 | ifvarand monstflags 8 shoot FIRELASER |
641 | ifvarand monstflags 8 shoot FIRELASER |
642 | } |
642 | } |
643 | } |
643 | } |
644 | } |
644 | } |
645 | else |
645 | else |
646 | { |
646 | { |
647 | move TANKFORWARD seekplayer |
647 | move TANKFORWARD seekplayer |
648 | action ATANKSPIN |
648 | action ATANKSPIN |
649 | } |
649 | } |
650 | } |
650 | } |
651 | 651 | ||
652 | ifrnd 16 |
652 | ifrnd 16 |
653 | { |
653 | { |
654 | stopsound TANK_ROAM |
654 | stopsound TANK_ROAM |
655 | move STOPPED faceplayerslow |
655 | move STOPPED faceplayerslow |
656 | } |
656 | } |
657 | } |
657 | } |
658 | } |
658 | } |
659 | else |
659 | else |
660 | ifaction ATANKWAIT |
660 | ifaction ATANKWAIT |
661 | { |
661 | { |
662 | ifactioncount 32 |
662 | ifactioncount 32 |
663 | { |
663 | { |
664 | move TANKFORWARD seekplayer |
664 | move TANKFORWARD seekplayer |
665 | action ATANKSPIN |
665 | action ATANKSPIN |
666 | } |
666 | } |
667 | } |
667 | } |
668 | else |
668 | else |
669 | ifaction ATANKDEAD |
669 | ifaction ATANKDEAD |
670 | { |
670 | { |
671 | addkills 1 state specialdeath |
671 | addkills 1 state specialdeath |
672 | hitradius 6144 TOUGH TOUGH TOUGH TOUGH |
672 | hitradius 6144 TOUGH TOUGH TOUGH TOUGH |
673 | sound LASERTRIP_EXPLODE |
673 | sound LASERTRIP_EXPLODE |
674 | debris SCRAP1 15 |
674 | debris SCRAP1 15 |
675 | spawn EXPLOSION2 |
675 | spawn EXPLOSION2 |
676 | ifrnd 128 spawn SNOWMAN |
676 | ifrnd 128 spawn SNOWMAN |
677 | killit |
677 | killit |
678 | } |
678 | } |
679 | 679 | ||
680 | ifhitweapon |
680 | ifhitweapon |
681 | { |
681 | { |
682 | ifdead |
682 | ifdead |
683 | action ATANKDEAD |
683 | action ATANKDEAD |
684 | else |
684 | else |
685 | { |
685 | { |
686 | debris SCRAP1 1 |
686 | debris SCRAP1 1 |
687 | ifaction ATANKSHOOTING break |
687 | ifaction ATANKSHOOTING break |
688 | ifvare target -1 ifvarn playerally 0 nullop else |
688 | ifvare target -1 ifvarn playerally 0 nullop else |
689 | ifrnd 192 |
689 | ifrnd 192 |
690 | { |
690 | { |
691 | move STOPPED geth |
691 | move STOPPED geth |
692 | action ATANKSHOOTING |
692 | action ATANKSHOOTING |
693 | stopsound TANK_ROAM |
693 | stopsound TANK_ROAM |
694 | } |
694 | } |
695 | } |
695 | } |
696 | } |
696 | } |
697 | 697 | ||
698 | enda |
698 | enda |
699 | 699 | ||
700 | 700 |