Страница 1 из 1

7евен дей рогулайк.

Добавлено: 10 янв 2010, 20:05
Эльф
Итак, мы с Троллем, пользуясь новогодними праздниками, решили поиграть в благородный жанр "напиши рогалик за 7 дней".

Мне захотелось написать некую пародию на jrpg вообще, и на 5 final fantasy в частности. Благо, оторванные от привычного контекста все эти белки, швыряющиеся орехами, и механики, оглушающие гаечными ключами, сами по себе уже смотрятся комично. Название - Aomadashi, что в переводе на язык гайдзинов означает "голубой маг" (not gay), суть такова: злой колдун сжигает деревню, но в живых остается маленький мальчик, который в это время как раз ходил за покупками в ближайший супермаркет. Мальчик плачет на пепелище и клянется отомстить (двухчасовой ролик на три компакта будет включен в финальную версию), спускается вслед за колдуном в локальный данжн, и там обнаруживает в себе способности голубого мага, то есть, может повторить некоторые заклы из тех, что скастованы на него.

Вот такие вот были фантазии, которые к середине недели полностью истощились, поскольку сама игра в процессе написания осточертела мне сверх всякой меры, и вторую половину недели я писал ее исключительно на морально-волевых качествах, и как доктор Моро пришивал нужные куски, нисколько не заботясь о внутреннем содержании. Формально игра закончена, ее можно пройти (все 5 левелов с 5 типами монстров и 5 предметами, ололо!), вроде бы все на месте, и даже сделано не очень криво (за исключением генерации лабиринтов).

Теперь, что я хотел спросить. Во-первых, графон. Признаться, глядя на заготовку Максима я испытывал некоторую зависть, и четко понимал, что времена адомоподобной графики уже давно прошли, и даже успешные проекты вроде doomrl не меняют этого факта. Хочу как в крузис. Максим, не скажешь, на чем ты писал noir?

Во-вторых, генератор уровней. До этого мне как-то подземелья не приходилось генерить - все больше города да отсеки космической станции. Я в первый день провел часа 4 над раздумьями о том, как сгенерить нормальный dungeon, рассматривал исходники Hero Blade, понимал как должен выглядеть нормальный код, стыдился своего убогого кода, но в результате ничего не понял.

Соответственно, один вопрос к BreakMt - я застопорился на процедуре MoveTo, которая должна пробивать коридор к комнате, огибая препятствия, но фактически коридор доходит до клетки с комнатой, а затем безо всяких проверок поворачивает на 90 градусов. А если там коридор, или хуже того, стена соседняя с коридором?

Ну и второй вопрос ко всем остальным - опишите, плз, алгоритм для построения нормального подземелья.

Как-то так.

upd. нашелся глюк с потреблением поушена, исправлено.

Re: 7евен дей рогулайк.

Добавлено: 10 янв 2010, 20:33
Харука-тян
Эльф писал(а):опишите, плз, алгоритм для построения нормального подземелья.
Мерцание пр перерисовке экрана несколько мешало комфортно пройти до конца, но я убедилась в играбельности^^

Пара слов о подземельях: классическая генерация предусматривает разбивку карты на прямоугольные зоны, в каждую из которых помещается комната. После этого комнаты соединяются вертикальными и горизонтальными корридорами. (QHack, Rogue)
Немного сложнее (как в Lanceran, например): Комнаты набрасываются в хаотичном порядке (не внахлёст), после чего произвольными парами соединяются L-образными корридорами. В случае пересечения корридоров - новая генерация лабиринта. Колличество комнат и их минимальные/максимальные размеры подбираются опытным путём.
После генерации такого лабиринта не помешает сделать рекурсивную FloodFill- проверку на возможность попасть в любую точку подземелья. А перед этим вычистить тупики. (Проверять последовательно все клетки на наличие трёх соседних стен, [соседние - только по вертикали и горизонтали], и в случае совпадения признака - заменять её стеной и рекурсивно проверять её "соседей").
Для пещер: Комнаты набрасываются непрямоугольные, можно внахлёст. Соединяются корридорами в форме дуг, змейки или прямой. Непрямоугольная строится как эллипс, с искажением вдоль длинной оси.

Да, я люблю рекурсии^^ Но, надеюсь, мои рассуждения хоть немного полезны.

Re: 7евен дей рогулайк.

Добавлено: 10 янв 2010, 20:48
Эльф
Харука-тян писал(а): Пара слов о подземельях: классическая генерация предусматривает разбивку карты на прямоугольные зоны, в каждую из которых помещается комната. После этого комнаты соединяются вертикальными и горизонтальными корридорами.
Я именно так и сделал, только чуть более хитрыми коридорами соединял. В результате получается все то же двоичное дерево, но чуть менее банально выглядящее.
Харука-тян писал(а): В случае пересечения корридоров - новая генерация лабиринта.
Вот этот момент можно поподробней?

Я когда смотрел код BreakMT, там примерно так и было, но меня смущает такой момент, что при рисовании нового коридора он может, полбеды, пересечься со старым, и целая беда - если он пройдет совсем рядом, образуя таким образом коридор шириной две клетки.

Re: 7евен дей рогулайк.

Добавлено: 10 янв 2010, 20:52
BreakMT
Соответственно, один вопрос к BreakMt - я застопорился на процедуре MoveTo, которая должна пробивать коридор к комнате, огибая препятствия, но фактически коридор доходит до клетки с комнатой, а затем безо всяких проверок поворачивает на 90 градусов. А если там коридор, или хуже того, стена соседняя с коридором?
Если приглядеться, то там все же есть проверки типа:

Код: Выделить всё

if Move[x,by-1] = True then
На коридоры эта функция никак не срабатывает (не видел необходимости), а вот на комнаты 100%. Потому как когда они строятся, представляют собой клетки пола, окруженные стеной. Как раз такие проверки Move (True, False) и не позволяют коридору протиснуться через стенку.
Я когда смотрел код BreakMT, там примерно так и было, но меня смущает такой момент, что при рисовании нового коридора он может, полбеды, пересечься со старым, и целая беда - если он пройдет совсем рядом, образуя таким образом коридор шириной две клетки.
А что в этом страшного?
Кстати, можешь добавить простую вещь - при построении коридора делай рядом с ним две стены, тогда он будет так же изолирован как и комната...
Правда в таком случае нужно будет ввести проверку на то, что новый коридор сможет дойти до конечной точки :|

Re: 7евен дей рогулайк.

Добавлено: 10 янв 2010, 20:57
Эльф
BreakMT писал(а): Если приглядеться, то там все же есть проверки типа:

Код: Выделить всё

if Move[x,by-1] = True then
но это если dy!=0. Я не очень разобрался что за dy, но в первый прогон процедуры оно очень даже равно )
BreakMT писал(а): А что в этом страшного?
Я такое, кажется, в Мории видел, и в общем мне не понравилось, лол.

Re: 7евен дей рогулайк.

Добавлено: 10 янв 2010, 21:00
BreakMT
но это если dy!=0. Я не очень разобрался что за dy, но в первый прогон процедуры оно очень даже равно )
Тогда должно быть dx <> 0) На сколько я помню - dx, dy это шаг построения коридора, т.е. в какую сторону он строится в данный момент

Да и, кстати, вполне нормальные у тебя подземелья получаются!

Re: 7евен дей рогулайк.

Добавлено: 10 янв 2010, 21:01
Troll
7DRL, конечно, не получился. Получилось демо. Но добротное. Как демо добротное, а не как законченная игра.

BattleTechRL.
Вы один из повстанцев, которым удалось захватить одного из боевых роботов клики, контролирующей власть на вашей планете. Вы высыживаетесь на их базу с целью разбомбить все заводы, производящие роботов. Заводов, как понятно, пока нет, есть только вражеские роботы.
Игра в дискретном realtime, как в представленном тут WQ. К сожалению из-за недостатка времени пришлось сделать пока полёт снарядов мгновенным, что несомненно плохо. Не ввёл энергетические щиты, разные действия разного оружия и их баллансирование, поднимания предметов и много ещё чего, что планировал успеть. Да, и отвлекали всё время. Два дня из семи писал по часу всего. В-общем, ладно. Раз нужно законченную игру получить, значить цель такова - убить всех роботов на уровне.

Можно тестить. Сразу говорю, что почти наверняка есть баг с отрисовкой робота не стене, но настолько реджко выпадающий, что мне не удалось его отследить.

И это, название темы не очень.

Re: 7евен дей рогулайк.

Добавлено: 10 янв 2010, 21:08
Dmiry
2Эльф:
По поводу графики - Noir выложен вместе с исходниками, написан (насколько я понял) на старом добром Delphi.

А вот насчет устарелости ascii-графики позволю себе не согласиться, особенно в контексте 7drl. Ascii-графика позволяет сосредоточиться на функциональных моментах, оставив красивости на потом. Мой предыдущий проект загнулся именно из-за ориентации на графику. В нынешнем варианте от графики отказался, что позволило за гораздо меньшее время получить работоспособную мини-игру. Хотя совсем отказываться не собираюсь, и в дальшейшем планирую перейти на тайлы.

Если ты все-таки нацелен на графику - имеет смысл посмотреть готовые библиотеки, тот же LibTCOD. Сам пытался в нем разобраться, к сожалению, безуспешно :?

Попробовал поиграть - после истощения маны очередной гоблин запинал до смерти. Насчет генератора лабиринта - у тебя комнаты соединяются в цепочку? Или из одной комнаты можно пройти в 3+ других?

2Тролль:
Больше всего мешает управление движением. Я бы предожил поменять назначение клавиш: стрелка вверх соответствует движению в направлении взгляда (вперед), стрелка вниз - назад, стрелки влево/вправо - поворот в соответствующем направлении.

upd: правка обращений, язык.

Re: 7евен дей рогулайк.

Добавлено: 10 янв 2010, 21:29
Эльф
Dmiry писал(а):По поводу графики - Noir выложен вместе с исходниками, написан (насколько я понял) на старом добром Delphi.

А вот насчет устарелости ascii-графики позволю себе не согласиться, особенно в контексте 7drl. Ascii-графика позволяет сосредоточиться на функциональных моментах, оставив красивости на потом. Мой предыдущий проект загнулся именно из-за ориентации на графику. В нынешнем варианте от графики отказался, что позволило за гораздо меньшее время получить работоспособную мини-игру. Хотя совсем отказываться не собираюсь, и в дальшейшем планирую перейти на тайлы.
Дело в том, что я в некотором смысле на распутье. Тайлы-то я точно не потяну, а вот каких-то красивых шрифтов, полноцветности и всего-такого хотелось бы. Кроме обычного паскаля я нихрена-то и не знаю, так что все равно что-то новое учить, вот и пытаюсь понять для себя, где возможностей больше.
Dmiry писал(а): Попробовал поиграть - после истощения маны очередной гоблин запинал до смерти. Насчет генератора лабиринта - у тебя комнаты соединяются в цепочку? Или из одной комнаты можно пройти в 3+ других?
Я ее просто в начале рассчитывал сделать сложной и интересной. В FF аффекты забавные - frog, mini итд. Но чем дальше писал, тем больше она меня доставала. В принципе, навесить на нее 100 монстров, 100 итемов и 50 заклов, и было бы нормально и полноценно.

Сто процентов есть комнаты с тремя выходами. Алгоритм я на каком-то буржуйском сайте вычитал - делишь комнату попалам, потом каждую из получившихся, рекурсивно, пока не дойдешь до размеров комнаты; а затем комнаты, которые были разделены на одном и том же шаге, соединяешь z-образными коридорами. Получается такое дурацкое двоичное дерево, но кстати если добавить в него колец - соединить пару комнат рендомными коридорами - то в целом может и неплохо получиться. Только я колец не делал, лол - не успел просто.

Re: 7евен дей рогулайк.

Добавлено: 10 янв 2010, 21:38
Troll
Dmiry писал(а): 2Тролль:
Больше всего мешает управление движением. Я бы предожил поменять назначение клавиш: стрелка вверх соответствует движению в направлении взгляда (вперед), стрелка вниз - назад, стрелки влево/вправо - поворот в соответствующем направлении.

upd: правка обращений, язык.
Знаю про несколько неудачное на первый взгляд управление. Сразу как ввёл его - думал переделать. Но потом привык. И не испытываю неудобства.
Про язык и обороты - времени не хватило. Очень сложный русский язык, выходит.

Но суть игры не в этом совсем, а в движке самом, в выборе действия и оценке ситуации. Жаль, что не успел сделать полёт снарядов не мгновенным и блок тоже не успел... Сам 6 роботов ложил максимум.

Re: 7евен дей рогулайк.

Добавлено: 11 янв 2010, 03:53
Dmiry
Про язык и обороты - времени не хватило. Очень сложный русский язык, выходит.
Эээ... Я про язык в своем сообщении писал, это не относилось к тебе и к игре.

Кстати, насколько я знаю, редкие рогалики используют подобную систему FOV - сектором. Я могу вспомнить только UnrealWorld. Не уверен насчет GearHead - там вроде тоже подобная система управления была.