Blame!-roguelike

Закрытые или заброшенные проекты, не состоявшие в Клубе, но имевшие ветку на форуме.

Модератор: Jolly Roger

dunno
Сообщения: 26
Зарегистрирован: 29 дек 2009, 20:57

Blame!-roguelike

Сообщение dunno » 05 янв 2010, 00:49

Всем привет.
Давно уже с интересом читаю ваш форум. Некоторое время назад решил тоже попробовать что-нибудь написать. Вроде бы постепенно вырисовывается нечто, поэтому расскажу, пожалуй, над чем тружусь.

Хочу сделать рогалик в киберпанковском сеттинге. Точнее говоря, конкретно по мотивам манги Blame! (кто не знаком с сабжем, это вот: http://ru.wikipedia.org/wiki/Blame!). Когда читал мангу, все время ловил себя на мысли, что сюжет прекрасно подходит к жанру (особенно первые тома). Но насколько я знаю, никто еще так и не сделал ничего по ней - ни рогалика ни вообще никакой игры! Хотя уже седьмой год пошел с момента выхода последнего тома. Упущение, я считаю :)

Не уверен, конечно, что у меня в итоге получится нечто доведенное до ума, но за прошедшее время с начала разработки (порядка двух недель) вроде бы еще не надоело :3

Сама игра мне видится примерно так.
В манге два основных персонажа: молчаливый никогда не улыбающийся паренек Килли, и его спутница (появляющаяся примерно к середине манги) - девушка по имени Сибо.
С целью некоторой оригинальности я решил задействовать их в качестве персонажей одновременно: в игре Килли и Сибо присутствуют оба, между ними в любой момент можно переключаться и управлять выбранным персонажем. Каждый из персонажей будет обладать каким-нибудь уникальным набором умений, так, что можно будет оказывать некую поддержку друг другу - нечто наподобие Lost Vikings.
Целью Килли в манге было отыскать человека с неизмененной генетической структурой - так называемыми сетевыми терминальными генами. Такой человек способен взаимодействовать с "Сетевой Сферой" - автоматическими системами "Города" будущего. В частности он смог бы остановить его бесконтрольное разрастание (мир в Blame! - это гигантский технолабиринт без начала и конца, распространившийся далеко за пределы Земли и продолжающий увеличиваться. Людей в нем наоборот осталось очень мало, они подвержены генетическим мутациям, вымирают, и еще на них охотятся "хранители" - киборги, которых "Город", вследствие системного сбоя производит в неограниченных количествах).
В игре сюжет, видимо, тоже будет вертеться вокруг этих поисков, но наверное в менее глобальном масштабе - я думаю сделать небольшую игру (чтобы уложиться в разумные сроки), и соответственно сюжет будет основываться на каком-нибудь локальном эпизоде этих поисков. Например, борьба Килли и Сибо и с их основными противниками - кибернетическими организмами (Silicon Creatures), попытка не дать киборгам подключиться к Сетевой сфере, используя резервное соединение и поддельную генетическую информацию (в манге был такой эпизод). Что-то в этом роде.

Что сделано на данный момент: готова небольшая демка.
Поскольку сначала старался больше продумывать общую архитектуру игры (что, конечно, оказалось довольно интересным, так что я посвятил этому довольно много времени) контента в демке минимальное количество, скорее это просто отработка каких-то базовых вещей, которые понадобятся в дальнейшем. Все-таки движок частично свой пишу, многое велосипедится, но это лично для меня лишь прибавляет интереса =)).
Генерится уровень (методом Recursive division method, http://en.wikipedia.org/wiki/Maze_gener ... ion_method), на него загружаются два персонажа ('@', красного и синего цвета, переключение между ними - клавиши 1 и 2 на основной клавиатуре) и сколько-то монстров - Sillicon Creatures ('S').
Уровень зуммится (+/- на нампаде) - средство осмотреться в отсутствие миникарты. По уровню можно ходить (стрелками или numpad'ом), открывать и закрывать двери (клавиши O, C), ну и атаковать монстров. Атаковать можно как ближней атакой (попытка пойти на клетку противника), так и на расстоянии (клавиша F - выбрать цель стрелками или numpad'ом- снова нажать F). В момент выстрела происходит отдача, игрока отбрасывает на одну клетку назад. Такая тоже небольшая фишка (в манге Килли всегда очень смачно шмякался об стенку, стреляя из своего пистолетика)).
Монстры пока не атакуют в ответ, у них в АИ на каждом шаге просто перемещение на случайно выбранную соседнюю клетку. После смерти противника остается труп - '%', его можно подобрать (нажатием на ',') - просто так, в качестве тестирования системы выпадения и подбора итемов) Инвентарь и экипировка пока не реализованы.

В настоящий момент продумываю рпг-систему. Излишне усложнять ее не хочется, но важно, чтобы она была достаточно интересной и, конечно, чтобы присутствовал отчетливый киберпанковский антураж. Поделитесь, кстати, опытом - какой вам видится игра в жанре киберпанк? Что в ней должно присутствовать?
Может быть, кстати, кто-то еще на форуме знаком с "Blame!" ?)
Предварительно решил, что прокачка будет основываться на системе имплантантов и модификаторов оружия и каких-то вещей. Сибо будет таким как бы техномагом-хакером (загрузка дружественных киборгов, отключение противника, взлом, перехват управления итд), а Килли - нечто вроде техновоина-стрелка (он в общем-то, и не человек даже. Впрочем, в Сибо тоже, после череды восстановлений-клонирований мало что человеческого осталось. Когда Килли впервые ее встретил, от нее оставалась только голова и грудная клетка, подключенные к системе жизнеобеспечения)). Как-то так, но в детали пока не углублялся.

Пишу на языке Java. Нашел несколько удобных библиотек: lwjgl (Lightweight Java Game Library, http://lwjgl.org) для отрисовки (используются биндинги к OpenGL) и rlforj (Roguelike Library For Java, http://rlforj.sourceforge.net/), fov, los и все такое, так что пока дело неплохо идет)
Под проект завел страничку на гуглкоде: http://blame-roguelike.googlecode.com
там есть скриншоты, в репозитории лежат исходники, если вдруг надо кому-то, и в разделе downloads можно скачать демку: http://code.google.com/p/blame-roguelike/downloads/list
Скачанный архив надо просто распаковать куда-то и запустить run.bat, но требуется наличие java-машины (если нет, скачать можно на http://java.com, 15 метров весит дистрибутив).
Под линуксом по идее тоже запустится, в командной строке нужно набрать:
java -Djava.library.path=res/lib/native/linux -jar Blame.jar

Уфф, довольно длинный пост, неужели я его наконец дописал?)
В общем, такие дела. Что думаете по этому поводу? :3

Аватара пользователя
Эльф
Сообщения: 115
Зарегистрирован: 12 июл 2007, 16:39

Re: Blame!-roguelike

Сообщение Эльф » 05 янв 2010, 01:40

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

ну и да, моментами тормозит она совершенно безбожно. хотя вроде бы и нечему тормозить.

Аватара пользователя
Максим Кич
Администратор
Сообщения: 1642
Зарегистрирован: 03 дек 2006, 20:17
Откуда: Витебск, Беларусь
Контактная информация:

Re: Blame!-roguelike

Сообщение Максим Кич » 05 янв 2010, 08:24

Ошибочка вышла:

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

E:\Games\Roguelikes\Бискап Нервно Курит\BlameR!>java -Djava.library.path=res/lib
/native/windows -jar Blame.jar
org.lwjgl.LWJGLException: Pixel format not accelerated
        at org.lwjgl.opengl.WindowsPeerInfo.nChoosePixelFormat(Native Method)
        at org.lwjgl.opengl.WindowsPeerInfo.choosePixelFormat(WindowsPeerInfo.ja
va:52)
        at org.lwjgl.opengl.WindowsDisplay.createWindow(WindowsDisplay.java:185)

        at org.lwjgl.opengl.Display.createWindow(Display.java:308)
        at org.lwjgl.opengl.Display.create(Display.java:840)
        at org.lwjgl.opengl.Display.create(Display.java:768)
        at org.lwjgl.opengl.Display.create(Display.java:749)
        at su.msk.dunno.blame.main.Blame.initGL(Blame.java:130)
        at su.msk.dunno.blame.main.Blame.<init>(Blame.java:59)
        at su.msk.dunno.blame.main.Blame.main(Blame.java:549)
Exception in thread "main" java.lang.NullPointerException
        at org.lwjgl.opengl.GL11.glEnable(GL11.java:987)
        at su.msk.dunno.blame.main.Blame.initGL(Blame.java:137)
        at su.msk.dunno.blame.main.Blame.<init>(Blame.java:59)
        at su.msk.dunno.blame.main.Blame.main(Blame.java:549)
Вообще, BLAME! просто напрашивается на то, чтобы по нему сделали рогалик.
Dump the screen? [y/n]

Аватара пользователя
Харука-тян
Мастер
Сообщения: 544
Зарегистрирован: 29 ноя 2006, 00:23
Контактная информация:

Re: Blame!-roguelike

Сообщение Харука-тян » 05 янв 2010, 08:41

Тормозов и ошибок не наблюдала, а вот любопытство гложет. Когда враги не будут такими пацифистами, второй PC, оставленный бесприсмотра, будет всё также стоять на месте и ждать вмешательства игрока, будет дёргать конечностями в случайных направлениях, в надежде зацепить окруживших супостатов, будет звать на помощь игрока, или что-то другое :?:
"Женщина верит, что дважды два будет пять, если хорошенько поплакать и устроить скандал" (© Дж. Элиот).
ИзображениеИзображение

Аватара пользователя
Aerton
Сообщения: 503
Зарегистрирован: 11 авг 2007, 02:58
Откуда: Новосибирск
Контактная информация:

Re: Blame!-roguelike

Сообщение Aerton » 05 янв 2010, 09:42

dunno писал(а):Под линуксом по идее тоже запустится, в командной строке нужно набрать:
java -Djava.library.path=res/lib/native/linux -jar Blame.jar
Запускается, но выглядит ужасно.
Максим Кич писал(а):

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

E:\Games\Roguelikes\Бискап Нервно Курит\BlameR!>java -Djava.library.path=res/lib
ROFL Хорошо у тебя Download называется :lol: =D>
Вложения
blame.png
blame.png (10.86 КБ) 11466 просмотров

dunno
Сообщения: 26
Зарегистрирован: 29 дек 2009, 20:57

Re: Blame!-roguelike

Сообщение dunno » 05 янв 2010, 11:35

Эльф писал(а):Э... я прошу прощения, я понимаю, конечно, что собачка бегает по экрану, это нормально, все с этого начинали, но можно как-то сделать так, чтобы шрифты не были настолько чудовищно сжаты по вертикали? потому что смотреть невозможно без содрогания, и это даже меня нервирует, а уж что бы сказал Артимий Лебедев я даже боюсь представить.

ну и да, моментами тормозит она совершенно безбожно. хотя вроде бы и нечему тормозить.
Шрифты поправлю, ок. Просто взял текстурку, видимо неудачную. Еще поиграюсь с этим. Тормоза возможно от того, что версия ява-библиотек старая. К последним релизам (с 14 версии вроде бы начиная), они там фиксили производительность. Какой конфиг компа, если не секрет?
Максим Кич писал(а):Ошибочка вышла:

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

E:\Games\Roguelikes\Бискап Нервно Курит\BlameR!>java -Djava.library.path=res/lib
/native/windows -jar Blame.jar
org.lwjgl.LWJGLException: Pixel format not accelerated
Как факт. это означает, что драйвер openGL почему-то не подхватился. Насколько я уловил, это может быть либо устаревший, либо corrupted, либо просто не установленный видеодрайвер.
http://lwjgl.org/forum/index.php?topic=3024.0

2Aerton
крутой скрин =) Не знаю, если честно, откуда взялся голубой фон, по идее в текстуре фон символов прозрачный. Тормозило ли, кстати, что-нибудь?
Харука-тян писал(а):Тормозов и ошибок не наблюдала, а вот любопытство гложет. Когда враги не будут такими пацифистами, второй PC, оставленный бесприсмотра, будет всё также стоять на месте и ждать вмешательства игрока, будет дёргать конечностями в случайных направлениях, в надежде зацепить окруживших супостатов, будет звать на помощь игрока, или что-то другое :?:
Я тоже думал об этом, можно будет какой-нибудь дефолтный АИ приделать (отступать при виде врагов, стрелять по ним, итд).

В общем, понимаю, что начало не слишком впечатляющее, и темка весьма корованирская, но раз уж я ее создал, буду писать сюда что-нибудь по мере продвижения. Возможно, даже не пропаду :3

Аватара пользователя
Эльф
Сообщения: 115
Зарегистрирован: 12 июл 2007, 16:39

Re: Blame!-roguelike

Сообщение Эльф » 05 янв 2010, 12:07

dunno писал(а): Шрифты поправлю, ок. Просто взял текстурку, видимо неудачную. Еще поиграюсь с этим. Тормоза возможно от того, что версия ява-библиотек старая. К последним релизам (с 14 версии вроде бы начиная), они там фиксили производительность. Какой конфиг компа, если не секрет?
Я сейчас попробовал поиграть еще раз повнимательнее, и уже не уверен, что тормозит. Просто все какое-то такое стремное - большой лаг между нажатием клавиши и ходом; вторая клавиша, быстро нажатая после первой, приводит к тому, что первая не выполняется - все это создает ощущение того, что игра тормозит.

Аватара пользователя
Aerton
Сообщения: 503
Зарегистрирован: 11 авг 2007, 02:58
Откуда: Новосибирск
Контактная информация:

Re: Blame!-roguelike

Сообщение Aerton » 05 янв 2010, 12:22

dunno писал(а):крутой скрин =) Не знаю, если честно, откуда взялся голубой фон, по идее в текстуре фон символов прозрачный. Тормозило ли, кстати, что-нибудь?
Ну видимо она самая и почему-то не включилась. Может, какие-то параметры alpha test явно не заданы, а дефолт не подошёл. Вроде не тормозило, но ломать глаза с такми цветовой схемой меня хватило не надолго.

Аватара пользователя
Максим Кич
Администратор
Сообщения: 1642
Зарегистрирован: 03 дек 2006, 20:17
Откуда: Витебск, Беларусь
Контактная информация:

Re: Blame!-roguelike

Сообщение Максим Кич » 05 янв 2010, 12:29

dunno писал(а):
Максим Кич писал(а):Ошибочка вышла:

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

E:\Games\Roguelikes\Бискап Нервно Курит\BlameR!>java -Djava.library.path=res/lib
/native/windows -jar Blame.jar
org.lwjgl.LWJGLException: Pixel format not accelerated
Как факт. это означает, что драйвер openGL почему-то не подхватился. Насколько я уловил, это может быть либо устаревший, либо corrupted, либо просто не установленный видеодрайвер.
http://lwjgl.org/forum/index.php?topic=3024.0
Дело в том, что с другими OpenGL приложениями у меня сложностей не возникает. Я, конечно посмотрю, какая проблема может быть с моей стороны, но стоит подумать о возможных недоработках в проекте.
Dump the screen? [y/n]

Аватара пользователя
Sanja
Администратор
Сообщения: 791
Зарегистрирован: 24 ноя 2006, 12:25
Откуда: Новосибирск
Контактная информация:

Re: Blame!-roguelike

Сообщение Sanja » 05 янв 2010, 16:04

Aerton писал(а):
Максим Кич писал(а):

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

E:\Games\Roguelikes\Бискап Нервно Курит\BlameR!>java -Djava.library.path=res/lib
ROFL Хорошо у тебя Download называется :lol: =D>
Да уж. Как тут не забацать стандартный демотиватор на эту тему?

edit: Хотя, пожалуй, удалю его, чтобы глаза не мозолил. Кому интересно: тут

Разумеется отвлечённо, а не применительно к автору темы :D

Извиняюсь за оффтоп.

______

Что касается игры. Запустилась нормально. Без глюков. Приплюснутый шрифт, конечно, не очень смотрится.

dunno
Сообщения: 26
Зарегистрирован: 29 дек 2009, 20:57

Re: Blame!-roguelike

Сообщение dunno » 05 янв 2010, 19:54

Пока просто приподнял буквы (и заодно разобрался, как вставлять картинки на этом форуме))
Изображение
так лучше, или все еще хреновато?)
Эльф писал(а): Я сейчас попробовал поиграть еще раз повнимательнее, и уже не уверен, что тормозит. Просто все какое-то такое стремное - большой лаг между нажатием клавиши и ходом; вторая клавиша, быстро нажатая после первой, приводит к тому, что первая не выполняется - все это создает ощущение того, что игра тормозит.
Ужасно печально. Попробуй все же обновить яву (если не делал еще этого) - серьезно говорю, различия в работе приложений могут быть очень значительные (я не только свою лолодемку имею в виду - это и само по себе может быть полезно - многие сайты используют яву в самых неожиданных местах=)).
Максим Кич писал(а): Дело в том, что с другими OpenGL приложениями у меня сложностей не возникает. Я, конечно посмотрю, какая проблема может быть с моей стороны, но стоит подумать о возможных недоработках в проекте.
LWJGLException - это ошибка в той либе, которую я использую для отрисовки. Так что только если багрепорт ребятам слать) Но вроде бы это не кустарное поделие, используется достаточно широко, явные баги они должны были пофиксить. Возможна конечно какая-то локальная несовместимость с железом.

Аватара пользователя
BreakMT
WANDER Team
Сообщения: 933
Зарегистрирован: 27 ноя 2006, 12:16

Re: Blame!-roguelike

Сообщение BreakMT » 05 янв 2010, 21:20

Начал смотреть первую дему... Чуть глаза не сломал, правда, зачем так растягивать было? Неужели самому нравится?? :? :? :?

dunno
Сообщения: 26
Зарегистрирован: 29 дек 2009, 20:57

Re: Blame!-roguelike

Сообщение dunno » 06 янв 2010, 20:02

апну темку.
BreakMT писал(а):Начал смотреть первую дему... Чуть глаза не сломал, правда, зачем так растягивать было? Неужели самому нравится?? :? :? :?
не обращал сначала как-то внимания, если честно). Но вроде поправил высоту букв же?

Глядя на соседний тред товарища Xecutor'a решил тоже запилить няшную анимацию движения (в дополнение к анимации стрельбы). Получилось, правда, не совсем няшно: так как карта отрисовывается относительно положения игрока (чтобы он всегда был в центре), карта смещается не плавно а как и раньше пошагово. Получается такое прерывистое движение. Конечно, было бы гораздо красивее, если бы карта тоже смещалась плавно, я еще работаю над этим)

Вставил мобам простенькие мозги: если игрока нет в поле видимости, просто ходить по уровню от точки к точке; если игрок в поле видимости, двигаться к нему и атаковать. Отбиваться одновременно обоими игроками действительно получается не очень - особенно если они разнесены по разным участкам карты и на них нападают сразу несколько мобов. Как вариант, пожалуй, реализую возможность подбирать труп убитого персонажа и восстанавливать его в специальных точках карты (как бы клонировать). Таким образом, пока жив хотя бы один из персонажей, ситуация еще поправима.

Также, наконец, довел до ума систему времени. Теперь можно нормально задавать скорости мобов, делать их во сколько угодно раз быстрее или медленнее игрока (который традиционно совершает один ход в ответ на одно нажатие клавиши). Сделано вроде бы без особенных извращений:
в классе каждого моба (и в классах игрока в том числе) заданы две переменные:
actionPeriod и lastAction_time
actionPeriod - промежуток времени между совершением действий данным мобом. Любых действий. В дальнейшем я наверное усложню алгоритм расчета этой величины, сделаю ее зависящей от типа действия, состояния моба итд, но пока это просто число, вбитое хардкодом в конструкторах классов (монстров или игрока).
lastAction_time - время предыдущего совершенного действия. Обновляется, соответственно, после совершения мобом какого-либо действия.
Еще одна переменная - time - задана в контейнере объектов. В методе, который процессит игровые объекты сначала изменяется состояние игрока, а потом запускается цикл по time и отсчитывает actionPeriod-игрока шагов. В этом цикле процессятся уже мобы: time передается им в качестве параметра, и они сравнивают время, прошедшее с предыдущего действия, со своим actionPeriod. Если время настало, ходят).
Таким образом, если у игрока actionPeriod = 8, а у моба actionPeriod=2, то между ходами игрока этот моб будет ходить четыре раза. Наоборот, если у моба actionPeriod=16, он будет в два раза медленнее игрока. Если 12 - в полтора раза медленнее, то есть на каких-то ходах будет ходить два раза, на каких-то один. В общем, примерно так.

Раз уж начал писать о потрохах, расскажу об общей архитектуре игры. Все объекты в игре - игрок, монстры, предметы, тайлы карты итд - унаследованы от одного базового класса. Это абстрактный класс с абстрактными методами (которые реальным классам надо будет переопределить), такими как getSymbol - возвращает char данного объекта, getColor - цвет отрисовки, getPassability - можно ли проходить сквозь этот объект (например для пола это true, а для стены это false, для двери - в зависимости от того, открыта она или нет), getTransparency - можно ли смотреть сквозь этот объект (опять же, для пола true, для стены false) итд.

Основная структура в игре - класс Field, двумерный массив связанных списков объектов базового класса!)) Да, звучит страшно, но все на самом деле проще чем выглядит) При создании Field заполняется тайлами карты - они всегда хранятся первыми элементами списков в ячейках. Игрок и монстры добавляются поверх. Когда объект (моб или игрок) ходит, его объект удаляется из одной ячейки и помещается в новую, куда он сходил. Метод отрисовки рисует карту обращаясь к последнему объекту в списке в данной ячейке. Таким образом, если на тайле стоит кто-то или лежит предмет - будет нарисован он. Если же там ничего нет, будет нарисован тайл карты. Все достаточно просто. Соответственно, на тайле может находиться сколько угодно вещей (лежать кучкой), их можно подбирать и тому подобное. Проходимость и видимость данного тайла рассчитывается в зависимости от проходимости (вызов метода getPassability) и прозрачности (getTransparency) объектов, находящихся на этом тайле (если, к примеру, один из них вернул getPassability=false - значит на этот тайл нельзя пойти, - там стоит монстр или игрок или еще что-то).

Помимо класс Field, который содержит в себе все игровые объекты и распределяет их в зависимости от их положения на карте, существует второй базовый контейнер объектов - LivingList, который содержит только объекты, обладающие, так сказать, интеллектом - монстров и и игровых персонажей. Обработчик этого контейнера вызывается в момент совершения очередного хода и обрабатывает состояния игрока и мобов (изменяет их положения, количество хп и других параметров, удаляет из контейнера мертвых итд).

Изменение состояний мобов (как бы их АИ) тоже устроено достаточно просто. За это отвечают два метода: nextStep(), одинаковый для всех мобов, и livingAI() - который переопределяется в каждом реальном классе-наследнике (в классах, представляющих различные типа монстров - пока это только SiliconCreature, и в классе игрока: у него в качестве livingAI прописывается анализ введенных с клавиатуры команд).
livingAI() возвращает объект класса ADecision - какое-то характерное действие. ADecision - это абстрактный класс, в нем задан абстрактный метод doAction(), который реальные классы должны переопределить в зависимости от типа действия. Примеры классов-наследников: Move, Open, Close, MeleeAtack, Shoot, Take (собственно, это все, какие я пока написал)).
nextStep() в зависимости от значения переменной time или вызывает livingAI(), вычисляя новое действие, или у текущего действия вызывает doAction(), если время подошло, или ничего не делает, если не подошло еще... Как-то так.

На всякий случай, вот последняя версия (анимация и аи мобов):
http://blame-roguelike.googlecode.com/files/Blame.jar - просто jar-файл, без библиотек. Его надо заменить в скачанном архиве (кто качал)
http://blame-roguelike.googlecode.com/f ... ion_ai.zip - архив полностью со всеми либами (6 мегабайт).

Алсо, добавил замер фпс. У меня в основном где-то около таких значений оно крутится:
Изображение
Система: Celeron 2.6 GHz, 768 Mb Ram, NVidia 6600 (музейный такой экспонат, старушке седьмой год идет))

Дальше буду, наверное, заниматься инвентарем и рпг-системой, наконец. Завтра опишу примерно, что придумал по этому поводу.

Аватара пользователя
Харука-тян
Мастер
Сообщения: 544
Зарегистрирован: 29 ноя 2006, 00:23
Контактная информация:

Re: Blame!-roguelike

Сообщение Харука-тян » 06 янв 2010, 22:48

Придирки: анимация дёрганая и рваная, разздражает. AI нелочичен, сначала набигает и атакует Килли, даже если Сибо стоит гораздо ближе, на расстоянии атаки.
"Женщина верит, что дважды два будет пять, если хорошенько поплакать и устроить скандал" (© Дж. Элиот).
ИзображениеИзображение

dunno
Сообщения: 26
Зарегистрирован: 29 дек 2009, 20:57

Re: Blame!-roguelike

Сообщение dunno » 08 фев 2010, 16:42

Уфф, неужели уже прошло больше месяца?) С окончанием новогодних каникул времени стало существенно меньше. Да и идей интересных что-то никаких в голову не приходило, к тому же я довольно сильно завяз с этой анимацией движения (которая как принцип мне нравилась и очень не хотелось от нее совсем отказываться). Но что-то там постоянно не работало, да и в целом архитектура как-то тоже не блистала... Так что этот месяц, урывая время по вечерам после работы я уныло рефакторил код и размышлял, что бы такое придумать в плане геймплея.

Наконец, недавно меня посетила одна идейка, и по мере ее воплощения вернулся и интерес. Коротко расскажу суть.
С самого начала мне хотелось сделать рпг-систему, основанную на прокачке итемов, а не собственных характеристик главгера. То есть, некие модификаторы, выпадающие из тушек врагов, которые можно вставлять в экипировку, и улучшать таким образом те или иные ее параметры. Добавлять какие-то скилы, доступные главгеру, изменять тип дамага итд. Одной из целей было сделать так, чтобы процесс прокачки выглядел более естественным - без фиксированных левелапов и без экспы как таковой.

Из всей экипировки я пока остановился только на оружии - как неотъемлемой части любого искателя приключений =) В жестоком мире будущего внушительная экипировка отходит на второй план: враги-андроиды сами по себе как ходячая броня, а главгерам куча утомительных доспехов, стесняющих движения, только мешала бы...)

Итак, каждый из главгеров вооружен неким огнестрельным устройством. По своей сущности это структура, напоминающая инвентарь - то есть оно не экипируется и не снимается, его нельзя выкинуть или передать.
Оружие состоит из базовой части и сокетов, в которые можно устанавливать различные дополнительные детали, как-то изменяющие его характеристики.Выглядит это так:
Изображение
w - это базовая основа пушки, О - сокеты для установки модификаторов.
Модификаторы будут нескольких типов: например, на разный тип дамага (Fire, Cold, Lightning - и соответственно, будут разные виды сопротивляемости у врагов под это дело), стреляющие парализующим зарядом, зарядом, пробивающим стены или сканирующим врагов (к примеру, показывающим чем они вооружены, какие модификаторы вставлены в их пушки).
Одним из видов модификаторов будут "расширители" - модификаторы, которые при установке в сокет, открывают новые сокеты по соседству. Таким образом, оружие можно будет практически неограниченно совершенствовать (размерами игрового окна оно все же будет ограничено, чтобы моделька пушки влезала)) Как-нибудь вот так, например это может выглядеть:
Изображение
Немного напоминает систему скиллов из фф12 (собственно, в чем-то этой игрой и навеяно).
Получается простая и по моему достаточно эффективная система прокачки. "Расширители" будут падать существенно реже других модификаторов и играть роль левелапов - с установкой каждого расширителя можно увеличить общий дамаг пушки за счет появившихся сокетов. Способности мобов можно рандомизировать, генеря при создании различный набор модификаторов в их пушки (и соответственно делая какие-то уникальными, для боссов и просто "сильных" врагов).

Также для большего разнообразия вариантов "развития" оружия (притом, что главгеров двое, и каждого можно будет развивать по разному) можно ввести какие-то факторы его "красоты", сбалансированности итд (я еще в состоянии придумывания такого рода факторов). В самом простом варианте: различные сочетания модификаторов. Если детали одинакового типа расположены в соседних сокетах, их совокупный эффект увеличивается, например. Детали определенных типов, расположенные рядом смешивают свои свойства каким-нибудь образом итд.
Изображение
куча деталек на полу)
В настоящий момент, реализовано процентов 30 из вышеописанного. Сделан инвентарь (открывается кнопкой I) и собственно оружие (на кнопке W). То, что падает из мобов - пока что отличается лишь цветом, характеристики не прописаны. Но их можно подбирать и устанавливать в пушку. Для этого нужно открыть оружие (W), стрелками переместиться в нужный сокет и нажать enter - откроется инвентарь, в нем можно выбрать (цифровыми клавишами на основной клавиатуре) нужный модификатор, и он установится. Снимать - аналогично, стрелками встать на нужный модификатор в окне оружия и нажать enter - он уберется в инвентарь, или, если там нет места, упадет на землю. Выход из инвентаря и окна оружия по Esc.
http://blame-roguelike.googlecode.com/f ... meR%21.zip
В общем, такие дела. Как вам концепция?

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя