Итак, ковыряясь в своем моде, я обнаружил интересную вещь. Допустим, у нас есть такой актор: Code actor somebody : ZombieMan replaces ZombieMan //вместо зомбимена { states { spawn: TNT1 A 0 TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(2) == 123,"xdeath") //если скрипт 2 вернул "1", то зомби "разрывается"... goto death //...иначе - просто подыхает } } И, соответственно, скрипт: Code int a; script 1 ENTER //при входе игрока на уровень { a = 123; } script 2 (void) //наш скрипт { SetResultValue(a); //возвращаем a } По идее, зомби должен "сделать мясо". :d Но вместо этого он дохнет, как обычно. А теперь модифицируем актора: Code ... states { spawn: TNT1 A 0 TNT1 A 1 //добавили кадр ненулевой длинны TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(2) == 123,"xdeath") goto death } Вот теперь все в порядке. Фишка в том, что (G)Zdoom обрабатывает акторов в начале уровня, пока не остановится на кадре ненулевой длинны. Потом он будет ждать обработки остальных акторов и скрипта ENTER, и только потом продолжит "хождение по акторам". Только имейте в виду, что, используя такой способ, могут быть проблемы со статистикой по уровню (количество монстров).
|