|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22729 Location: Silicon Valley
|
Народ продолжает спрашивать по почте про RW1, поэтому я сегодня собрал всё что надо и выложил по старому адресу проекта: http://robots.chat.ruКачайте, кому интересно - там даже регистрационный ключ есть (типа варез)
|
19 May 2011 23:03 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22729 Location: Silicon Valley
|
Так как 3D версия у меня застопорилась, решил вернуться к первоисточнику - появилась мысль сделать реал-тайм стратегию Robot Warfare 2D с возможностью программировать юнитов
P.S. За основу можно взять исходники виндовой версии RW1, выкинув оттуда весь WinAPI код, заменив вывод графики на SDL спрятанный под одним уровнем абстракции, чтобы в будущем к примеру можно было на iPad переписать. Можно также графику сделать более похожей на первую версию, а также звуки из первой версии надо вернуть обратно.
P.P.S. В коде есть ряд известных ошибок, которые надо исправить:
- проверить имплементацию регистра S (глубина стека);
- заимплементить COPYP, SENDP, RECVP;
- поправить код зарядки у реактора (должна быть единица энергии за 5 тактов);
- если стрелять навстречу идущему роботу, то снаряд не должен теряться;
- иногда при движении робота сквозь снаряд или взрывы на экране остаётся висеть половинка робота.
|
14 Jan 2013 14:45 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22729 Location: Silicon Valley
|
О - нашёл упоминание про "Robot Warfare 1" в википедии
|
14 Jan 2013 21:05 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22729 Location: Silicon Valley
|
| | | | Shaos wrote: Так как 3D версия у меня застопорилась, решил вернуться к первоисточнику - появилась мысль сделать реал-тайм стратегию Robot Warfare 2D с возможностью программировать юнитов P.S. За основу можно взять исходники виндовой версии RW1, выкинув оттуда весь WinAPI код, заменив вывод графики на SDL спрятанный под одним уровнем абстракции, чтобы в будущем к примеру можно было на iPad переписать. Можно также графику сделать более похожей на первую версию, а также звуки из первой версии надо вернуть обратно. P.P.S. В коде есть ряд известных ошибок, которые надо исправить: - проверить имплементацию регистра S (глубина стека); - заимплементить COPYP, SENDP, RECVP; - поправить код зарядки у реактора (должна быть единица энергии за 5 тактов); - если стрелять навстречу идущему роботу, то снаряд не должен теряться; - иногда при движении робота сквозь снаряд или взрывы на экране остаётся висеть половинка робота. | | | | |
Исходники замечательно собираются борландовским фришным компилятором из под Wine (эмулятор винды в Linux), но у программ есть проблемы в Wine, которых нет в живой винде: Как видно в редакторе съезжает подсветка синтаксиса, а в визуализаторе боёв не рисуются камни... Также обнаружил, что хоть я и выкатывал последнюю официальную версию "Robot Warfare 1" в 2003, многие исходные файлы помечены 2005-м годом - значит я что-то с исходниками делал, только что не помню... P.S. В 2005 году я также хотел новый сайт про RW1 организовать по адресу http://rwar.net вот с такой вот мордой (жена-дизайнер смастерила):
|
16 Jan 2013 16:50 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22729 Location: Silicon Valley
|
Проблему с камнями исправил - файл ресурсов STONE.BMP почему-то являлся валидной картинокй только в винде - пересоздал его заново и пересобрал - черные квадраты исчезли
|
16 Jan 2013 17:36 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22729 Location: Silicon Valley
|
На всякий случай перепечатываю сюда правила проведения классических RW1-соревнований - чтобы было
| | | | Quote: Правила были установлены в 1999 и слегка подправлены в 2000 году - с тех пор не меняются. Соревнования проходят на одной карте, которая генерируется из даты проведения соревнований и числа участвующих роботов (способ генерации карты последний раз менялся в июне 2001 года - вместе с переходом на версию 2.0). Роботы воюют по двое - каждый с каждым по два раза (второй раз роботы меняются местами на карте) в пределах своего класса (о классах см.далее). Каждая битва ведется в течении 10000 тактов боевого времени. Выигрывает робот, убивший соперника и оставшийся в живых. В случае, если во время боя никто не погибнет, результатом игры считается НИЧЬЯ. То же самое относится к случаю, когда выжил никого не убивший робот (например, погибший робот просто упал в яму или выполнил некорректную инструкцию).
Все роботы разделены на классы. Самым лучшим считается класс А. По результатам боев в классе А высчитывается десятка лучших роботов (с учетом всех предыдущих соревнований). Каждый класс содержит 21 робот (кроме последнего класса - там может быть от 10 до 29 роботов). В одном бою участвуют только два робота из одного класса. Если в классе представлены N роботов (обычно 21), то проводится N*(N-1) боев. Каждый робот участвует в 2*(N-1) боях. Например, если в одном классе 21 робот, то проводится 21*20=420 боев (каждый с каждым по два раза) и каждый робот участвует в 40 боях. После каждого боя 2 очка приписывается роботу-победителю, а проигравший получает 0 очков. При ничье оба робота получают по 1 очку. В случае 21 робота, максимальное количество очков, которое может набрать робот - 80. Первый робот в каждом классе по итогам боев в этом классе называется "сквозной робот" ( или просто "сквозняк" : ) - он переходит в верхний класс и воюет там в этих же соревнованиях.
Вообще процесс игры можно представить так - существует большой список роботов, расположенных на своих местах по итогам последних соревнований. Новые роботы помещаются в конец списка по мере поступления. Алгоритм проведения соревнований: 1. Удаление роботов, которые были удалены игроками 2. Разбиение всего списка роботов на группы по 20 (в последнем классе допускается наличие от 10 до 29 роботов) 3. Назначение последнего класса текущим 4. Проведение соревнования в текущем классе 5. Если текущий класс не является последним, то пометка последних ТРЕХ роботов, как переходящих в нижний класс 6. Если текущий класс является последним, то удаление последних ТРЕХ роботов и роботов, набравших 0 очков 7. Если текущий класс не является первым, то переход робота занявшего ПЕРВОЕ место в верхний класс (сквозной робот) и пометка роботов, занявших ВТОРОЕ и ТРЕТЬЕ место, как переходящих в верхний класс 8. Если текущий класс является первым, то назначение робота, занявшего ПЕРВОЕ место, победителем соревнований. Переход к 10 9. Назначение верхнего класса текущим. Переход к 4 10. Перемещение роботов, помеченных как переходящих в верхние или нижние классы. 11. Объединение всех роботов в один большой список для следующих соревнований
| | | | |
|
19 Jan 2013 09:37 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22729 Location: Silicon Valley
|
Вот ещё откопал скриншот 2002 года, показывающий возможности виндовой версии
Картинка кликабельная!
|
19 Jan 2013 10:35 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22729 Location: Silicon Valley
|
На днях сидел с младшей дочкой ночью (ей как обычно не спалось) и от нечего делать набросал новую графику для "Robot Warfare 1":
Теперь становится понятно, почему камни можно вышибать пятью выстрелами (потому что они из пяти шаров состоят, количество которых уменьшается после каждого попадания) и видно, что подобрав вращающуюся вязанку снарядов робот получает ровно 10 штук (снаряды теперь больше на шарики похожи).
P.S. Сейчас у меня задача перевести код на голимый Си (там C++ очень немного и он не страшный) и абстрагировать уровень вывода графики и звука, чтобы можно было переставить c WinAPI на SDL или на что угодно.
|
19 Jan 2013 10:36 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22729 Location: Silicon Valley
|
Всё - код переведён на голимый Си
|
19 Jan 2013 23:36 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22729 Location: Silicon Valley
|
Приведу мысли о возможных расширениях игры. В 2005 году я уже предложил роботам RW1 играть в футбол:
Как видно к существующим типам клеток (тип клетки задаётся 4 битами) добавляются новые (помечены жирным шрифтом):
0 - пусто (робот может проезжать по этой клетке);
1 - яма (робота погибает попав в яму, робот не видит ничего за ямой из-за выходящего из неё дыма, однако снаряды могут пролетать через яму);
2 - камень (робот не может пройти сквозь камень, но может его расстрелять пятью выстрелами);
3 - ящик со снарядами (робот может его подобрать, при попадании снаряда происходит взрыв 3x3);
4 - ядерный реактор (робот не может пройти сквозь реактор, может около него подзаряжаться, при попадании снаряда происходит взрыв 5x5 и остаётся яма на месте реактора);
5 - летящий снаряд (робот может пройти сквозь эту клетку);
6 - робот (чужой робот, которого надо убить);
7 - свой робот (в режиме командных боёв - таких роботов убивать ненадо);
8 - мяч для игры в футбол (или вообще любой предмет, который робот может толкать перед собой);
9 - твёрдый камень (робот не может его расстрелять);
10 - стена вокруг поля боя;
11 - ворота первой команды;
12 - ворота второй команды;
13 - зарезервировано на будущее;
14 - зарезервировано на будущее;
15 - зарезервировано на будущее.
P.S. Код 7 является "виртуальным", т.к. таким кодом видятся клетки со своим роботом (т.е. код клетки с роботом всё-таки 6). В 2005 году я думал и ворота (11 и 12) сделать виртуальными - разные коды будут видится разным командам - но теперь я думаю, что это плохая идея - просто робот должен знать номер своей команды (можно ввести новый регистр J).
P.P.S. У каждой клетки кроме 4-битного типа есть ещё 4-битное состояние (например кол-во "жизней" у камня или направление полёта снаряда) и дополнительный 8-битный идентификатор, в котором сейчас хранится порядковый номер робота, но в будущем можно хранить идентификатор тайловой картинки в игре (т.е. например камни или пустые клетки могут выглядеть по разному в разных частях поля).
|
20 Jan 2013 09:59 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22729 Location: Silicon Valley
|
Старые C/C++ исходники досовской "Robot Warfare 1 Open Game" опубликованные ещё в 2001 году (5.6K строк кода): https://gitlab.com/shaos/rw1oНовые чисто сишные исходники виндовой версии - прототипа "Robot Warfare 2D" (7.6К строк кода): https://gitlab.com/shaos/rw2dЧтобы собрать запускаем make.bat (надо иметь борландовский виндовый компилятор - пути править в make.bat и makefile) P.S. Исходники редактора rw1_edit (являющегося ещё и средой разработки) не выкладываю т.к. автор большей его части не я... P.P.S. Переселился на gitlab летом 2018 года
Last edited by Shaos on 23 Jan 2013 20:37, edited 1 time in total.
|
20 Jan 2013 14:32 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22729 Location: Silicon Valley
|
В программу RW2D встроен старый компилятор RW1_COMP ("новый" RW1C не могу встроить - он написан как самостоятельное приложение и опубликован под GPL ещё в 2006 году). Так вот на старом языке RW1 я только что написал робота, следующего за кликом мыши, причём если клик мыши был на вражеском роботе или на камне, то наш робот выйдя на прямую линию выстреливает 5 снарядов в направлении клетки, в которую кликал игрок (правда вражеский робот может оттуда уже уйти, тогда игрок должен перекликать в новое место):
|
21 Jan 2013 00:52 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22729 Location: Silicon Valley
|
Еще вариант - графику выводить через OpenGL, а звук - через libmikmod
Я этот вариант 10 лет назад пробовал - получилось весело
А еще OpenGL позволяет делать красивые эффекты с огнем и дымом...
P.S. Вариант OpenGL+libmikmod был проверен в Linux, Windows и вот теперь MacOS X
|
24 Jan 2013 22:53 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22729 Location: Silicon Valley
|
Эти исходники были мной зарелизены в 2001 году под очень странной самопальной лицензией: Вот думаю перелицензировать под MIT-лицензией (не хочу в этом случае использовать GPL т.к. она ужесточит и усложнит лицензию, а хотелось бы наоборот смягчить и упростить) и старый, и новый код: т.е. лицензия будет выглядеть так: Copyright (c) 1998-2013, A.A.Shabarshin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
13 Feb 2013 16:34 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22729 Location: Silicon Valley
|
перелицензировал: https://gitlab.com/shaos/rw1ohttps://gitlab.com/shaos/rw2dзаодно в RW2D убрал весь WinAPI код в rw1_win.c - теперь можно портировать куда угодно P.S. Переселился на gitlab летом 2018 года
|
14 Feb 2013 21:20 |
|
|
Who is online |
Users browsing this forum: No registered users and 5 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|