Blame!-roguelike
Модератор: Jolly Roger
- Харука-тян
- Мастер
- Сообщения: 544
- Зарегистрирован: 29 ноя 2006, 00:23
- Контактная информация:
Re: Blame!-roguelike
У меня в Висте всё голубее голубого, как на скрине у Aerton.
Re: Blame!-roguelike
хм, что за напасть такая...Харука-тян писал(а):У меня в Висте всё голубее голубого, как на скрине у Aerton.
- Aerton
- Сообщения: 503
- Зарегистрирован: 11 авг 2007, 02:58
- Откуда: Новосибирск
- Контактная информация:
Re: Blame!-roguelike
А у меня теперь просто чёрный экран и 100% cpu.
- Максим Кич
- Администратор
- Сообщения: 1642
- Зарегистрирован: 03 дек 2006, 20:17
- Откуда: Витебск, Беларусь
- Контактная информация:
Re: Blame!-roguelike
По поводу всех возможных «кривизн» с графикой: прежде, чем использовать команды OpenGL неплохо бы проверить, а поддерживает ли система текущую версию. Я вот на выходных выяснил, что под XP на мой ноутбук с HD 4330 Radeon Mobility драйверов, которые поддерживали бы OpenGL выше 1.1 нет. Вообще. Совсем. В принципе.
Dump the screen? [y/n]
Re: Blame!-roguelike
У меня в коде не используются команды выше версии 1.1. Я более-менее в этом уверен, потому что в моей графической либе каждый метод имеет префикс, и везде этот префикс - GL11.Максим Кич писал(а):По поводу всех возможных «кривизн» с графикой: прежде, чем использовать команды OpenGL неплохо бы проверить, а поддерживает ли система текущую версию. Я вот на выходных выяснил, что под XP на мой ноутбук с HD 4330 Radeon Mobility драйверов, которые поддерживали бы OpenGL выше 1.1 нет. Вообще. Совсем. В принципе.
Этот глюк с зависанием вначале довольно редко возникал, и я ленился его отлавливать . Но сейчас все же присмотрелся, и оказалось, что это баг в алгоритме построения лабиринта. Вроде бы поправил: запускаю создание уровня 5000 раз в цикле, отрабатывает нормально.Aerton писал(а):А у меня теперь просто чёрный экран и 100% cpu.
Вот это конечно сложнее всего поправить, потому что ни на одном из четырех компов, которые в моем распоряжении, не воспроизводится. Впрочем, ни на одном из них Виста не стоит: на одном Мандрива, на других XP...Харука-тян писал(а):У меня в Висте всё голубее голубого, как на скрине у Aerton.
Вопрос: а у тебя ровно как у Aerton, то есть черный общий фон и голубой фон у каждого символа, или весь вообще фон синий?
Если второе то мб это потому что я при инициализации openGL не вызываю glClearColor - метод, который выставляет цвет очистки экрана при перерисовке кадра. По идее, этот цвет и так черный по умолчанию, но может внезапно под Вистой он не черный, а голубой?)
- Харука-тян
- Мастер
- Сообщения: 544
- Зарегистрирован: 29 ноя 2006, 00:23
- Контактная информация:
Re: Blame!-roguelike
Вот так:
Re: Blame!-roguelike
У меня работает нормально. Стабильные 60 fps.
Но съедает одно ядро проца полностью.
Концепт прикольный.
Но съедает одно ядро проца полностью.
Концепт прикольный.
Re: Blame!-roguelike
Скажите, пожалуйста, а какой ZIP всё же скачивать с сайта? С самой последней датой - BlameR!.zip или ...?
UPD: Скачал самый последний архив, запускаю, белое окно, загрузка процессора около 100%... WinXP SP3, Java самая новая, а вот видеокарта довольно старая...
UPD: Скачал самый последний архив, запускаю, белое окно, загрузка процессора около 100%... WinXP SP3, Java самая новая, а вот видеокарта довольно старая...
Re: Blame!-roguelike
Сори, там был баг с генерацией уровня (выше в треде написано). Я его пофиксил давно, но не выкладывал, хотел выложить, когда изменений подкопится, в качестве новой версии. Собственно, повод как раз подходящий, так что вот:Newman писал(а):UPD: Скачал самый последний архив, запускаю, белое окно, загрузка процессора около 100%... WinXP SP3, Java самая новая, а вот видеокарта довольно старая...
http://blame-roguelike.googlecode.com/f ... r-v002.zip - ничего зависать не должно (надеюсь...)
Что я к этому моменту наделал. Во-первых, наконец-то сел на досуге, и немного продумал геймплей. Расскажу тогда сначала об этом, а потом о том, что реализовано сейчас.
Итак, гаемплай:
Один большой уровень - запутанный лабиринт, состоящий из коридоров и комнат. Пустот нет, все пространство занято лабиринтом.
Главгеры начинают в одном из четырех углов уровня. Искомая точка находится на противоположной стороне, но неизвестно, какой именно (то есть, если начинаем в углу прямоугольника, нас интересуют две противоположные его стороны, не примыкающие к данному углу). Кроме того, на уровне сложно определить, достигнута ли граница карты (может быть это просто стена, переход за которую пока что не найден), что еще более усложняет поиск.
Традиционное рогаликовое средство, подстегивающее exploring (ну типа аналог голода): вирусное заражение. Оба главгера заражены вирусным заболеванием, которое постепенно берет контроль над их телом (детали этого заражения оставим для предыстории и завязки, которые я пока не придумал =)). У каждого из главгеров есть параметр - уровень заражения в процентах. Уровень заражения постепенно растет, причем он увеличивается быстрее, если персонаж двигается, чем если он стоит на месте (например, если один из главгеров исследует область, а второй где-то восстанавливается в сторонке, зараза будет распространятся в первом случае быстрее. В два раза).
При 100-процентном заражении все клетки тела поражены вирусом, генетическая информация полностью разрушена и не поддается восстановлению: то есть, даже если зараженного персонажа убить, на Rebuild Station восстановить его не получится. Fail, в общем. На Rebuild Station'ах можно снижать уровень заражения, но окончательного излечения они не предоставляют. Окончательно вылечиться можно, приняв вакцину, которая хранится на специальной станции, и найти ее - цель игры.
На уровне расположены Factories - компьютерные станции, узлы. Разных типов:
* Rebuild Station. Восстановить убитого игрока из его генетической информации. Восстановить хп. Снизить уровень зражения. Надо будет продумать ограничения ресурса станции, чтобы нельзя было вечно тусить в одном районе, постоянно восстанавливаясь. Например: то, что охотники с близлежащих станций будут двигаться к отвоеванной станции, пытаясь захватить ее обратно
(- We must go. Hunters will be here soon.)
Еще: уровень заражения снижается с помощью промежуточной вакцины, которая хранится на Rebuild Station'ах, ее запас ограничен.
* Power Station. Восстановить количество энергии, восстановить снабжение энергией в регионе: некотором районе вокруг станции. Влияет на возможность открыть дверь. Типа дверь может быть обесточенной, и чтобы ее открыть нужно искать такую станцию поблизости. Ткже дверь может быть просто заблокированной.
Станция может быть нормальной и corrupted - захваченной киборгами. Тогда, чтобы получить к ней доступ, ее нужно взламывать (аналогично как киборгов, см. ниже). Если киборгами захвачена Rebuild Station - она производит киборгов, различных типов. Киборги атакуют главгеров.
Виды врагов:
* стреляющие (двигаются медленнее) (SafeGuards)
* атакующие ближней атакой (двигаются быстрее) (Silicon Creatures)
* охотники (Hunters). Используют алгоритм поиска пути для перемещения по уровню и поиска целей
(остальные виды киборгов в основном кучкуются около станций, их производящих и рандомно разбросаны по уровню).
Впоследствии придумаю еще каких-нибудь.
Параметры персонажа:
* Количество хп
* Количество энергии. Медленно восстанавливается. Максимальное количество зависит от вставленных в пушку импов. Тратится: при выстреле, на щит. Может быть восполнено на Power Station'ах
* Щит. Появляется при вставке соответствующего импа. Принимает на себя часть дамага.
* Уровень заражения в процентах
Окно статистики:
* Имя персонажа
* Количество хп
* Щит
* Количество энергии
* Уровень заражения
Варианты импов (модификаторов, вставляемых в сокеты в пушку):
* damage, различного уровня (три уровня)
* kickback моба (отбросить его назад. Помогает против быстрых мобов)
* paralyze - парализовать врага на какое-то время
* второй левел оружия (у Килли): плюс дамаг, пробивание стен
* щит
* "аккумулятор" - запасает энергию.
* mind hack (mind connector) - получить доступ к интерфейсу киборга, взломать его
Взлом выглядит следующим образом: загружается небольшой лабиринт в форме вытянутого прямоугольника (такой типа коридор). Главгер загружается в одном конце этого коридора. Ему нужно дойти до другого конца до определенной точки и встать на нее. Тогда взлом считается успешным - будет получен доступ к управлению киборгом. Враги - защитные программы киборга, будут возникать по дороге и мешать ему (точнее, пытаться убить. Но смерть в этом виртуальном пространстве не будет означать смерть реальную, а только дисконнект). Для усложнения наверное надо будет сделать ограничение по времени. Такой, в общем аналог переходов на другие левелы в рогаликах (которых в данном случае не будет). По мере освоения мною новых алгоритмов генерации данженов (я просто пока что всего одним располагаю =)) "взломы" будут становится более разнообразными, разниться по типу и размерам загружаемого уровня в зависимости от типа моба, его силы итд.
Взломанным мобом можно управлять: атаковать им его товарищей (до момента первой атаки они не считают его враждебным. Если взломать одиночку вдали от других киборгов, то им можно "сходить на разведку" - походить по району, посмотреть, где какие станции находятся и где какие киборги бродят), вытащить все импы из его пушки, приказать отключиться.
Киборги, вооруженные майнд-коннекторами, аналогично могут атаковать главгеров. Также загружается небольшой лабиринт, и в нем нужно уничтожить киборга. Если киборг убивает главгера в этом коридоре, он захватывает власть над телом. После этого у оставшегося главгера еще остается шанс спасти товарища: нужно уничтожить своего напарника (он будет пытаться уничтожить вас) и восстановить его тело на ближайшей Rebuild Station.
Эффекты от расположения модификаторов:
* если два одинаковых модификатора расположены рядом, эффект от каждого: базовое количество плюс 20%
например, если два импа на +10 дамага расположены рядом, суммарный дамаг: (10+2)+(10+2)=14
* если три и больше: эффект от каждого: базовое значение плюс 30% (продумаю еще, имеет ли смысл дальнейшее увеличение бонуса, типа если четыре, то плюс 40% итд).
Таким образом, при расстановке импов в оружии нужно будет учитывать достаточно много различных нюансов: балансировать между количеством защитных и дамажных импов, следить, чтобы энергии было достаточно, и она не кончалась слишком быстро (иначе главгер окажется беззащитен перед противником). Если мне удастся более-менее специализировать импы, возможно будет иметь смысл специализация обоих главгеров в различные "классы". Вместо левелинга при итоговом расчете очков в конце игры (в случае победы или поражения) будет учитывать общий уровень прокачки оружия, количество вставленных импов итд.
В общем, примерно так все будет выглядеть. Не знаю, конечно, сколько из написанного удастся реализовать, но по крайней мере в дальнейшем я буду рассматривать это в качестве плана-максимума.
Re: Blame!-roguelike
Изменения в новой версии. (Заранее сорри за длиннющие посты. Просто все-так редко пишу=(( )
Добавил файл настроек options.txt. По мере усложнения, этот файл будет разрастаться, пока же там в качестве опций: fps, размеры окна (ширина и высота), возможность выставить fullscreen (играть в полноэкранном режиме. Возмжные значения параметра - yes/no) и несколько игровых параметров: размеры игрового уровня (100*100, меньше 10 лучше не ставить), количество загружаемых на карту мобов и генеращихся станций.
Еще чуть вытянул символы вверх, и немного прижал их друг к другу по горизонтали. Выглядит все теперь так:
Также, как уже писал, несколько изменил алгоритм построения лабиринта: он наконец перестал зависать, и теперь генерит довольно запутанные штуки, благодаря уменьшенному ограничению на максимальный размер комнаты. Поставил в настройках игры генерацию уровня 100*100 клеток.
Сам по себе алгоритм очень простой, по сути состоит всего из трех функций, только одна из которых вызывается рекурсивно. На выходе он возвращает двумерный массив целых чисел, на основе которого потом в игре генерится карта: 0 - пол, 1 - стена, 2 - дверь. Внутри эти функции занимаются в основном операциями с двумерным массивом в циклах. Ничего там ява-специфичного нет, поэтому в принципе алгоритм можно легко портировать на любой язык. Если интересно, могу рассказать о нем подробнее. Похожий алгоритм используется в DoomRL.
Переписал вывод графики через дисплейные списки и несколько оптимизировал алгоритм в целом (убрал лишние вызовы маштабирования glScale). По идее, должно работать несколько быстрее.
Также наконец более-менее разобрался с анимацией несчастной (хотя и не совсем доволен результатом все-таки). Анимация сейчас проигрывается непосредственно в момент совершения действия (вызова метода doAction у объекта класса ADecision). Раньше анимации в момент совершения действия просто добавлялись в общий контейнер и потом все вместе проигрывались один за другим. Как мне такая идея пришла в голову, и почему раньше не приходило нынешнее решение, ума не приложу, честно =)
В итоге, после некоторых раздумий решил все-таки лишить главгеров анимации движения. Остается анимация стрельбы и отдачи и анимация движения у противника.
Баг с голубым фоном тайлов, к сожалению, не поправил. Я обязательно поправлю его сразу же, как только хоть где-нибудь воспроизведу.
Что касается геймплея.
Реализовано взаимодействие главгеров между собой: можно задавать одному из персонажей двигаться за своим товарищем (клавиша F5) и автоматически атаковать врагов в области видимости (клавиша F6. Остальные клавиши можно посмотреть в справке, которую можно вызвать из игры, нажав F1).
Противники пока что одного вида (Silicon Creatures): двигаются чуть быстрее главгеров, атакуют ближней атакой.
Сделаны следующие виды импов:
* Три вида атакующих, с различным дамагом. На самом деле, сейчас при выстреле в противника урон рассчитывается по ужасно простой формуле: random*damage,
где damage - суммарный дамаг пушки, и random, соответственно - случайное число от 0 до 1. Так что средний урон в два раза меньше этого суммарного...
* Extender - имп-расширитель, добавляющий в пушку новые сокеты
* Energy - имп-"батарейка", +10 к количеству энергии. Энергия тратится на выстрелы (щиты пока что не сделаны). Если энергии недостаточно, стрелять оружие откажется. Количество энергии на один выстрел пропорционально суммарному урону - поэтому следует продумывать баланс, и не делать пушку чересчур дамагающей при малом количестве энергетических импов. Количество энергии медленно восстанавливается до максимального значения.
* MindHack - прототип импа-взломщика. Ну сейчас это так, фича на будущее. При выстреле в противника пока что просто загружается вот такое вот окошко,
из которого можно только выйти, нажав 1. Генерации уровней и собственно "взлом" - пока не реализованы. Так что имеет смысл с пушки его сразу свинтить, чтобы не отвлекал.
* Kick - имп-отбрасыватель. Цель при выстреле отбрасывает назад на одну клетку.
Из мобов после смерти падают только дамажные импы, энергетические и extender. Kick лежит в инвентаре у Cibo. Имеет смысл сразу установить его в оружие (вместо MindHack'а): можно тогда, например, использовать Cibo в качестве сапорта, установив ей автоматическое движение за Killy и атаку врагов. Она будет их отбрасывать, а Killy расстреливать - достаточно эффективная тактика против быстрых противников.
Станции.
Реализованы Rebuild Stations. Выглядит это вот так:
на станцию можно зайти: нужно встать на букву А и нажать enter. Появится вот такое окно:
"лекарство" (mixture) можно тратить либо на восстановление хп, либо на понижение уровня заражения. Лекарства на каждой станции имеется конечное количество, и оно не восполняется. Поэтому, чтобы выжить, нужно перемещаться от станции к станции.
Собственно, в текущей демке и можно только перемещаться по уровню от станции к станции и косить мобов. Условие окончания игры и алгоритм подсчета очков не созданы, сохранения тоже не реализованы.
В общем, такие дела. Ссылка на скачивание новой версии указана в посте выше и на всякий случай вот она еще раз:
http://blame-roguelike.googlecode.com/f ... r-v002.zip
Что думаете о таком варианте геймплея. Достаточно ли он отвечает жанру киберпанка или все-таки нет?)
Добавил файл настроек options.txt. По мере усложнения, этот файл будет разрастаться, пока же там в качестве опций: fps, размеры окна (ширина и высота), возможность выставить fullscreen (играть в полноэкранном режиме. Возмжные значения параметра - yes/no) и несколько игровых параметров: размеры игрового уровня (100*100, меньше 10 лучше не ставить), количество загружаемых на карту мобов и генеращихся станций.
Еще чуть вытянул символы вверх, и немного прижал их друг к другу по горизонтали. Выглядит все теперь так:
Также, как уже писал, несколько изменил алгоритм построения лабиринта: он наконец перестал зависать, и теперь генерит довольно запутанные штуки, благодаря уменьшенному ограничению на максимальный размер комнаты. Поставил в настройках игры генерацию уровня 100*100 клеток.
Сам по себе алгоритм очень простой, по сути состоит всего из трех функций, только одна из которых вызывается рекурсивно. На выходе он возвращает двумерный массив целых чисел, на основе которого потом в игре генерится карта: 0 - пол, 1 - стена, 2 - дверь. Внутри эти функции занимаются в основном операциями с двумерным массивом в циклах. Ничего там ява-специфичного нет, поэтому в принципе алгоритм можно легко портировать на любой язык. Если интересно, могу рассказать о нем подробнее. Похожий алгоритм используется в DoomRL.
Переписал вывод графики через дисплейные списки и несколько оптимизировал алгоритм в целом (убрал лишние вызовы маштабирования glScale). По идее, должно работать несколько быстрее.
Также наконец более-менее разобрался с анимацией несчастной (хотя и не совсем доволен результатом все-таки). Анимация сейчас проигрывается непосредственно в момент совершения действия (вызова метода doAction у объекта класса ADecision). Раньше анимации в момент совершения действия просто добавлялись в общий контейнер и потом все вместе проигрывались один за другим. Как мне такая идея пришла в голову, и почему раньше не приходило нынешнее решение, ума не приложу, честно =)
В итоге, после некоторых раздумий решил все-таки лишить главгеров анимации движения. Остается анимация стрельбы и отдачи и анимация движения у противника.
Баг с голубым фоном тайлов, к сожалению, не поправил. Я обязательно поправлю его сразу же, как только хоть где-нибудь воспроизведу.
Что касается геймплея.
Реализовано взаимодействие главгеров между собой: можно задавать одному из персонажей двигаться за своим товарищем (клавиша F5) и автоматически атаковать врагов в области видимости (клавиша F6. Остальные клавиши можно посмотреть в справке, которую можно вызвать из игры, нажав F1).
Противники пока что одного вида (Silicon Creatures): двигаются чуть быстрее главгеров, атакуют ближней атакой.
Сделаны следующие виды импов:
* Три вида атакующих, с различным дамагом. На самом деле, сейчас при выстреле в противника урон рассчитывается по ужасно простой формуле: random*damage,
где damage - суммарный дамаг пушки, и random, соответственно - случайное число от 0 до 1. Так что средний урон в два раза меньше этого суммарного...
* Extender - имп-расширитель, добавляющий в пушку новые сокеты
* Energy - имп-"батарейка", +10 к количеству энергии. Энергия тратится на выстрелы (щиты пока что не сделаны). Если энергии недостаточно, стрелять оружие откажется. Количество энергии на один выстрел пропорционально суммарному урону - поэтому следует продумывать баланс, и не делать пушку чересчур дамагающей при малом количестве энергетических импов. Количество энергии медленно восстанавливается до максимального значения.
* MindHack - прототип импа-взломщика. Ну сейчас это так, фича на будущее. При выстреле в противника пока что просто загружается вот такое вот окошко,
Скрытый текст: ПОКАЗАТЬ
* Kick - имп-отбрасыватель. Цель при выстреле отбрасывает назад на одну клетку.
Из мобов после смерти падают только дамажные импы, энергетические и extender. Kick лежит в инвентаре у Cibo. Имеет смысл сразу установить его в оружие (вместо MindHack'а): можно тогда, например, использовать Cibo в качестве сапорта, установив ей автоматическое движение за Killy и атаку врагов. Она будет их отбрасывать, а Killy расстреливать - достаточно эффективная тактика против быстрых противников.
Станции.
Реализованы Rebuild Stations. Выглядит это вот так:
Скрытый текст: ПОКАЗАТЬ
Скрытый текст: ПОКАЗАТЬ
Собственно, в текущей демке и можно только перемещаться по уровню от станции к станции и косить мобов. Условие окончания игры и алгоритм подсчета очков не созданы, сохранения тоже не реализованы.
В общем, такие дела. Ссылка на скачивание новой версии указана в посте выше и на всякий случай вот она еще раз:
http://blame-roguelike.googlecode.com/f ... r-v002.zip
Что думаете о таком варианте геймплея. Достаточно ли он отвечает жанру киберпанка или все-таки нет?)
Последний раз редактировалось dunno 28 фев 2010, 15:46, всего редактировалось 1 раз.
Re: Blame!-roguelike
Звучит всё достаточно интересно, сейчас скачаю, посмотрю...
UPD: Да! Теперь запускается, но вот у всех символов голубой фон...
UPD: Да! Теперь запускается, но вот у всех символов голубой фон...
Re: Blame!-roguelike
*приставил пистолет к виску, нажал на курок...* =)Newman писал(а):UPD: Да! Теперь запускается, но вот у всех символов голубой фон...
млин, может я дальтоник, почему у меня нигде нет голубого фона....
Re: Blame!-roguelike
Честно говоря, не знаю, в чём может быть дело, с LWJGL дела никогда не имел.
Да, ещё строки с текстовыми сообщениями внизу экрана... они слишком узкие по высоте, часть символов просто отрезается по вертикали....
Да, ещё строки с текстовыми сообщениями внизу экрана... они слишком узкие по высоте, часть символов просто отрезается по вертикали....
Re: Blame!-roguelike
это как? можешь запостить скрин?Newman писал(а): Да, ещё строки с текстовыми сообщениями внизу экрана... они слишком узкие по высоте, часть символов просто отрезается по вертикали....
Re: Blame!-roguelike
Скриншот тут:
Может, дело в полноэкранном режиме?
Скрытый текст: ПОКАЗАТЬ
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 38 гостей