Реально крутой скриптинг - статья 3
Автор статьи: mordvin.
14 сентября 2006.
Реально крутой скриптинг.
В этих статьях я расскажу вам, как создавать миссии и не только к GTA:VC. Для SA всё немного сложнее, но я уверен, что вы сами разберётесь. Уже была статья с сайта gtazone.ru, но 1) неудобный общий код 2) неясность того, что же именно писать в одной из меток сподвигла меня на статьи.
СТАТЬЯ 3.
Написание кода миссий.
Итак, перейдём к самому главному - что же именно писать в метке?
Код миссии. Он состоит из нескольких этапов. Этапы бывают циклическими и линейными.
Изменим код нашей миссии, добавив в него линейный этап из учебника с gtazone.ru. Там он был таким:
004F: create_thread ЈЈМой_ролик
...
:Мой_ролик
0001: wait 250 ms
016A: fade 0 () 500 ms
0001: wait 500 ms
02A3: toggle_widescreen 1 (on)
0507: set camera interference 1
015F: set_camera_position 109.3801 -815.2471 13.31329 0.0 0.0 0.0
0160: point camera 91.86213 -805.922 10.99802 2
0001: wait 500 ms
016A: fade 1 () 500 ms
0001: wait 500 ms
0460: set camera pointing time 0.0 3000
0160: point camera 117.3482 -825.7412 10.46329 1
0001: wait 3000 ms
016A: fade 0 () 500 ms
0001: wait 500 ms
0507: set camera interference 0
0247: request model #ARMY
038B: load requested models
:1
0001: wait 0 ms
00D6: if 0
0248: model #army available
004D: jump_if_false ЈЈ1
009A: 0@ = create_actor 4 #army at 109.6735 -834.5632 10.06329
0249: release model #ARMY
0211: actor 0@ walk to 116.4326 -823.2233
0159: camera_on_ped 0@ 15 2
0001: wait 250 ms
016A: fade 1 () 500 ms
:2
0001: wait 0 ms
00D6: if 0
0126: actor 0@ walking
004D: jump_if_false ЈЈ2
0372: set actor 0@ anim 17 wait state time 3000 ms
0001: wait 3200 ms
0321: kill_actor 0@
0003: shake camera 140
0001: wait 250 ms
016A: fade 0 () 500 ms
0001: wait 500 ms
02A3: toggle_widescreen 0 (off)
02EB: restore camera with jumpcut
009B: destroy actor instantly 0@
0394: play music 1
016A: fade 1 () 500 ms
0001: wait 500 ms
004E: end_thread
Игрока положим невдалеке оттуда. Загрузим модель M4. Т. к. у нас уже есть команды затемнения экрана и обездвиживания игрока, первые мы выкидываем. Убираем команды стирания модели. Специальный знак ЈЈ заменяется в миссии на Ј, метки мы тоже изменим:
0055: put_player $PLAYER_CHAR at 91.86213 -805.922 11.0
0507: set camera interference 1
015F: set_camera_position 109.3801 -815.2471 13.31329 0.0 0.0 0.0
0160: point camera 91.86213 -805.922 10.99802 2
0001: wait 500 ms
016A: fade 1 () 500 ms
0001: wait 500 ms
0460: set camera pointing time 0.0 3000
0160: point camera 117.3482 -825.7412 10.46329 1
0001: wait 3000 ms
016A: fade 0 () 500 ms
0001: wait 500 ms
0507: set camera interference 0
0247: request model #ARMY
0247: request model #M4
038B: load requested models
:M0_load
0001: wait 0 ms
00D6: if 1
0248: model #army available
0248: model #m4 available
004D: jump_if_false ЈM0_load
009A: 0@ = create_actor 4 #army at 109.6735 -834.5632 10.06329
0211: actor 0@ walk to 116.4326 -823.2233
0159: camera_on_ped 0@ 15 2
0001: wait 250 ms
016A: fade 1 () 500 ms
:M0_IsHewalk
0001: wait 0 ms
00D6: if 0
0126: actor 0@ walking
004D: jump_if_false ЈM0_IsHewalk
0372: set actor 0@ anim 17 wait state time 3000 ms
0001: wait 3200 ms
0321: kill_actor 0@
0003: shake camera 140
0001: wait 250 ms
016A: fade 0 () 500 ms
0001: wait 500 ms
02A3: toggle_widescreen 0 (off)
01B4: set player $PLAYER_CHAR frozen state 1 (unfrozen)
03BF: set player $PLAYER_CHAR ignored by everyone to 0 (false)
01F7: set player $PLAYER_CHAR ignored by cops state to 0 (false) ;; эти четыре команды отключают неуправляемый режим,
02EB: restore camera with jumpcut ;; эта восстанавливает камеру
009B: destroy actor instantly 0@
016A: fade 1 () 500 ms
0001: wait 500 ms
Теперь взамен убитого и дестроенного актёра создаём другого. Это тоже часть линейного этапа:
009A: 0@ = create actor 4 #army at 109.6735 -834.5632 10.06329
Сделаем его нечуствительным к району, где находится игрок (т. е. чтобы не погибал, не проваливался, если тот уедет):
02A9: set_actor 0@ immune_to_nonplayer 1
Здоровее будет:
0223: set_actor 0@ health_to 500
С пушкой M4:
01B2: give_actor 0@ weapon 26 ammo 9999 ;; Load the weapon model before using this
и невысокой точностью:
02E2: set actor 0@ weapon accuracy to 20
Дадим M4 и игроку:
01B1: give_player $PLAYER_CHAR weapon 26 ammo 150 ;; Load the weapon model before using this
Теперь пускай убивает игрока:
01CA: actor 0@ kill_player $PLAYER_CHAR
Теперь простейший зацикленный код:
:M0_MafDead
0001: wait 250 ms
00D6: if 0
0118: actor 0@ dead
004D: jump_if_false ЈM0_MafDead
0001: wait 0 ms
Надеюсь, ясно, как он работает.
И всё! дальше идут команды конца миссии!
Осталось только записать в последнюю процедуру cleanup команды для очистки памяти:
01C2: remove_references_to_actor 0@ ;; Like turning an actor into a random pedestrian
0249: release_model #army
0249: release_model #m4
:ToMis0St ;; метка начала, описана в define missions
0050: gosub ЈCodeStart0 ;; идём в процедуру кода миссии. Когда вернулись, то
00D6: if 0
0112: wasted_or_busted ;; сразу проверили: вдруг замочили ненароком или арестовали.
004D: jump_if_false ЈToSkipFail0
0050: gosub ЈFail0ByWOB ;; если так, идём в Fail0ByWOB, где написано, что провалена
:ToSkipFail0
0050: gosub ЈM0_cleanup ;; теперь идём в метку очистки
004E: end_thread ;; и заканчиваем миссию
:CodeStart0
0317: increment mission attempts ;; увеличиваем попытки миссии
00BE: text_clear_all ;; стираем текст с экрана
03A4: name thread "M0"
054C: use GXT table "TAXICUT" ;; это просто так, я в GXT текст не вставил.
0004: $ONMISSION = 1 ;; integer values ;; мол, на миссии
016A: fade 0 () 500 ms ;; гасим экран
00BA: text_styled "..." 4000 ms 2 ;; Учебная миссия - название жёлтыми буквами
02A3: toggle_widescreen 1 (on)
01B4: set player $PLAYER_CHAR frozen state 0 (frozen)
03BF: set player $PLAYER_CHAR ignored by everyone to 1 (true)
01F7: set player $PLAYER_CHAR ignored by cops state to 1 (true) ;; эти четыре команды переводят игрока в неуправлямый режим. Сами разберёте каждую из них
0055: put_player $PLAYER_CHAR at 91.86213 -805.922 11.0
0507: set camera interference 1
015F: set_camera_position 109.3801 -815.2471 13.31329 0.0 0.0 0.0
0160: point camera 91.86213 -805.922 10.99802 2
0001: wait 500 ms
016A: fade 1 () 500 ms
0001: wait 500 ms
0460: set camera pointing time 0.0 3000
0160: point camera 117.3482 -825.7412 10.46329 1
0001: wait 3000 ms
016A: fade 0 () 500 ms
0001: wait 500 ms
0507: set camera interference 0
0247: request model #ARMY
0247: request model #M4
038B: load requested models
:M0_load
0001: wait 0 ms
00D6: if 1
0248: model #army available
0248: model #m4 available
004D: jump_if_false ЈM0_load
009A: 0@ = create_actor 4 #army at 109.6735 -834.5632 10.06329
0211: actor 0@ walk to 116.4326 -823.2233
0159: camera_on_ped 0@ 15 2
0001: wait 250 ms
016A: fade 1 () 500 ms
:M0_IsHewalk
0001: wait 0 ms
00D6: if 0
0126: actor 0@ walking
004D: jump_if_false ЈM0_IsHewalk
0372: set actor 0@ anim 17 wait state time 3000 ms
0001: wait 3200 ms
0321: kill_actor 0@
0003: shake camera 140
0001: wait 250 ms
016A: fade 0 () 500 ms
0001: wait 500 ms
02A3: toggle_widescreen 0 (off)
01B4: set player $PLAYER_CHAR frozen state 1 (unfrozen)
03BF: set player $PLAYER_CHAR ignored by everyone to 0 (false)
01F7: set player $PLAYER_CHAR ignored by cops state to 0 (false) ;; эти четыре команды отключают неуправляемый режим,
02EB: restore camera with jumpcut ;; эта восстанавливает камеру
009B: destroy actor instantly 0@
016A: fade 1 () 500 ms
0001: wait 500 ms
009A: 0@ = create actor 4 #army at 109.6735 -834.5632 10.06329
02A9: set_actor 0@ immune_to_nonplayer 1
0223: set_actor 0@ health_to 500
01B2: give_actor 0@ weapon 26 ammo 9999 ;; Load the weapon model before using this
02E2: set actor 0@ weapon accuracy to 20
01B1: give_player $PLAYER_CHAR weapon 26 ammo 150 ;; Load the weapon model before using this
01CA: actor 0@ kill_player $PLAYER_CHAR
:M0_MafDead
0001: wait 250 ms
00D6: if 0
0118: actor 0@ dead
004D: jump_if_false ЈM0_MafDead
0001: wait 0 ms
0394: play_music 1 ;; Звуковой проигрыш
01E3: text_1number_styled "M_PASS" 2000 5000 ms 1 ;; МИССИЯ ПРОЙДЕНА! $~1~
030C: set mission points += 1 ; +очки миссий
0318: set latest mission passed "..." ;; Учебная миссия - установка текста для сохранялки
0109: player $PLAYER_CHAR money += 2000 ;; деньги
0051: return ;; возвращаемся.
:Fail0ByWOB
00BA: text_styled "M_FAIL" 4000 ms 1 ;; МИССИЯ ПРОВАЛЕНА!
;004F: create thread ЈЈmission0 ;; раскомментируйте строку и впишите имя потока, когда тот будет готов для перезапуска миссии в случае провала.
0051: return
:M0_cleanup ;; метка очистки
;; команды здесь должны стереть всех созданных актёров (remove_references тоже сгодится), машины, объекты, маркеры, выгрузить модели всё такое прочее.
01C2: remove_references_to_actor 0@ ;; Like turning an actor into a random pedestrian
0249: release_model #army
0249: release_model #m4
0004: $ONMISSION = 0
00D8: mission_cleanup
0051: return
Попробуйте сами создать простую миссию с помощью того же шаблона. Уже под другим номером. И читайте дальше про звеньевое написание. А я приведу ещё один код миссии, чтобы вы разобрали его сами, уже посложнее (немного изменённый код миссии из моего мода).
:CodeStart15
0317: increment mission attempts
00BE: text_clear_all
03A4: name thread "M15"
054C: use GXT table "BANKJ2"
0004: $ONMISSION = 1 ;; integer values
016A: fade 0 () 500 ms
00BA: text_styled "..." 4000 ms 2 ;; И была битва...
02A3: toggle_widescreen 1 (on)
01B4: set player $PLAYER_CHAR frozen state 0 (frozen)
03BF: set player $PLAYER_CHAR ignored by everyone to 1 (true)
01F7: set player $PLAYER_CHAR ignored by cops state to 1 (true)
0247: request_model #landstal
0247: request_model #hna
0247: request_model #hnb
0247: request_model #uzi
0247: request_model #mp5lng
0247: request_model #colt45
0247: request_model #m4
0247: request_model #voodoo
0247: request_model #blistac
023C: load_special_actor 1 "IGSONNY"
023C: load_special_actor 2 "IGCOLON"
:M15_chkLoadModels
0001: wait 0 ms
00D6: if 4
0248: model #landstal available
0248: model #hna available
0248: model #hnb available
0248: model #uzi available
0248: model #mp5lng available
004D: jump_if_false ЈM15_chkLoadModels
0001: wait 500 ms
00D6: if 5
0248: model #colt45 available
0248: model #m4 available
0248: model #voodoo available
0248: model #blistac available
023D: special actor 1 loaded
023D: special actor 2 loaded
004D: jump_if_false ЈM15_chkLoadModels
015F: set_camera_position -548.7745 -545.7674 11.0 0.0 0.0 0.0
00A5: $baskcar = create_car #landstal at -549.12 -549.8 10.5
02AA: set_car $baskcar immune_to_nonplayer 1
0224: set_car $baskcar health_to 5000
053F: set car $baskcar tires vulnerable 0
0369: put_player $PLAYER_CHAR in_car $baskcar
01C8: $bask = create_actor 13 #special02 in_car $baskcar passenger_seat 0
022C: set_actor $bask to_look_at_actor $PLAYER_ACTOR
0158: camera_on_vehicle $baskcar 15 2
016A: fade 1 () 500 ms
00AB: put_car $baskcar at -549.12 -549.8 10.5
0175: set_car $baskcar z_angle_to 355.0
0001: wait 3000 ms
022F: set_actor $bask stop_looking
01DF: tie_actor $bask to_player $PLAYER_CHAR
0001: wait 1000 ms
04BA: set_car $baskcar speed_instantly 15.0
02A3: toggle_widescreen 0 ()
01B4: set player $PLAYER_CHAR frozen state 1 (unfrozen)
03BF: set player $PLAYER_CHAR ignored by everyone to 0 ()
01F7: set player $PLAYER_CHAR ignored by cops state to 0 ()
02EB: restore_camera_with_jumpcut
0373: set camera directly behind player
0001: wait 500 ms
018A: $m15_mar = create_checkpoint_at -861.4575 -470.7795 10.9273
03BC: $m15_s = create_sphere -861.4575 -470.7795 10.9273 4.0
0004: $m15_paircomp = 0 ;; integer values
:M15_ubit
0001: wait 0 ms
00D6: if 21
0119: car $baskcar wrecked
0118: actor $bask dead
004D: jump_if_false ЈM15_doexal1
0050: gosub ЈFail15ByWOB
0051: return
:M15_doexal1
0001: wait 0 ms
00D6: if 1
00FA: player $PLAYER_CHAR stopped 0 ()near point in car -861.4575 -470.7795 10.9273 radius 4.0 4.0 3.0
00DC: player $PLAYER_CHAR driving $baskcar
004D: jump_if_false ЈM15_ubit
0001: wait 0 ms
03BD: destroy_sphere $m15_s
0164: disable_marker $m15_mar
009B: destroy_actor_instantly $bask
02A3: toggle_widescreen 1 (on)
01B4: set player $PLAYER_CHAR frozen state 0 (frozen)
03BF: set player $PLAYER_CHAR ignored by everyone to 1 (true)
01F7: set player $PLAYER_CHAR ignored by cops state to 1 (true)
01C8: $bask = create_actor 13 #special02 in_car $baskcar passenger_seat 0
01D3: actor $bask leave_car $baskcar
:M15_drivingBask
0001: wait 0 ms
00D6: if 0
80DF: NOT actor $bask driving
004D: jump_if_false ЈM15_drivingBask
04D7: lock_actor $bask in_current_position 1
0001: wait 1000 ms
016A: fade 0 () 500 ms
0001: wait 500 ms
015F: set_camera_position -854.7128 -448.5066 25.0 0.0 0.0 0.0
0160: point_camera -887.3284 -469.8163 13.11136 2
009B: destroy_actor_instantly $bask
009A: $bask = create_actor 13 #special02 at -887.3284 -469.8163 13.11136
009A: $roma = create_actor 13 #special01 at -887.272 -471.0395 13.11133
016A: fade 1 () 500 ms
0001: wait 500 ms
0239: actor $bask run_to -861.4575 -470.7795
0239: actor $roma run_to -861.4575 -470.7795
0001: wait 2000 ms
015F: set_camera_position -860.8649 -483.4116 10.77283 0.0 0.0 0.0
0460: set_camera_pointing_time 0.0 2500
0160: point_camera -846.3948 -564.3718 10.92828 1
00A5: $haicar1 = create_car #voodoo at -846.3948 -564.3718 10.92828
0175: set_car $haicar1 z_angle_to 8.0
0224: set_car $haicar1 health_to 2000
02AA: set_car $haicar1 immune_to_nonplayer 1
0129: $haidrv1 = create actor 9 #hnb in car $haicar1 driverseat
020A: set_car $haicar1 door_status_to 2
009A: $hai1 = create_actor 9 #hna at 0.0 0.0 0.0
0464: put_actor $hai1 into_turret_on_car $haicar1 at_car_offset 0.4195 0.116 1.0 unknown 2 angle 180.0 with_weapon 23
02E2: set actor $hai1 weapon accuracy to 80
009A: $hai2 = create_actor 9 #hnb at 0.0 0.0 0.0
0464: put_actor $hai2 into_turret_on_car $haicar1 at_car_offset -.4195 -.6 1.0 unknown 2 angle 180.0 with_weapon 17
02E2: set actor $hai1 weapon accuracy to 80
01CA: actor $hai1 kill_player $PLAYER_CHAR
01CA: actor $hai2 kill_player $PLAYER_CHAR
02A9: set actor $hai1 immune to nonplayer 1
02A9: set actor $hai2 immune to nonplayer 1
02A9: set actor $haidrv1 immune to nonplayer 1
054A: unknown_actor $haidrv1 flag 0
00AD: set_car $haicar1 max_speed_to 0.0
0001: wait 2500 ms
009B: destroy_actor_instantly $bask
009B: destroy_actor_instantly $roma
009A: $bask = create_actor 13 #special02 at 0.0 0.0 0.0
02AB: set actor $bask immunities 1 1 1 1 1
0464: put_actor $bask into_turret_on_car $baskcar at_car_offset 0.4195 0.116 1.0 unknown 3 angle 270.0 with_weapon 25
02E2: set actor $bask weapon accuracy to 80
01C8: $roma = create_actor 13 #special01 in_car $baskcar passenger_seat 1
01DF: tie_actor $roma to_player $PLAYER_CHAR
0001: wait 3000 ms
00AD: set_car $haicar1 max_speed_to 100.0
00A9: set_car $haicar1 to_normal_driver
00AE: unknown_set_car $haicar1 to_ignore_traffic_lights 2
04BA: set_car $haicar1 speed_instantly 40.0
0001: wait 2000 ms
02A3: toggle_widescreen 0 ()
01B4: set player $PLAYER_CHAR frozen state 1 (unfrozen)
03BF: set player $PLAYER_CHAR ignored by everyone to 0 ()
01F7: set player $PLAYER_CHAR ignored by cops state to 0 ()
02EB: restore_camera_with_jumpcut
0373: set camera directly behind player
018A: $m15_mar = create_checkpoint_at -961.5669 1034.298 11.08478
03BC: $m15_s = create_sphere -961.5669 1034.298 11.08478 4.0
04EB: actor $bask crouch 1 9999999 ms
01CB: actor $bask kill_actor $hai1
0187: $hai1m = create_marker_above_actor $hai1
0187: $hai2m = create_marker_above_actor $hai2
04EB: actor $hai1 crouch 1 9999999 ms
04EB: actor $hai2 crouch 1 9999999 ms
:M15_bdead
0001: wait 0 ms
0227: $b_h = car $baskcar health
0014: $b_h /= 50 ;; integer values
04F7: status_text $b_h 1 line 1 "..." ;;
0407: create_coordinate 0@ 1@ 2@ from_car $baskcar offset 0.0 -5.0 0.0
00A7: car $haicar1 drive_to 0@ 1@ 2@
00D6: if 0
0118: actor $bask dead
004D: jump_if_false ЈM15_pr0
0001: wait 0 ms
00BC: text_highpriority "BIKE1" 5000 ms 1 ;;
0050: gosub ЈFail15ByWOB
0051: return
:M15_pr0
0001: wait 0 ms
00D6: if 3
00FA: player $PLAYER_CHAR stopped 0 ()near point in car -961.5669 1034.298 11.08478 radius 4.0 4.0 3.0
00DC: player $PLAYER_CHAR driving $baskcar
0118: actor $hai1 dead
0118: actor $hai2 dead
004D: jump_if_false ЈM15_rdead
0002: jump ЈM15_etap2
:M15_rdead
0001: wait 0 ms
00D6: if 0
0118: actor $roma dead
004D: jump_if_false ЈM15_cdead
0001: wait 0 ms
0050: gosub ЈFail15ByWOB
0051: return
:M15_cdead
0001: wait 0 ms
00D6: if 0
0119: car $baskcar wrecked
004D: jump_if_false ЈM15_h1
0001: wait 0 ms
0050: gosub ЈFail15ByWOB
0051: return
:M15_h1
0001: wait 0 ms
00D6: if 0
0118: actor $hai1 dead
004D: jump_if_false ЈM15_bdead
0001: wait 0 ms
0164: disable_marker $hai1m
0465: remove_actor $hai1 from_turret_mode
00D6: if 0
8118: NOT actor $hai2 dead
004D: jump_if_false ЈM15_doexal2
01CB: actor $bask kill_actor $hai2
0002: jump ЈM15_bdead
:M15_doexal2
0001: wait 0 ms
0465: remove_actor $hai2 from_turret_mode
0164: disable_marker $hai2m
00D6: if 0
0038: $m15_paircomp == 0 ;; integer values
004D: jump_if_false ЈM15_pr0
01C2: remove_references_to_actor $haidrv1 ;; Like turning an actor into a random pedestrian
009B: destroy_actor_instantly $bask
01C8: $bask = create_actor 13 #special02 in_car $baskcar passenger_seat 0
01DF: tie_actor $bask to_player $PLAYER_CHAR
0004: $m15_paircomp = 1 ;; integer values
0002: jump ЈM15_bdead
:M15_etap2
0001: wait 0 ms
016A: fade 0 () 500 ms
0001: wait 500 ms
03BD: destroy_sphere $m15_s
0164: disable_marker $m15_mar
02A3: toggle_widescreen 1 (on)
01B4: set player $PLAYER_CHAR frozen state 0 (frozen)
03BF: set player $PLAYER_CHAR ignored by everyone to 1 (true)
01F7: set player $PLAYER_CHAR ignored by cops state to 1 (true)
01C2: remove_references_to_actor $haidrv1 ;; Like turning an actor into a random pedestrian
01C2: remove_references_to_actor $hai1 ;; Like turning an actor into a random pedestrian
01C2: remove_references_to_actor $hai2 ;; Like turning an actor into a random pedestrian
01C3: remove references to car $haicar1
009B: destroy_actor_instantly $bask
009B: destroy_actor_instantly $roma
0362: remove_actor $PLAYER_ACTOR from_car_and_place_at -991.2181 941.9074 10.11447
0171: set_player $PLAYER_CHAR z_angle_to 0.0
009A: $roma = create actor 13 #special01 at -995.2945 943.2436 10.11447
009A: $bask = create actor 13 #special02 at -1000.123 943.402 10.11447
0223: set_actor $roma health_to 400
0223: set_actor $bask health_to 400
01B2: give_actor $roma weapon 26 ammo 9999 ;; Load the weapon model before using this
01B2: give_actor $bask weapon 26 ammo 9999 ;; Load the weapon model before using this
02E2: set actor $roma weapon accuracy to 95
02E2: set actor $bask weapon accuracy to 85
01B1: give_player $PLAYER_CHAR weapon 26 ammo 320 ;; Load the weapon model before using this
00A6: destroy_car $baskcar
015F: set_camera_position -995.6646 966.4077 10.03502 0.0 0.0 0.0
0160: point_camera -995.2945 943.2436 10.11447 2
0001: wait 1000 ms
04EB: actor $player_actor crouch 1 9999999 ms
04EB: actor $bask crouch 1 9999999 ms
0372: set_actor $roma anim 14 wait_state_time 60000000 ms
016A: fade 1 () 500 ms
0001: wait 2000 ms
009A: $hai1 = create actor 9 #hna at -1002.72 1019.329 9.702542
0173: set_actor $hai1 z_angle_to 180.0
01B2: give actor $hai1 weapon 23 ammo 9999
02E2: set actor $hai1 weapon accuracy to 60
009A: $hai2 = create actor 9 #hnb at -1000.891 1019.084 9.799809
0173: set_actor $hai2 z_angle_to 180.0
01B2: give actor $hai2 weapon 17 ammo 9999
02E2: set actor $hai2 weapon accuracy to 80
009A: $hai3 = create actor 9 #hnb at -997.8218 1018.702 9.949001
0173: set_actor $hai3 z_angle_to 180.0
01B2: give actor $hai3 weapon 23 ammo 9999
02E2: set actor $hai3 weapon accuracy to 60
009A: $hai4 = create actor 9 #hna at -996.2866 1018.554 10.01021
0173: set_actor $hai4 z_angle_to 180.0
01B2: give actor $hai4 weapon 17 ammo 9999
02E2: set actor $hai4 weapon accuracy to 80
009A: $hai5 = create actor 9 #hnb at -995.373 1016.016 10.04664
0173: set_actor $hai5 z_angle_to 180.0
01B2: give actor $hai5 weapon 23 ammo 9999
02E2: set actor $hai5 weapon accuracy to 60
009A: $hai6 = create actor 9 #hna at -994.3153 1019.642 10.08881
0173: set_actor $hai6 z_angle_to 180.0
01B2: give actor $hai6 weapon 17 ammo 9999
02E2: set actor $hai6 weapon accuracy to 80
015F: set_camera_position -995.6646 966.4077 10.03502 0.0 0.0 0.0
0460: set_camera_pointing_time 0.0 2000
0159: camera_on_ped $hai5 15 1
0001: wait 2000 ms
0372: set_actor $roma anim 0 wait_state_time 60000000 ms
04EB: actor $roma crouch 1 9999999 ms
0001: wait 1000 ms
02A3: toggle_widescreen 0 ()
01B4: set player $PLAYER_CHAR frozen state 1 (unfrozen)
03BF: set player $PLAYER_CHAR ignored by everyone to 0 ()
01F7: set player $PLAYER_CHAR ignored by cops state to 0 ()
02EB: restore_camera_with_jumpcut
0373: set camera directly behind player
01CA: actor $hai1 kill_player $PLAYER_CHAR
01CA: actor $hai2 kill_player $PLAYER_CHAR
01CA: actor $hai3 kill_player $PLAYER_CHAR
01CA: actor $hai4 kill_player $PLAYER_CHAR
01CA: actor $hai5 kill_player $PLAYER_CHAR
01CA: actor $hai6 kill_player $PLAYER_CHAR
:M15_bm
0001: wait 0 ms
00D6: if 0
0118: actor $bask dead
004D: jump_if_false ЈM15_rm
0001: wait 0 ms
0050: gosub ЈFail15ByWOB
0051: return
:M15_rm
0001: wait 0 ms
00D6: if 0
0118: actor $roma dead
004D: jump_if_false ЈM15_c1m
0001: wait 0 ms
0050: gosub ЈFail15ByWOB
0051: return
:M15_c1m
0001: wait 0 ms
00D6: if 0
8118: NOT actor $hai1 dead
004D: jump_if_false ЈM15_c2m
0001: wait 0 ms
01CB: actor $roma kill_actor $hai1
01CB: actor $bask kill_actor $hai1
0002: jump ЈM15_bm
:M15_c2m
0001: wait 0 ms
00D6: if 0
8118: NOT actor $hai2 dead
004D: jump_if_false ЈM15_c3m
0001: wait 0 ms
01CB: actor $roma kill_actor $hai2
01CB: actor $bask kill_actor $hai2
0002: jump ЈM15_bm
:M15_c3m
0001: wait 0 ms
00D6: if 0
8118: NOT actor $hai3 dead
004D: jump_if_false ЈM15_c4m
0001: wait 0 ms
01CB: actor $roma kill_actor $hai3
01CB: actor $bask kill_actor $hai3
0002: jump ЈM15_bm
:M15_c4m
0001: wait 0 ms
00D6: if 0
8118: NOT actor $hai4 dead
004D: jump_if_false ЈM15_c5m
0001: wait 0 ms
01CB: actor $roma kill_actor $hai4
01CB: actor $bask kill_actor $hai4
0002: jump ЈM15_bm
:M15_c5m
0001: wait 0 ms
00D6: if 0
8118: NOT actor $hai5 dead
004D: jump_if_false ЈM15_c6m
0001: wait 0 ms
01CB: actor $roma kill_actor $hai5
01CB: actor $bask kill_actor $hai5
0002: jump ЈM15_bm
:M15_c6m
0001: wait 0 ms
00D6: if 0
8118: NOT actor $hai6 dead
004D: jump_if_false ЈM15_c7m
0001: wait 0 ms
01CB: actor $roma kill_actor $hai6
01CB: actor $bask kill_actor $hai6
0002: jump ЈM15_bm
:M15_c7m
0001: wait 0 ms
00D6: if 5
0118: actor $hai1 dead
0118: actor $hai2 dead
0118: actor $hai3 dead
0118: actor $hai4 dead
0118: actor $hai5 dead
0118: actor $hai6 dead
004D: jump_if_false ЈM15_bm
0001: wait 0 ms
00D6: if 1
8118: NOT actor $roma dead
8118: NOT actor $bask dead
004D: jump_if_false ЈM15_bm
0001: wait 0 ms
01C2: remove_references_to_actor $hai1 ;; Like turning an actor into a random pedestrian
01C2: remove_references_to_actor $hai2 ;; Like turning an actor into a random pedestrian
01C2: remove_references_to_actor $hai3 ;; Like turning an actor into a random pedestrian
01C2: remove_references_to_actor $hai4 ;; Like turning an actor into a random pedestrian
01C2: remove_references_to_actor $hai5 ;; Like turning an actor into a random pedestrian
01C2: remove_references_to_actor $hai6 ;; Like turning an actor into a random pedestrian
02A3: toggle_widescreen 1 (on)
01B4: set player $PLAYER_CHAR frozen state 0 (frozen)
03BF: set player $PLAYER_CHAR ignored by everyone to 1 (true)
01F7: set player $PLAYER_CHAR ignored by cops state to 1 (true)
015F: set_camera_position -995.6646 966.4077 10.03502 0.0 0.0 0.0
0160: point_camera -995.2945 943.2436 10.11447 2
04EB: actor $bask crouch 0 9999999 ms
04EB: actor $roma crouch 0 9999999 ms
04EB: actor $player_actor crouch 0 9999999 ms
020E: actor $PLAYER_ACTOR look_at_actor $bask
020E: actor $bask look_at_actor $roma
020E: actor $roma look_at_actor $PLAYER_ACTOR
0372: set_actor $roma anim 19 wait_state_time 60000000 ms
0001: wait 2000 ms
0372: set_actor $roma anim 0 wait_state_time 60000000 ms
0372: set_actor $bask anim 19 wait_state_time 60000000 ms
0001: wait 5000 ms
0372: set_actor $bask anim 0 wait_state_time 60000000 ms
016A: fade 0 () 500 ms
0001: wait 500 ms
00A5: $mcar = create_car #blistac at -875.3427 861.4892 10.5325
0175: set_car $mcar z_angle_to 180.0
0224: set_car $mcar health_to 1000
0129: $roma = create actor 13 #SPECIAL01 in car $mcar driverseat
01C2: remove_references_to_actor $hai1 ;; Like turning an actor into a random pedestrian
01C2: remove_references_to_actor $hai2 ;; Like turning an actor into a random pedestrian
01C2: remove_references_to_actor $hai3 ;; Like turning an actor into a random pedestrian
01C2: remove_references_to_actor $hai4 ;; Like turning an actor into a random pedestrian
01C2: remove_references_to_actor $hai5 ;; Like turning an actor into a random pedestrian
01C2: remove_references_to_actor $hai6 ;; Like turning an actor into a random pedestrian
02A3: toggle_widescreen 0 ()
01B4: set player $PLAYER_CHAR frozen state 1 (unfrozen)
03BF: set player $PLAYER_CHAR ignored by everyone to 0 ()
01F7: set player $PLAYER_CHAR ignored by cops state to 0 ()
02EB: restore_camera_with_jumpcut
0464: put actor $player_actor into turret on car $mcar at car offset 0.4195 0.116 1.0 unknown 2 angle 180.0 with weapon 26
0373: set camera directly behind player
016A: fade 1 () 500 ms
0001: wait 500 ms
00AD: set_car $mcar max_speed_to 20.0
00A9: set_car $mcar to_normal_driver
00AE: unknown_set_car $mcar to_ignore_traffic_lights 2
00A7: car $mcar drive_to -561.0071 -494.9064 10.68581