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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Фурк, пурк, хрюрк!

Ну вот. Я подумал и решил, что на семейный свой сайт я ничего по ИЛ не пишу. И не потому, что нечего сказать, а потому, что пытаясь рассказать друзьям, родственникам и знакомым про ИЛ, я чаще всего натыкаюсь на вежливое внимание (в лучшем случае) или на искреннее непонимание.

В общем, аудитории моего семейного сайта ИЛ, скорее всего неинтересна. Что ж, буду писать здесь. Благо, Олегус последнее время делает из iFiction ИЛ-портал, вот даже блогохостинг прикрутил.

Итак, поехали!