Вот, сделал защиту от магии горыныча (с учётом проклятой земли, множества артов и т. п., только без учёта Анти-магии (закла) и способностей опыта) и заклы а всех на магической равнине. Подробнее опишу позже.
;Горыныч колдует заклинание на всех вокруг.
!?BG0;При действии существа... !!BG : A?y-1;Находим, какое действие совершилось. !!FU&y-1<>6 : E;Если действие - не атака, выходим из триггера. !!VRv6001 : S0;Обнуляем контрольную переменную. !!BG : N?v6002;Находим номер атакующего стека. !!BMv6002 : T?y-1;Находим, какое существо атаковало. !!BMv6002 : I?v6070;Считываем принадлежность атакующего стека. !!VRv6001&y-1=168 : S1;Если атаковал горыныч, устанавливаем контрольную переменную в 1. !!BG : E?y-2;Находим номер целевого стека. !!BMy-2 : T?y-3;Находим, какое существо было атаковано. !!VRv6001&y-3=168 : Sv6001+2;Если атаковали горыныча, добавляем к контрольной переменной 2. !!VRv6003&v6001>0 : S6001;Если контрольная переменная больше 0, устанавливаем управляющую переменную целей.
!?MF1&v6001>0;При нанесении физического урона, если контрольная переменная больше 0... !!MF&v6001<3 : N?y-1;Если контрольная переменная меньше 3, считываем номер стека, получающего урон. !!BMy-1&v6001<3 : I?y-2;Если контрольная переменная меньше 3, считываем принадлежность стека, получающего урон. !!FU&v6001=1/y-2=v6070 : E;Если контрольная переменная равна 1, а принадлежность атакующего стека соответствует принадлежности стека, получающего урон, выходим из триггера. !!FU&v6001=2/y-2<>v6070 : E;Если контрольная переменная равна 2, а принадлежность атакующего стека не соответствует принадлежности стека, получающего урон, выходим из триггера. !!MF : E?y-1;Определяем, не был ли урон блокирован. !!FU&y-1=0/y-2=0 : E;Если урон был блокирован, завершаем функцию. !!VRv6003 : Sv6003+4;Устанавливаем управляющую переменную целей на следующее значение. !!VRy-1 : Sv6003-1;Вычисляем вторую управляющую переменную целей. !!VRy-2 : Sv6003+1;Вычисляем третью управляющую переменную целей. !!VRy-3 : Sv6003+2;Вычисляем четвёртую управляющую переменную целей. !!MF : N?vy-1;Определяем номер стека, получающего урон. !!FU9015 : Pv6003;Вызываем функцию наложения заклинаний. !!BMvy-1 : G74/?vv6003/d;Определяем, есть ли пралич, у получающего урон. !!BMvy-1&vv6003>0 : F?y-4;Если стек, получающий урон, парализован, считываем его флаги. !!VRy-4&vv6003>0 : &67108864;Если стек, получающий урон, парализован, проверяем, ходил ли он. !!BMvy-1&vv6003>0/y-4<1 : Fd67108864;Если стек, получающий урон, парализован и не ходил, он теряет ход. !!VRvy-2&vv6003>0/y-4<1 : S1;Если стек, получающий урон, парализован и не ходил, уставливаем переменную потери хода стека. !!BMvy-1&vv6003>0 : R?y-4;Если стек, получающий урон, парализован, проверяем, сколько у него ответных ударов. !!BMvy-1&vv6003>0/y-4>0 : R0;Если стек, получающий урон, парализован и у него есть ответные удары, обнуляем их. !!VRvy-3&vv6003>0/y-4>0 : Sy-4;Если стек, получающий урон, парализован и у него есть ответные удары, записываем их количество в переменную потери ответного удара стека.
!?BG1&v6001>0;После совершения действия, если контрольная переменная больше 0... !!DO9019/6005/v6003/4 : P;Взываем цикл, восстанавливающий паралич у атакованных горынычем существ. !!VRv6001 : S0;Устанавливаем контрольную переменную в 0. !!VRv6002 : S0;Сбрасываем переменную стека, совершившего действие. !!VRv6003 : S0;Сбрасываем управляющую переменную целей.
!?BR&v6001>0;В начале нового раунда, если контрольная переменная больше 0... !!DO9019/6005/v6003/4 : P;Взываем цикл, восстанавливающий паралич у атакованных горынычем существ. !!VRv6001 : S0;Устанавливаем контрольную переменную в 0. !!VRv6002 : S0;Сбрасываем переменную стека, совершившего действие. !!VRv6003 : S0;Сбрасываем управляющую переменную целей.
;Функции наложения и продления заклинания.
!?FU9015;Функция подготовки к наложению заклинаний. !!VRy1 : Sx1-1;Вычисляем адрес номера целевого стека. !!VRy3 : S1;Устанавливаем переменную рандома в 0. !!VRy3 : R99;Добавляем к переменной рандома в случайное число от 0 до 99.
!!VRy4&y3>0/y3<32 : S45;Если переменная рандома в 1 промежуке, устанавливаем переменную заклинания на номер слабости. !!VRy4&y3>31/y3<63 : S54;Если переменная рандома во 2 промежуке, устанавливаем переменную заклинания на номер медлительности. !!VRy4&y3>62/y3<94 : S73;Если переменная рандома в 3 промежуке, устанавливаем переменную заклинания на номер болезни. !!VRy4&y3>93/y3<99 : S74;Если переменная рандома в 4 промежуке, устанавливаем переменную заклинания на номер паралича. !!VRy4&y3>98/y3<101 : S75;Если переменная рандома в 5 промежуке, устанавливаем переменную заклинания на номер старости.
!!BU : G?y5;Проеряем, на какой земле идёт битва. !!VRy6&y5=1/vy1<21 : S0;Если битва идёт на равнине магов, а целевой стек принадлежит атакующему игроку, устанавливаем первый заражаемый стек в 0. !!VRy6&y5=1/vy1>20 : S21;Если битва идёт на равнине магов, а целевой стек принадлежит защищаемуся игроку, устанавливаем первый заражаемый стек в 21. !!VRy7&y5=1 : Sy6+20;Если битва идёт на равнине магов устанавливаем последний заражаемый стек.
!!FU9016 : Pvy1/y4/0/y5;Вызываем функцию наложения и продления закинания.
!!DO9016/y6/y7/1&y5=1/y4=45 : Pvy1/45/1/y5;Если переменная рандома в 1 промежуке, а битва идёт на равнине магов, запускаем цикл, накладывющий и продлевающий слабость на существах противника. !!DO9016/y6/y7/1&y5=1/y4=54 : Pvy1/54/1/y5;Если переменная рандома во 2 промежуке, а битва идёт на равнине магов, запускаем цикл, накладывющий и продлевающий медлительность на существах противника.
!?FU9016;;Функция наложения и продления заклинания. !!FU&x3=1/x1=x16 : E; !!VRx1&x3=1 : Sx16;Если битва идёт на равнине магов (а значит, функция - часть цикла) и заклинание может быть массовым, перезаписываем номер целевого стека. !!BMx16&x3=1 : N?y1;Если битва идёт на равнине магов (а значит, функция - часть цикла), проверяем, сколько существ в целевом стеке. !!FU&x3=1/y1<1 : E;Если битва идёт на равнине магов (а значит, функция - часть цикла), а в целевом стеке нет существ, завершаем функцию.