Разработка
Разработка рогаликов с нуля
Итак, Вы захотели разработать свой рогалик.
Разработка разделиться на несколько частей:
- Техническая (выбор языка программирования и библиотек);
- Дизайнерская (создание интерфейса, ASCII графики, возможно создание или выбор музыки);
- Художественная (создание мира, персонажей, предметов и тп);
- Научная (??) (создание ИИ НПС-ов, системы создания персонажа и тп).
Рассмотрим каждую часть в отдельности.
Содержание |
Техническая
Первый вопрос, который появляется при намерение практически реализовать игру, это "А на каком языке писать?". Второй вопрос, который возникает, это "Какими библиотеками, или движками пользоваться?".
На этот счёт у каждого человека свой ответ, кто-то ответит: "какой удобнее" и "какой знаешь", кто-то скажет, что нужно использовать высокоуровневые языки, которые можно разделить на:
- Объектно-ориентированные
- Функциональные
- Логические
Кто-то будет утверждать, что нужно писать по старинке, на C или C++ (обосновывая это тем, что большинство рогаликов написано на этих языках) Кто-то скажет, что Java это всё и вся и ООП, и кросс платформенный и тп.
После выбора языка (в случае, если вы намерены изучить новый язык) появляется ещё одна проблема, это выбор движка для написания рогаликов. В настоящий момент общество создателей рогаликов достаточно разбитое, то есть каждый пишет что умеет и как правило не очень любит смотреть на то, что делают другие.
Как следствие, большинство рогаликов пишутся с нуля, то есть сначала создаётся движок, потом доращивается до рогалика. Существует множество инструкций, которые поэтапно описывают процесс создания рогалика, например How_to_Write_a_Roguelike_in_15_Steps
Но и существует большое количество движков, правда они мало популярны, многие из них не используемых никем, кроме авторов. Причём некоторые из них удобные другие не очень.
Итак, рассмотрим парадигмы программирования, языки программирования и движки.
Парадигмы программирования
Как же говорилось выше, на данный момент наиболее популярны это такие парадигмы:
- Функциональные;
- Логические;
- Структурные;
- Объектно-ориентированные.
Функциональные (к ним относятся Lisp, Haskell, Ocaml) как правило достаточно сложны для изучения, но они приобрели большую популярность среди людей занимающихся точной наукой, такой как математика, физика.
Логические (к ним относится Prolog). Prolog был придуман в надежде поднять интеллект компьютера. Но из-за своей недостаточной гибкости, сложности он используется крайне редко. Но на нем всё же существует множество удачных проектов, в том числе написаны рогалики.
Структурные (язык C, Pascal). Самый низкоуровневый кросс-платформенный язык программирования, который получил очень большую популярность в мире. На нём пишут и продолжают писать множество рогаликов, создают множество движков. Язык C хорошо работает в связке с другими языками программирования. Имеет высокую скорость работы. Pascal используется как правило студентами. На чистом Pascal-е практически не пишет никто. Хотя на нём существует множество рогаликов и как минимум один очень продвинутый движок.
Объектно-ориентированные (C++, Java, Ruby, Python...), парадигма приобрела очень большую популярность.
Языки
C++ является одним из самых популярных языков, представляет из себя смесь низкоуровневого языка C с высокоуровневой парадигмой ООП, из-за чего является достаточно сложным.
Java напоминает синтаксис C++, но является на прядки проще, имеет множество "фанатов" и "ненавистников". Свою антипатию вероятно получил из-за витальной машины и закрытой лицензии(на тот момент).
Ruby попытка создать чистый ООП язык, в действительности получился один из самых близких к ООП языкам. Является ещё проще чем Java, но имеет большой недостаток в скорости.
Python язык, который должен заменить Perl. Появился не так давно и быстро захватил весь мир свободного программного обеспечения. Его код можно найти практически в каждом дистрибутиве GNU/Linux, во многих программах как закрытых так и свободных. Как правило при написании движков, для скриптов используют именно его.
Кросс платформенность
Если вы делаете рогалик не только для себя, то необходимо задуматься о том, что бы он работал у других. Имеет смысл выбирать такие библиотеки, движки и языки программирования, что бы они успешно работали как на MS Windows, так и на GNU/Linux, FreeBSD и прочих системах.
Так же важно поставлять Readme файлы с тем, как запустить ваш рогалик под каждую ОС. И, при возможности, делать бинарные дистрибутивы под каждую ОС.
На примере рогалика DoomRL можно убедится что около 20% пользователей являются пользователи GNU/Linux. DoomRL download
Движки
Итак, настало время рассмотреть существующие движки. Нужно заметить, что выбор движка может определять и язык программирования который вам придётся использовать. Если движок использует низкоуровневые языки программирования, типо C или C++, то это даёт (иногда только теоритическую) возможность писать на любом языке более высокоуровневом языке. Если движок написан на языках типо Java, Ruby, Python то это как правило даёт очень большие проблемы для написания рогаликов на отличном от языка движка языке.
Движки дают очень хорошую возможность особо не задумываться над реализацией того, что собственно не очень нужно знать при написании игры. Например как проигрывать музыку, как обрабатывать нажатие клавиш, как отрисовывать графику, как делать локализацию и многое другое.
Но с другой стороны они требуют некоторого времени на изучения и при плохой документации время изучения может быть больше чем время затраченное на написание нового.
Valkyrie
Движок созданный Kornel Kisielwicz.
Язык программирования: FreePascal.
Лицензия: Свободная (LGPL) Используемые библиотеки:
Разработанные игры:
- Doom, the Roguelike (by Kornel Kisielwicz),
- Diablo, the Roguelike (by Kornel Kisielwicz),
- Berserk (by Kornel Kisielwicz),
- AliensRL (by Kornel Kisielwicz).
qhack
Самый известный, но это скорее всё же tutorial, а не движок.
H-World
Сехнически самый продвинутый движок из всех. Графика (изометрия и обычная), звук, вся игровая логика в скриптах на lua, встроенный микро браузер html, для диалогов и справки. Кроме автора, на нём пытались сделать только один проект. Заброшен автором.
libfov
Достаточно правильная идея вынести в библиотеку только одну, часто используемую и не очень простую вещь. Сделана как можео менее зависимой от прочих частей игры. Вроде кто-то пытался использовать, но не припомню доживших до релиза проектов.
Doryen(libtcod)
Написанные на нём игры лего выделяются внешним видом, часто не вписываются в каноны жанра и в подавляющей массе являются экспериментальными.
Angband
Это вообще не движок, а игра. Но хороший, понятный код позволили на его основе создать не один десяток других проектов. Правда, при этом большинство очень похожи на исходную игру. Одно из таких ответвлений - TOME, в свою очередь обзавёлось очень сильной поддержкой стороних модификаций, но пока не имеет серьёзных проектов.
Дизайнерская
Графика
Нужно раз и навсегда решить, хороший из вас дизайнер, или плохой. Если плохой, то нужно предусмотреть возможность классического рогалика, такого, что бы были только буквы, из графики можно позволить сделать их разноцветными.
Сами рогалики преобрели популярность не из-за красивой графики. А из-за хорошего сюжета, свободы действий и прочего. Если графика накладывает ограничения на разработку рогалика, лучше вовсе от неё отказаться или сделать возможность отключения. Как, например, это сделано в основных популярных играх: Nethack, Angband и тп.
Звук
Как правило это очень редкая вещь в рогаликах, но хорошо подобранный звук очень хорошо поднимает геймплей рогалика.
Один из самых ярких примеров это coffee-break рогалик DoomRL.
Художественная
Натырить из темы: http://rlgclub.ru/forum/viewtopic.php?f=7&t=209 И отсюда: http://rlgclub.ru/forum/viewtopic.php?f=7&t=267 Ещё накидать ссылок на уже существующие миры.
Научная
Аналогично Художественной, но нужно вставить конкретные расчеты.