ZVSE
;Горыныч.
!#MA : A168/35 C168/6/17500 C168/0/24 D168/35 E168/60 F168/27145 H168/3 I168/30027 M168/50 P168/750 S168/10 V168/1;Устанавливаем характеристики горыныча.
;Горыныч колдует заклинание на всех вокруг.
!?BG0;При действии существа... !!VRv6001 : S0;Обнуляем контрольную переменную. !!BG : N?v6002;Находим номер стека, совершившего действие. !!BMv6002 : T?y-1;Находим, какое существо совершило действие. !!BG&y-1=168 : A?y-2;Если существо - горыныч, находим, какое действие он совершил. !!VRv6001&y-1=168/y-2=6 : S1;Если действие было ближним ударом и ударял горыныч, устанавливаем контрольную переменную в 1. !!VRv6003&v6001=1 : S6003;Устанавливаем управляющую переменную позиций целей.
!?MF1&v6001=1;При нанесении физического урона, если контрольная переменная равна 1... !!MF : E?y-1;Определяем, не был ли урон блокирован. !!FU&y-1=0 : E;Если урон был блокирован, завершаем функцию. !!VRv6003 : Sv6003+2;Устанавливаем управляющую переменную позиций целей на следующее значение. !!VRy-1 : Sv6003-1;Вычисляем вторую управляющую переменную позиций целей. !!MF : N?vy-1;Определяем номер стека, получающего урон. !!BMvy-1 : P?vv6003;Определяем позицию стека, получающего урон.
!?BG1&v6001=1;После совершения действия, если контрольная переменная равна 1... !!DO9015/6005/v6003/2 : P;Вызываем цикл наложения заклинаний. !!VRv6001 : S0;Устанавливаем контрольную переменную в 0. !!VRv6002 : S0;Сбрасываем переменную стека, совершившего действие. !!VRv6003 : S0;Сбрасываем управляющую переменную позиций целей.
;Функции наложения и продления заклинания.
!?FU9015;Функция подготовки к наложению заклинаний. !!VRy1 : Sx16-1;Вычисляем адрес номера целевого стека. !!BMvy1 : N?y2;Считыываем количесто существ в целевом стеке. !!VRvy1&y2<1 : S0;Если в стеке меньше 1 существа, сбрасываем переменную номера целевого стека. !!VRvx16&y2<1 : S0;Если в стеке меньше 1 существа, сбрасываем переменную позиции целевого стека. !!FU&y2<1 : E;Если в стеке меньше 1 существа, завершаем функцию. !!VRy3 : S0;Устанавливаем переменную рандома в 0. !!VRy3 : R4;Добавляем к переменной рандома в случайное число от 0 до 4. !!FU9016&y3=0 : Pvy1/vx16/45;Если переменная рандома равна 0, вызываем функцию наложения и продления слабости. !!FU9016&y3=1 : Pvy1/vx16/54;Если переменная рандома равна 1, вызываем функцию наложения и продления медлительности. !!FU9016&y3=2 : Pvy1/vx16/73;Если переменная рандома равна 2, вызываем функцию наложения и продления болезни. !!FU9016&y3=3 : Pvy1/vx16/74;Если переменная рандома равна 3, вызываем функцию наложения и продления паралича. !!FU9016&y3=4 : Pvy1/vx16/75;Если переменная рандома равна 4, вызываем функцию наложения и продления старости. !!VRvy1 : S0;Сбрасываем переменную номера целевого стека. !!VRvx16 : S0;Сбрасываем переменную позиции целевого стека.
!?FU9016;;Функция наложения и продления заклинания. !!BMx1 : Gx3/?y1/d;Проверяем, не наложено ли заклинание на цель. !!BMv6002&y1<1 : Cx3/x2/2/1/0;Если заклинание не наложено, накладываем его. !!BMx1&y1<1 : Gx3/3/d;Если заклинание не наложено, устанавливаем его длительность в 3 раунда. !!BMx1&y1>0 : Gx3/d3/d;Если заклинание наложено, увеличиваем его длительность на 3 раунда.
Заклы не колдуются при ответном ударе, игнорируются иммунитеты и после колдовства заклов ход передаётся следующему существу, а рамка выделения остаётся на предыдущем.
Кто знает, как решить эти проблемы, особенно последнюю, напишите.