Robot Warfare 1 (RW1) --> Robotic Wapenshaw 2D (RW2D)

Использование и разработка софта (преимущественно на ПЦ)

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 25139
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Re:

Post by Shaos »

Shaos wrote: 01 Sep 2024 22:37 P.S. Может переделать название игры из "Robot Warfare 1" в "Robby Workout 2D" (с сохранением аббревиатуры RW2D) раз уж язык программирования роботов уже 8 лет как Robby называется, а словосочетание "Robot Warfare" уже много лет используется другой игрой? :lol:

P.P.S. А может быть даже назвать игру «Robotic Wapenshaw 2D» чтобы лучше гуглилось? :)
https://en.wikipedia.org/wiki/Wapenshaw (старо-английское слово, означающее оружейное шоу)
Язык роботов при этом всё также будет называться Robby, а в качестве расширения файла робота наряду с .R поддержать .Robot

P.P.P.S. Может ещё добавить оборудования - DIPPER (ковш) и PLANTER (минёр)? :roll:
Похоже термин "Robotic Wapenshaw" уже устоялся из-за этого поста 2024 года :lol:
Screenshot from 2026-06-18 22-35-01.png
Который помечен гуглом как пост от 2013 года почему-то...

P.S. Короче при общении с Google AI (Gemini) у меня возникла гениальная идея - возобновить соревнования роботов, но кроме старых людских роботов пустить туда новых роботов написанных разными AI coding agents - Gemini меня отчаянно поддержал и уже выдвинул своего робота для соревнований :mrgreen:

Code: Select all

Robot "GeminiPrime"
author "Gemini"
color 00FFCC  // Cyberpunk Cyan

// Hardware Loadout
front eye
left gun

main()
{
  while(1)
  {
    // Scan the environment directly in front
    act front

    // Target acquired (N=6 means enemy robot)
    if(N == 6)
    {
      right       // Align left-mounted gun
      act left    // Fire!
      left        // Realign facing forward
    }

    // Wall/Barrier detected (D=1 means distance to obstacle is 1)
    if(D == 1)
    {
      right
      right       // 180 degree turn to bounce off the wall
    }
    else
    {
      // Evasive/Hunting movement using the R (Random) register
      // Modulo 4 means it has a 25% chance to randomly turn
      if(R%4 == 0)
      {
        right     // Turn right to sweep a new area
      }
      else
      {
        step      // Otherwise, advance forward
      }
    }
  }
}
You do not have the required permissions to view the files attached to this post.
User avatar
Shaos
Admin
Posts: 25139
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Robot Warfare 1 (RW1) --> Robotic Wapenshaw 2D (RW2D)

Post by Shaos »

При тестировании оказалось, что та версия робота от Gemini оказалось не сильно рабочая - поработали с ним над более рабочим вариантом :)

Code: Select all

Robot "GeminiPrime"
author "Gemini"
color 00FFCC  // Cyberpunk Cyan

// Hardware Loadout
front eye
left gun

main()
{
  while(1)
  {
    // Scan the environment directly in front
    act front

    // Combat Reflex (Enemy = 6) - MULTIPLE commands: requires brackets!
    if(N == 6)
    {
      right
      act left
      left
    }
    // Loot Reflex: Hungry? Take it.
    else if(N == 3) step
    else if(N == 4 && E < 13) step
    // Avoidance Reflex: Wall OR Full Reactor = Turn away
    else if(D == 1 || N == 4)
    {
      left
      left
      step
      right
    }
    // Evasive maneuver - Contains an if/else structure inside: requires brackets!
    else
    {
      if(R%4 == 0) right
      else step
    }
  }
}
User avatar
Shaos
Admin
Posts: 25139
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Robot Warfare 1 (RW1) --> Robotic Wapenshaw 2D (RW2D)

Post by Shaos »

Нашёл всех роботов (600+) которые участвовали в 144 чемпионатах с января 1999 по январь 2006 - также нашёл всю статистику и все нагенерённые таблицы с результатами в формате HTML - наверное надо выложить на http://rwar.net? ;)

И можно новые соревнования начинать по старым правилам :mrgreen:

Причём сразу включить туда ВСЕХ роботов, что были :roll:
User avatar
Shaos
Admin
Posts: 25139
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Robot Warfare 1 (RW1) --> Robotic Wapenshaw 2D (RW2D)

Post by Shaos »

Внезапно наткнулся на ФОРК RW2D от min0ru Vladimir Suravtsov :)
Robot Warfare 2D

An AI-porting experiment — this fork uses AI agents to modernise the original codebase: CMake build system, Linux/SDL2 backend, MinGW cross-compile, and an expanding test suite. See ai/ for the task log.

Robot Warfare 2D is a programmable-robot battle game originally written for Windows with Borland C++. Robots are programmed in a simple custom language, compiled to bytecode, and fight on a tile-based 2D arena.

Origin

This repository is forked from the original source release by A.A. Shabarshin:
Copyright © 1998–2013 A.A. Shabarshin me@shaos.net
Released under the MIT licence (see LICENSE).

The robot source files in robots/src/ were taken from the original project website archive: http://robots.chat.ru/robot_s.zip

Project Goal

This fork is an experiment in AI-assisted software porting. The goal is to take the original Windows/Borland codebase and bring it to a modern, cross-platform toolset using AI agents as the primary development driver:
  • CMake build system replacing the original Borland makefiles
  • Native Linux backend (SDL2 rendering)
  • MinGW-w64 cross-compilation for Windows (preserving the original Win32/GDI frontend)
  • Automated test suite (compiler regression tests, headless runtime tests, render checks)
No manual refactoring of the core game logic — only the platform layer and build infrastructure are touched by the port.
https://github.com/min0ru/rw2d
User avatar
Shaos
Admin
Posts: 25139
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Robot Warfare 1 (RW1) --> Robotic Wapenshaw 2D (RW2D)

Post by Shaos »

Сделал пример запуска 10x10 - чтобы он запустился надо просто запустить RUN1.BAT:
Screenshot from 2026-06-21 08-31-29.png

Code: Select all

killer.rw0
nsimple.rw0
follower.rw1
-hShaos
-dx10
-dy10
-s0
-n0
-gr
-a0,0,0
-a1,1,1
-a2,2,2
-a3,3,3
-a4,4,4
-a5,5,6
-a6,6,6
-a7,7,6
-a8,8,6
-a9,9,6
You do not have the required permissions to view the files attached to this post.
User avatar
Shaos
Admin
Posts: 25139
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Robot Warfare 1 (RW1) --> Robotic Wapenshaw 2D (RW2D)

Post by Shaos »

Добавил опцию -tN которая задаёт лимит времени (пока лимит времени был лишь у опции -i которая включала режим соревнований с 10000 тактами ограничения по времени и текстовым отчётом в конце), а также поправил кое-какие мелочи и ещё восстановил историю изменений виндовой версии в файле HISTORY:

Code: Select all

v2.2.1 (22-JUN-2026)
 - Clarified descriptions of some options
 - New command-line flag -tN to specify a custom maximum time limit for robot fight
 - Correctly set version of compiled binary to 1 to match v1.99 behavior of compiler
 - If robot binary of version 2 is loaded and saved again then version is correctly staying 2

v2.2.0 (21-JUN-2026)
 - Integrated some fixes from min0ru fork
 - Graduated project from the legacy v2.2-alpha tag to a stable release

v2.2-alpha (20-JAN-2013)
 - Officially published source code of RW2D under the MIT License
 - Various internal compatibility tweaks to support future porting efforts (including macOS X tests)
 - Rewrote all C++ parts to pure C

v2.1-beta3 (30-NOV-2005)
 - Unreleased version that was never used to conduct championships

v2.1-beta2 (26-JAN-2003)
 - Last official shareware version (after 2006 it got a free registration key for all to use)
 - Supports up to 255 robots simultaneously
 - Fixed error in flying missile drawing procedure
 - Now it is possible to work from Program Files
 - Experimental support of tracker music through MikMod
 - New registration keys format

v2.1-beta (22-OCT-2002)
 - Dynamic changing of window dimensions
 - Two way communication with RW1_EDIT
 - Early version of v2.1

v2.0.6 (14-AUG-2001)
 - Stable version that was used to conduct RW1 championships from #106 (Jan 2002) to #144 (Jan 2006)
 - Added undocumented option -p2-name.spr to test tile engine for RW1P2
 - Fixed assignment operator for registers A,B,C
 - No more error message in case of arithmetic overflow
 - All shifts are unsigned

v2.0.5 (05-AUG-2001)
 - Stable version that was used to conduct RW1 championships from #103 (Aug 2001) to #105 (Jan 2002)
 - Ability to fill map by hand through options -a
 - Map generation option -n0 makes empty map
 - Added options -dxN and -dyN to define size of the map

v2.0.4 (01-JUL-2001)
 - Stable version that was used to conduct RW1 championships from #101 to #102 (Jul 2001)
 - Removed scrollbars
 - Winner rules relaxed (be alive is enough)

v2.0.3 (21-JUN-2001)
 - This version was used to conduct RW1 championship #100 (Jun 2001) - 1st for v2 robots
 - Modified for championships using -i option (10000 ticks limit)
 - Map number could be decimal or hexadecimal now (-n14 or -n#0E) 
 - If both option -i and -f2 used then program is minimized
 - Fixed bug of SAY array element
 - Fixed bug of array initialization

v2.0.2 (31-MAY-2001)
 - Showing list of options if EXE launched without arguments
 - You can select robots by mouse and see their energy level and missiles number
 - Option -hAUTHOR enables sending doubleclick to robots with matching author name as events from source -1

v2.0.1 (15-APR-2001)
 - First working version of RW1_WIN.EXE
 - Fixed bug in processing Var(1) in case of a register

v2.0-alpha (22-JUL-1999)
 - Started work on Windows version of RW1 fight visualizer based on classic RW1_DUEL v1.x
Приаттачиваю сюда архив с исходниками, куда вручную добавил rw1_win.exe собранный фриварным компилятором Borland C++ v5.5.1 (2000) - должно работать даже на Win95 :mrgreen:
You do not have the required permissions to view the files attached to this post.
User avatar
Shaos
Admin
Posts: 25139
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Robot Warfare 1 (RW1) --> Robotic Wapenshaw 2D (RW2D)

Post by Shaos »

Читаю исходники - вспоминаю как оно всё работает

Инструкции RobbyVM не все занимают один такт - некоторые могут выполняться в рамках одного такта, причём их может набраться до 10 штук подряд - это 0x00 (NOP), 0x01 (DEF array), 0x20 (Var=Var или Var=Num), 0x30 (GOTO label), 0x31 (CALL label), 0x33 (RET), 0x41 (IFY Var Var ), 0x42 (IFN Var Var), 0x43 (GOTO Var), 0x44 (CALL Var) и 0x63 (POP)

Некоторые новые инструкции в этом интерпретаторе ещё не сделаны - это PIXEL, FILL, PLANE, COLOR, COPYP, SENDP, RECVP, PUSH и CLEAR (можно ещё GET добавить т.к. оно в Circuits.CC используется)
User avatar
Shaos
Admin
Posts: 25139
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Robot Warfare 1 (RW1) --> Robotic Wapenshaw 2D (RW2D)

Post by Shaos »

Выкатил v2.2.2

Code: Select all

v2.2.2 (23-JUN-2026)
 - Renamed rw1_win to rw2d_win
 - Simplified About dialog (F1)
 - Supported other file extensions as ROBOT, RO and BCODE
 - Changed color of energy indicator for selected robots (now it's orange)
 - Extended number of pre-allocated registers to 32 for future use
Приаттачиваю архив с исходниками и бинарником (6c7c3119eed7491a1f07dd005546fbd53dd67e581cf7ddd38531303f742662b3 rw2d_win.exe):
You do not have the required permissions to view the files attached to this post.
User avatar
Shaos
Admin
Posts: 25139
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Robot Warfare 1 (RW1) --> Robotic Wapenshaw 2D (RW2D)

Post by Shaos »

Вот ещё такая бага есть с 2003 года:
при выполнении команды
rw1_win yyy02.rw0 xbm102.rw0 -dm -i -n#3160
при взрыве самого левого реактора на его месте не отображается дырка, хотя
робот её обнаруживает.
Поэтому при просмотре боя с нормальной скоростью возникают вопросы - почему
робот не видит патроны сквозь эту "невидимую" дырку. Все это проявляется
практически сразу после 1000-го такта.
Скорее это вызвано тем, что каждые 1000 тактов в режиме Death Match реакторы и коробки со снарядами появляются снова - видимо при появлении не сработала перерисовка объектов (проверил - перерисовка на тысячном такте сработала, но появились только снаряды, а при взрыве того реактора действительно дырка не прорисовалась т.к. туда же наложился другой взрыв - надо исправлять)

P.S. Похожие проблемы с перерисовкой есть при подзарядке у реактора - если робот выделен, что показывает его текущий уровень зарядки и количество ракет, то его уровень энергии не растёт, пока он не двигается
User avatar
Shaos
Admin
Posts: 25139
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Robot Warfare 1 (RW1) --> Robotic Wapenshaw 2D (RW2D)

Post by Shaos »

Добавил оригинальный звук из 1998 года (правда в один канал т.к. играется через WinAPI PlaySound) :mrgreen:

Code: Select all

v2.2.3 (24-JUN-2026)
 - Added original 8-bit sound from 1998 but only mixed in 1 channel
 - Removed rudiments of two-way communication with RW1_EDIT as we don't use it anymore
Выкладываю архив исходников с добавленными бинарниками rw1_win.exe и rw1_comp.exe (ниже контрольные суммы SHA256):

Code: Select all

8d0946a52875a4ddee528d61460dbed542ffe0f3a371ff3e41f218f8d9b19256  rw2d_win.exe
5936b36bc2c8b3285ec51a7f97f1a0ae0503a6d4d19b647f8a3c11f967b011aa  rw1_comp.exe
rw2d-v2.2.3.zip
Видео со звуком:


P.S. Пережал видео т.к. звуковая дорожка не во всех браузерах играла...
You do not have the required permissions to view the files attached to this post.
User avatar
Shaos
Admin
Posts: 25139
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Robot Warfare 1 (RW1) --> Robotic Wapenshaw 2D (RW2D)

Post by Shaos »

Через архив интернета нашёл как выглядел вебсайт англоязычной рассылки по моим роботам в 2006 году (после проведения последнего чемпионата №144):
You do not have the required permissions to view the files attached to this post.
User avatar
Shaos
Admin
Posts: 25139
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Robot Warfare 1 (RW1) --> Robotic Wapenshaw 2D (RW2D)

Post by Shaos »

До того как у меня появился этот форум у меня был мой собственный написанный на перле микрофорум :mrgreen:
You do not have the required permissions to view the files attached to this post.
User avatar
Shaos
Admin
Posts: 25139
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Robot Warfare 1 (RW1) --> Robotic Wapenshaw 2D (RW2D)

Post by Shaos »

В связи с тем, что все сообщения с 27 июня до момента хака форума (3 июля) похерились, я снова перепосылаю то, что написал по поводу RW2D в тот промежуток времени...

Последняя версия Robotic Wapenshaw:

Code: Select all

v2.2.4 (28-JUN-2026)
 - Forgot to disable sound in -f2 mode
 - Faster mode -f2 became adaptive (takes 50% of time)
 - Shifted starting point of explosion sound
 - Rotation sounds now match moving sounds for odd and even robots
Хэш RW2D_WIN.EXE:

Code: Select all

0b96525f8c7bbec464e28981f43e3831cb56a7da9dd18bcdd9584a00630abe039d9aa4c878513975787d5c733614319d7920b7bce40a24daa8b978cae314d357  rw2d_win.exe
Архив исходников с EXE-шником:
You do not have the required permissions to view the files attached to this post.
User avatar
Shaos
Admin
Posts: 25139
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Robot Warfare 1 (RW1) --> Robotic Wapenshaw 2D (RW2D)

Post by Shaos »

Восстановил программу проведения чемпионатов и переписал её на чистый Си (в репе уже есть, а бинарную сборку пока не выкладываю). Переиграл на новом софте пару классов старого чемпионата №119 (проводился 4 ноября 2001 года) - все результаты сошлись один в один :mrgreen:

Значит RW1 реально повторяем в полностью детерминированном виде (ход игры зависит от начального кода карты ну и самого набора участвующих роботов).

Проверял классы которые игрались версиями v2.1-beta2 (этой версией я только один класс почему-то провёл в своё время) и v2.0.6 (а эта версия играла все последние чемпионаты начиная с №106 до самого последнего №144 в 2006 году) - класс на 342 боя (19 роботов) играется 10 минут, а класс на 420 боёв (21 робот) играется почти 13 минут (всё через Wine).

Теперь надо проверить то, что игралось более ранними версиями v2.0.4 и v2.0.5 (чемпионаты 101-105)- вот там могут быть проблемы с повторяемостью т.к. в v2.0.6 я кое-что исправил/переделал

Code: Select all

v2.1-beta2 (26-JAN-2003)
 - Last official shareware version (after 2006 it got a free registration key for all to use)
 - Supports up to 255 robots simultaneously
 - Fixed error in flying missile drawing procedure
 - Now it is possible to work from Program Files
 - Experimental support of tracker music through MikMod
 - New registration keys format

v2.1-beta (22-OCT-2002)
 - Dynamic changing of window dimensions
 - Two way communication with RW1_EDIT
 - Early version of v2.1

v2.0.6 (14-AUG-2001)
 - Stable version that was used to conduct RW1 championships from #106 (Jan 2002) to #144 (Jan 2006)
 - Added undocumented option -p2-name.spr to test tile engine for RW1P2
 - Fixed assignment operator for registers A,B,C
 - No more error message in case of arithmetic overflow
 - All shifts are unsigned

v2.0.5 (05-AUG-2001)
 - Stable version that was used to conduct RW1 championships from #103 (Aug 2001) to #105 (Jan 2002)
 - Ability to fill map by hand through options -a
 - Map generation option -n0 makes empty map
 - Added options -dxN and -dyN to define size of the map

v2.0.4 (01-JUL-2001)
 - Stable version that was used to conduct RW1 championships from #101 to #102 (Jul 2001)
 - Removed scrollbars
 - Winner rules relaxed (be alive is enough)
P.S. Глубже 101-го чемпионата я не лезу т.к. там была досовская версия v1 и другой подсчёт очков - перед проведением чемпионата №101 (16 июля 2001 года) я сбросил у оставшихся роботов все старые очки и начал считать всё заново с нуля (с этого момента за победу стало даваться 2 очка, за ничью - каждому по 1 и за проигрыш - 0) плюс начиная с v2.0.4 стало проще выиграть бой - достаточно остаться в живых, в то время как другой робот упал в яму либо выстрелил в рядом стоящую электростанцию и самоубился (раньше робот должен был собственноручно прибить противника, чтобы считаться победителем и ничья не давала никаких очков)...
User avatar
Shaos
Admin
Posts: 25139
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Robot Warfare 1 (RW1) --> Robotic Wapenshaw 2D (RW2D)

Post by Shaos »

Shaos wrote: 04 Jul 2026 13:23 Проверял классы которые игрались версиями v2.1-beta2 (этой версией я только один класс почему-то провёл в своё время) и v2.0.6 (а эта версия играла все последние чемпионаты начиная с №106 до самого последнего №144 в 2006 году) - класс на 342 боя (19 роботов) играется 10 минут, а класс на 420 боёв (21 робот) играется почти 13 минут (всё через Wine).

Теперь надо проверить то, что игралось более ранними версиями v2.0.4 и v2.0.5 (чемпионаты 101-105)- вот там могут быть проблемы с повторяемостью т.к. в v2.0.6 я кое-что исправил/переделал
Прогнал все бои всех классов (F,E,D,C,B,A) чемпионата №103, который в своё время (31 августа 2001 года) игрался с помощью RW1_WIN v2.0.5 - всё совпало :)

Теперь на очереди 101 и 102, которые игрались v2.0.4

P.S. Новые результаты всех боёв всех классов (F,E,D,C,B,A) чемпионата №101 тоже совпали со старыми записями :mrgreen:

P.P.S. При детальной сверке выяснилось, что в классе A чемпионата 103 был один бой (один из 420) в котором примерно после 543-го такта события в новой версии стали развиваться иначе:
Glitch103a.png
Как можно видеть в старой версии (слева) нижний робот поехал направо, а в новой версии (справа) нижний робот поехал налево! Причём старое поведение наблюдалось в версиях 2.0.5, 2.0.6 и 2.1-beta (у меня есть их EXE-шники), а новое поведение - в 2.1-beta2 (тоже есть EXE из последнего релиза 2003 года) и новой сборке - причём результат боя как такового остался прежним - робот Мухомор (красный робот с белыми точками) победил (точнее дождася когда нижний робот совершил харакири путём вызова инструкции RET из главной функции программы), но с разным количеством тактов и с разным расходом ракет. В чём дело пока не разобрался т.к. исходников старой виндовой версии у меня нет - только 2.1-beta2+ (aka 2.2-alpha) из которой я собственно и сделал опенсорсную RW2D в 2013 году и историю изменений я вёл достаточно куцо, чтобы понять, что я собственно там понаделал - вот русский список изменений, который я в своё время (январь 2003) описал при переходе от 2.1-beta к 2.1-beta2:

Code: Select all

+ возможность обсчитывать до 255 роботов одновременно
+ исправлена досадная ошибка в отображении ракеты на карте
+ возможность работать из Program Files
+ проигрывание музыки через MikMod
+ новый формат регистрационных ключей
You do not have the required permissions to view the files attached to this post.