source: nikanabo/current/bsl/original/IGMD/EnvWarehouse/warehouse_train2.bsl@ 828

Last change on this file since 828 was 185, checked in by geyser, 18 years ago
File size: 19.8 KB
Line 
1func void cheater(void)
2{
3 invincible=1
4 omnipotent=1
5 lock_keys keys_all
6 chr_teleport 0 7023
7}
8###################################
9# variables used in train2 scipts #
10###################################
11
12#used to see if PPK combo was successful
13var int combo_did;
14
15#used to determine when to activate or deactivate blocking drone, current script comments out the usefulness of this variable
16var int count_block;
17
18#determines if reload in ballistics or cell
19var int reload=0;
20
21#makes sure reloading cells doesn't play before player has even picked up the rifle
22var int droid_active;
23
24#sees if you already reloaded ballistics ammo before the system had a chance to prompt you to do so
25var int already_reloaded;
26
27#sees if you already reloaded cell ammo before system prompted you to do so.
28var int already_reloaded2;
29
30#counts number of reload prompts necessary, if you reloaded more than one time, you lose rating points
31var int had_to_reload;
32
33#determines when inside the target shooting function
34var int inside_target_function;
35
36#determines when inside ammo reload function
37var int inside_ammo_function = 0;
38
39#determines when not to display block droid message
40var int block_off;
41
42################################
43# fight training scripts below #
44################################
45
46#########################
47# punch and kick script #
48#########################
49func void train_fighting(string ai_name)
50{
51 how_far_along = 4;
52 music_stop
53 particle obj3 kill
54 particle obj4 kill
55 trig_deactivate 1
56 trig_deactivate 2
57 trig_deactivate 3
58 message_remove c01_50_23
59 message_remove jump_encourage
60 message_remove jump_encourage2
61 sleep 60
62 sound_dialog_play_interrupt c00_01_64shinatama
63 message_remove
64 message begin_fight 240
65 sleep 240
66# PUNCH-KICK
67 lock_keys keys_attack
68 message xpunch
69 chr_wait_animtype 0 punch
70 sleep 60
71 message_remove xpunch
72 sleep 60
73 message xkick
74 chr_wait_animtype 0 kick
75 sleep 60
76 message_remove xkick
77 sleep 60
78
79 if (how_far_along eq 4)
80 {
81 #throw two punches
82 sound_dialog_play_block c00_01_65shinatama
83 message punch
84 chr_wait_animtype 0 punch2
85 message_remove punch
86 sleep 60
87 message c01_50_27 180
88 sound_dialog_play_interrupt c00_01_66shinatama
89 sound_dialog_play_block pause
90 sleep 40
91 }
92
93 if (how_far_along eq 4)
94 {
95# more combo
96 sound_dialog_play_block c00_01_67shinatama
97 sound_dialog_play_block pause
98 sleep 60
99 }
100
101 if (how_far_along eq 4)
102 {
103# FIRST COMBO
104 message c01_50_29
105 fork combo_wait
106 chr_wait_animtype 0 ppk
107 combo_did = 1;
108 sleep 60
109 message_remove c01_50_29
110 message_remove c01_50_29b
111 sleep 60
112 sound_dialog_play_interrupt c00_01_07shinatama
113 message xppk 180
114 sleep 180
115 }
116 if(combo_did eq 1)
117 {
118 if (how_far_along eq 4)
119 {
120# try linking for more combos
121 sound_dialog_play_block c00_01_69shinatama
122 sound_dialog_play_block pause
123 sleep 240
124 }
125
126 if (how_far_along eq 4)
127 {
128# you're now ready to train with a sparring partner
129 sound_dialog_play_block c00_01_70shinatama
130 sound_dialog_play_block pause
131 sleep 30
132 }
133 if (how_far_along eq 4)
134 {
135# proceed to the next room
136 sound_dialog_play_block c00_01_71shinatama
137 message xspar2
138 ai2_spawn dum_hit_flash
139 chr_lock_active dum_hit_flash
140 chr_death_lock dum_hit_flash 1
141 door_unlock 99
142 particle door2_locklight02 do start
143 }
144 }
145}
146
147func void combo_wait(string ai_name)
148{
149 sleep 600
150 if (combo_did eq 0)
151 {
152 dprint rating
153 rating = rating + 1
154 rating
155 message_remove c01_50_29
156 sound_dialog_play_block c00_01_68shinatama
157 sleep 60
158 }
159 if (combo_did eq 0)
160 {
161 message c01_50_29b 240
162 sleep 240
163 }
164 if (combo_did eq 0)
165 {
166 message c01_50_29
167 }
168
169# if(combo_did eq 0)
170# {
171# if (how_far_along eq 4)
172# {
173# try linking for more combos
174# sound_dialog_play_block c00_01_69shinatama
175# sound_dialog_play_block pause
176# sleep 240
177# }
178#
179# if (how_far_along eq 4)
180# {
181# you're now ready to train with a sparring partner
182# sound_dialog_play_block c00_01_70shinatama
183# sound_dialog_play_block pause
184# sleep 30
185# }
186# if (how_far_along eq 4)
187# {
188# proceed to the next room
189# sound_dialog_play_block c00_01_71shinatama
190# message xspar2
191# ai2_spawn dum_hit_flash
192# chr_lock_active dum_hit_flash
193# chr_death_lock dum_hit_flash 1
194# door_unlock 99
195# particle door2_locklight02 do start
196# }
197# }
198}
199
200##################################
201# train player about hit flashes #
202##################################
203func void train_hit_flash(string ai_name)
204{
205 particle steam stop
206 music_train2
207 how_far_along = 6;
208 message_remove xspar2
209 sleep 60
210# try hitting this dummy
211 sound_dialog_play_block c00_01_77shinatama
212 message start_hit
213 ai2_makeignoreplayer dum_hit_flash 1
214}
215
216func void hurt_dummy1(string ai_name)
217{
218 message_remove start_hit
219 sleep 60
220 door_lock 99
221 particle door2_locklight02 do stop
222# dynamic hit flashes
223 message c01_50_35 300
224 sleep 240
225 ai2_dopath dum_hit_flash patrol_dum_hit_flash
226 ai2_setjobstate dum_hit_flash
227 sleep 60
228# more dynamic hit flashes blue
229 message blueflash 300
230 sleep 240
231 ai2_dopath dum_hit_flash patrol_dum_hit_flash
232 ai2_setjobstate dum_hit_flash
233 sleep 60
234 message c01_50_37 300
235 sleep 240
236 ai2_dopath dum_hit_flash patrol_dum_hit_flash
237 ai2_setjobstate dum_hit_flash
238 sleep 60
239# more dynamic hit flashes
240 message c01_50_38 300
241 sleep 240
242 ai2_dopath dum_hit_flash patrol_dum_hit_flash
243 ai2_setjobstate dum_hit_flash
244# move on to the next room to learn how to perform the most dangerous attacks.
245 sleep 60
246 sound_dialog_play_block c00_01_78shinatama
247 message goto_throw
248 sleep 60
249 door_unlock 100
250 particle door3_locklight02 do start
251 ai2_spawn dum_train_throw
252 chr_lock_active dum_train_throw
253 chr_death_lock dum_train_throw 1
254 ai2_makeignoreplayer dum_train_throw 1
255}
256
257###################################
258# train player to throw opponents #
259###################################
260func void lockthrow(void)
261{
262 door_lock 100
263 particle door3_locklight02 do stop
264}
265
266func void train_throw(string ai_name)
267{
268 how_far_along = 7;
269 message_remove goto_throw
270 sleep 60
271 if (how_far_along eq 7)
272 {
273# FIRST THROW
274 sound_dialog_play_block c00_01_79shinatama
275 message c01_50_41
276 chr_wait_animtype 0 throw_forward_punch throw_forward_kick run_throw_forward_punch run_throw_forward_kick
277 message_remove c01_50_41
278 sleep 60
279 }
280
281 if (how_far_along eq 7)
282 {
283# more throws
284 sound_dialog_play_block c00_01_80shinatama
285 ai2_dopath dum_train_throw patrol_train_throw2
286 ai2_setjobstate dum_train_throw
287 sleep 180
288 ai2_dopath dum_train_throw patrol_train_throw2
289 ai2_setjobstate dum_train_throw
290 sleep 180
291 message xthrow1 360
292 ai2_dopath dum_train_throw patrol_train_throw2
293 ai2_setjobstate dum_train_throw
294 sleep 180
295 ai2_dopath dum_train_throw patrol_train_throw2
296 ai2_setjobstate dum_train_throw
297 sleep 180
298 ai2_dopath dum_train_throw patrol_train_throw2
299 ai2_setjobstate dum_train_throw
300 sleep 180
301 message xthrow2 360
302 ai2_dopath dum_train_throw patrol_train_throw2
303 ai2_setjobstate dum_train_throw
304 sleep 180
305 ai2_dopath dum_train_throw patrol_train_throw2
306 ai2_setjobstate dum_train_throw
307 sleep 180
308 ai2_dopath dum_train_throw patrol_train_throw2
309 ai2_setjobstate dum_train_throw
310 sleep 180
311 ai2_dopath dum_train_throw patrol_train_throw2
312 ai2_setjobstate dum_train_throw
313 }
314
315 if (how_far_along eq 7)
316 {
317# Proceed to the next room and try blocking the training dummy'sleep 240 attacks.
318 message goto_block
319 sleep 60
320 door_unlock 101
321 particle door4_locklight02 do start
322 particle door4b_locklight02 do start
323 ai2_spawn dum_train_block
324 ai2_makeignoreplayer dum_train_block 1
325 chr_invincible char_0 1
326 }
327
328}
329
330###############################
331# train player to block blows #
332###############################
333func void train_block(string ai_name)
334{
335#introduce blocking
336 how_far_along = 5;
337 message_remove goto_block
338# dummy attack
339 sound_dialog_play_block c00_01_72shinatama
340 sound_dialog_play_block pause
341 sound_dialog_play_block c00_01_73shinatama
342 if(count_block eq 0)
343 {
344 message c01_50_33
345 }
346}
347
348func void train_block2(string ai_name)
349{
350 ai2_makeignoreplayer dum_train_block 0
351 ai2_dopath dum_train_block patrol_56b
352 ai2_setjobstate dum_train_block
353 message_remove c01_50_33
354 if(count_block eq 0)
355 {
356 count_block = 1
357 door_lock 101
358 door_close 101
359 particle door4_locklight02 do stop
360 chr_delete dum_train_throw
361 chr_delete dum_hit_flash
362 chr_delete demo1
363 chr_delete demo2
364 chr_delete demo3
365 if (how_far_along eq 5)
366 {
367# more blocking
368 sleep 60
369 message c01_50_32 300
370 sound_dialog_play_block c00_01_74shinatama
371 sound_dialog_play_pause
372 sleep 30
373 sound_dialog_play_block c00_01_75shinatama
374 message xblocking2 300
375 sound_dialog_play_pause
376 sleep 30
377 sound_dialog_play_block c00_01_76shinatama
378 }
379 sleep 120
380 # message_remove xdronedeactive
381 ai2_makeignoreplayer dum_train_block 1
382 ai2_dopath dum_train_block patrol_56b
383 ai2_setjobstate dum_train_block
384 sound_dialog_play_block c00_01_83shinatama
385 sound_dialog_play_block pause
386 door_unlock 102
387 particle door5_locklight02 do start
388 message goto_shoot
389 chr_inv_reset 0
390 music_stop
391 sleep 60
392 dprint spawn_shoot
393 ai2_spawn dum_train_shoot
394 ai2_spawn dum_train_shoot2
395 ai2_passive dum_train_shoot 1
396 ai2_passive dum_train_shoot2 1
397 chr_invincible dum_train_shoot 1
398 chr_invincible dum_train_shoot2 1
399 chr_invincible char_0 0
400 console_deactivate 12
401 trigvolume_enable tv75 0
402 trigvolume_enable tv74 0
403 }
404}
405
406func void disable_tv46(void)
407{
408 message_remove c01_50_33
409 trigvolume_enable trigger_volume_46 0
410}
411
412##################################
413# put drones back on their spots #
414##################################
415func void flash_path(string ai_name)
416{
417 sleep 90
418 ai2_dopath dum_hit_flash patrol_dum_hit_flash
419}
420
421func void throw_path(string ai_name)
422{
423 sleep 90
424 ai2_dopath dum_train_throw patrol_train_throw2
425}
426
427func void block_path(string ai_name)
428{
429 if(block_off eq 0)
430 {
431 block_off = 1;
432 message xdronedeactive 180
433 }
434 ai2_makeignoreplayer dum_train_block 1
435 ai2_dopath dum_train_block patrol_56
436 sleep 180
437 block_off = 0;
438}
439
440func void block_path2(string ai_name)
441{
442
443 ai2_makeignoreplayer dum_train_block 1
444 ai2_dopath dum_train_block patrol_56
445}
446######################################################
447# regenerate first two training dummies as necessary #
448######################################################
449
450func void regen1(string ai_name)
451{
452 dprint regen1
453 message_remove blueflash
454 message_remove c01_50_37
455 message_remove c01_50_38
456 sleep 60
457 message xregen1 180
458 sleep 180
459 chr_set_health dum_hit_flash 50
460 ai2_dopath dum_hit_flash patrol_dum_hit_flash
461 ai2_setjobstate dum_hit_flash
462}
463
464func void regen2(string ai_name)
465{
466 dprint regen2
467 sleep 60
468 message xregen1 180
469 sleep 180
470 chr_set_health dum_train_throw 50
471 ai2_dopath dum_hit_flash patrol_train_throw2
472 ai2_setjobstate dum_train_throw
473}
474
475#########################
476# train player to shoot #
477#########################
478func void train_shoot(string ai_name)
479{
480# message_remove xdroneactive
481 message_remove xdronedeactive
482 particle g_tap1 create
483 sleep 7
484 weapon_spawn w1_tap 7042
485 wp_disable_fade=1
486 how_far_along = 8;
487 message_remove goto_shoot
488 sleep 60
489 ai2_dopath dum_train_throw patrol_train_throw
490 ai2_setjobstate dum_train_throw
491
492 if (how_far_along eq 8)
493 {
494 lock_keys keys_inventory
495 lock_keys keys_reload
496# approach weapons
497 sound_dialog_play_block c00_01_84shinatama
498 sound_dialog_play_pause
499 chr_wait_animtype char_0 Pickup_Pistol Pickup_Pistol_Mid
500 door_lock 102
501 particle door5_locklight02 do stop
502 trigvolume_enable tv75 1
503 trigvolume_enable tv74 1
504 ui_show_element left 1
505 sleep 60
506 message c01_50_54
507# hit targets
508 sound_dialog_play_block c00_01_85shinatama
509 chr_wait_animtype char_0 Autopistol_Recoil
510 sleep 120
511 message_remove c01_50_54
512 sleep 60
513 message c01_50_53 300
514 sleep 300
515 }
516}
517
518func void enter_ammo_function(void)
519{
520 dprint enter_ammo_function
521 inside_ammo_function = 1;
522}
523
524func void exit_ammo_function(void)
525{
526 dprint exit_ammo_function
527 inside_ammo_function = 0;
528}
529
530func void need_ammo(string ai_name)
531{
532 trigvolume_enable tv74 0
533
534 sleep 67
535 var int empty_weapon = chr_has_empty_weapon(char_0);
536
537 dprint trying_ammo_function
538
539 if (inside_ammo_function eq 0)
540 {
541 dprint doing_ammo_function
542 enter_ammo_function();
543
544 if(empty_weapon eq 1)
545 {
546 sleep 15
547 if(reload eq 0)
548 {
549 message_remove xkeepshoot
550 already_reloaded = 0;
551 sound_dialog_play_block c00_01_87shinatama
552 message c01_50_61
553 # generate powerup
554 particle g_tap1 create
555 sleep 7
556 powerup_spawn ammo 7042
557 particle g_tap2 create
558 sleep 7
559 powerup_spawn ammo 7043
560 chr_wait_animtype char_0 Pickup_Object_Mid Pickup_Object
561 fork remove_reload_message
562 # sleep 60
563 message_remove c01_50_61
564 sleep 90
565 if(already_reloaded eq 0)
566 {
567 message xreload
568 chr_wait_animtype char_0 reload_pistol
569 increase_rating()
570 message_remove xreload
571 sleep 90
572 }
573 message xkeepshoot
574 }
575 if(reload eq 1)
576 {
577 if(droid_active eq 1)
578 {
579 message c01_50_62
580 # generate powerup
581 particle g_phr1 create
582 sleep 7
583 powerup_spawn cell 7044
584 particle g_phr2 create
585 sleep 7
586 powerup_spawn cell 7045
587 chr_wait_animtype char_0 Pickup_Object_Mid Pickup_Object
588 # sleep 60
589 message_remove c01_50_62
590 fork remove_reload_message2
591 if(already_reloaded2 eq 0)
592 {
593 sleep 90
594 message xreload
595 chr_wait_animtype char_0 reload_rifle
596 dprint rating
597 increase_rating()
598 message_remove xreload
599 }
600 }
601 }
602 }
603
604 exit_ammo_function();
605 }
606
607 sleep 60
608 trigvolume_enable tv74 1
609}
610
611func void increase_rating(void)
612{
613 dprint rating
614 if(had_to_reload ne 0)
615 {
616
617 rating = rating + 1;
618 }
619 had_to_reload = had_to_reload + 1;
620}
621
622func void remove_reload_message(void)
623{
624 chr_wait_animtype char_0 reload_pistol
625 already_reloaded = 1;
626}
627
628func void remove_reload_message2(void)
629{
630 chr_wait_animtype char_0 reload_rifle
631 already_reloaded2 = 1;
632}
633
634func void enter_target_function(void)
635{
636 dprint enter_target_function
637 inside_target_function = 1;
638}
639
640func void exit_target_function(void)
641{
642 dprint exit_target_function
643 inside_target_function = 0;
644}
645
646func void targets_are_gone(void)
647{
648 reload=1;
649 message_remove xkeepshoot
650 trigvolume_enable tv75 0
651 sleep 7
652 particle g_phr1 create
653 sleep7
654 weapon_spawn w3_phr 7045
655 sound_dialog_play_block c00_01_86shinatama
656 sound_dialog_play_block pause
657 message_remove
658 #plasma, switch weapons
659 sound_dialog_play_block c00_01_88shinatama
660 chr_wait_animtype char_0 Pickup_Rifle Pickup_Rifle_Mid
661 droid_active = 1;
662 sleep 30
663 #activate drone, hit it
664 chr_invincible dum_train_shoot 0
665 ai2_passive dum_train_shoot 0
666 sound_dialog_play_block c00_01_89shinatama
667 ai2_dopath dum_train_shoot patrol_train_shoot
668 ai2_setjobstate dum_train_shoot
669}
670
671func void targets_are_not_gone(void)
672{
673 # CB: turn off the trigger volume and sleep for a second
674 # so as not to cause hideous performance loss
675 trigvolume_enable tv75 0
676 sleep 60
677 trigvolume_enable tv75 1
678}
679
680func void targets_gone(string ai_name)
681{
682 if(inside_target_function eq 0)
683 {
684 enter_target_function()
685
686 var int num_broken = env_broken(3001, 3018);
687
688 if (num_broken eq 18)
689 {
690 targets_are_gone();
691 }
692
693 if (num_broken < 18)
694 {
695 targets_are_not_gone();
696 }
697
698 exit_target_function
699 }
700}
701
702func void droid1_gone(string ai_name)
703{
704 if (how_far_along eq 8)
705 {
706 chr_invincible dum_train_shoot2 0
707# now side to side
708 sound_dialog_play_block c00_01_90shinatama
709 sound_dialog_play_block pause
710 sleep 30
711 ai2_passive dum_train_shoot2 0
712 ai2_dopath dum_train_shoot2 patrol_train_shoot2
713 ai2_setjobstate dum_train_shoot2
714 }
715}
716
717func void droid2_gone(string ai_name)
718{
719 if (how_far_along eq 8)
720 {
721 reload = 2;
722 droid_active = 0;
723 message_remove
724 cinematic_start (SHINnametag, 180, 180, 15, 1, 20, false)
725# great, done training
726 chr_changeteam char_0 Syndicate
727 music_train3
728 if(rating eq 0)
729 {
730 message poopy
731
732 }
733 if(rating eq 1)
734 {
735 message poopy2
736
737 }
738 if(rating eq 2)
739 {
740 message poopy3
741
742 }
743 if(rating eq 3)
744 {
745 message poopy4
746
747 }
748 if(rating eq 4)
749 {
750 message poopy5
751
752 }
753 if(rating eq 5)
754 {
755 message poopy6
756
757 }
758 if(rating > 5)
759 {
760 message poopy7
761
762 }
763 sound_dialog_play_block c00_01_91shinatama
764 sound_dialog_play_block pause
765 sleep 40
766 sound_dialog_play_block c00_01_81shinatama
767 sound_dialog_play_block pause
768 message_remove
769 sleep 40
770 sound_dialog_play_block c00_01_82shinatama
771 sound_dialog_play_block pause
772 cinematic_stop (SHINnametag, 15, 20)
773 message xf1 400
774 sleep 400
775 message xlastreview
776 particle obj_lastreview create
777 console_activate 12
778 wp_disable_fade=0
779 }
780}
781
782func void lastreview(string ai_name)
783{
784 music_stop
785 particle obj_lastreview kill
786 message_remove
787 message_remove xlastreview
788 text_console level_1f
789 lock_keys keys_all
790 sleep 60
791 dprint swing
792 swing
793 ui_suppress_prompt=0
794}
795
796######################################
797# training scripts used in warehouse #
798######################################
799# note: health function 'yhealth' is in the level_script file #
800
801func void train_fathealth(string ai_name)
802{
803 chr_wait_animtype char_0 Pickup_Object
804 if(trigvolume_count (80) eq 1)
805 {
806 sleep 90
807 message xtabhypo 300
808 sound_dialog_play_block c00_01_93shinatama
809 sound_dialog_play_block pause
810 sleep 40
811 sound_dialog_play_block c00_01_94shinatama
812 }
813}
814
815func void intro_enemies(string ai_name)
816{
817 dprint intro_enemies
818 how_far_along = 11;
819
820 music_firstfight
821
822 if (how_far_along eq 11)
823 {
824 ai2_spawn Bay2_Thug_1
825 ai2_spawn Bay2_Thug_2
826 }
827
828 if (how_far_along eq 11)
829 {
830# enemies
831 message c01_50_84 240
832 sleep 360
833 }
834}
835
836func void train_alarm(string ai_name)
837{
838 how_far_along = 13;
839
840 if (how_far_along eq 13)
841 {
842 ai2_spawn Bay4_Comguy_1
843# alarm
844 sleep 180
845 message c01_50_88 240
846 sleep 240
847 }
848
849 if (how_far_along eq 13)
850 {
851# alarm
852 message c01_50_89 240
853 sleep 240
854 }
855
856# if (how_far_along eq 13)
857# {
858# alarm
859# message c01_50_90 240
860# sleep 240
861# }
862}
863
864func void train_neutral(string ai_name)
865{
866 how_far_along = 14;
867 target_set(92,15.0)
868 if (how_far_along eq 14)
869 {
870# neutrals
871 message c01_50_91 240
872 sleep 240
873 sound_dialog_play_block c00_01_97shinatama
874 }
875}
876
877func void train_timer(string ai_name)
878{
879 how_far_along = 15;
880
881 if(how_far_along eq 15)
882 {
883 target_set(96,15.0)
884 timer_start 180 OutroLose
885 sound_dialog_play_block c00_01_95shinatama
886 sleep 180
887 objective_set(4)
888 sound_dialog_play_block pause
889 music_timer
890 }
891
892 if (how_far_along eq 15)
893 {
894 sleep 60
895 message timer_text 300
896 sleep 360
897 message timer_text2 240
898 }
899}
900
901############################
902# warn about alarm console #
903############################
904func void alarm_warning(string ai_name)
905{
906 if(count_alarm eq 0)
907 {
908 message alarm_warn 300
909 }
910 count_alarm = 1;
911}
912
913func void alarm_warningb(string ai_name)
914{
915 count_alarm = 0;
916}
917
918#############################
919# consoles and compass hint #
920#############################
921func void console_jump(string ai_name)
922{
923 text_console level_1g
924 console_reset 18
925}
926
927func void console_escape(string ai_name)
928{
929 text_console level_1h
930 console_reset 17
931}
932
933func void console_attack(string ai_name)
934{
935 text_console level_1i
936 console_reset 16
937}
938
939func void console_flash(string ai_name)
940{
941 text_console level_1j
942 console_reset 15
943}
944
945func void console_throw(string ai_name)
946{
947 text_console level_1k
948 console_reset 14
949}
950
951func void console_block(string ai_name)
952{
953 text_console level_1l
954 console_reset 13
955}
956
957func void t77(string ai_name)
958{
959 message xarrow 400
960}
Note: See TracBrowser for help on using the repository browser.