Допустим, у нас 8 актёров. Над каждым создадим маркер.
0187: 101@ = create_marker_above_actor 201@ 0187: 102@ = create_marker_above_actor 202@ 0187: 103@ = create_marker_above_actor 203@ 0187: 104@ = create_marker_above_actor 204@ 0187: 105@ = create_marker_above_actor 205@ 0187: 106@ = create_marker_above_actor 206@ 0187: 107@ = create_marker_above_actor 207@ 0187: 108@ = create_marker_above_actor 208@
Маркеры обозначены как 101,102 и т.д. Актёры как 201,202 и т.д. Теперь сам код
:marker_1 0050: gosub @marker_2 00D6: if 0118: actor 201@ dead 004D: jump_if_false @marker_1 0001: wait 0 ms 00D6: if 0118: actor 202@ dead 004D: jump_if_false @marker_1 0001: wait 0 ms 00D6: if 0118: actor 203@ dead 004D: jump_if_false @marker_1 0001: wait 0 ms 00D6: if 0118: actor 204@ dead 004D: jump_if_false @marker_1 0001: wait 0 ms 00D6: if 0118: actor 205@ dead 004D: jump_if_false @marker_1 0001: wait 0 ms 00D6: if 0118: actor 206@ dead 004D: jump_if_false @marker_1 0001: wait 0 ms 00D6: if 0118: actor 207@ dead 004D: jump_if_false @marker_1 0001: wait 0 ms 00D6: if 0118: actor 208@ dead 004D: jump_if_false @marker_1 0001: wait 0 ms 0002: jump @missia - это прыжок на продолжение мисии. Он произойдёт тогда, когда все актёры будут убиты.
:marker_2 0006: 15@ = 9 00D6: if 003C: 16@ == 15@ // (int) 004D: jump_if_false @marker_3 0001: wait 0 ms 0006: 16@ = 0 0051: return
:marker_3 000A: 16@ += 1 00D6: if 8118: not actor 200@(16@,9i) dead 004D: jump_if_false @marker_4 0001: wait 0 ms 0051: return
:marker_4 0164: disable_marker 100@(16@,9i) 0051: return
Теперь объяснение, что это означает.
0006: 15@ = 9 - почему 9? потому что врагов у нас восемь и мы прибавляем + еще одно чилсло.
9i - это как раз число 9 (для другого кол-ва должна быть другая цифра)
8118: not actor 200@(16@,9i) dead - почему 200? (ведь актеры начинаються с 201). Это для того что бы "еще одно число" сработало
0164: disable_marker 100@(16@,9i) - аналогично и с маркерами. Нужно всегда на еденицу меньше настоящих переменых
После того как произойдёт прыжок на :missia, останется один маркер у последнего убитого актёра. Чтоб этого не произошло, нужно ещё раз написать коды удаления всех маркеров
:missia Marker.Disable(101@) Marker.Disable(102@) Marker.Disable(103@) Marker.Disable(104@) Marker.Disable(105@) Marker.Disable(106@) Marker.Disable(107@) Marker.Disable(108@)
|