Страница 6 из 7

Добавлено: 17 сен 2007, 10:12
Kogotoro
darhark писал(а):А арбалет - это просто итем, натянуть его наполовину нельзя.
смотря какой механизм натяжения...

Добавлено: 05 окт 2007, 16:25
Dmiry
26/09/07
Разделение события тайм-менеджера на два вызывает вопросы. В частности, стоит ли выносить в отдельный класс TimeAction, если все равно имеет место связка TimeEntity-TimeAction. То есть не морочится, оставить один класс TimeEntity, который и будет включать необходимые для выполнения действия. Другой вопрос - при этом получится, что действия, реализуемые функциями Rate и Cost, будут своими для каждого события в списке. То есть отдельные классы? Сколько тогда получится классов? Можно ли их как-то унифицировать?

Интересно, а при этой системе как изменится механизм переназначения клавиш?

28/09/07
Решил слегка переделать класс ячейки карты TMapCell. Добавляю флаги наличия предмета в ячейке. Соответственно меняется операция размещения предмета на карте, подбирания и бросания. Зато упрощается проверка на наличие предмета в клетке карты. Флаг HasItem будет устанавливаться при любом количестве предметов в клетке карты.

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

Сделал. Осталось отладить.

Сейчас опять возвращаюсь к отладке рисования карты. Попробую отследить цепочку вызовов рисования. Есть подозрение, что вызов Flip надо делать в определенном месте. Или рисование черной клетки делается неправильно. Отловил один глюк - при загрузке спрайт черной клетки не загружался. Исправил. Косяки при скролле карты все равно остались.

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

Добавлено: 11 ноя 2007, 05:24
Dmiry
31.10.07
Сделал трассировку вызовов при рисовании клетки карты. Вроде все нормально. Проверил прокрутку, исправил одну ошибку при проверке на скролл в методе ValidateScroll. Все равно при скролле остается ошибочная отрисовка. Вроде бы при скролле надо целиком всю карту перерисовывать. Есть мысль для каждой клетки карты хранить два глифа - нормальный и затененный, и в зависимости от состояния клетки выводить соответствующий глиф. Другой вариант - разобраться с SDL и невидимые известные клетки выводить в черно-белом виде.

07.11.07
Посмотрел недавно Slaves to Amok: Dwarf Fortress. Очень похоже на то, что я хочу увидеть в своем проекте. Вообще сама по себе игра выглядит как Сеттлеры в текстовом режиме. Что понравилось - большое количество построек, большое число возможных изделий. Что не понравилось - все возможное производство скучено в одно меню на много экранов.

Сейчас пришел к выводу, что надо делать вывод текста на экран. Решил текст выводить тайлами, заранее нарисованными в отдельное изображение. Берем картинку 16х16 символов, рисуем каждую букву 8х8 пикселов, и пишем процедуру вывода текста как последовательности картинок.

Кроме того, на примере DF появились идеи, как реализовать дерево производства. В частности, будет применяться выжигание древесного угля из древесины. Собственно, насколько я помню историю, металл на Руси использовался относительно редко, и только в тех случаях, когда без него было не обойтись. И отношение к кузнецам также было своеобразное.

:?: Кто-нибудь может поделиться кодом, как средствами SDL превратить изображение в черно-белое или затемнить его? Мне надо выводить запомненные, но невидимые сейчас клетка карты. Как сделал сейчас - поверх тайла вывожу сетку затемнения как отдельный тайл с прозрачностью.

Добавлено: 11 ноя 2007, 21:59
v0l0sat1y
Вроде бы при скролле надо целиком всю карту перерисовывать.
Не обязательно. Фактически при сколле всегда меняются 2 строки/столбца + те клетки, где изменился los/походили монстры и т.д. Так что большую часть экрана можно сохранить, а потом поверху перерисовать изменившиеся клетки.

Кстати, можно взглянуть на какую-нить тестовую версию?
В частности, будет применяться выжигание древесного угля из древесины.
Смеялсо. Честно говоря, уже давно улыбают предложения типа "давайте вместо голода введем разделение на недостаток белков, жиров, углеводов, кальция, железа, всех возможных витаминов...", "у оружия вместо одного урона неплохо сделать 100 характеристик, а то нереалистично получается", "прозрачность деревьев должна меняться от тумана на 3%".

DF - это конечно хорошо, респект Тоади Вану за проделанную работу.
Но блин, если бы у разработчиков Dwarf Fortress было побольше серого вещества в голове, полмира забило бы на Думы, Квейки, Варкрафты и с пеной у рта рубилось бы в DF. А так он просто широко известен в узком кругу.
О чем стоит думать(ну это мое мнение, конечно):
1) Интерфейс
У DF я бы его оценил где-то на -100 по 10-бальной шкале.
2) Графика
Уже жду фраз типа:
"Чел, что с тобой? Какая графика, это же рогалик?"
Просто от нее не должно откровенно блевать. Опять же, DF получает низачот. Из хороших примеров: Warlock of the Firetop Mountain (ASCII режим, отличная подборка шрифта и цветов). Я сам когда писал свой первый рогалик, особо не загонялся. Но Courier New на Canvas'e в Delphi смотрелся однозначно лучше, чем консоль. Можешь посмотреть, если интересно: http://mazecrawl.com
3) Все фичи должны быть обоснованны, не перегружать игру излишними деталями и (!!) заметны. Если прозрачность стены нулевая - это видно, если в районе 50% - тоже вполне нормально, но если 95.5% - то вряд ли кто-то отличит от ста. Даже в мною любимом Adom'e возможность помыть ужи, которая используется раз в игре - скорее понты. А объем кода и сложность все время растут. Опять же, DF получает минус.

P.S. Уже жду критических каментафф и личных оскорблений.

Добавлено: 12 ноя 2007, 03:19
Aerton
Dmiry писал(а)::?: Кто-нибудь может поделиться кодом, как средствами SDL превратить изображение в черно-белое или затемнить его?
http://plg.lrn.ru/doc/sdl-gfx/gfx4.html
v0l0sat1y писал(а):P.S. Уже жду критических каментафф и личных оскорблений.
Да нет, в общем-то правильно, хотя наверное лучше всё же его обсуждать в собственной теме, а не красть топик у автора.

Добавлено: 12 ноя 2007, 04:08
Dmiry
Aerton писал(а):
Dmiry писал(а)::?: Кто-нибудь может поделиться кодом, как средствами SDL превратить изображение в черно-белое или затемнить его?
http://plg.lrn.ru/doc/sdl-gfx/gfx4.html
Спасибо! Я так понял, что средствами SDL преобразование изображения целиком сделать нельзя, только попиксельно? Тогда мне будет проще уже имеющиеся тайлы обработать в граф.редакторе и загружать готовые серые/затемненные.
v0l0sat1y писал(а):... уже давно улыбают предложения типа ...
Это всего лишь идеи. Я завел эту тему, чтобы иметь обратную связь при разработке рогалика, и высказываю здесь любые идеи, которые мне показались интересными.

За ссылку на Warlock's Mountain спасибо. Mazecrawl видел.

По поводу посмотреть на мою работу - там еще нечего смотреть, только перемещение, и все. Ссылка в этой теме есть (но лучше на нее не смотреть, ибо пункты 1,2,3 там присутствуют).

Добавлено: 12 ноя 2007, 14:06
Maelstrom
У DF я бы его оценил где-то на -100 по 10-бальной шкале.
Марш играть в Space Empires 5 и Master of orion 3 :)
Но Courier New на Canvas'e в Delphi смотрелся однозначно лучше, чем консоль.
Садись, два. Fixedsys рулил, рулит и будет рулить.

Добавлено: 12 ноя 2007, 16:31
v0l0sat1y
Садись, два. Fixedsys рулил, рулит и будет рулить.
На вкус и цвет. Кстати - Courier New не рулит абсолютно. Я особо не выбирал. Но цвета хоть приятней консольных.

Добавлено: 12 ноя 2007, 16:35
v0l0sat1y
Я завел эту тему, чтобы иметь обратную связь при разработке рогалика, и высказываю здесь любые идеи, которые мне показались интересными.
Я тут, собственно, и осуществляю обратную связь :)
Просто не всегда чем больше деталей - тем лучше.

Добавлено: 16 ноя 2007, 17:04
Dmiry
12.11.07
Переделал на вывод невидимых тайлов оттенками серого. Использовал те же самые тайлы, перевел в граф.редакторе в оттенки серого и загружаю как второе изображение. При необходимости вывести клетку карты серым цветом просто беру картинку со второго изображения. Сразу исправились глюки со скроллом. Теперь работает правильно. Только предметы слегка мерцают при выводе.

Вчера сделал отдельный проект для подготовки шрифтовых тайлов. Теперь осталось его слегка подрихтовать и можно генерить требуемую картинку с набором символов для вывода текстов.

13.11.07
Начал делать вывод текста на экран. Пока получается аналогия с паскалевскими стандартными процедурами. Пишу процедуры: OutChar, OutText, OutTextXY, DefineWindow, SetWindow, GetWindow.

14.11.07
Под вывод текста добавил несколько новых параметров в INI-файл. Это (пока) параметры ширины и высоты символа.

В первом приближении вывод текста заработал. Осталось сделать еще несколько улучшений, касающихся вывода текста разными цветами на разном фоне, отладить перенос на новую строку, сохранение текста при прокрутке.

Сейчас на экран выводится только код нажатой клавиши.

Добавлено: 16 ноя 2007, 17:05
Dmiry
15.11.07
Попробовал сгенерировать тайлсет для шрифта Fixedsys. Все вроде хорошо, но ряд маленьких русских букв получился без хвостиков снизу. Это касается букв Р, У, Ц, Щ. Также большие буквы Ц и Щ. Как вариант решения - сдвинуть эти буквы вверх на 1 пиксел. Пока подумаю.

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

Сначала разобраться с глюком - класс Game не выводит текст сообщения на экран, хотя Painter.OutText отрабатывает корректно. При повторном запуске все работает нормально. Не понимаю.

Еще одна задача - корректная обработка перехода на новую строку и прокрутка текста вверх при достижении нижнего края окна. Для прокрутки можно использовать два возможных способа. Первый - просто копировать содержимое прямоугольного окна, содержащего текст на высоту 1 символа вверх. Второй - прочитать пример на SDL про прокрутку фонового изображения и использовать этот метод. Сначала попробую первым способом.

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

Для решения этой задачи надо выделить: 1) требуемые экраны; 2) рабочие области для каждого экрана.

Экраны и области:
1) основной: карта, сообщения, миникарта(?), статус героя, календарь(?)
2) инвентарь: список элементов инвентаря, описание текущего действия, описание выбранного предмета
3) главное меню: единственная область
4) просмотр истории сообщений: единственная область
5) экран производства: многоуровневое меню(?) в виде - выбор общего вида изделия, выбор конкретного вида изделия, выбор материала(?)

Основная задача по части экранов сейчас - определиться с набором областей для главного экрана + (возможно) сформировать главное меню.

Переделал шрифт на 8х16. Опять не пишет на экране. Есть подозрение, что некорректно определяются координаты вывода. Плюс проверка на выход за пределы окна. Отловил. SDL не хочет рисовать картинки, если файл со шрифтом содержит более 8bpp. Сконвертил картинку, заработало. Надо включить при начальной загрузке преобразование всех грузимых картинок в формат 8bpp.

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

Добавлено: 21 ноя 2007, 08:40
Dmiry
Очередная тестовая версия. С выводом текста косяки остались.

Добавлено: 21 ноя 2007, 12:49
unhappy
ругается, что не может найти SDL.dll :-\

Добавлено: 21 ноя 2007, 16:02
Dmiry
Упс... Я забыл его/ее в архив включить.

Добавлено: 22 ноя 2007, 02:08
Sanja
Прокрутка текста, как ты и говорил не корректна. Причём это очень и очень мягко сказано :)

Не отрисовывается карта при старте.

Перемещение товарища по экрану. Желательно, что он при нажатии и удержании клавиши бежал, а не делал один ход.
Dmiry писал(а):SDL не хочет рисовать картинки, если файл со шрифтом содержит более 8bpp. Сконвертил картинку, заработало. Надо включить при начальной загрузке преобразование всех грузимых картинок в формат 8bpp.
Да ладно :shock: Быть такого не может.

Ну и ... всё. Больше оценить-то и нечего. :)