Anima Robot Warfare 1

ГРУППОВЫЕ БОИ РОБОТОВ RW1G

   Каждый игрок, участвующий в основной игре RW1, может представить свою
команду роботов для участия в групповых боях. Команда состоит из одинаковых
или разных роботов в количестве от 1 до 5 штук. По своему усмотрению игрок
может предусмотреть взаимодействие между роботами, а может и нет. Пока все
будет делаться через меня (robots@shaos.ru), минуя почтового робота.
   Роботы должны быть откомпилированы компилятором RW1_COMP версии 1.99 и
иметь в тексте поле AUTHOR с указанием псевдонима игрока. Бои будут
проводиться с помощью RW1_DUEL версии 1.99 в режимах -gr и -dm.
   Команды воюют каждая с каждой по два раза, причем второй раз команды
в списке меняются местами (точно так же как и в основной игре). Победителем
боя считается команда, в которой остался в живых последний робот до
истечения 10000 тактов боевого времени.

   TSIMPLE.RW1 - simple team robot


   Команды взаимодействия роботов
   ------------------------------

   Каждый робот, участвующий в бою, имеет строку автора и порядковый номер.
Роботы одного автора считаются роботами одной команды и видят друг-друга
как объекты типа 7.

   SAY "string without russian letters"

   Эта команда была раньше, но теперь она имеет дополнительный смысл как
команда взимодействия между роботами - сказанная роботом фраза может быть
прочитана любым другим роботом с помощью команды TEST. Новая сказанная
фраза затирает собой старую строку. Команда выполняется за 1 такт
боевого времени.

   TEST "string with * and ?" : label

   Команда для проверки последнего сказанного через команду SAY. Если
сказанное точно соответствует шаблону, то происходит переход на метку
label. В шаблоне могут быть использованы символы * и ?, заменяющие собой:
? - один символ, * - любое количество символов. Команда выполняется за
1 такт боевого времени.

   SEND var varn

   Команда передачи кода по "радио". Код var (число, переменная или
элемент массива) отправляется по "радио" роботу с порядковым номером varn
(число, переменная или элемент массива). Причем если varn равно нулю, то
передача является широковещательной, т.е. код получает каждый робот,
участвующий в игре. Команда выполняется за 1 такт боевого времени
и вызывает уменьшение энергии на 1.

   RECV var

   Команда приема кода по "радио". Принятый код записывается в var
(переменная или элемент массива). Кроме того в регистры заносится следующая
информация: если N равен 0, то буфер принятых сообщений пуст, если нет, то
это порядковый номер робота-передатчика; в X и Y записываются относительные
координаты робота-передатчика; в регистр K помещается значение счетчика
время T, в которое был отправлен код (для определения приемником того,
насколько давно было отправлено сообщение). При однократном использовании
команды RECV количество сообщений в буфере принятых сообщений уменьшается
на одно. Размер буфера - 100 сообщений. Команда выполняется за 1 такт
боевого времени.

   Новое в версии 1.99
   -------------------

   Вводятся два новых регистра I и S. Регистр I - порядковы номер робота
в бою (начиная с 1). Регистр S - количество адресов возврата в стеке
возвратов.

   Команды GOTO, CALL, RET и DEF (без инициализации) не занимают больше
тактов боевого времени! Т.е. в один такт может быть выполнено до 10
команд (одна полноценная, остальные бесплатные). Ограничение на количество
команд введено для того, чтобы избежать зацикливания и зависания программы
проведения соревнований.

   AUTHOR "nickname"

   Объявление автора робота. Указывается сразу же за ROBOT "". Как только
соревнования будут проводится по версии 1.99, наличие этого поля в новых 
роботах станет обязательным для участия в соревнованиях.

   POP

   Команда особождения стека возвратов на 1 значение. Полезна при
экстренном выходе из прерывания для перехода на метку внутри основной
программы. Команда выполняется за 1 такт боевого времени.

   SHOT arr[k]

   Сохранение регистров в массиве. В массив arr записываются значения
всех внутренних регистров робота, начиная с элемента k и заканчивая
элементом k+15 (т.е. предусмотрено место для 16 регистров - пока
используется только 10). Записываются регистры в следующем порядке:
arr[k+0]=X, arr[k+1]=Y, arr[k+2]=D, arr[k+3]=N, arr[k+4]=K,
arr[k+5]=R, arr[k+6]=T, arr[k+7]=E, arr[k+8]=M, arr[k+9]=I,
arr[k+10]=arr[k+11]=arr[k+12]=arr[k+13]=arr[k+14]=0, arr[k+15]=S.
Команда выполняется за 1 такт боевого времени.

   DEF arr[число] = {init} 

   Объявление массива с инициализацией. В фигурных скобках перечисляются
через запятую значения элеметов массива. Если перечислено меньше элементов,
чем объявлено, то оставшиеся заплняются нулями. Пример: DEF aa[10]={1,2,3} 
ячейки с 3 до 9 заполняются нулями. Команда выполняется за 1 такт боевого 
времени.

   Примечания
   ----------

   Длинные выражения пока сюда не включены - после доработки они появятся 
   в версии 2.0 под Windows.

   Добавились несколько опций: 
   -dm включает режим deathmach (идея - Сергей Коваль).
   -gr включает режим групповых боев (разрешается SEND и код 7).
   -E/M где E и M числа соответственно уровень энергии и количество
    снардов для последнего упомянутого робота в командной строке.
    Пример: RW1_DUEL robot1.rw0 -10/10 robot2.rw0 -13/50

   Также появилась возможность записать опции в файл и подключить его через @.
Пример: RW1_DUEL @list.txt - где в файле list.txt записаны опции и имена 
роботов по одному в строке. Разрешается использовать различные комбинации
файлов с опциями и самих опций в командной строке.

   Теперь незарегистрированным пользователям доступны ВСЕ возможности
программы, но в течение только лишь 200 тактов. Без ограничений программа
работает когда в качестве аргумента был записан единственный робот в виде
исходного текста (RW1), а также при наличии ключа -f2 (отключение 
визуализации). Последнее означает, что программа RW1_CMP2 отныне будет
доступна абсолютно всем!