Слоты сохранения в FireURQ

По многочисленным просьбам сделал слоты сохранения в фурке. Выглядит это примерно так (это экран загрузки):

Старая схема работы тоже сохранена, старые игры будут работать как работали. А для новых игр авторы получат возможность реализовать как запись в выбранный игроком слот (наряду с автосейвом), так и систему «чекпоинтов».

Новые шрифты в фурке — 2

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

При этом схема работы, как я описывал в предыдущем посте: из TrueType шрифта на лету создаётся битмапный шрифт, который и используется в тексте. Таким образом, мы пользуемся всеми плюшками FreeType и DirectX.

Новые шрифты в фурке

Давно хотел, чтобы в фурке была красивая типографика. Хотел прикрутить к ней FreeType, но оказалось, что он слишком медленный для динамичного оформления, которое фурка предоставляет авторам. В общем, либо декораторы и плавная прокрутка текста, либо FreeType… Как результат, нашёл компромисный вариант: генератор шрифтов, который будет использовать FreeType для создания битмапного шрифта, такого, какой сейчас и используется в фурке.

Достоинства новых шрифтов:

  • одинаково хорошо выглядят как на тёмном, так и на светлом фоне;
  • форма букв сохранена намного лучше;
  • италик (наклонный шрифт) выглядит просто прекрасно за счёт правильного кернинга.

Недостаток у шрифтов только один: поскольку литеры не «приколочены гвоздями» к пикселям на экране, некоторые линии рисуются нечётко. Особенно это касается верхних линий заглавных букв когда шрифт отображается на тёмном фоне.

Во общем, вот картинки, оцените и скажите, что думаете.

Это тест старого и нового шрифтов. Новый в верхней строчке, старый в нижней. Очевидно преимущество нового шрифта на светлом фоне.

Это фурка с новым шрифтом.

Решил посмотреть, как будет выглядеть фурка, если основной шрифт будет наклонный. Показалось так хорошо, что даже захотелось сделать его шрифтом по умолчанию. 🙂 Что думаете?

UPD: Есть, кстати, ещё один вариант. Можно встроить генерацию битмапного шрифта прямо в фурку. Тогда можно будет носить TrueType шрифты вместе с квестом и генерить из них шрифт нужного размера прямо на лету. Правда, фурка «потолстеет» (Вик, привет!).

Манифестофель

Почитал манифест разработчика INSTEAD, который Пётр выложил на своём форуме. Проникся весьма. Практически во всём с ним согласен. В какой-то момент я гнался за количеством фич в фурке, особенно оформительских. А сейчас понял, что, по сути, они никому не нужны. И те, что я делал сам, и те, что меня просили сделать — за небольшим исключением. Количество фич интерпретатора и количество игр, под него написанных, никак не кореллируют. Поэтому я вряд ли буду добавлять фичи в фурку в ближайшее время. Их и так там много.

А игр мало. Почти никто не пишет. Ну, что ж, значит такова востребованность фурки. 😉

Шрифты и всякое

После рассмотрения возможности удочерить в фурке FreeType, пришёл к выводу, что если делать поддержку FT в фурке напрямую, то придётся отказаться от декораторов под текстом и плавной прокрутки самого текста, что неприкольно совсем. В результате, остановился на идее сделать новый редактор шрифтов с основой на FT.

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

Для пробы сгенерил одну букву. 🙂 Вот как она выглядит на чёрном и белом фоне. Фон антиалиасинга задал серый, как промежуточный. (Нажмите на картинку, чтобы посмотреть в полный размер.)

Выводы:

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

Надеюсь, не зря я это всё затеял. 😉

Теперь про майки. Они обязательно будут, это факт. Извините, Rono и Ugo, что приходится так долго ждать. Мне стыдно.

FireURQ 1.3

Вчера напрягся, доделал справку и демо — и выпустился, наконец.

В принципе, демо всё объясняет в смысле нововведений. Скины позволяют фурке «во что угодно превратиться». А скрипты декораторов позволяют создавать простые системы частиц (вроде снегопада в демо) и просто программировать декоратор на заданную последовательность действий.

Вообще, версия получилась «оформительская». Ну и славно. Пишите красивые игры. 🙂

UPD: Качать там, где и всегда.

Выравнивание кнопок

Небольшой сникпик новой фичи фурки. Кто-то уже видел.

Можно выравнивать кнопки вправо влево и по центру (переменная btnalign) и можно выравнивать текст внутри кнопки (переменная btntxtalign). Такие дела.

Инвентарь и его удобство

В урке много недостатков. Мне, как автору фурки можете поверить. Вообще, чем дальше я пишу фурку, тем лучше понимаю, какой должна быть идеальная менюшная ИЛ-платформа. Возможно, я её когда-нибудь напишу. Имя, по крайней мере, уже придумал. 🙂 Впрочем, я отвлёкся.

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

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

Сейчас взаимодействие с предметом в инвентаре реализуется через локации вида:

:use_Зелье_Выпить
pln ...

Если нужно реализовать различное взаимодействие в зависимости от текущей локации, то приходится писать что-то вроде:

:use_Зелье_Выпить
if cur_loc="пещера" then goto ...

При этом, если локаций, на которых нужна разная реакция на выпитое зелье, много, то этих if и goto в локации-действии будет на пол-экрана. Кроме того, все реакции будут располагаться в коде одной куче, зачастую далеко от той локации, к которой привязаны.

Мне пришла в голову идея реализовать в фурке локации следующего вида:

:пещера
pln Вы в пещере...
...
end

:use_Зелье_Выпить@пещера
pln Пьём зелье в пещере...
... 

Т.е. в зависимости от текущей локации будет выбираться та или иная реализация на действие над предметом. Если не нашлось «специализированной» реализации, то выполняется стандартная use_Зелье_Выпить.

Этот подход, мне кажется, имеет несколько важных плюсов:

  1. Реакцию на предметы можно описывать непосредственно рядом с локацией, к которой они привязаны. Это позволит упростить отладку и доработку сложного квеста.
  2. Нет безумных «макарон» из if и goto.
  3. Текст игры становится более «читабельным», что немаловажно, если игра большая.

Также удобство использования инвентаря повысят события (events), которые стоят в планах на реализацию. Но о них в другой раз.