[ERL] Иногда они возвращаются

Аккурат месяц назад мой мозг начал знатно закипать от разработки и всего ей сопутствующего, поэтому я взял явно необходимый перерыв. Но всему хорошему приходит конец, поэтому сегодня я снова взялся за дело. На самом деле, «за дело» я брался (if you know what I mean) и в течение этого перерыва, так что мне определённо есть о чём рассказать.

В TODO-список определённо нужно добавить возможность ввода/генерации имени персонажа...

В TODO-список определённо нужно добавить возможность ввода/генерации имени персонажа…

Итак, перво-наперво то, о чём я говорил в прошлый раз — всплывающие подсказки! Их внешний вид, скорее всего, переживёт ещё не одну итерацию, но главное — работают они именно так, как я хотел. По наведении мыши на объект рядом с ним появляется «окно» с его названием. Если объектов в тайле несколько (куча предметов, например), окон тоже будет несколько. Их размер, разумеется, динамически подгоняется под содержимое, а расположение относительно курсора меняется в зависимости от того, в какой части курсор расположен — таким образом мы избегаем подсказок, пытающихся сбежать за край экрана. Логическим следующим шагом в развитии этого функционала будет добавление кнопки, показывающей такие подсказки для всех предметов, находящихся сейчас на экране — что-то вроде подсветки лута в Diablo и иже с ней. Так как потенциально в каждом тайле карты может находится по предмету, а то и несколько, упорядочивание этих подсказок на экране с сохранением их читабельности становится нетривиальной задачей.

Следующим пунктом в повестке дня значатся двери, без которых любому уважающему себя подземелью, не являющемуся пещерой, было бы стыдно показаться на людях. И теперь генератор наших подземелий умеет их расставлять! …Sort of. Расставлять-то он их расставляет, но из-за особенностей планировки самих подземелий пока двери могут появляться в несколько неожиданных местах. Полагаю, вылавливать случаи неожиданной материализации дверного проёма мне предстоит ещё очень и очень долгое время…
Есть и другая проблема. Очевидно, что у дверей должно быть как минимум два состояния — открытая и закрытая. На текущий момент у всех тайлов в игре есть только два параметра — блокируют ли они передвижение и блокируют ли обзор. Соответственно, закрытая дверь мешает тому и другому, открытая — нет. Или, по крайней мере, не должна. На представленном выше скриншоте серый «+» — закрытая дверь, а серые «/» — открытые, и как не трудно заметить, обзор блокируют и те, и другие. По неизвестной мне причине карта FOV напрочь отказывается обновляться в соответствии с вносимыми мною изменениями тайлов, и разобраться в этой загадке мне пока не дано. В остальном же всё, напротив, работает самым предсказуемым образом — закрытые двери действительно блокируют перемещение, и на их открытие (игроком или монстром) требуется отдельный ход. Первоначально я думал добавить случайный процент того, что некоторые из дверей будут сгенерированы уже открытыми, и возможно так оно в итоге и будет, но пока эта идея реализовала саму себя: так как монстры вне поля зрения постоянно передвигаются случайным образом, к моменту обнаружения игроком они успевают самостоятельно открыть некоторые двери. Кто знает, может когда-нибудь они и квесты будут выполнять за нас?[:

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

monster "archer" {
	name = "archer"
	glyph = 97
	col_r = 110
	col_g = 139
	col_b = 61
	blocks = true
	ai = "ranged"
	hp = 5
	mp = 10
	defense = 0
	strength = 5
	magic = 5
	willpower = 2
	finesse = 6
	speed = 1
	luck = 3
	movement = 12
	xp = 45
}	

То же самое будет сделано для NPC, предметов, классов и других видов повторяющихся в своей сути данных. Очевидно, когда всё это добро не перемешано с кодом, работать и с тем, и с другим становится проще. А главное, можно не бояться добавлять больше всего и вся, опасаясь захламления кода. Разнообразие, here I come!

Добавить комментарий