1 |
### POWER PLANT II LEVEL LOGIC ### |
2 |
|
3 |
### START, SAVE & OBJECTIVES ### |
4 |
|
5 |
var int inside_final_cutscene = 0; |
6 |
|
7 |
func void start(string ai_name) |
8 |
{ |
9 |
particle save3_locklight01 do start |
10 |
|
11 |
if (save_point eq 0) |
12 |
{ |
13 |
my_save_point = 0 |
14 |
trigvolume_enable trigger_volume_07 0 |
15 |
particle_room1_start |
16 |
particle doorA_locklight01 do stop |
17 |
ai2_spawn ambush_striker_10 |
18 |
ai2_spawn ambush_striker_11 |
19 |
set_objective_1 |
20 |
chr_invincible ShinShin 1 |
21 |
chr_unstoppable ShinShin 1 |
22 |
} |
23 |
if (save_point eq 1) |
24 |
{ |
25 |
my_save_point = 1; |
26 |
dprint restore1_active |
27 |
trigvolume_enable room3_particle_control 0 |
28 |
door_lock 3 |
29 |
particle Shindoor_locklight01 do stop |
30 |
particle room4 do start |
31 |
ai2_spawn A3_n05 |
32 |
restore_game |
33 |
set_objective_3 |
34 |
} |
35 |
if (save_point eq 2) |
36 |
{ |
37 |
my_save_point = 2; |
38 |
dprint restore2_active |
39 |
particle doorA_locklight01 do stop |
40 |
particle doorB_locklight01 do start |
41 |
door_lock 15 |
42 |
trigvolume_enable save2 0 |
43 |
ai2_spawn vat_bot_1 |
44 |
ai2_spawn vat_bot_2 |
45 |
ai2_spawn vat_bot_3 |
46 |
ai2_spawn vat_bot_4 |
47 |
ai2_spawn vat_bot_5 |
48 |
chr_weapon_immune(vat_bot_1); |
49 |
chr_weapon_immune(vat_bot_2); |
50 |
chr_weapon_immune(vat_bot_3); |
51 |
chr_weapon_immune(vat_bot_4); |
52 |
chr_weapon_immune(vat_bot_5); |
53 |
restore_game |
54 |
set_objective_4 |
55 |
sound_music_start atm_cl12 0.75 |
56 |
} |
57 |
if (save_point eq 3) |
58 |
{ |
59 |
my_save_point = 3; |
60 |
dprint restore3_active |
61 |
particle save3_locklight01 do stop |
62 |
door_lock 23 |
63 |
door_lock 28 |
64 |
ai2_spawn E1_sr28 |
65 |
ai2_spawn E1_sr30 |
66 |
ai2_spawn E1_sb29 |
67 |
ai2_spawn ambush_comguy_1 |
68 |
ai2_spawn E1_n31 |
69 |
ai2_spawn E1_n32 |
70 |
ai2_spawn E1_n37 |
71 |
trigvolume_enable save_point3 0 |
72 |
trigvolume_enable p11b_vol 0 |
73 |
restore_game |
74 |
pipe3_start |
75 |
set_objective_5 |
76 |
} |
77 |
} |
78 |
|
79 |
func void you_lose(string ai_name) |
80 |
{ |
81 |
sleep 240 |
82 |
fade_out 0 0 0 180 |
83 |
sleep 240 |
84 |
lose |
85 |
} |
86 |
|
87 |
func void you_win(int char_index) |
88 |
{ |
89 |
outro |
90 |
win |
91 |
} |
92 |
|
93 |
func void new_save1(string ai_name) |
94 |
{ |
95 |
if (my_save_point ne 1) |
96 |
{ |
97 |
save_game 1 autosave |
98 |
} |
99 |
} |
100 |
|
101 |
func void save_point_1(string ai_name) |
102 |
{ |
103 |
dprint savegame_1 |
104 |
door_lock 3 |
105 |
particle Shindoor_locklight01 do stop |
106 |
} |
107 |
|
108 |
func void save_point_2(string ai_name) |
109 |
{ |
110 |
dprint savegame_2 |
111 |
save_game 2 autosave |
112 |
} |
113 |
|
114 |
func void save_point_3(string ai_name) |
115 |
{ |
116 |
dprint savegame_3 |
117 |
save_game 3 autosave |
118 |
} |
119 |
|
120 |
func void set_objective_1(string ai_name) |
121 |
{ |
122 |
dprint set_objective1 |
123 |
objective_set(1) |
124 |
} |
125 |
|
126 |
func void set_objective_2(string ai_name) |
127 |
{ |
128 |
dprint set_objective2 |
129 |
objective_set(2) |
130 |
target_set(7020,60.00) |
131 |
} |
132 |
|
133 |
func void set_objective_3(string ai_name) |
134 |
{ |
135 |
dprint set_objective3 |
136 |
objective_set(3) |
137 |
target_set(0,0) |
138 |
} |
139 |
|
140 |
func void set_objective_4(string ai_name) |
141 |
{ |
142 |
dprint set_objective4 |
143 |
objective_set(4) |
144 |
trigvolume_enable setobjective_4 0 |
145 |
} |
146 |
|
147 |
func void set_objective_5(string ai_name) |
148 |
{ |
149 |
dprint set_objective5 |
150 |
objective_set(5) |
151 |
trigvolume_enable setobjective_5 0 |
152 |
} |
153 |
|
154 |
### MUSIC ### |
155 |
|
156 |
var int music_counter; |
157 |
|
158 |
func void music_force_stop(void) |
159 |
{ |
160 |
sleep 4500 |
161 |
if (0 ne music_counter) |
162 |
{ |
163 |
dprint music_force_stop |
164 |
music_counter = 0 |
165 |
all_music_counters |
166 |
} |
167 |
} |
168 |
|
169 |
func void music_script_start(void) |
170 |
{ |
171 |
music_counter = 2 |
172 |
} |
173 |
|
174 |
func void striker_lullaby_1(string ai_name) |
175 |
{ |
176 |
dprint striker_lullaby1 |
177 |
music_counter = music_counter - 1 |
178 |
if (music_counter eq 0) |
179 |
{ |
180 |
all_music_counters(); |
181 |
} |
182 |
} |
183 |
|
184 |
func void striker_lullaby_2(string ai_name) |
185 |
{ |
186 |
dprint striker_lullaby2 |
187 |
music_counter = music_counter - 1 |
188 |
if (music_counter eq 0) |
189 |
{ |
190 |
all_music_counters(); |
191 |
} |
192 |
} |
193 |
|
194 |
func void all_music_counters(void) |
195 |
{ |
196 |
dprint ELVIS_HAS_LEFT_THE_BUILDING |
197 |
sound_music_stop mus_trt |
198 |
sound_music_stop mus_sad1 |
199 |
sound_music_stop atm_cl10 |
200 |
sound_music_stop atm_ft66 |
201 |
sound_music_stop atm_cl09 |
202 |
sound_music_stop atm_cl11 |
203 |
sound_music_stop mus_xtr2 |
204 |
sound_music_stop mus_lz |
205 |
} |
206 |
|
207 |
### TEXT CONSOLES ### |
208 |
|
209 |
func void level10a(string chr_index) |
210 |
{ |
211 |
dprint text10a |
212 |
text_console level_10a |
213 |
console_reset 2 |
214 |
} |
215 |
|
216 |
func void level10b(string chr_index) |
217 |
{ |
218 |
dprint text10b |
219 |
text_console level_10b |
220 |
console_reset 7 |
221 |
} |
222 |
|
223 |
### GAMEPLAY PROGRESSION ### |
224 |
|
225 |
# STRIKER BACKUPS |
226 |
func void backup_1(string ai_name) |
227 |
{ |
228 |
dprint backup1 |
229 |
ai2_spawn backup_striker1 |
230 |
particle blast1_locklight01 do start |
231 |
door_unlock 1 |
232 |
door_open 1 |
233 |
} |
234 |
|
235 |
func void backup_2(string ai_name) |
236 |
{ |
237 |
dprint backup2 |
238 |
ai2_spawn backup_striker2 |
239 |
particle blast2_locklight01 do start |
240 |
door_unlock 2 |
241 |
door_open 2 |
242 |
} |
243 |
|
244 |
|
245 |
# COME TO ME |
246 |
func void come_to_me(string ai_name) |
247 |
{ |
248 |
dprint go_to_konoko |
249 |
ai2_dopath ambush_striker1 come_to_me 1 |
250 |
ai2_dopath ambush_striker2 come_to_me 1 |
251 |
ai2_dopath A1_t02 come_to_me 1 |
252 |
ai2_dopath A1_sr01 come_to_me 1 |
253 |
ai2_dopath ambush_striker1 come_to_me 1 |
254 |
ai2_dopath ambush_striker2 come_to_me 1 |
255 |
} |
256 |
|
257 |
# SHIN CUTSCENE CHECK |
258 |
func void shin_check(string ai_name) |
259 |
{ |
260 |
var int inside_count; |
261 |
dprint shin_cutscene_check |
262 |
trigvolume_enable trigger_volume_03 0 |
263 |
|
264 |
inside_count = trigvolume_count(32); |
265 |
|
266 |
if (inside_count ne 0) |
267 |
{ |
268 |
sleep 60 |
269 |
trigvolume_enable trigger_volume_03 1 |
270 |
} |
271 |
|
272 |
if (inside_count eq 0) |
273 |
{ |
274 |
Shin |
275 |
} |
276 |
} |
277 |
|
278 |
func void t43(string ai_name) |
279 |
{ |
280 |
dprint konoko_dies |
281 |
inroom = 1 |
282 |
} |
283 |
|
284 |
func void t43b(string ai_name) |
285 |
{ |
286 |
dprint konoko_lives |
287 |
inroom = 0 |
288 |
} |
289 |
|
290 |
func void delete_script(string ai_name) |
291 |
{ |
292 |
dprint dead_or_not |
293 |
chr_delete ai_name |
294 |
} |
295 |
|
296 |
func void shin_dies(void) |
297 |
{ |
298 |
dprint KABOOM |
299 |
particle ShinBomb do explode |
300 |
fade_out 1 1 1 30 |
301 |
if (inroom eq 1) |
302 |
{ |
303 |
chr_set_health 0 0 |
304 |
} |
305 |
|
306 |
trigvolume_kill 64 |
307 |
|
308 |
chr_delete ShinShin |
309 |
fade_in 60 |
310 |
door_lock 3 |
311 |
particle Shindoor_locklight01 do stop |
312 |
set_objective_3 |
313 |
} |
314 |
|
315 |
func void p1(string ai_name) |
316 |
{ |
317 |
dprint p1_trigger_entered |
318 |
sound_music_stop mus_trt |
319 |
sound_music_start atm_cl09 1.0 |
320 |
ai2_spawn A1_sr01 |
321 |
ai2_lookatme A1_sr01 |
322 |
ai2_spawn A1_t02 |
323 |
ai2_lookatme A1_t02 |
324 |
sleep 120 |
325 |
door_lock 1 |
326 |
door_lock 2 |
327 |
} |
328 |
|
329 |
func void open_ambush1(string ai_name) |
330 |
{ |
331 |
dprint ambush_1 |
332 |
particle blast1_locklight01 do start |
333 |
door_unlock 1 |
334 |
ai2_spawn ambush_striker1 |
335 |
} |
336 |
|
337 |
func void open_ambush2(string ai_name) |
338 |
{ |
339 |
dprint ambush_2 |
340 |
particle blast2_locklight01 do start |
341 |
door_unlock 2 |
342 |
ai2_spawn ambush_striker2 |
343 |
} |
344 |
|
345 |
func void p2(string ai_name) |
346 |
{ |
347 |
dprint p2 |
348 |
ai2_spawn A2_r03 |
349 |
playback A2_r03 redjump |
350 |
ai2_lookatme A2_r03 |
351 |
ai2_spawn aerial_red_2 |
352 |
ai2_passive aerial_red_2 1 |
353 |
playback aerial_red_2 redjump2 |
354 |
ai2_passive aerial_red_2 0 |
355 |
ai2_lookatme aerial_red_2 |
356 |
ai2_spawn red_guard_1 |
357 |
ai2_dopath A1_sr01 patrol_31 |
358 |
ai2_dopath A1_t02 patrol_31 |
359 |
ai2_setjobstate A1_sr01 |
360 |
ai2_setjobstate A1_t02 patrol_31 |
361 |
sleep 120 |
362 |
} |
363 |
|
364 |
func void p5(string ai_name) |
365 |
{ |
366 |
dprint p5 |
367 |
ai2_spawn A3_n05 |
368 |
ai2_spawn A3_sb06 |
369 |
ai2_spawn A4_n07 |
370 |
} |
371 |
|
372 |
func void p6(string ai_name) |
373 |
{ |
374 |
dprint p6 |
375 |
ai2_spawn A4_sr08 |
376 |
ai2_spawn B1_c07 |
377 |
} |
378 |
|
379 |
func void enableP7(string ai_name) |
380 |
{ |
381 |
dprint enableP7 |
382 |
trigvolume_enable trigger_volume_07 1 |
383 |
} |
384 |
|
385 |
func void do_console_1(string ai_name) |
386 |
{ |
387 |
dprint do_console |
388 |
ai2_doalarm A3_n05 1 |
389 |
} |
390 |
|
391 |
func void p8(string ai_name) |
392 |
{ |
393 |
dprint p8 |
394 |
ai2_spawn B2_sb09 |
395 |
ai2_spawn B2_n10 |
396 |
trigvolume_enable trigger_volume_07 0 |
397 |
trigvolume_enable trigger_volume_08 0 |
398 |
} |
399 |
|
400 |
func void p9(string ai_name) |
401 |
{ |
402 |
dprint p9 |
403 |
ai2_spawn C1_c16 |
404 |
ai2_spawn C1_t11 |
405 |
ai2_spawn C1_sb12 |
406 |
ai2_spawn C1_t13 |
407 |
ai2_spawn C2_sg15 |
408 |
ai2_spawn C2_sr17 |
409 |
ai2_spawn C2_sb14 |
410 |
ai2_spawn C2_t19 |
411 |
particle room1 stop |
412 |
} |
413 |
|
414 |
func void red_ambush(string ai_name) |
415 |
{ |
416 |
dprint ambush_red |
417 |
ai2_spawn ambush_red_1 |
418 |
} |
419 |
|
420 |
func void p10(string ai_name) |
421 |
{ |
422 |
dprint p10 |
423 |
ai2_spawn D1_sr20 |
424 |
ai2_spawn D1_sb21 |
425 |
} |
426 |
|
427 |
func void p11(string ai_name) |
428 |
{ |
429 |
dprint p11 |
430 |
particle room6 do start |
431 |
pipe3_start |
432 |
} |
433 |
func void p11b(string ai_name) |
434 |
{ |
435 |
dprint p11b |
436 |
particle room6 do stop |
437 |
} |
438 |
|
439 |
func void striker_guards(string ai_name) |
440 |
{ |
441 |
dprint spawn_strikers |
442 |
ai2_spawn striker_guard_1 |
443 |
ai2_spawn striker_guard_2 |
444 |
} |
445 |
|
446 |
func void spawn_EC_guards(string ai_name) |
447 |
{ |
448 |
dprint spawn_guards |
449 |
ai2_spawn E1_sb29 |
450 |
ai2_spawn E1_c33 |
451 |
ai2_spawn E1_c40 |
452 |
ai2_spawn E1_f34 |
453 |
ai2_spawn E1_f40 |
454 |
ai2_spawn E1_f35 |
455 |
} |
456 |
|
457 |
func void final_guards(string ai_name) |
458 |
{ |
459 |
dprint last_guards_activated |
460 |
ai2_spawn final_guard_1 |
461 |
ai2_spawn final_guard_2 |
462 |
} |
463 |
|
464 |
func void p12(string ai_name) |
465 |
{ |
466 |
dprint p12 |
467 |
ai2_spawn D2_sb26 |
468 |
playback D2_sb26 piperun |
469 |
ai2_spawn pipe_guard_1 |
470 |
ai2_spawn pipe_guard_2 |
471 |
} |
472 |
|
473 |
func void p13(string ai_name) |
474 |
{ |
475 |
dprint p13 |
476 |
ai2_spawn E1_sr28 |
477 |
ai2_spawn E1_sb29 |
478 |
ai2_spawn E1_sr30 |
479 |
ai2_spawn ambush_comguy_1 |
480 |
ai2_spawn E1_n31 |
481 |
ai2_spawn E1_n32 |
482 |
ai2_spawn E1_n37 |
483 |
particle elev1_locklight01 do stop |
484 |
particle elev2_locklight01 do stop |
485 |
} |
486 |
|
487 |
func void p14(string ai_name) |
488 |
{ |
489 |
dprint p14 |
490 |
chr_teleport 0 105 |
491 |
ai2_spawn F_r40 |
492 |
particle pipe3 do start |
493 |
} |
494 |
|
495 |
func void p36(string ai_name) |
496 |
{ |
497 |
dprint spawned_muro_runner_p36 |
498 |
ai2_spawn muro_runner |
499 |
ai2_spawn muro_runner2 |
500 |
} |
501 |
|
502 |
func void p39(string ai_name) |
503 |
{ |
504 |
dprint p39 |
505 |
ai2_spawn F_r40 |
506 |
} |
507 |
|
508 |
func void cross_fire(string ai_name) |
509 |
{ |
510 |
dprint crossfire |
511 |
ai2_spawn D2_sg24 |
512 |
ai2_spawn D2_f25 |
513 |
} |
514 |
|
515 |
func void tctf_control(string ai_name) |
516 |
{ |
517 |
dprint tctfcontrol_start |
518 |
sound_music_start mus_amasian 1.0 |
519 |
input 0 |
520 |
letterbox 1 |
521 |
door_unlock 38 |
522 |
ai2_spawn E2_sr38 |
523 |
ai2_spawn E2_sr39 |
524 |
particle elev1_locklight01 do start |
525 |
particle elev2_locklight01 do start |
526 |
cm_interpolate tctf_3 0 |
527 |
cm_interpolate_block tctf_1 300 |
528 |
cm_interpolate_block tctf_2 150 |
529 |
sleep 180 |
530 |
cm_reset |
531 |
letterbox 0 |
532 |
input 1 |
533 |
door_unlock 37 |
534 |
} |
535 |
|
536 |
func void warnbigroom(string ai_name) |
537 |
{ |
538 |
dprint warnbigroom |
539 |
ai2_tripalarm 1 |
540 |
} |
541 |
|
542 |
func void zap_cinematic(string ai_name) |
543 |
{ |
544 |
dprint doorA |
545 |
input 0 |
546 |
begin_cutscene |
547 |
sound_music_start atm_cl12 0.75 |
548 |
particle zap1 create |
549 |
particle zap1 start |
550 |
cm_interpolate zap_cinematic1 0 |
551 |
cm_interpolate_block zap_cinematic3 700 |
552 |
sleep 750 |
553 |
cm_interpolate zap_cinematic4 0 |
554 |
sleep 60 |
555 |
particle doorA_locklight01 do start |
556 |
sleep 150 |
557 |
door_unlock 15 |
558 |
cm_reset |
559 |
end_cutscene |
560 |
input 1 |
561 |
ai2_spawn vat_bot_1 |
562 |
ai2_spawn vat_bot_2 |
563 |
ai2_spawn vat_bot_3 |
564 |
ai2_spawn vat_bot_4 |
565 |
ai2_spawn vat_bot_5 |
566 |
chr_weapon_immune(vat_bot_1); |
567 |
chr_weapon_immune(vat_bot_2); |
568 |
chr_weapon_immune(vat_bot_3); |
569 |
chr_weapon_immune(vat_bot_4); |
570 |
chr_weapon_immune(vat_bot_5); |
571 |
particle doorB_locklight01 do start |
572 |
} |
573 |
|
574 |
func void change_patrol_1(string ai_name) |
575 |
{ |
576 |
dprint change_patrol |
577 |
ai2_dopath vat_bot_2 vat_bot_2b 1 |
578 |
} |
579 |
|
580 |
func void change_patrol_2(string ai_name) |
581 |
{ |
582 |
dprint change_patrol |
583 |
ai2_dopath vat_bot_3 vat_bot_3b 1 |
584 |
} |
585 |
|
586 |
func void change_patrol_3(string ai_name) |
587 |
{ |
588 |
dprint change_patrol |
589 |
ai2_dopath vat_bot_5 vat_bot_5b 1 |
590 |
} |
591 |
|
592 |
func void spark_sound_off(string ai_name) |
593 |
{ |
594 |
dprint spark_music_off |
595 |
sound_music_stop atm_cl12 |
596 |
} |
597 |
|
598 |
# YOUR DEATH IS ASSURED |
599 |
func void dont_even_try_it(string ai_name) |
600 |
{ |
601 |
chr_set_health 0 0 |
602 |
} |
603 |
|
604 |
### SPECIAL PARTICLES ### |
605 |
|
606 |
func void killmuro(string ai_name) |
607 |
{ |
608 |
dprint killedmuro |
609 |
chr_delete muro_runner |
610 |
chr_delete muro_runner2 |
611 |
sound_music_stop atm_cl11 |
612 |
ai2_spawn A4_n07 |
613 |
} |
614 |
|
615 |
func void pipe1a(string ai_name) |
616 |
{ |
617 |
dprint pipe1_discharged |
618 |
ai2_passive A3_n05 1 |
619 |
particle room4 do stop |
620 |
timer_start 30 pipe1b |
621 |
sound_music_start atm_cl11 |
622 |
} |
623 |
|
624 |
func void pipe1b(void) |
625 |
{ |
626 |
dprint pipe1_recharged |
627 |
particle room4 do start |
628 |
console_reset 1 |
629 |
|
630 |
pipe1_music_off(); |
631 |
} |
632 |
|
633 |
func void pipe1_music_off(void) |
634 |
{ |
635 |
dprint pipe1_music_off |
636 |
sound_music_stop atm_cl11 |
637 |
} |
638 |
|
639 |
func void pipe2a(void) |
640 |
{ |
641 |
dprint pipe2_discharged |
642 |
particle room6 do stop |
643 |
timer_start 29 pipe2b |
644 |
sound_music_start atm_cl11 |
645 |
} |
646 |
|
647 |
func void pipe2b(void) |
648 |
{ |
649 |
dprint pipe2_recharged |
650 |
particle room6 do start |
651 |
console_reset 8 |
652 |
|
653 |
pipe2_music_off(); |
654 |
} |
655 |
|
656 |
func void pipe2_music_off(void) |
657 |
{ |
658 |
dprint pipe2_music_off |
659 |
sound_music_stop atm_cl11 |
660 |
} |
661 |
|
662 |
func void pipe3(void) |
663 |
{ |
664 |
dprint pipe_discharged |
665 |
timer_start 19 pipe3b |
666 |
sound_music_volume mus_amasian 0.0 2.0 |
667 |
particle pipe3 kill |
668 |
sound_music_start atm_cl11 |
669 |
sound_music_stop mus_amasian |
670 |
} |
671 |
|
672 |
func void pipe3b(void) |
673 |
{ |
674 |
if (inside_final_cutscene eq 0) |
675 |
{ |
676 |
dprint pipe_recharged |
677 |
particle pipe3 create |
678 |
particle pipe3 do start |
679 |
console_reset 15 |
680 |
} |
681 |
} |
682 |
|
683 |
func void final_cutscene_trumps_particles(void) |
684 |
{ |
685 |
inside_final_cutscene = 1; |
686 |
particle pipe3 kill |
687 |
} |
688 |
|
689 |
### Level scripted by Joseph ### |