Forum.iFiction.Ru

iFiction.Ru · ifHub · FAQ · IFWiki · QSP · URQ · INSTEAD · AXMA

форум об interactive fiction, текстовых приключенческих играх и всём таком...

Вы не зашли.

0    0    #1
05.12.2007 15:13

goraph
Участник (+647, -223)
Зарегистрирован: 16.04.2007
Сообщений: 531

Основная добродетель гражданина есть недоверие.

Два одинаковый предмета

Хм, столкнулся с проблемой. У протагониста уже есть предмет, пусть "пузырек с ядом". Исследуя отдаленные районы квеста он находит второй точно такой же "пузырек с ядом". Предметы по идее абсолютно идентичны (массовое производство приводит к этому), более того это контейнеры, и их содержимое отличается (в одном из пузырьков на самом деле простая вода), однако об этом нельзя узнать, если не попробовать (а умный протагонист не станет пить из пузырька с ядом, чтоб не почувствовать легкого недомогания).
Собственно есть ли выход из ситуации:
   Вы имеете в виду "пузырек с ядом" или "пузырек с ядом"?
Кроме как поменять сценарий? smile
Самое страшное - таких предметов на самом деле на два, а четыре smile

Неактивен

0    0    #2
05.12.2007 17:07

Hind
Участник
Откуда: Балашиха
Зарегистрирован: 24.10.2007
Сообщений: 135
Вебсайт

Не нервируйте меня! Мне скоро негде будет прятать трупы!

Re: Два одинаковый предмета

Предложу теоретическое решение, без кода.

При первом нахождении 2-го, 3-го и 4-го пузырька нужно изменять их лексические свойства на "второй пузырек", "третий ..," и т.д., в зависимости от того, сколько пузырьков игрок уже нашел.
Нужно создать где-нибудь счетчик найденных пузырьков, у самих пузырьков прописать флаг "найден", а в метод doTake вставить проверку этого флага и изменение описания пузырьков.
Также при нахождении первого альтернативного объекта нужно давать нумерацию и первому экземпляру ("первый пузырек").

Или можно менять лексические свойства пузырьков в зависимости от того, что в них находится. Например, изначально в пузырьке налита вода. Называется оно "Пузырек с водой". Если игрок извлечет воду, пузырек станет называться "[Первый/второй/третий/четвертый] пустой пузырек". Нумерация должна появляться, если пустых пузырьков несколько, что несложно проверить.
Как только игрок зальет туда, скажем, водку, по методу doFill (или как там он называется) у пузырька опять изменятся лексические свойства и он станет "Пузырек с водкой".

Отредактировано Hind (05.12.2007 17:09)

Неактивен

0    0    #3
05.12.2007 22:09

Hind
Участник
Откуда: Балашиха
Зарегистрирован: 24.10.2007
Сообщений: 135
Вебсайт

Не нервируйте меня! Мне скоро негде будет прятать трупы!

Re: Два одинаковый предмета

Ух ты, а я и не знал про disamvdesc smile
Главное, следить, чтобы игрок не получал ответов типа: "Вы имеете в виду первый пузырек с йадом или четвертый пузырек с йадом?", когда он встретил в игре всего два... big_smile
Я к тому, что нумеровать их надо в порядке нахождения, даже если игрок может найти их в произвольном порядке.

Кстати, похоже, динамическое нумерование должно происходить не в doTake, а в момент первого появления в поле внимания игрока - иначе он просто не сможет взять его: в инвентаре будет "Пузырек с йадом", в шкафу тоже будет "Пузырек с йадом".
Возникает вопрос - а есть ли универсальный, который будет вызываться при первом появлении объекта в кадре?

Для объектов, явно перечисляемых движком при осмотре комнаты (isListed) это, очевидно, vdesc.
С остальными, похоже, нужно разбираться индивидиуально.

Неактивен

0    0    #4
05.12.2007 23:00

Hind
Участник
Откуда: Балашиха
Зарегистрирован: 24.10.2007
Сообщений: 135
Вебсайт

Не нервируйте меня! Мне скоро негде будет прятать трупы!

Re: Два одинаковый предмета

goraph написал:

он может догадаться написать "взять четвертый пузырек с ядом" и узнать есть ли такой в игре предмет по ответу ртадса

Так в том и фишка, что "четвертый пузырек" окажется четвертым и получит такое имя и лексические свойства (которые позволили бы к нему так обратиться) только после его нахождения. )))
Я сейчас как раз пишу код для этого )

Коварно, зато правдоподобно (думаю, я бы тоже, найдя по очереди несколько одинаковых пузырьков, начал бы называть их "первый", "второй" и т.п., сделав какие-нибудь метки для простоты) и защищает от спойлера.

Неактивен

0    0    #5
05.12.2007 23:25

Hind
Участник
Откуда: Балашиха
Зарегистрирован: 24.10.2007
Сообщений: 135
Вебсайт

Не нервируйте меня! Мне скоро негде будет прятать трупы!

Re: Два одинаковый предмета

GrAndrey написал:

А вот нумерация может появляться если у игрока в кармане есть маркер. Это даже можно сделать пазлом. А ещё, актер может отказываться брать пузырек, мотивируя риском ошибки. Тут очень много вариантов, которые могут сделать игру только интереснее!

Ага, я уже думал об этом. "Я могу случайно перепутать пузырьки, так что лучше пока его не брать."

Меня сейчас интересует, как изменить свойство adjective... Что оно вообще такое? Ему ничего не присваивается, оно только задается при создании объекта...

Неактивен

0    0    #6
06.12.2007 22:13

Hind
Участник
Откуда: Балашиха
Зарегистрирован: 24.10.2007
Сообщений: 135
Вебсайт

Не нервируйте меня! Мне скоро негде будет прятать трупы!

Re: Два одинаковый предмета

Дописал пример с динамической нумерацией. Пузырьки нумеруются по ходу появления в кадре, при старте игры они абсолютно одинаковы и называются просто "пузырек" без свойства adjective.
Код и .gam в приложенном файле.

Когда игрок видит объект (то есть выполняется метод vdesc), вызывается метод det (определить), который указывает, как надо перечислять предметы.
В нем используется объект enumerator (перечислитель), в котором хранятся необходимые данные и метод, изменяющий лексические данные объекта/

Если метод vdesc не вызывается автоматически (например, предмет не isListed), нужно вызывать det вручную, например, при входе в комнату с пузырьком.

P.S. Сорри, что не указаны проходы. Три локации, из текущей на восток и снова на восток.

Скачать

Отредактировано Hind (06.12.2007 22:19)

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru