1 | ################# |
---|
2 | ### VARIABLES ### |
---|
3 | ################# |
---|
4 | |
---|
5 | var int var_counter = 0; |
---|
6 | var int var_counter2 = 0; |
---|
7 | |
---|
8 | ############ |
---|
9 | ### MAIN ### |
---|
10 | ############ |
---|
11 | |
---|
12 | func void main(void) |
---|
13 | { |
---|
14 | gl_fog_red = 0 |
---|
15 | gl_fog_blue = 0 |
---|
16 | gl_fog_green = 0 |
---|
17 | gl_fog_start = .995 |
---|
18 | gs_farclipplane_set 5000 |
---|
19 | ui_suppress_prompt = 1 |
---|
20 | chr_auto_aim_dist = 0 |
---|
21 | start |
---|
22 | } |
---|
23 | |
---|
24 | ############# |
---|
25 | ### START ### |
---|
26 | ############# |
---|
27 | |
---|
28 | func void start(string ai_name) |
---|
29 | { |
---|
30 | fork deactivate_stuff |
---|
31 | if(save_point eq 0) save_point = 1 |
---|
32 | if(save_point eq 1) fork intro |
---|
33 | if(save_point eq 2) restore_game |
---|
34 | if(save_point eq 3) restore_game |
---|
35 | if(save_point eq 4) restore_game |
---|
36 | sleep 5 |
---|
37 | fork sp_all |
---|
38 | } |
---|
39 | |
---|
40 | func void deactivate_stuff(void) |
---|
41 | { |
---|
42 | #not used |
---|
43 | trigvolume_enable t86 0 |
---|
44 | trigvolume_enable trigger_volume_99 0 |
---|
45 | #used |
---|
46 | env_show 97 0 |
---|
47 | env_show 98 0 |
---|
48 | env_show 321 0 |
---|
49 | env_show 322 0 |
---|
50 | env_show 323 0 |
---|
51 | env_show 324 0 |
---|
52 | env_show 325 0 |
---|
53 | env_show 398 0 |
---|
54 | env_show 601 0 |
---|
55 | env_show 602 0 |
---|
56 | trig_deactivate 1 |
---|
57 | trig_deactivate 2 |
---|
58 | trig_deactivate 3 |
---|
59 | trig_deactivate 4 |
---|
60 | trig_deactivate 5 |
---|
61 | trig_deactivate 6 |
---|
62 | trig_deactivate 7 |
---|
63 | trig_deactivate 8 |
---|
64 | trig_deactivate 9 |
---|
65 | trig_deactivate 10 |
---|
66 | trig_deactivate 60 |
---|
67 | trig_deactivate 61 |
---|
68 | trig_deactivate 62 |
---|
69 | trig_deactivate 63 |
---|
70 | trig_deactivate 64 |
---|
71 | trig_deactivate 65 |
---|
72 | trig_deactivate 70 |
---|
73 | trig_deactivate 71 |
---|
74 | trig_deactivate 72 |
---|
75 | trig_deactivate 73 |
---|
76 | trig_deactivate 74 |
---|
77 | trig_deactivate 75 |
---|
78 | trig_deactivate 98 |
---|
79 | trig_deactivate 99 |
---|
80 | trig_deactivate 100 |
---|
81 | trig_deactivate 101 |
---|
82 | trig_deactivate 302 |
---|
83 | trig_deactivate 303 |
---|
84 | trig_deactivate 310 |
---|
85 | trig_deactivate 320 |
---|
86 | trig_deactivate 400 |
---|
87 | trig_deactivate 500 |
---|
88 | trig_deactivate 501 |
---|
89 | trig_deactivate 502 |
---|
90 | trig_deactivate 503 |
---|
91 | trig_deactivate 510 |
---|
92 | trig_deactivate 511 |
---|
93 | trig_deactivate 512 |
---|
94 | trig_deactivate 520 |
---|
95 | trig_deactivate 521 |
---|
96 | trig_deactivate 522 |
---|
97 | trigvolume_enable z_40t 0 |
---|
98 | trigvolume_enable zz_40t 0 |
---|
99 | trigvolume_enable zzz_40t 0 |
---|
100 | trigvolume_enable zzzz_40t 0 |
---|
101 | trigvolume_enable tv_61t 0 |
---|
102 | trigvolume_enable trigger_volume_81 0 |
---|
103 | } |
---|
104 | |
---|
105 | func void you_lose(string ai_name) |
---|
106 | { |
---|
107 | fade_out 0 0 0 30 |
---|
108 | sleep 30 |
---|
109 | lose |
---|
110 | } |
---|
111 | |
---|
112 | #################################### |
---|
113 | ### SEVERAL TIMES USED FUNCTIONS ### |
---|
114 | #################################### |
---|
115 | |
---|
116 | func void sp_all(void) |
---|
117 | { |
---|
118 | co_message_display = 0 |
---|
119 | if(save_point eq 1) save_game 1 autosave |
---|
120 | if(save_point eq 2) save_game 2 autosave |
---|
121 | if(save_point eq 3) save_game 3 autosave |
---|
122 | if(save_point eq 4) save_game 4 autosave |
---|
123 | sleep 180 |
---|
124 | co_message_display = 1 |
---|
125 | } |
---|
126 | |
---|
127 | func void remove_ai(void) |
---|
128 | { |
---|
129 | ai2_kill |
---|
130 | sleep 60 |
---|
131 | powerup_reset |
---|
132 | weapon_reset |
---|
133 | sleep 240 |
---|
134 | corpse_reset |
---|
135 | } |
---|
136 | |
---|
137 | func void music_stop(void) |
---|
138 | { |
---|
139 | sound_music_stop mus_asianb |
---|
140 | sound_music_stop mus_pursuit |
---|
141 | sound_music_stop mus_om01 |
---|
142 | } |
---|
143 | |
---|
144 | #tv86 to tv97 |
---|
145 | func void fire_damage(string ai_name) |
---|
146 | { |
---|
147 | chr_poison(ai_name, 5, 30, 30); |
---|
148 | } |
---|
149 | |
---|
150 | ########## |
---|
151 | ### SP1 ### |
---|
152 | ########## |
---|
153 | |
---|
154 | ### GARAGE - GROUND FLOOR ### |
---|
155 | |
---|
156 | func void intro(void) |
---|
157 | { |
---|
158 | env_show 99 1 |
---|
159 | env_show 101 1 |
---|
160 | env_show 103 1 |
---|
161 | env_show 104 1 |
---|
162 | env_show 105 1 |
---|
163 | env_show 106 1 |
---|
164 | env_show 107 1 |
---|
165 | env_show 108 1 |
---|
166 | env_show 110 1 |
---|
167 | env_show 111 1 |
---|
168 | env_show 112 1 |
---|
169 | env_show 321 1 |
---|
170 | env_show 322 1 |
---|
171 | env_show 323 1 |
---|
172 | env_show 324 1 |
---|
173 | env_show 325 1 |
---|
174 | env_shade 321 325 .6 .6 .6 |
---|
175 | env_show 444 1 |
---|
176 | ai2_spawn lobby_striker_01 |
---|
177 | ai2_spawn lobby_striker_02 |
---|
178 | ai2_spawn lobby_striker_03 |
---|
179 | playback 0 IntroKonoko |
---|
180 | particle smoke do start |
---|
181 | particle security_locklight01 do start |
---|
182 | particle LobbyWall do explode |
---|
183 | objective_set 1 silent |
---|
184 | target_set 323 30 |
---|
185 | sleep 1 |
---|
186 | sound_dialog_play c07_22_01konoko |
---|
187 | sound_music_start mus_asianb |
---|
188 | } |
---|
189 | |
---|
190 | #tv9 - left ramp between ground floor and 1st floor |
---|
191 | func void spawnG3_11(string ai_name) |
---|
192 | { |
---|
193 | ai2_spawn garage_striker_07 |
---|
194 | ai2_passive garage_striker_07 1 |
---|
195 | ai2_spawn garage_striker_08 |
---|
196 | playback garage_striker_07 garage_taunt |
---|
197 | ai2_passive garage_striker_07 0 |
---|
198 | } |
---|
199 | |
---|
200 | #tv12 - left ramp between ground floor and 1st floor, after tv9 |
---|
201 | func void killG2_08(string ai_name) |
---|
202 | { |
---|
203 | trigvolume_enable trigger_volume_G2_08 0 |
---|
204 | } |
---|
205 | |
---|
206 | #tv7 - right ramp between ground floor and 1st floor |
---|
207 | func void spawnG2_7(string ai_name) |
---|
208 | { |
---|
209 | ai2_spawn garage_striker_01 |
---|
210 | ai2_spawn garage_striker_02 |
---|
211 | } |
---|
212 | |
---|
213 | #tv13 - right ramp between ground floor and 1st floor, after tv7 |
---|
214 | func void killG2_10(string ai_name) |
---|
215 | { |
---|
216 | trigvolume_enable trigger_volume_G2_10 0 |
---|
217 | } |
---|
218 | |
---|
219 | #tv50 - ground floor, crossing from garage to building (big box in front of door 4 and 7) |
---|
220 | func void tv_50(string ai_name) |
---|
221 | { |
---|
222 | ai2_spawn l_s99 |
---|
223 | ai2_spawn l_s98 |
---|
224 | music_stop |
---|
225 | } |
---|
226 | |
---|
227 | ### GARAGE - 1ST FLOOR ### |
---|
228 | |
---|
229 | #tv10 - left ramp between 1st floor and 2nd floor |
---|
230 | func void spawnG3_12(string ai_name) |
---|
231 | { |
---|
232 | if (var_counter eq 0) |
---|
233 | { |
---|
234 | ai2_spawn garage_striker_09 |
---|
235 | ai2_spawn garage_striker_10 |
---|
236 | } |
---|
237 | if (var_counter ne 0) |
---|
238 | { |
---|
239 | ai2_spawn garage_striker_09 |
---|
240 | } |
---|
241 | } |
---|
242 | |
---|
243 | #tv15 - left ramp between 1st floor and 2nd floor, after tv10 |
---|
244 | func void killG3_12(string ai_name) |
---|
245 | { |
---|
246 | trigvolume_enable trigger_volume_G3_12 0 |
---|
247 | } |
---|
248 | |
---|
249 | #tv8 - right ramp between 1st floor and 2nd floor |
---|
250 | func void spawnG3_8(string ai_name) |
---|
251 | { |
---|
252 | if (var_counter eq 0) |
---|
253 | { |
---|
254 | ai2_spawn garage_striker_03 |
---|
255 | ai2_makeignoreplayer garage_striker_03 1 |
---|
256 | ai2_spawn garage_striker_04 |
---|
257 | ai2_spawn garage_striker_05 |
---|
258 | ai2_lookatme garage_striker_04 |
---|
259 | ai2_lookatme garage_striker_05 |
---|
260 | playback_block garage_striker_03 garage_jump |
---|
261 | ai2_makeignoreplayer garage_striker_03 0 |
---|
262 | } |
---|
263 | if (var_counter ne 0) |
---|
264 | { |
---|
265 | ai2_spawn garage_striker_03 |
---|
266 | ai2_makeignoreplayer garage_striker_03 1 |
---|
267 | playback_block garage_striker_03 garage_jump |
---|
268 | ai2_makeignoreplayer garage_striker_03 0 |
---|
269 | } |
---|
270 | } |
---|
271 | |
---|
272 | #tv14 - right ramp between 1st floor and 2nd floor, after tv8 |
---|
273 | func void killG3_11(string ai_name) |
---|
274 | { |
---|
275 | trigvolume_enable trigger_volume_G3_11 0 |
---|
276 | } |
---|
277 | |
---|
278 | #tv21 - 1st floor, crossing from garage to building (big box in front of door 5 and 8) |
---|
279 | func void g_23(string ai_name) |
---|
280 | { |
---|
281 | ai2_spawn L2s_01 |
---|
282 | ai2_spawn L2s_02 |
---|
283 | ai2_spawn L2s_03 |
---|
284 | ai2_spawn L2tctf_01 |
---|
285 | ai2_spawn L2tctf_02 |
---|
286 | music_stop |
---|
287 | trigvolume_enable trigger_volume_w_39 0 |
---|
288 | } |
---|
289 | |
---|
290 | ##tv31 - 1st floor, crossing from garage to building (box in front of door 2) |
---|
291 | func void p_31(string ai_name) |
---|
292 | { |
---|
293 | trigvolume_enable trigger_volume_L2_4 1 |
---|
294 | } |
---|
295 | |
---|
296 | ### GARAGE - 2ND FLOOR ### |
---|
297 | |
---|
298 | #tv11 - 2nd floor, crossing from garage to building (big box in front of door 6 and 9) |
---|
299 | func void c_13(string ai_name) |
---|
300 | { |
---|
301 | ai2_spawn lobby_striker_20 |
---|
302 | ai2_spawn lobby_striker_21 |
---|
303 | ai2_spawn lobby_fodder01 |
---|
304 | ai2_spawn lobby_striker_05 |
---|
305 | trigvolume_enable vv_38t 0 |
---|
306 | trigvolume_enable a_18t 0 |
---|
307 | music_stop |
---|
308 | } |
---|
309 | |
---|
310 | ### ENTRANCE HALL - GROUND FLOOR ### |
---|
311 | |
---|
312 | #tv6 - in front of door 10 |
---|
313 | func void spawnL1_6(string ai_name) |
---|
314 | { |
---|
315 | ai2_spawn lobby_striker_06 |
---|
316 | trigvolume_enable tv_50t 0 |
---|
317 | } |
---|
318 | |
---|
319 | #tv38 - after the passageway to the entrance hall with the van |
---|
320 | func void x_05(string ai_name) |
---|
321 | { |
---|
322 | ai2_spawn l_c01 |
---|
323 | ai2_lookatme l_c01 |
---|
324 | ai2_passive l_c01 1 |
---|
325 | playback l_c01 lobby_runout |
---|
326 | ai2_passive l_c01 0 |
---|
327 | trigvolume_enable trigger_volume_L1_6_9 0 |
---|
328 | } |
---|
329 | |
---|
330 | #tv39 - in the passageway from the entrance hall with the van (near door 19) |
---|
331 | func void y_32(string ai_name) |
---|
332 | { |
---|
333 | ai2_spawn l_t01 |
---|
334 | playback l_t01 lobby_backroll |
---|
335 | sleep 15 |
---|
336 | ai2_spawn l_s02 |
---|
337 | ai2_spawn l_s03 |
---|
338 | trigvolume_enable tv_47t 0 |
---|
339 | } |
---|
340 | |
---|
341 | #tv46 - after door 29 |
---|
342 | func void tv_46(string ai_name) |
---|
343 | { |
---|
344 | ai2_spawn l_s24 |
---|
345 | ai2_spawn l_t23 |
---|
346 | trigvolume_enable tv_47t 1 |
---|
347 | ai2_dopath l_t01 l_t01_06 |
---|
348 | ai2_setjobstate l_t01 |
---|
349 | } |
---|
350 | |
---|
351 | #tv47 - in some distance after door 22 |
---|
352 | func void tv_47(string ai_name) |
---|
353 | { |
---|
354 | ai2_spawn l_s27 |
---|
355 | } |
---|
356 | |
---|
357 | #tv66 - near door 26 and 31 |
---|
358 | func void room1_stop(string ai_name) |
---|
359 | { |
---|
360 | particle room1 do stop |
---|
361 | } |
---|
362 | |
---|
363 | #tv67 - near door 26 and 31, after tv66 |
---|
364 | func void room1_start(string ai_name) |
---|
365 | { |
---|
366 | particle room1 do start |
---|
367 | particle smoke do start |
---|
368 | } |
---|
369 | |
---|
370 | #tv45 - after door 31 |
---|
371 | func void tv_45(string ai_name) |
---|
372 | { |
---|
373 | ai2_spawn a_v1 |
---|
374 | ai2_spawn l_s22 |
---|
375 | ai2_spawn l_s23 |
---|
376 | ai2_dopath l_t01 l_t01_03 |
---|
377 | ai2_setjobstate l_t01 |
---|
378 | ai2_dopath l_t23 l_t23_05 |
---|
379 | ai2_setjobstate l_t23 |
---|
380 | } |
---|
381 | |
---|
382 | #tv44 - after door 26 |
---|
383 | func void tv_44(string ai_name) |
---|
384 | { |
---|
385 | ai2_spawn l_c10 |
---|
386 | ai2_dopath l_t01 l_t01_02 |
---|
387 | ai2_setjobstate l_t01 |
---|
388 | ai2_dopath l_t23 l_t23_03 |
---|
389 | ai2_setjobstate l_t23 |
---|
390 | } |
---|
391 | |
---|
392 | #console1 |
---|
393 | func void goAttack(string ai_name) |
---|
394 | { |
---|
395 | music_stop |
---|
396 | trigvolume_enable tv_57t 1 |
---|
397 | chr_delete l_c01 |
---|
398 | chr_delete l_s98 |
---|
399 | chr_delete l_s99 |
---|
400 | chr_delete lobby_striker_01 |
---|
401 | chr_delete lobby_striker_02 |
---|
402 | chr_delete garage_striker_01 |
---|
403 | chr_delete garage_striker_02 |
---|
404 | chr_delete garage_striker_03 |
---|
405 | chr_delete garage_striker_04 |
---|
406 | chr_delete garage_striker_05 |
---|
407 | chr_delete garage_striker_06 |
---|
408 | chr_delete garage_striker_07 |
---|
409 | chr_delete garage_striker_08 |
---|
410 | chr_delete garage_striker_09 |
---|
411 | chr_delete garage_striker_10 |
---|
412 | ai2_spawn tanker_stairdoor |
---|
413 | particle stair_lock_locklight01 do start |
---|
414 | objective_set 2 silent |
---|
415 | target_set 1111 30 |
---|
416 | sound_dialog_play c00_01_27shinatama |
---|
417 | } |
---|
418 | |
---|
419 | #tv57 - huge box after door 19, 20 and 24 |
---|
420 | func void tv57(string ai_name) |
---|
421 | { |
---|
422 | sound_music_start mus_pursuit 0 |
---|
423 | sound_music_volume mus_pursuit 0.75 3.0 |
---|
424 | target_set 59 30 |
---|
425 | sleep 180 |
---|
426 | sound_dialog_play c00_01_105shinatama |
---|
427 | } |
---|
428 | |
---|
429 | ### Pathfinding ### |
---|
430 | |
---|
431 | #lose func of l_s02 and l_s03 |
---|
432 | func void unlock_follow(void) |
---|
433 | { |
---|
434 | var_counter2 = var_counter2 + 1 |
---|
435 | if(var_counter2 eq 2) |
---|
436 | { |
---|
437 | trigvolume_enable z_40t 1 |
---|
438 | trigvolume_enable zz_40t 1 |
---|
439 | trigvolume_enable zzz_40t 1 |
---|
440 | trigvolume_enable zzzz_40t 1 |
---|
441 | trigvolume_enable tv_61t 1 |
---|
442 | } |
---|
443 | } |
---|
444 | |
---|
445 | func void patrolscript2222(void) |
---|
446 | { |
---|
447 | ai2_lookatchar l_t01 char_0 |
---|
448 | ai2_lookatchar l_t23 char_0 |
---|
449 | } |
---|
450 | |
---|
451 | #tv42 - in front of door 19 |
---|
452 | func void z04(string ai_name) |
---|
453 | { |
---|
454 | ai2_dopath l_t01 l_t01_06 |
---|
455 | ai2_setjobstate l_t01 |
---|
456 | ai2_dopath l_t23 l_t23_06 |
---|
457 | ai2_setjobstate l_t23 |
---|
458 | } |
---|
459 | |
---|
460 | #tv41 - after door 22 |
---|
461 | func void z02(string ai_name) |
---|
462 | { |
---|
463 | ai2_dopath l_t01 l_t01_04 |
---|
464 | ai2_setjobstate l_t01 |
---|
465 | ai2_dopath l_t23 l_t23_02 |
---|
466 | ai2_setjobstate l_t23 |
---|
467 | } |
---|
468 | |
---|
469 | #tv40 - near door 29 |
---|
470 | func void z03(string ai_name) |
---|
471 | { |
---|
472 | ai2_dopath l_t01 l_t01_05 |
---|
473 | ai2_setjobstate l_t01 |
---|
474 | ai2_dopath l_t23 l_t23_01 |
---|
475 | ai2_setjobstate l_t23 |
---|
476 | } |
---|
477 | |
---|
478 | #tv43 - in front of door 26 and 31, after tv67 |
---|
479 | func void z01(string ai_name) |
---|
480 | { |
---|
481 | ai2_dopath l_t01 l_t01_01 |
---|
482 | ai2_setjobstate l_t01 |
---|
483 | ai2_dopath l_t23 l_t23_04 |
---|
484 | ai2_setjobstate l_t23 |
---|
485 | } |
---|
486 | |
---|
487 | #tv101 - staircase, between ground floor and 1st floor |
---|
488 | func void z05(string ai_name) |
---|
489 | { |
---|
490 | ai2_dopath l_t01 l_t01_07 |
---|
491 | ai2_setjobstate l_t01 |
---|
492 | ai2_dopath l_t23 l_t23_07 |
---|
493 | ai2_setjobstate l_t23 |
---|
494 | } |
---|
495 | |
---|
496 | ### ENTRANCE HALL - 1ST FLOOR ### |
---|
497 | |
---|
498 | #tv37 - after door 20 |
---|
499 | func void w_39(string ai_name) |
---|
500 | { |
---|
501 | ai2_spawn s2_t01 |
---|
502 | ai2_spawn s2_t02 |
---|
503 | ai2_spawn s2_s01 |
---|
504 | ai2_spawn s2_s02 |
---|
505 | ai2_spawn s2_s03 |
---|
506 | ai2_spawn s2_s05 |
---|
507 | ai2_spawn s2_t05 |
---|
508 | trigvolume_enable g_23t 0 |
---|
509 | } |
---|
510 | |
---|
511 | #tv34 - after the passageway to the footbridge (left side after door 20) |
---|
512 | func void u_36(string ai_name) |
---|
513 | { |
---|
514 | ai2_spawn cat1_02 |
---|
515 | trigvolume_enable trigger_volume_L2_4 0 |
---|
516 | } |
---|
517 | |
---|
518 | #tv5 - other side of the footbridge |
---|
519 | func void spawnL2_4(string ai_name) |
---|
520 | { |
---|
521 | ai2_spawn lobby_striker_04 |
---|
522 | playback lobby_striker_04 lobbystriker_roll |
---|
523 | trigvolume_enable u_36t 0 |
---|
524 | } |
---|
525 | |
---|
526 | #tv30 - next to tv5, staircase between 1st floor and 2nd floor (func: p_31t); not used |
---|
527 | |
---|
528 | #tv23 - in some distance after door 98 |
---|
529 | func void i_24(string ai_name) |
---|
530 | { |
---|
531 | trigvolume_enable j_25t 0 |
---|
532 | trigvolume_enable h_06t 0 |
---|
533 | } |
---|
534 | |
---|
535 | #tv24 - after tv23 |
---|
536 | func void j_25(string ai_name) |
---|
537 | { |
---|
538 | ai2_spawn L2s_11 |
---|
539 | } |
---|
540 | |
---|
541 | #tv22 - after tv24 |
---|
542 | func void h_06(string ai_name) |
---|
543 | { |
---|
544 | ai2_spawn L2s_10 |
---|
545 | ai2_spawn Ls_15 |
---|
546 | ai2_spawn Ltctf_55 |
---|
547 | ai2_dopath L2tctf_01 patrol_L2_13 |
---|
548 | ai2_dopath L2tctf_02 patrol_L2_13 |
---|
549 | } |
---|
550 | |
---|
551 | #tv33 - in some distance near door 33 |
---|
552 | func void t_35(string ai_name) |
---|
553 | { |
---|
554 | trigvolume_enable s_34t 0 |
---|
555 | } |
---|
556 | |
---|
557 | #tv32 - after tv 33 |
---|
558 | func void s_34(string ai_name) |
---|
559 | { |
---|
560 | ai2_spawn Lcom_01 |
---|
561 | } |
---|
562 | |
---|
563 | #tv27 - after door 33 |
---|
564 | func void m_28(string ai_name) |
---|
565 | { |
---|
566 | ai2_spawn Lv_40 |
---|
567 | ai2_spawn Lv_41 |
---|
568 | ai2_spawn Lc_43 |
---|
569 | ai2_spawn Ls_44 |
---|
570 | trigvolume_enable s_34t 1 |
---|
571 | } |
---|
572 | |
---|
573 | #called up, after you've talked to the female cop |
---|
574 | func void femcop_holster(string ai_name) |
---|
575 | { |
---|
576 | chr_forceholster Lc_43 1 |
---|
577 | } |
---|
578 | |
---|
579 | #tv29 - after door 37 |
---|
580 | func void o_30(string ai_name) |
---|
581 | { |
---|
582 | ai2_spawn Ls_60 |
---|
583 | ai2_spawn a_v2 |
---|
584 | } |
---|
585 | |
---|
586 | #tv28 - after door 32 |
---|
587 | func void n_29(string ai_name) |
---|
588 | { |
---|
589 | ai2_spawn Lc_50 |
---|
590 | ai2_spawn Ls_51 |
---|
591 | ai2_spawn Ls_12 |
---|
592 | } |
---|
593 | |
---|
594 | ### Pathfinding ### |
---|
595 | |
---|
596 | #tv61 - big box in front of door 98 |
---|
597 | func void z06(string ai_name) |
---|
598 | { |
---|
599 | ai2_dopath l_t01 l_t01_08 |
---|
600 | ai2_setjobstate l_t01 |
---|
601 | ai2_dopath l_t23 l_t23_08 |
---|
602 | ai2_setjobstate l_t23 |
---|
603 | } |
---|
604 | |
---|
605 | ### ENTRANCE HALL - 2ND FLOOR ### |
---|
606 | |
---|
607 | #tv20 - in front of door 24 |
---|
608 | func void f_22(string ai_name) |
---|
609 | { |
---|
610 | ai2_spawn lobby_striker_05 |
---|
611 | trigvolume_enable vv_38t 0 |
---|
612 | ai2_spawn lobby_striker_20 |
---|
613 | ai2_spawn lobby_fodder01 |
---|
614 | ai2_spawn lobby_striker_21 |
---|
615 | } |
---|
616 | |
---|
617 | #tv18 - after door 24 |
---|
618 | func void d_20(string ai_name) |
---|
619 | { |
---|
620 | ai2_spawn l2_s46 |
---|
621 | ai2_spawn l2_s44 |
---|
622 | playback_block l2_s44 lobby_roll3 |
---|
623 | } |
---|
624 | |
---|
625 | #tv35 - after the passageway to the footbridge (left side after door 24) |
---|
626 | func void v_37(string ai_name) |
---|
627 | { |
---|
628 | ai2_spawn cat1_01 |
---|
629 | trigvolume_enable vv_38t 0 |
---|
630 | } |
---|
631 | |
---|
632 | #tv36 - other side of the footbridge |
---|
633 | func void vv_38(string ai_name) |
---|
634 | { |
---|
635 | ai2_spawn lobby_striker_05 |
---|
636 | ai2_spawn lobby_striker_20 |
---|
637 | ai2_spawn lobby_striker_21 |
---|
638 | ai2_spawn lobby_fodder01 |
---|
639 | trigvolume_enable v_37t 0 |
---|
640 | } |
---|
641 | |
---|
642 | #tv19 - entrance to the room on the right side near door 24 |
---|
643 | func void e_21(string ai_name) |
---|
644 | { |
---|
645 | ai2_spawn lobby_striker_34 |
---|
646 | ai2_spawn lobby_victim05 |
---|
647 | ai2_spawn lobby_victim06 |
---|
648 | trigvolume_enable l_27t 0 |
---|
649 | } |
---|
650 | |
---|
651 | #tv25 - in the room, around the place where the female civ gives you the w6_vdg |
---|
652 | func void k_26(string ai_name) |
---|
653 | { |
---|
654 | trigvolume_enable l_27t 1 |
---|
655 | } |
---|
656 | |
---|
657 | #tv26 - at the same place as tv19 (entrance to the room) |
---|
658 | func void l_27(string ai_name) |
---|
659 | { |
---|
660 | ai2_spawn L3s_40 |
---|
661 | ai2_spawn L3s_41 |
---|
662 | } |
---|
663 | |
---|
664 | #tv68 - in front of door 99 |
---|
665 | func void a_18(string ai_name) |
---|
666 | { |
---|
667 | trigvolume_enable b_19t 0 |
---|
668 | trigvolume_enable c_13t 0 |
---|
669 | } |
---|
670 | |
---|
671 | #tv17 - after door 99, after tv68 |
---|
672 | func void b_19(string ai_name) |
---|
673 | { |
---|
674 | ai2_spawn lobby_striker_30 |
---|
675 | ai2_spawn lobby_striker_31 |
---|
676 | playback lobby_striker_31 lobby_roll2 |
---|
677 | trigvolume_enable d_20t 0 |
---|
678 | } |
---|
679 | |
---|
680 | #tv69 - near door 40, in front of tv16 |
---|
681 | func void room2_stop(string ai_name) |
---|
682 | { |
---|
683 | particle room2 stop |
---|
684 | } |
---|
685 | |
---|
686 | #tv16 - near door 40, after tv69 |
---|
687 | func void room2_start(string ai_name) |
---|
688 | { |
---|
689 | particle room2 start |
---|
690 | } |
---|
691 | |
---|
692 | #tv49 - after door 40 |
---|
693 | func void tv_49(string ai_name) |
---|
694 | { |
---|
695 | ai2_spawn l2_s47 |
---|
696 | } |
---|
697 | |
---|
698 | #tv71 - near door 38, in front of tv70 |
---|
699 | func void room3_stop(string ai_name) |
---|
700 | { |
---|
701 | particle room3 stop |
---|
702 | } |
---|
703 | |
---|
704 | #tv70 - near door 38, after tv71 |
---|
705 | func void room3_start(string ai_name) |
---|
706 | { |
---|
707 | particle room3 start |
---|
708 | } |
---|
709 | |
---|
710 | #tv48 - after door 38 |
---|
711 | func void tv_48(string ai_name) |
---|
712 | { |
---|
713 | ai2_spawn l2_s46 |
---|
714 | } |
---|
715 | |
---|
716 | #console2 |
---|
717 | func void floor4_lock(void) |
---|
718 | { |
---|
719 | music_stop |
---|
720 | particle floor4_lock_locklight01 do start |
---|
721 | target_set 60 30 |
---|
722 | sound_dialog_play c00_01_28shinatama |
---|
723 | } |
---|
724 | |
---|
725 | ### ENTRANCE HALL - 3RD FLOOR ### |
---|
726 | |
---|
727 | #tv51 - after door 28 |
---|
728 | func void tv_51(string ai_name) |
---|
729 | { |
---|
730 | ai2_spawn l4_red1 |
---|
731 | ai2_spawn l4_t1 |
---|
732 | ai2_spawn l4_s1 |
---|
733 | ai2_spawn l4_s67 |
---|
734 | ai2_spawn l4_t2 |
---|
735 | ai2_spawn l4_s2 |
---|
736 | ai2_spawn l4_s3 |
---|
737 | ai2_spawn l4_f1 |
---|
738 | ai2_spawn l4_f2 |
---|
739 | ai2_spawn l4_f3 |
---|
740 | ai2_spawn l4_c66 |
---|
741 | ai2_kill l4_f1 |
---|
742 | ai2_kill l4_f2 |
---|
743 | ai2_kill l4_f3 |
---|
744 | ai2_kill l4_c66 |
---|
745 | } |
---|
746 | |
---|
747 | #tv79 - after door 41 |
---|
748 | func void music_kidnap(void) |
---|
749 | { |
---|
750 | sleep 1 |
---|
751 | sound_music_start mus_om01 0.0 |
---|
752 | sound_music_volume mus_om01 0.75 3.0 |
---|
753 | #this music stopped in ta2_54 script |
---|
754 | } |
---|
755 | |
---|
756 | ########## |
---|
757 | ### SP2 ### |
---|
758 | ########## |
---|
759 | |
---|
760 | ### GROUND FLOOR ### |
---|
761 | |
---|
762 | #tv58 - after the end of the stairs |
---|
763 | func void tv_58(string ai_name) |
---|
764 | { |
---|
765 | if(save_point eq 2) music_kidnap |
---|
766 | else save_game 2 autosave |
---|
767 | fork remove_ai |
---|
768 | trigvolume_enable tv_58t 0 |
---|
769 | trigvolume_enable trigger_volume_80 0 |
---|
770 | door_lock 41 |
---|
771 | particle security_locklight01 do stop |
---|
772 | objective_set 3 silent |
---|
773 | target_set 60 30 |
---|
774 | var_counter = 0 |
---|
775 | } |
---|
776 | |
---|
777 | #tv52 - in front of door 42 |
---|
778 | func void tv_52(string ai_name) |
---|
779 | { |
---|
780 | particle smoke do stop |
---|
781 | ai2_spawn a_t03 |
---|
782 | ai2_passive a_t03 1 |
---|
783 | playback a_t03 atrium_run |
---|
784 | sleep 7 |
---|
785 | ai2_spawn a_t06 |
---|
786 | sleep 7 |
---|
787 | ai2_spawn a_s02 |
---|
788 | sleep 7 |
---|
789 | ai2_spawn a_s03 |
---|
790 | sleep 7 |
---|
791 | ai2_spawn a_red1 |
---|
792 | ai2_passive a_t03 0 |
---|
793 | chr_set_health a_t05 900 |
---|
794 | chr_set_health a_t06 900 |
---|
795 | chr_set_health a_s02 900 |
---|
796 | chr_set_health a_s03 900 |
---|
797 | } |
---|
798 | |
---|
799 | #tv72 - at the beginning of the stairs to the 2nd floor |
---|
800 | func void room4_start(string ai_name) |
---|
801 | { |
---|
802 | particle room4 start |
---|
803 | } |
---|
804 | |
---|
805 | ### 2ND FLOOR ### |
---|
806 | |
---|
807 | #tv53 - at the end of the stairs to the 2nd floor |
---|
808 | func void ta_53(string ai_name) |
---|
809 | { |
---|
810 | ai2_spawn a_t05 |
---|
811 | ai2_dopath a_s03 patrol_7043 |
---|
812 | ai2_setjobstate a_s03 |
---|
813 | ai2_dopath a_s02 patrol_7030 |
---|
814 | ai2_setjobstate a_s02 |
---|
815 | ai2_dopath a_t06 patrol_7034 |
---|
816 | ai2_setjobstate a_t06 |
---|
817 | ai2_dopath a_t05 patrol_7042 |
---|
818 | ai2_setjobstate a_t05 |
---|
819 | chr_set_health a_t05 40 |
---|
820 | chr_set_health a_t06 30 |
---|
821 | chr_set_health a_s02 80 |
---|
822 | chr_set_health a_s03 80 |
---|
823 | } |
---|
824 | |
---|
825 | ### 1ST FLOOR ### |
---|
826 | |
---|
827 | #tv56 - at the end of the gangway from the 2nd floor to the 1st floor |
---|
828 | func void ta_53b(string ai_name) |
---|
829 | { |
---|
830 | chr_set_health a_t05 80 |
---|
831 | chr_set_health a_t06 60 |
---|
832 | chr_set_health a_s02 70 |
---|
833 | chr_set_health a_s03 80 |
---|
834 | } |
---|
835 | |
---|
836 | #tv75 - after the end of the gangway from the 2nd floor to the 1st floor |
---|
837 | func void room6_start(string ai_name) |
---|
838 | { |
---|
839 | particle room6 do start |
---|
840 | } |
---|
841 | |
---|
842 | #tv83 - after the middle of the floor, in front of tv73 |
---|
843 | func void room4_stop(string ai_name) |
---|
844 | { |
---|
845 | particle room4 do stop |
---|
846 | } |
---|
847 | |
---|
848 | #tv73 - after tv83 (func: room3_stop, already used above) |
---|
849 | |
---|
850 | ### 3RD FLOOR ### |
---|
851 | |
---|
852 | #tv59 - after the end of the gangway from the 2nd floor to the 3rd floor |
---|
853 | func void room5_stop(string ai_name) |
---|
854 | { |
---|
855 | particle room5 stop |
---|
856 | } |
---|
857 | |
---|
858 | #tv81 - in front of tv74 |
---|
859 | func void room5_start(string ai_name) |
---|
860 | { |
---|
861 | particle room5 start |
---|
862 | } |
---|
863 | |
---|
864 | #tv74 - in front of tv |
---|
865 | func void room6_stop(string ai_name) |
---|
866 | { |
---|
867 | particle room6 stop |
---|
868 | } |
---|
869 | |
---|
870 | #tv82 - in front of the beginning of the gangway from the 3rd floor to the 4th floor (func: room4_stop, already used above) |
---|
871 | |
---|
872 | ### 4TH FLOOR ### |
---|
873 | |
---|
874 | #tv98 - after the end of the gangway from the 3rd floor to the 4th floor |
---|
875 | func void new_atrium(string ai_name) |
---|
876 | { |
---|
877 | ai2_spawn a_s07 |
---|
878 | ai2_spawn a_s05 |
---|
879 | ai2_spawn a_v3 |
---|
880 | } |
---|
881 | |
---|
882 | #tv77 - complete room, which contains the console8 (func: check_death); I've disabled it |
---|
883 | |
---|
884 | ### 5TH FLOOR ### |
---|
885 | |
---|
886 | #tv54 - after the end of the gangway from the 4th floor to the 5th floor |
---|
887 | func void ta2_54(string ai_name) |
---|
888 | { |
---|
889 | ai2_spawn a2_t1 |
---|
890 | ai2_spawn a2_red1 |
---|
891 | ai2_spawn LSI |
---|
892 | ai2_kill LSI |
---|
893 | sleep 240 |
---|
894 | corpse_reset |
---|
895 | music_stop |
---|
896 | } |
---|
897 | |
---|
898 | #tv103 - the complete room, where you get the laser torch |
---|
899 | func void t103(string ai_name) |
---|
900 | { |
---|
901 | trigvolume_enable trigger_volume_103 0 |
---|
902 | if (chr_has_lsi(0)) |
---|
903 | { |
---|
904 | trigvolume_enable trigger_volume_81 1 |
---|
905 | objective_set 4 silent |
---|
906 | particle obj1 create |
---|
907 | target_set 9999 30 |
---|
908 | } |
---|
909 | else |
---|
910 | { |
---|
911 | sleep 60 |
---|
912 | trigvolume_enable trigger_volume_103 1 |
---|
913 | } |
---|
914 | } |
---|
915 | |
---|
916 | #tv80 - small flat box on the roof of the elevator |
---|
917 | func void ta_62(string ai_name) |
---|
918 | { |
---|
919 | trigvolume_enable trigger_volume_81 0 |
---|
920 | particle obj1 kill |
---|
921 | ai2_kill |
---|
922 | fade_out 0 0 0 30 |
---|
923 | sleep 30 |
---|
924 | playback 0 ElevatorEndSet |
---|
925 | fade_in 30 |
---|
926 | } |
---|
927 | |
---|
928 | ########## |
---|
929 | ### SP3 ### |
---|
930 | ########## |
---|
931 | |
---|
932 | ### GROUND FLOOR ### |
---|
933 | |
---|
934 | #tv55 - after the elevator shaft |
---|
935 | func void tsh_55(string ai_name) |
---|
936 | { |
---|
937 | if(save_point ne 3) save_game 3 autosave |
---|
938 | trigvolume_enable tsh_55t 0 |
---|
939 | ai2_spawn sh_tank1 |
---|
940 | ai2_spawn sh_red1 |
---|
941 | ai2_spawn sh_s3 |
---|
942 | ai2_spawn sh_s4 |
---|
943 | ai2_spawn sh_s4b |
---|
944 | objective_set 5 silent |
---|
945 | target_set 58 30 |
---|
946 | env_show 501 0 |
---|
947 | env_show 502 0 |
---|
948 | env_show 503 0 |
---|
949 | env_show 504 0 |
---|
950 | env_show 601 1 |
---|
951 | env_show 602 1 |
---|
952 | sleep 120 |
---|
953 | ai2_attack sh_s3 char_0 |
---|
954 | } |
---|
955 | |
---|
956 | #tv85 - at the same place as tv55 (func: s3; I've moved the save_game command to tv55, so this tv isn't any longer in use) |
---|
957 | |
---|
958 | #console3 |
---|
959 | func void shin_lock(void) |
---|
960 | { |
---|
961 | particle shin_lock_locklight01 do start |
---|
962 | particle roof_locklight01 do start |
---|
963 | } |
---|
964 | |
---|
965 | #tv104 - on the balustrade, near door 14 |
---|
966 | func void t102(string ai_name) |
---|
967 | { |
---|
968 | ai2_spawn mbo_sniper |
---|
969 | ai2_spawn mbo_target |
---|
970 | } |
---|
971 | |
---|
972 | #tv76 - staircase, platform between ground floor and 1st floor |
---|
973 | func void t62(string ai_name) |
---|
974 | { |
---|
975 | ai2_spawn sh_s1 |
---|
976 | ai2_spawn sh_s2 |
---|
977 | ai2_spawn sh_s6 |
---|
978 | } |
---|
979 | |
---|
980 | ### 1ST FLOOR ### |
---|
981 | |
---|
982 | #tv78 - staircase, platform between 1st floor and 2nd floor |
---|
983 | func void t72(string ai_name) |
---|
984 | { |
---|
985 | ai2_spawn sh_com1 |
---|
986 | ai2_spawn sh_tank2 |
---|
987 | ai2_spawn sh_s9 |
---|
988 | } |
---|
989 | |
---|
990 | ### 2ND FLOOR ### |
---|
991 | |
---|
992 | #tv101 - after door 56 |
---|
993 | func void t98(string ai_name) |
---|
994 | { |
---|
995 | ai2_spawn a_v4 |
---|
996 | } |
---|
997 | |
---|
998 | #tv60 - staircase, platform between 2nd floor and roof, in front of tv100 |
---|
999 | func void tsh_60(string ai_name) |
---|
1000 | { |
---|
1001 | ai2_spawn sh_s12 |
---|
1002 | ai2_spawn sh_s12b |
---|
1003 | helicopter |
---|
1004 | } |
---|
1005 | |
---|
1006 | func void helicopter(void) |
---|
1007 | { |
---|
1008 | obj_create 901 906 |
---|
1009 | particle EndDust create |
---|
1010 | } |
---|
1011 | |
---|
1012 | #tv100 - after tv60 |
---|
1013 | func void t100(string ai_name) |
---|
1014 | { |
---|
1015 | ai2_spawn roof_tctf1 |
---|
1016 | ai2_spawn sh_s12c |
---|
1017 | } |
---|
1018 | |
---|
1019 | ########## |
---|
1020 | ### SP4 ### |
---|
1021 | ########## |
---|
1022 | |
---|
1023 | #tv63, if you leave the building on the right side |
---|
1024 | func void tr_65(string ai_name) |
---|
1025 | { |
---|
1026 | tr_67 |
---|
1027 | } |
---|
1028 | |
---|
1029 | #tv62, if you leave the building on the left side |
---|
1030 | func void tr_64(string ai_name) |
---|
1031 | { |
---|
1032 | tr_67 |
---|
1033 | } |
---|
1034 | |
---|
1035 | #tv64 - after the window, which is behind the tctf cop |
---|
1036 | func void tr_66(string ai_name) |
---|
1037 | { |
---|
1038 | tr_67 |
---|
1039 | } |
---|
1040 | |
---|
1041 | #tv65 - after the other window on this side |
---|
1042 | func void tr_67(string ai_name) |
---|
1043 | { |
---|
1044 | trigvolume_enable tsh_60t 0 |
---|
1045 | trigvolume_enable tr_64t 0 |
---|
1046 | trigvolume_enable tr_65t 0 |
---|
1047 | trigvolume_enable tr_66t 0 |
---|
1048 | trigvolume_enable tr_67t 0 |
---|
1049 | if(save_point eq 4) helicopter |
---|
1050 | else save_game 4 autosave |
---|
1051 | objective_set 5 silent |
---|
1052 | target_set 1 0 |
---|
1053 | sleep 1 |
---|
1054 | sound_ambient_start c08_heli 1.0 |
---|
1055 | fork helicopter_sound_stop |
---|
1056 | chr_create 1019 start |
---|
1057 | chr_create 1020 start |
---|
1058 | chr_create 1021 start |
---|
1059 | chr_changeteam 1019 Syndicate |
---|
1060 | chr_changeteam 1020 Syndicate |
---|
1061 | chr_changeteam 1021 Syndicate |
---|
1062 | chr_envanim 1019 HeliOutroShinBox01 |
---|
1063 | chr_envanim 1020 HeliOutroStrBox01 |
---|
1064 | chr_envanim 1021 HeliOutroStrBox02 |
---|
1065 | chr_animate 1019 SHINATstand_heli 1000 |
---|
1066 | chr_animate 1020 STRIKEstand_heli 1000 |
---|
1067 | chr_animate 1021 STRIKEcrouch_idle 1000 |
---|
1068 | env_anim 901 906 |
---|
1069 | particle EndDust kill |
---|
1070 | ai2_spawn barabus |
---|
1071 | chr_boss_shield barabus |
---|
1072 | ai2_lookatchar barabus 0 |
---|
1073 | sound_music_start mus_asianb 0 |
---|
1074 | sound_music_volume mus_asianb 2 |
---|
1075 | sleep 600 |
---|
1076 | chr_delete 1019 |
---|
1077 | chr_delete 1020 |
---|
1078 | chr_delete 1021 |
---|
1079 | sleep 600 |
---|
1080 | obj_kill 901 906 |
---|
1081 | sound_ambient_stop c08_heli |
---|
1082 | } |
---|
1083 | |
---|
1084 | func void helicopter_sound_stop(void) |
---|
1085 | { |
---|
1086 | sleep 680 |
---|
1087 | sound_ambient_volume c08_heli 0.0 12 |
---|
1088 | } |
---|
1089 | |
---|
1090 | #tv1 and tv84 - the side after the window, which is behind the tctf cop |
---|
1091 | func void BarabasSouth(string barabas) |
---|
1092 | { |
---|
1093 | sound_ambient_start c11_10_14bar_jet |
---|
1094 | playback barabus BarabasSouth |
---|
1095 | ai2_barabbas_retrievegun barabus |
---|
1096 | sleep 60 |
---|
1097 | chr_envanim barabus BarabasSouthBox norotation |
---|
1098 | chr_animate barabus BARABsouth |
---|
1099 | } |
---|
1100 | |
---|
1101 | #tv4 - the next side, if you go anticlockwise |
---|
1102 | func void BarabasEast(string barabas) |
---|
1103 | { |
---|
1104 | sound_ambient_start c11_10_14bar_jet |
---|
1105 | playback barabus BarabasEast |
---|
1106 | ai2_barabbas_retrievegun barabus |
---|
1107 | sleep 60 |
---|
1108 | chr_envanim barabus BarabasEastBox norotation |
---|
1109 | chr_animate barabus BARABeast |
---|
1110 | } |
---|
1111 | |
---|
1112 | #tv2 - the next side, if you go anticlockwise |
---|
1113 | func void BarabasNorth(string barabas) |
---|
1114 | { |
---|
1115 | sound_ambient_start c11_10_14bar_jet |
---|
1116 | playback barabus BarabasNorth |
---|
1117 | ai2_barabbas_retrievegun barabus |
---|
1118 | sleep 60 |
---|
1119 | chr_envanim barabus BarabasNorthBox norotation |
---|
1120 | chr_animate barabus BARABnorth |
---|
1121 | } |
---|
1122 | |
---|
1123 | #tv3 - the next side, if you go anticlockwise |
---|
1124 | func void BarabasWest(string barabas) |
---|
1125 | { |
---|
1126 | sound_ambient_start c11_10_14bar_jet |
---|
1127 | playback barabus BarabasWest |
---|
1128 | ai2_barabbas_retrievegun barabus |
---|
1129 | sleep 60 |
---|
1130 | chr_envanim barabus BarabasWestBox norotation |
---|
1131 | chr_animate barabus BARABwest |
---|
1132 | } |
---|
1133 | |
---|
1134 | #lose func of barabus |
---|
1135 | func void final(void) |
---|
1136 | { |
---|
1137 | fade_out 0 0 0 30 |
---|
1138 | sleep 30 |
---|
1139 | win |
---|
1140 | } |
---|
1141 | |
---|
1142 | ##################### |
---|
1143 | ### TEXT CONSOLES ### |
---|
1144 | ##################### |
---|
1145 | |
---|
1146 | func void level_8a(void) |
---|
1147 | { |
---|
1148 | text_console level_8a |
---|
1149 | console_reset 17 |
---|
1150 | } |
---|
1151 | |
---|
1152 | func void level_8b(void) |
---|
1153 | { |
---|
1154 | text_console level_8b |
---|
1155 | console_reset 12 |
---|
1156 | } |
---|
1157 | |
---|
1158 | func void level_8c(void) |
---|
1159 | { |
---|
1160 | text_console level_8c |
---|
1161 | console_reset 14 |
---|
1162 | } |
---|
1163 | |
---|
1164 | func void level_8d(void) |
---|
1165 | { |
---|
1166 | text_console level_8d |
---|
1167 | console_reset 16 |
---|
1168 | } |
---|
1169 | |
---|
1170 | func void level_8e(void) |
---|
1171 | { |
---|
1172 | text_console level_8e |
---|
1173 | console_reset 15 |
---|
1174 | } |
---|
1175 | |
---|
1176 | func void level_8f(void) |
---|
1177 | { |
---|
1178 | text_console level_8f |
---|
1179 | console_reset 13 |
---|
1180 | } |
---|