source: nikanabo/current/bsl/original/IGMD/tctf_ii/tctf2.bsl@ 1063

Last change on this file since 1063 was 185, checked in by geyser, 17 years ago
File size: 33.5 KB
RevLine 
[185]1# tctf2_spawn
2# scripts for level 18 by wu
3
4var int counter=3;
5var int my_save_point=0;
6var int counterA=0;
7var int counterB=0;
8var int counterC=0;
9var int counterD=0;
10var int counterDestroy=0;
11var int lastdoor_count=0;
12var int sub1 = 0;
13var int sub2 = 0;
14var int sub3 = 0;
15var int ld1;
16var int ld2;
17var int ld3;
18var int audio_counter = 3;
19
20#########
21# music #
22#########
23func void music_intro(void)
24{
25 sound_music_start mus_main03 1.0
26# this music stopped in t2 script
27}
28
29func void music_chair(void)
30{
31 dprint music_chair
32 sound_music_start mus_wls 1.0
33# this music stopped in 11 and 11b script
34}
35
36func void music_atrium(void)
37{
38 dprint music_atrium
39 sound_music_start mus_trt .8
40# this music stopped in check_power script
41}
42
43func void music_zom(void)
44{
45 dprint music_zom
46 sound_music_start mus_sv 0.75
47# this music stopped in Zom script
48}
49
50func void music_stop(void)
51{
52 dprint STOP_THE_MUSIC
53 sound_music_stop mus_main03
54 sound_music_stop mus_wls
55 sound_music_stop mus_trt
56 sound_music_stop mus_sv
57}
58
59func void spawnA(void)
60{
61 dprint spawn_zone_A
62
63 ai2_spawn A_L19
64 ai2_spawn l1
65 ai2_spawn l3
66 ai2_spawn A_L12
67 ai2_spawn A_Lbo13
68 ai2_spawn A_L8
69 ai2_spawn l7
70}
71###############################
72# start and objectives #
73###############################
74func void start(string ai_name)
75{
76 dprint start
77 trig_deactivate 1
78 trig_deactivate 2
79 trig_deactivate 3
80 trig_deactivate 4
81 trig_deactivate 5
82 trig_deactivate 6
83 trig_deactivate 7
84 trig_deactivate 8
85 trig_deactivate 9
86 trig_deactivate 91
87 trig_deactivate 92
88 trig_deactivate 93
89 trig_deactivate 98
90 trig_deactivate 99
91 trig_deactivate 10
92 trig_deactivate 302
93 trig_deactivate 303
94 trig_deactivate 315
95 trig_deactivate 320
96 trig_deactivate 100
97 trig_deactivate 101
98 trig_deactivate 500
99 trig_deactivate 501
100 trig_deactivate 502
101 trig_deactivate 503
102 trig_deactivate 400
103 trig_deactivate 510
104 trig_deactivate 511
105 trig_deactivate 512
106 trig_deactivate 520
107 trig_deactivate 521
108 trig_deactivate 522
109 door_unlock 65
110 door_unlock 71
111# door_unlock 59
112 door_unlock 61
113 door_unlock 67
114 door_lock 7
115 door_lock 4
116 door_lock 5
117 door_lock 8
118 door_lock 6
119 door_lock 9
120 console_deactivate 3
121
122 # incidental zombie shinatama dialog
123 trigvolume_enable shinzom_voice1 0
124 trigvolume_enable shinzom_voice2 0
125 trigvolume_enable shinzom_voice3 0
126 trigvolume_enable shinzom_voice4 0
127
128 particle griffin_locklight01 do start
129 particle door42_locklight01 do start
130 particle stair_lock_locklight01 do start
131 particle roof_doors_locklight01 do start
132 trigvolume_enable trigger_volume_29 0
133 trigvolume_enable trigger_volume_35 0
134 trigvolume_enable trigger_volume_39 0
135 trigvolume_enable trigger_volume_36 0
136 trigvolume_enable trigger_volume_41 0
137
138 my_save_point = save_point;
139
140 if (my_save_point eq 0)
141 {
142 objective_set(1)
143 target_set(590,30.0)
144
145 Intro
146 spawnA
147 }
148
149 if (my_save_point eq 1)
150 {
151 dprint restore1
152 objective_set(1)
153 env_show 403 0
154 target_set(590,30.0)
155 spawnA
156 music_intro
157 restore_game
158 }
159
160 if (my_save_point eq 2)
161 {
162 dprint restore2
163 objective_set(2)
164 target_set(593,30.0)
165 trigvolume_enable trigger_volume_06 0
166 ai2_spawn B_S22
167
168 particle shin_lock_locklight01 do start
169 door_unlock 48
170 door_unlock 14
171 trig_activate 6
172 trig_activate 7
173 trig_activate 99
174 trig_activate 98
175 restore_game
176 }
177
178 if (my_save_point eq 3)
179 {
180 dprint restore3
181 particle shin_lock_locklight01 do stop
182 door_lock 14
183 objective_set(2)
184 trigvolume_enable trigger_volume_46 0
185 trigvolume_enable trigger_volume_47 0
186 trig_deactivate 60
187 trig_deactivate 61
188 trig_deactivate 62
189 trig_deactivate 63
190 trig_deactivate 64
191 trig_deactivate 65
192 trig_deactivate 70
193 trig_deactivate 71
194 trig_deactivate 72
195 trig_deactivate 73
196 trig_deactivate 74
197 trig_deactivate 75
198 trig_deactivate 91
199 trig_deactivate 92
200 trig_deactivate 93
201 trig_deactivate 98
202 trig_deactivate 99
203 trig_deactivate 6
204 trig_deactivate 7
205 target_set(587,30.0)
206 restore_game
207 spine1
208 sleep 7
209 spine2
210 sleep 7
211 spine3
212 }
213
214 if (my_save_point eq 4)
215 {
216 dprint restore4
217 objective_set(3)
218 target_set(596,30.0)
219 trig_deactivate 60
220 trig_deactivate 61
221 trig_deactivate 62
222 trig_deactivate 63
223 trig_deactivate 64
224 trig_deactivate 65
225 trig_deactivate 70
226 trig_deactivate 71
227 trig_deactivate 72
228 trig_deactivate 73
229 trig_deactivate 74
230 trig_deactivate 75
231 trig_deactivate 91
232 trig_deactivate 92
233 trig_deactivate 93
234 trig_deactivate 98
235 trig_deactivate 99
236 trig_deactivate 6
237 trig_deactivate 7
238 door_lock 42
239 particle door42_locklight01 do stop
240 ai2_spawn D_N74
241 restore_game
242 }
243
244 if (my_save_point eq 5)
245 {
246 dprint restore5
247 objective_set(4)
248 trigvolume_enable trigger_volume_42 0
249 trigvolume_enable trigger_volume_35 0
250 particle ZomShin_door_locklight01 do stop
251 door_lock 16
252
253 #TCTF II cutscene "Base"
254 env_show 171 1
255 env_show 172 1
256 env_show 173 1
257 env_show 174 1
258 particle Forcefield do start
259 particle zombiesteam start
260 sound_ambient_start zomshin_amb_loop 1.0
261 music_zom
262
263 #these next lines place griffin where he should be
264 dprint place_griffin_and_holster
265 ai2_spawn ZomGrif
266 ai2_makeignoreplayer ZomGrif 1
267 # make sure that griffin is aiming his weapon!
268 ai2_setmovementmode ZomGrif walk
269 # ai2_passive ZomGrif 1
270 playback ZomGrif ZomGrifDraw
271
272 # don't call the GrifSpawn function again
273 trigvolume_enable t9 0
274
275 create_zomshin
276 playback ZomShin BaseShin
277
278 restore_game
279
280 zombie_round_2
281 # chr_teleport 0 589
282 }
283}
284
285func void you_lose(string ai_name)
286{
287 sleep 240
288 fade_out 0 0 0 180
289 sleep 240
290 lose
291}
292
293func void you_win(int char_index)
294{
295 outro
296 win
297}
298
299func void set_objective_1(string ai_name)
300{
301 dprint set_objective_1
302 objective_set(1)
303 target_set (1,0)
304}
305
306func void set_objective_2(string ai_name)
307{
308 dprint set_objective_2
309 objective_set(2)
310 target_set (1,0)
311}
312
313func void set_objective_3(string ai_name)
314{
315 dprint set_objective_3
316 objective_set(3)
317 target_set (1,0)
318}
319
320func void set_objective_4(string ai_name)
321{
322 dprint set_objective_4
323 objective_set(4)
324 target_set (401,30)
325 particle ZomShin_door_locklight01 do start
326}
327
328
329#################################
330# cut scene scripts #
331#################################
332
333func void grifdies(string ai_name)
334{
335 killed_griffen 1
336 OutroKill
337}
338
339func void t35(string ai_name)
340{
341 killed_griffen 0
342 OutroNoKill
343}
344
345func void outta_sight(string ai_name)
346{
347 ai2_dopath n5 patrol_99
348 ai2_setjobstate n5
349}
350
351#########################
352# trigger volume stuff #
353#########################
354
355func void t68(string ai_name)
356{
357 ai2_spawn mbo_femcop
358}
359
360func void t2(string ai_name)
361{
362 dprint t2_active
363 trigvolume_enable trigger_volume_61 0
364 ai2_spawn n5
365 ai2_spawn A_Sbo14
366 ai2_dopath A_Sbo14 patrol_14
367 ai2_setjobstate A_Sbo14
368 ai2_spawn A_Sbo15
369 sleep 30
370 ai2_dopath A_Sbo15 patrol_14
371 ai2_setjobstate A_Sbo15
372# ai2_spawn A_Sbo16
373 music_stop
374
375}
376
377func void t61(string ai_name)
378{
379 dprint t61_active
380 trigvolume_enable trigger_volume_02 0
381 ai2_spawn n5
382 ai2_spawn A_Sbo14
383 ai2_spawn A_Sbo15
384 music_stop
385}
386
387func void t3(string ai_name)
388{
389 dprint t3_active
390 ai2_dopath A_n17 patrol_16
391 ai2_setjobstate A_n17
392
393}
394
395func void t4(string ai_name)
396{
397 dprint t4_active
398 ai2_spawn A_L18
399}
400
401func void t6(string ai_name)
402{
403 dprint t6_active
404 ai2_spawn A_L20
405 ai2_spawn A_L21
406 ai2_spawn B_S22
407 ai2_makeignoreplayer B_S22 1
408 trig_activate 6
409 trig_activate 7
410 trig_activate 99
411 trig_activate 98
412 target_set(593,30.0)
413}
414
415func void t7(string ai_name)
416{
417 dprint t7_active
418 ai2_dopath B_S22 patrol_23
419 ai2_setjobstate B_S22
420 ai2_makeignoreplayer B_S22 0
421 ai2_spawn B_N28
422}
423
424func void t7b(string ai_name)
425{
426 dprint t7b_active
427 ai2_spawn B_Lbo26
428 playback_block B_Lbo26 run1 interp 20
429 sleep 20
430 ai2_dopath B_Lbo26 patrol_27
431 ai2_setjobstate B_Lbo26
432
433}
434
435func void t8(string ai_name)
436{
437 dprint t8_active
438 chr_delete A_L19
439 chr_delete l1
440 chr_delete l3
441 chr_delete A_L12
442 chr_delete A_Lbo13
443 chr_delete A_L8
444 chr_delete l7
445 chr_delete n5
446 chr_delete A_T25
447 chr_delete A_n17
448 chr_delete A_N31
449 ai2_spawn B_Sbo38
450 ai2_spawn B_S36
451 ai2_makeignoreplayer B_S36 1
452 ai2_spawn B_L40
453 ai2_spawn B_L41
454 music_chair
455 sleep 90
456 substation_monologue
457}
458
459func void t9(string ai_name)
460{
461 dprint t9_spawning_griffin
462# ai2_spawn ZomGrif
463 GrifSpawn
464 target_set (1,0.0)
465}
466
467func void t10(string ai_name)
468{
469 dprint t10_active
470 ai2_spawn B_S29
471}
472
473func void t11(string ai_name)
474{
475 dprint t11_active
476 ai2_dopath B_S36 patrol_38
477 ai2_setjobstate B_S36
478 ai2_makeignoreplayer B_Sbo38 0
479# ai2_makeignoreplayer B_Sbo35 0
480 ai2_makeignoreplayer B_S36 0
481 ai2_makeignoreplayer B_S37 0
482 ai2_spawn B_Lbo76
483# ai2_spawn B_Lbo77
484 ai2_spawn B_C34
485 ai2_spawn B_C33
486 ai2_spawn B_C32
487 trigvolume_enable trigger_volume_11_copy 0
488 music_stop
489}
490
491func void t59(string ai_name)
492{
493 ai2_spawn B_L30
494 ai2_spawn B_L95
495 ai2_spawn B_Lbo27
496}
497
498func void t60(string ai_name)
499{
500 ai2_spawn B_C32
501 ai2_spawn B_C34
502 ai2_spawn B_C33
503 ai2_makeignoreplayer B_S36 0
504}
505
506func void t67(string ai_name)
507{
508 ai2_spawn B_S43
509}
510
511func void t11b(string ai_name)
512{
513 dprint t11b_active
514 ai2_dopath B_S36 patrol_38
515 ai2_setjobstate B_S36
516 ai2_makeignoreplayer B_Sbo38 0
517# ai2_makeignoreplayer B_Sbo35 0
518 ai2_makeignoreplayer B_S36 0
519 ai2_makeignoreplayer B_S37 0
520 ai2_spawn B_Lbo76
521# ai2_spawn B_Lbo77
522 trigvolume_enable trigger_volume_11 0
523 music_stop
524}
525
526func void t12(string ai_name)
527{
528 dprint t12_active
529 ai2_dopath B_N28 patrol_42
530 ai2_setjobstate B_N28
531}
532
533func void t14(string ai_name)
534{
535 dprint t14_active
536 ai2_spawn C_Sbo44
537# ai2_spawn C_C46
538 ai2_spawn C_C47
539 ai2_spawn C_N48
540# ai2_spawn C_L50
541# ai2_makeignoreplayer C_L50 1
542# ai2_spawn C_L51
543# ai2_makeignoreplayer C_L51 1
544
545}
546
547func void t15(string ai_name)
548{
549 dprint t15_active
550 ai2_lookatme C_L51
551 ai2_dopath C_L51 patrol_51
552 ai2_setjobstate C_L51
553 ai2_makeignoreplayer C_L51 0
554 sleep 90
555 ai2_lookatme C_L50
556 ai2_dopath C_L50 patrol_50
557 ai2_setjobstate C_L50
558 ai2_makeignoreplayer C_L50 0
559
560}
561
562func void t16(string ai_name)
563{
564 dprint t16_active
565 ai2_makeignoreplayer C_L50 0
566 ai2_makeignoreplayer C_L51 0
567
568}
569
570func void t17(string ai_name)
571{
572 dprint t17_active
573 ai2_makeignoreplayer C_N55 0
574 ai2_spawn C_Sbo56
575
576}
577
578func void t18(string ai_name)
579{
580 dprint t18_active
581 ai2_spawn C_S57
582
583}
584
585func void t19(string ai_name)
586{
587 dprint t19_active
588 ai2_spawn C_S58
589 ai2_spawn C_S59
590
591}
592
593func void t20(string ai_name)
594{
595 dprint t20_active
596# sleep 200
597 ai2_spawn C_Lbo62
598 ai2_spawn C_Sbo61
599
600}
601
602func void t21(string ai_name)
603{
604 dprint t21_active
605 ai2_spawn C_Sbo63
606 ai2_spawn C_Sbo64
607
608}
609
610func void t22(string ai_name)
611{
612 dprint t22_active
613 ai2_makeignoreplayer C_C65 0
614
615}
616
617func void t23(string ai_name)
618{
619 dprint t23_active
620 ai2_spawn C_L71
621 ai2_spawn C_S72
622 ai2_spawn C_N74
623
624}
625
626func void t25(string ai_name)
627{
628 dprint t25_active
629 ai2_spawn D_C70
630 ai2_makeignoreplayer D_C70 1
631 ai2_spawn D_Sbo71
632 ai2_spawn D_Sbo72
633 ai2_spawn D_Sbo73
634 ai2_spawn D_Sbo75
635 ai2_spawn D_N76
636
637}
638
639func void t26(string ai_name)
640{
641 dprint t26_active
642 ai2_spawn D_L74
643 ai2_spawn new_1
644}
645
646func void t28(string ai_name)
647{
648 dprint t28_active
649 ai2_spawn D_S78
650 ai2_spawn D_S79
651 trigvolume_enable trigger_volume_29 1
652
653}
654
655func void t29(string ai_name)
656{
657 dprint t29_active
658 ai2_spawn D_Lbo81
659 ai2_spawn D_S82
660
661}
662
663func void t30(string ai_name)
664{
665 dprint t30_active
666 ai2_spawn D_L80
667
668}
669
670func void t31(string ai_name)
671{
672 dprint t31_active
673 ai2_spawn D_S83
674 ai2_spawn D_L84
675 ai2_spawn D_Lbo85
676 ai2_spawn D_Sbo86
677 trigvolume_enable trigger_volume_32 0
678}
679
680func void t32(string ai_name)
681{
682 dprint t32_active
683 ai2_spawn D_L88
684 ai2_spawn D_S87
685 ai2_spawn D_Sbo86
686 trigvolume_enable trigger_volume_31 0
687 target_set(599,30.0)
688}
689
690
691func void t33(string ai_name)
692{
693 dprint t33_active
694 door_lock 97
695 particle lastdoor1_locklight01 do stop
696 particle lastdoor2_locklight01 do stop
697 particle lastdoor3_locklight01 do stop
698 #play doorsound
699}
700
701func void t34(string ai_name)
702{
703 dprint t34_active
704 ai2_spawn D_Sbo75
705 ai2_spawn D_Sbo92
706 ai2_spawn D_L91
707 ai2_spawn D_S90
708 ai2_spawn D_S89
709}
710
711func void t37(string ai_name)
712{
713 dprint t37_active
714 ai2_makeignoreplayer D_C70 0
715
716}
717
718func void t38(string ai_name)
719{
720 dprint t38
721# ai2_spawn B_N31
722
723}
724
725func void t41(string ai_name)
726{
727 dprint t41_active
728 target_set(596,30.0)
729}
730
731func void t42(string ai_name)
732{
733 dprint t42_active
734 door_lock 16
735 particle ZomShin_door_locklight01 do stop
736 trigvolume_enable trigger_volume_35 0
737 Base
738 s5
739}
740
741func void t43(string ai_name)
742{
743 dprint t43_active
744 ai2_spawn B_S96
745}
746
747func void t44(string ai_name)
748{
749 dprint t44
750 target_set(598,30.0)
751}
752
753func void t45(string ai_name)
754{
755 dprint t45_active
756 target_set(587,30.0)
757 door_lock 14
758 particle shin_lock_locklight01 do stop
759 console_activate 3
760# play door lock sound
761 trig_deactivate 60
762 trig_deactivate 61
763 trig_deactivate 62
764 trig_deactivate 63
765 trig_deactivate 64
766 trig_deactivate 65
767 trig_deactivate 70
768 trig_deactivate 71
769 trig_deactivate 72
770 trig_deactivate 73
771 trig_deactivate 74
772 trig_deactivate 75
773 trig_deactivate 91
774 trig_deactivate 92
775 trig_deactivate 93
776 trig_deactivate 98
777 trig_deactivate 99
778 trig_deactivate 6
779 trig_deactivate 7
780 if (trigvolume_count(20) eq 0)
781 {
782 dprint delete_B_AI
783 chr_delete B_L95
784 chr_delete B_Lbo27
785 chr_delete B_S29
786 chr_delete B_L30
787 chr_delete B_Sbo38
788 chr_delete B_S36
789 chr_delete B_S37
790 chr_delete B_L40
791 chr_delete B_L41
792 chr_delete B_Lbo39
793 chr_delete B_S43
794 chr_delete B_C32
795 chr_delete B_C33
796 chr_delete B_C34
797 chr_delete B_Lbo26
798 chr_delete B_S96
799 chr_delete B_Lbo76
800 chr_delete B_S22
801 chr_delete B_N31
802 chr_delete B_Lbo77
803 }
804 dprint delete_A_AI
805 chr_delete A_L20
806 chr_delete A_L21
807 chr_delete A_Sbo15
808 chr_delete A_Sbo14
809 chr_delete A_L19
810 chr_delete l1
811 chr_delete l3
812 chr_delete A_L12
813 chr_delete A_Lbo13
814 chr_delete A_L8
815 chr_delete l7
816 chr_delete n5
817 chr_delete A_T25
818 chr_delete B_N28
819 chr_delete A_n17
820 chr_delete A_N31
821}
822
823func void attack_konoko(string ai_name)
824{
825 ai2_attack new_1 A_player
826}
827
828func void substation_monologue(void)
829{
830 dprint playkonokoline
831 sound_dialog_play c14_54_24konoko
832 cinematic_start (KONtalkangryfront, 180, 180, 19, 7, 20)
833 sound_dialog_play_block
834 sleep f60
835 cinematic_stop (KONtalkangryfront, 19, 20)
836
837 objective_set(2, silent)
838}
839
840func void save3_and_spine(string ai_name)
841{
842 s3
843 spine1
844 sleep 7
845 spine2
846 sleep 7
847 spine3
848}
849func void t45b(string ai_name)
850{
851 dprint t45b_modified_by_okita
852 ai2_spawn C_L51
853 ai2_spawn C_L50
854 ai2_spawn C_C65
855 ai2_spawn C_N66
856 ai2_spawn C_Sbo93
857 ai2_spawn C_N60
858 ai2_spawn C_N55
859 ai2_makeignoreplayer C_L50 1
860 ai2_makeignoreplayer C_L51 1
861 ai2_makeignoreplayer C_N55 1
862 ai2_makeignoreplayer C_C65 1
863 trig_activate 1
864 trig_activate 2
865 trig_activate 3
866 trig_activate 4
867 trig_activate 5
868 trig_activate 8
869 trig_activate 303
870 trig_activate 100
871 trig_activate 101
872 trig_activate 500
873 trig_activate 400
874 trig_activate 503
875 trig_activate 502
876 trig_activate 501
877 trig_activate 510
878 trig_activate 511
879 trig_activate 512
880 trig_activate 520
881 trig_activate 521
882 trig_activate 522
883 trig_activate 320
884 trig_activate 315
885 trig_activate 302
886 music_atrium
887}
888################ begin #################
889########## okita's modification ########
890########################################
891func void spine1(void)
892{
893 dprint spine1_start
894
895 if (sub1 eq 0)
896 {
897 particle spine1 start
898 particle spinesound1 start
899 }
900}
901
902func void spine2(void)
903{
904 dprint spine2_start
905
906 if (sub2 eq 0)
907 {
908 particle spine2 start
909 particle spinesound2 start
910 }
911}
912
913func void spine3(void)
914{
915 dprint spine3_start
916
917 if (sub3 eq 0)
918 {
919 particle spine3 start
920 particle spinesound3 start
921 }
922}
923################ end #################
924########## okita's modification ########
925########################################
926func void patrolscript0001(void)
927{
928 playback_block B_S22 taunt1 interp 20
929}
930
931func void B_S22_run (string ai_name)
932{
933 ai2_dopath B_S22 patrol_24
934 ai2_setjobstate B_S22
935}
936
937func void A_T25_run (string ai_name)
938{
939 ai2_dopath A_T25 patrol_25
940 ai2_setjobstate A_T25
941}
942
943func void t39(string ai_name)
944{
945 target_set(598,30.0)
946}
947
948func void t48(string ai_name)
949{
950 ai2_spawn D_S101
951 ai2_spawn D_C100
952}
953#########################################
954# console/special #
955#########################################
956func void unlock14(string ai_name)
957{
958 dprint unlock14_active
959 door_unlock 14
960 particle shin_lock_locklight01 do start
961}
962
963func void console_android(void)
964{
965 text_console level_18b
966 console_reset 16
967}
968
969func void console_zombie(void)
970{
971 text_console level_18a
972 console_reset 17
973}
974
975func void console1(string ai_name)
976{
977 dprint console1_active
978 text_console level_18c
979 console_reset 14
980 console_activate 14
981}
982
983func void console2(string ai_name)
984{
985 dprint console2_active
986 text_console level_18d
987 console_reset 15
988}
989
990func void level_18e(string ai_name)
991{
992 dprint text_18e
993 text_console level_18e
994 console_reset 1
995 console_activate 1
996}
997
998func void lastdoor_console(string ai_name)
999{
1000 dprint lastdoor_console
1001 lastdoor_count = lastdoor_count + 1
1002 if (lastdoor_count eq 1)
1003 {
1004 input 0
1005 fade_out 0 0 0 30
1006 cm_interpolate lastdoor_cam 0
1007 fade_in 30
1008 sleep 60
1009 particle lastdoor3_locklight01 do start
1010 sleep 30
1011 fade_out 0 0 0 30
1012 cm_reset
1013 input 1
1014 fade_in 30
1015 }
1016 if (lastdoor_count eq 2)
1017 {
1018 input 0
1019 fade_out 0 0 0 30
1020 cm_interpolate lastdoor_cam 0
1021 fade_in 30
1022 sleep 60
1023 particle lastdoor2_locklight01 do start
1024 sleep 30
1025 fade_out 0 0 0 30
1026 cm_reset
1027 input 1
1028 fade_in 30
1029 }
1030 if (lastdoor_count eq 3)
1031 {
1032 input 0
1033 fade_out 0 0 0 30
1034 cm_interpolate lastdoor_cam 0
1035 fade_in 30
1036 sleep 60
1037 particle lastdoor1_locklight01 do start
1038 set_objective_4
1039 target_set(401,30.0)
1040 sleep 30
1041 fade_out 0 0 0 30
1042 cm_reset
1043 input 1
1044 fade_in 30
1045 trigvolume_enable trigger_volume_40 0
1046 door_unlock 97
1047 }
1048
1049}
1050
1051func void refuse_script(string ai_name)
1052{
1053 dprint refuse
1054 ai2_dopath C_N48 patrol_98
1055}
1056
1057func void patrolscript0098(string ai_name)
1058{
1059 dprint patrolscript0098
1060 ai2_doalarm C_N48 10
1061}
1062
1063func void shin_lock(string ai_name)
1064{
1065 particle shin_lock_locklight01 do start
1066}
1067
1068func void stair_lock(string ai_name)
1069{
1070 particle stair_lock_locklight01 do start
1071}
1072
1073func void roof(string ai_name)
1074{
1075 particle roof_locklight01 do start
1076 particle shin_lock_locklight01 do start
1077 ai2_spawn A_T25
1078
1079}
1080
1081func void floor4_lock(string ai_name)
1082{
1083 particle floor4_lock_locklight01 do start
1084 trigvolume_enable trigger_volume_39 1
1085
1086}
1087
1088func void roof_doors(string ai_name)
1089{
1090 particle roof_doors_locklight01 do start
1091
1092}
1093
1094func void roof_door2(string ai_name)
1095{
1096 particle roof_door2_locklight01 do start
1097 ai2_spawn A_n17
1098}
1099
1100func void enable_t29(string ai_name)
1101{
1102 trigvolume_enable trigger_volume_29 1
1103
1104}
1105
1106func void t40(string ai_name)
1107{
1108 dprint t40_active
1109 if(sub1 ne 1)
1110 {
1111 if (audio_counter eq 2)
1112 {
1113 if(trigvolume_count(49) eq 0)
1114 {
1115 trigvolume_enable trigger_volume_40 0
1116 sound_dialog_play c14_54_26konoko
1117 sound_dialog_play_block pause
1118 audio_counter = audio_counter - 1;
1119 }
1120 }
1121 if (audio_counter eq 3)
1122 {
1123 if(trigvolume_count(49) eq 0)
1124 {
1125 trigvolume_enable trigger_volume_40 0
1126 sound_dialog_play c14_54_25konoko
1127 sound_dialog_play_block pause
1128 audio_counter = audio_counter - 1;
1129 }
1130 }
1131 }
1132}
1133
1134func void t50(string ai_name)
1135{
1136 dprint t50_active
1137 if(sub2 ne 1)
1138 {
1139 if (audio_counter eq 2)
1140 {
1141 if(trigvolume_count(51) eq 0)
1142 {
1143
1144 trigvolume_enable trigger_volume_50 0
1145 sound_dialog_play c14_54_26konoko
1146 sound_dialog_play_block pause
1147 audio_counter = audio_counter - 1;
1148 }
1149 }
1150 if (audio_counter eq 3)
1151 {
1152 if(trigvolume_count(51) eq 0)
1153 {
1154 trigvolume_enable trigger_volume_50 0
1155 sound_dialog_play c14_54_25konoko
1156 sound_dialog_play_block pause
1157 audio_counter = audio_counter - 1;
1158 }
1159 }
1160 }
1161}
1162
1163func void t53(string ai_name)
1164{
1165 dprint t53_active
1166 if(sub3 ne 1)
1167 {
1168 if (audio_counter eq 2)
1169 {
1170 if(trigvolume_count (54) eq 0)
1171 {
1172 trigvolume_enable trigger_volume_53 0
1173 sound_dialog_play c14_54_26konoko
1174 sound_dialog_play_block pause
1175 audio_counter = audio_counter - 1;
1176 }
1177 }
1178 if (audio_counter eq 3)
1179 {
1180 if(trigvolume_count(54) eq 0)
1181 {
1182 trigvolume_enable trigger_volume_53 0
1183 sound_dialog_play c14_54_25konoko
1184 sound_dialog_play_block pause
1185 audio_counter = audio_counter - 1;
1186 }
1187 }
1188 }
1189}
1190
1191func powersub1(string ai_name)
1192{
1193 dprint powersub1_active
1194 sub1 = 1;
1195 particle spine1 stop
1196 particle spinesound1 stop
1197
1198 if(sub3 eq 0)
1199 {
1200 target_set(594,30.0)
1201 }
1202 if(sub3 ne 0)
1203 {
1204 if(sub2 eq 0)
1205 {
1206 target_set(595,30.0)
1207 }
1208 }
1209 check_power
1210}
1211
1212func powersub2(string ai_name)
1213{
1214 dprint powersub2_active
1215 particle spine2 do stop
1216 particle spinesound2 stop
1217 sub2 = 1;
1218 if(sub3 eq 0)
1219 {
1220 target_set(594,30.0)
1221 }
1222 if(sub3 ne 0)
1223 {
1224 if(sub1 eq 0)
1225 {
1226 target_set(587,30.0)
1227 }
1228 }
1229 check_power
1230}
1231
1232func powersub3(string ai_name)
1233{
1234 dprint powersub3_active
1235 sub3 = 1;
1236 particle spine3 do stop
1237 particle spinesound3 stop
1238 if(sub2 eq 0)
1239 {
1240 target_set(595,30.0)
1241 }
1242
1243 if(sub2 ne 0)
1244 {
1245 if(sub1 eq 0)
1246 {
1247 target_set(587,30.0)
1248 }
1249 }
1250 check_power
1251}
1252
1253func check_power(string ai_name)
1254{
1255 dprint check_power_active
1256 counter = counter - 1
1257 if (counter eq 1)
1258 {
1259 sound_dialog_play c14_54_27konoko
1260 sound_dialog_play_block pause
1261 }
1262
1263 if (counter eq 0)
1264 {
1265 dprint power_down
1266 trigvolume_enable trigger_volume_36 1
1267 trigvolume_enable trigger_volume_41 1
1268 input 0
1269 fade_out 0 0 0 30
1270 cm_interpolate substation 0
1271 fade_in 30
1272 # sleep 180
1273 trig_deactivate 1
1274 trig_deactivate 2
1275 trig_deactivate 3
1276 trig_deactivate 4
1277 trig_deactivate 5
1278 trig_deactivate 8
1279 trig_deactivate 303
1280 trig_deactivate 100
1281 trig_deactivate 101
1282 trig_deactivate 500
1283 trig_deactivate 400
1284 sleep 15
1285 trig_deactivate 503
1286 sleep 5
1287 trig_deactivate 502
1288 sleep 5
1289 trig_deactivate 501
1290 sleep 15
1291 trig_deactivate 510
1292 sleep 5
1293 trig_deactivate 511
1294 sleep 5
1295 trig_deactivate 512
1296 sleep 15
1297 trig_deactivate 520
1298 sleep 5
1299 trig_deactivate 521
1300 sleep 5
1301 trig_deactivate 522
1302 sleep 15
1303 trig_deactivate 320
1304 sleep 15
1305 trig_deactivate 315
1306 sleep 15
1307 trig_deactivate 302
1308 door_unlock 16
1309 particle ZomShin_door_locklight do start
1310 sleep 120
1311 fade_out 0 0 0 240
1312 cm_reset
1313 input 1
1314 target_set(403, 30.0)
1315 fade_in 30
1316 music_stop
1317 objective_set(3)
1318 }
1319}
1320
1321func void lastdoor1(string ai_name)
1322{
1323 ld1=1
1324 if(ld2 eq 0)
1325 {
1326 target_set(599,30.0)
1327 }
1328 if (ld2 ne 0)
1329 {
1330 if(ld3 eq 0)
1331 {
1332 target_set(598,30.0)
1333 }
1334 }
1335}
1336
1337func void lastdoor2(string ai_name)
1338{
1339 ld2=1
1340 if(ld3 eq 0)
1341 {
1342 target_set(598,30.0)
1343 }
1344 if(ld3 ne 0)
1345 {
1346 if(ld1 eq 0)
1347 {
1348 target_set(597,30.0)
1349 }
1350 }
1351}
1352
1353func void lastdoor3(string ai_name)
1354{
1355 ld3=1
1356 if(ld2 eq 0)
1357 {
1358 target_set(599,30.0)
1359 }
1360 if(ld2 ne 0)
1361 {
1362 if(ld1 eq 0)
1363 {
1364 target_set(597,30.0)
1365 }
1366 }
1367}
1368
1369#########################
1370# save game #
1371#########################
1372func void s1(string ai_name)
1373{
1374 dprint SAVEDGAME1
1375
1376 if (my_save_point ne 1)
1377 {
1378 save_game 1 autosave
1379 }
1380}
1381
1382func void s2(string ai_name)
1383{
1384 dprint SAVEDGAME2
1385
1386 if (my_save_point ne 2)
1387 {
1388 save_game 2 autosave
1389 }
1390}
1391
1392func void s3(string ai_name)
1393{
1394 dprint SAVEDGAME3
1395
1396 if (my_save_point ne 3)
1397 {
1398 save_game 3 autosave
1399 }
1400}
1401
1402func void s4(string ai_name)
1403{
1404 dprint SAVEDGAME4
1405
1406 if (my_save_point ne 4)
1407 {
1408 save_game 4 autosave
1409 }
1410}
1411
1412func void s5(string ai_name)
1413{
1414 dprint SAVEDGAME5
1415
1416 if (my_save_point ne 5)
1417 {
1418 save_game 5 autosave
1419 }
1420}
1421
1422###############################################
1423##### FURIOUS ZOMBIE SHINATAMA FIGHT ######
1424###############################################
1425
1426var int console_count = 4;
1427var int zombie_counter_var = 0;
1428
1429func void zombie_counter(string player_name)
1430{
1431 console_count = console_count - 1;
1432
1433 door_lock 16
1434
1435 if (console_count eq 0)
1436 {
1437 console_count = 4;
1438
1439 dprint zombie_counter
1440 zombie_counter_var = zombie_counter_var + 1;
1441
1442 if (zombie_counter_var eq 0)
1443 {
1444 zombie_round_2
1445 }
1446
1447 if (zombie_counter_var eq 1)
1448 {
1449 zombie_round_3
1450 }
1451
1452 if (zombie_counter_var eq 2)
1453 {
1454 zombie_round_4
1455 }
1456
1457 if (zombie_counter_var eq 3)
1458 {
1459 zombie_round_5
1460 }
1461 }
1462}
1463
1464func void t52(string ai_name)
1465{
1466 ai2_dopath ZomGrif patrol_102
1467}
1468
1469func void t55(string ai_name)
1470{
1471 ai2_dopath ZomGrif patrol_103
1472}
1473
1474func void t56(string ai_name)
1475{
1476 ai2_dopath ZomGrif patrol_104
1477}
1478
1479func void t57(string ai_name)
1480{
1481 ai2_dopath ZomGrif patrol_105
1482}
1483
1484func void t58(string ai_name)
1485{
1486 ai2_spawn C_Lbo53
1487 ai2_spawn C_Sbo52
1488}
1489
1490func void zombie_dialog_round3(void)
1491{
1492 sound_dialog_play c14_51_07shinatama
1493 cinematic_start(SHINZOMlistening, 180,180,19,8,20, false)
1494 sound_dialog_play_block
1495 cinematic_stop (SHINZOMlistening, 19, 20)
1496}
1497
1498func void zombie_dialog_round4(void)
1499{
1500 sound_dialog_play c14_51_08shinatama
1501 cinematic_start(SHINZOMlistening, 180,180,19,8,20, false)
1502 sound_dialog_play_block
1503 cinematic_stop (SHINZOMlistening, 19, 20)
1504}
1505
1506func void zombie_dialog_round5(void)
1507{
1508 sound_dialog_play c14_51_09shinatama
1509 cinematic_start(SHINZOMlistening, 180,180,19,8,20, false)
1510 sound_dialog_play_block
1511 cinematic_stop (SHINZOMlistening, 19, 20)
1512}
1513
1514# CB: this round is not called any longer! only zombie rounds 2-5 are used now
1515# ZOMBIE ROUND 1
1516func void zombie_round_1(string ai_name)
1517{
1518 dprint zombie_round_1
1519
1520 particle zombie1 create
1521 particle zombie1 start
1522
1523 ai2_allpassive 1
1524 input 0
1525
1526 # CB: kill all weapon particles
1527 p3_removedangerous
1528
1529 sleep 120
1530
1531 trig_show 91
1532 trig_show 92
1533 trig_show 93
1534
1535 trig_activate 91
1536 trig_activate 92
1537 trig_activate 93
1538
1539 sleep 30
1540
1541# trig_speed 202 .2
1542# trig_speed 204 .2
1543# trig_hide 2023
1544# trig_hide 2013
1545
1546# particle ????? start
1547# particle ????? start
1548
1549 cm_reset
1550 input 1
1551 sleep 90
1552 ai2_allpassive 0
1553 ai2_makeignoreplayer ZomGrif 1
1554}
1555
1556# CB: this round has all the old zombie round 2 setup including camera angles
1557# OLD ZOMBIE ROUND 2
1558func void old_zombie_round_2(string ai_name)
1559{
1560 dprint zombie_round_2
1561
1562 ai2_allpassive 1
1563 turret_deactivate 330
1564 turret_deactivate 333
1565 turret_deactivate 336
1566 input 0
1567
1568 # CB: kill all weapon particles
1569 p3_removedangerous
1570
1571 particle zombie1 kill
1572
1573 sleep 90
1574
1575 cm_interpolate zombie_hint 0
1576
1577 particle zombie1 create
1578 particle zombie1 start
1579
1580 sleep 120
1581
1582 trig_deactivate 91
1583 trig_deactivate 92
1584 trig_deactivate 93
1585
1586 dprint trig_off_1
1587
1588 sleep 15
1589 trig_hide 91
1590 sleep 15
1591 trig_hide 92
1592 sleep 15
1593 trig_hide 93
1594
1595 sleep 120
1596
1597 trig_show 210
1598 trig_show 310
1599 trig_show 410
1600 trig_show 510
1601
1602 trig_activate 210
1603 trig_activate 310
1604 trig_activate 410
1605 trig_activate 510
1606
1607 trig_reset 91
1608 trig_reset 92
1609 trig_reset 93
1610
1611 sleep 15
1612 trig_show 91
1613 sleep 15
1614 trig_show 92
1615 sleep 15
1616 trig_show 93
1617
1618 trig_activate 91
1619 trig_activate 92
1620 trig_activate 93
1621
1622 sleep 90
1623
1624 cm_reset
1625 input 1
1626 sleep 90
1627 ai2_allpassive 0
1628 ai2_makeignoreplayer ZomGrif 1
1629
1630 console_reset 399
1631 console_reset 400
1632 console_reset 401
1633 console_reset 402
1634}
1635
1636# CB: this round is the new zombie round 2 setup which is tabulae rasa
1637# and fit to be called from a save point, or from the cutscene
1638# ZOMBIE ROUND 2
1639func void zombie_round_2(string ai_name)
1640{
1641 dprint zombie_round_2_active
1642
1643 particle zombie1 create
1644 particle zombie1 start
1645
1646 ai2_allpassive 1
1647 input 0
1648
1649 # CB: kill all weapon particles
1650 p3_removedangerous
1651
1652 sleep 120
1653
1654 trig_show 210
1655 trig_show 310
1656 trig_show 410
1657 trig_show 510
1658
1659 trig_activate 210
1660 trig_activate 310
1661 trig_activate 410
1662 trig_activate 510
1663
1664 trig_reset 91
1665 trig_reset 92
1666 trig_reset 93
1667
1668 sleep 15
1669 trig_show 91
1670 sleep 15
1671 trig_show 92
1672 sleep 15
1673 trig_show 93
1674
1675 trig_activate 91
1676 trig_activate 92
1677 trig_activate 93
1678
1679 # incidental zombie shinatama dialog
1680 trigvolume_enable shinzom_voice1 1
1681 trigvolume_enable shinzom_voice2 1
1682
1683 cm_reset
1684 input 1
1685 sleep 90
1686 ai2_allpassive 0
1687 ai2_makeignoreplayer ZomGrif 1
1688}
1689
1690# ZOMBIE ROUND 3
1691func void zombie_round_3(string ai_name)
1692{
1693 dprint zombie_round_3_active
1694
1695 ai2_allpassive 1
1696 turret_deactivate 330
1697 turret_deactivate 333
1698 turret_deactivate 336
1699 input 0
1700
1701 # CB: kill all weapon particles
1702 p3_removedangerous
1703
1704 particle zombie1 kill
1705
1706 # incidental zombie shinatama dialog
1707 trigvolume_enable shinzom_voice3 1
1708
1709 sleep 90
1710
1711 cm_interpolate zombie_hint 0
1712
1713 particle zombie1 create
1714 particle zombie1 start
1715 sleep 20
1716 particle zombie1 kill
1717 sleep 10
1718 particle zombie1 create
1719 particle zombie1 start
1720
1721 sleep 120
1722
1723 trig_deactivate 91
1724 trig_deactivate 92
1725 trig_deactivate 93
1726
1727 dprint trig_off_2
1728
1729 sleep 15
1730 trig_hide 91
1731 sleep 15
1732 trig_hide 92
1733 sleep 15
1734 trig_hide 93
1735
1736 trig_deactivate 210
1737 trig_deactivate 310
1738 trig_deactivate 410
1739 trig_deactivate 510
1740
1741 fork zombie_dialog_round3
1742 sleep 120
1743
1744 trig_reset 91
1745 trig_reset 92
1746 trig_reset 93
1747
1748 sleep 15
1749 trig_show 91
1750 sleep 15
1751 trig_show 92
1752 sleep 15
1753 trig_show 93
1754
1755 trig_activate 91
1756 trig_activate 92
1757 trig_activate 93
1758
1759 trig_reset 210
1760 trig_reset 310
1761 trig_reset 410
1762 trig_reset 510
1763
1764 trig_activate 210
1765 trig_activate 310
1766 trig_activate 410
1767 trig_activate 510
1768
1769 trig_show 2101
1770 trig_show 3101
1771 trig_show 4101
1772 trig_show 5101
1773
1774 trig_activate 2101
1775 trig_activate 3101
1776 trig_activate 4101
1777 trig_activate 5101
1778
1779 trig_speed 210 .3
1780 trig_speed 310 .3
1781 trig_speed 410 .3
1782 trig_speed 510 .3
1783
1784 trig_speed 2101 .3
1785 trig_speed 3101 .3
1786 trig_speed 4101 .3
1787 trig_speed 5101 .3
1788
1789 sleep 90
1790
1791 cm_reset
1792 input 1
1793 sleep 90
1794 ai2_allpassive 0
1795 # ai2_passive ZomGrif 1
1796
1797 console_reset 399
1798 console_reset 400
1799 console_reset 401
1800 console_reset 402
1801}
1802
1803## ZOMBIE ROUND 4
1804func void zombie_round_4(string ai_name)
1805{
1806 dprint zombie_round_4_active
1807
1808 ai2_allpassive 1
1809 turret_deactivate 330
1810 turret_deactivate 333
1811 turret_deactivate 336
1812 input 0
1813
1814 # CB: kill all weapon particles
1815 p3_removedangerous
1816
1817 particle zombie1 kill
1818
1819 # incidental zombie shinatama dialog
1820 trigvolume_enable shinzom_voice4 1
1821
1822 sleep 90
1823
1824 cm_interpolate zombie_hint 0
1825
1826 sleep 30
1827 particle zombie1 create
1828 particle zombie1 start
1829 sleep 20
1830 particle zombie1 kill
1831 sleep 30
1832 particle zombie1 create
1833 particle zombie1 start
1834
1835 fork zombie_dialog_round4
1836 sleep 120
1837
1838 trig_deactivate 91
1839 trig_deactivate 92
1840 trig_deactivate 93
1841
1842 dprint trig_off_3
1843
1844 trig_hide 91
1845 trig_hide 92
1846 trig_hide 93
1847
1848 trig_deactivate 210
1849 trig_deactivate 310
1850 trig_deactivate 410
1851 trig_deactivate 510
1852
1853 trig_hide 210
1854 trig_hide 310
1855 trig_hide 410
1856 trig_hide 510
1857
1858 trig_deactivate 2101
1859 trig_deactivate 3101
1860 trig_deactivate 4101
1861 trig_deactivate 5101
1862
1863 trig_hide 2101
1864 trig_hide 3101
1865 trig_hide 4101
1866 trig_hide 5101
1867
1868 sleep 120
1869
1870 trig_show 214
1871 trig_show 314
1872 trig_show 414
1873 trig_show 514
1874
1875 sleep 15
1876
1877 trig_show 94
1878
1879 sleep 15
1880
1881 trig_show 910
1882
1883 trig_activate 214
1884 trig_activate 314
1885 trig_activate 414
1886 trig_activate 514
1887
1888 trig_activate 910
1889 trig_activate 94
1890
1891 trig_speed 214 .15
1892 trig_speed 314 .15
1893 trig_speed 414 .15
1894 trig_speed 514 .15
1895
1896 trig_speed 910 .35
1897 trig_speed 94 .35
1898
1899 sleep 90
1900
1901 cm_reset
1902 input 1
1903 sleep 90
1904 ai2_allpassive 0
1905 # # ai2_passive ZomGrif 1
1906
1907 console_reset 399
1908 console_reset 400
1909 console_reset 401
1910 console_reset 402
1911}
1912
1913########## ZOMBIE ROUND 5 - YOU WIN ############
1914
1915func void zombie_round_5(string ai_name)
1916{
1917 dprint zombie_round_5_active
1918
1919 ai2_allpassive 1
1920 turret_deactivate 330
1921 turret_deactivate 333
1922 turret_deactivate 336
1923
1924 trig_hide 214
1925 trig_hide 414
1926
1927 trig_activate 210
1928 trig_activate 410
1929
1930 # CB: kill all weapon particles
1931 p3_removedangerous
1932
1933 input 0
1934
1935 begin_cutscene
1936
1937 music_stop
1938
1939 sleep 60
1940
1941 cm_interpolate zombie_death 0
1942
1943 fork zombie_dialog_round5
1944 sleep 90
1945
1946 trig_speed 9 1
1947 trig_speed 10 2
1948 trig_speed 910 2.5
1949 trig_speed 94 .5
1950 trig_speed 210 2
1951 sleep 90
1952 trig_speed 410 2
1953 sleep 90
1954 trig_speed 514 1
1955 trig_speed 410 1
1956 sleep 90
1957 trig_speed 314 2
1958 sleep 90
1959 trig_speed 210 1
1960
1961 sleep 60
1962 trig_hide 210
1963 trig_hide 9
1964 trig_speed 10 .2
1965 sleep 60
1966 trig_hide 314
1967 trig_hide 910
1968 sleep 60
1969 trig_speed 514 .2
1970 trig_hide 410
1971 trig_hide 10
1972 trig_hide 94
1973 sleep 60
1974 trig_hide 514
1975 sleep 60
1976 trig_hide 93
1977 particle zombie1 kill
1978 sound_ambient_start shin_zom_shutdown 1.0
1979 sleep 10
1980 particle zombie1 create
1981 particle zombie1 start
1982 sleep 20
1983 particle zombie1 kill
1984 particle zombie1 create
1985 particle zombie1 start
1986 sleep 30
1987 particle zombie1 kill
1988 particle zombiesteam stop
1989 particle zombient stop
1990
1991 sleep 90
1992
1993# Hardy, if griffin has to see konoko after or during the zom cutscene,
1994# make sure this next line makes it into the shorter zombie shin scripts --mike
1995
1996 ai2_makeignoreplayer ZomGrif 0
1997 Zom
1998}
1999
2000
2001
2002############################################################
2003########### INCIDENTAL SHINATAMA ZOMBIE DIALOG #############
2004############################################################
2005
2006func void shinzom_voice1(string ai_name)
2007{
2008 sound_dialog_play c00_01_102shinatama
2009}
2010
2011func void shinzom_voice2(string ai_name)
2012{
2013 sound_dialog_play c00_01_101shinatama
2014}
2015
2016func void shinzom_voice3(string ai_name)
2017{
2018 sound_dialog_play c00_01_100shinatama
2019}
2020
2021func void shinzom_voice4(string ai_name)
2022{
2023 sound_dialog_play c00_01_103shinatama
2024}
Note: See TracBrowser for help on using the repository browser.