Forum.iFiction.Ru

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

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

Вы не зашли.

0    0    #51
15.12.2008 16:48

ASBer
Модератор (+161, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

Re: Выложил альфа-версию

Gesperid написал:

1. Все проверки объектов выполняются в объекте действия (глагол в терминах рТАДСа)
    Объекты, не подходящие действию, дальше не проходят.
2. У персонажа вызывается метод, одноименный с действием.
    switch по действию таким образом исключается.
    Если необходимый метод у персонажа отсутствует - выводится стандартное сообщение.
3. При необходимости никто не запрещает из метода персонажа вызвать метод объекта.
    switch по объекту таким образом исключается.

1. Что имеется в виду?
2. Это просто другая запись switch, а стандартное сообщение – это ветка default.
3. Не понял. Если, например, берётся бомба, в результате чего она детонирует. Какой метод вызвать у объекта, если в методе взять мы ещё не узнали, что это бомба?

1. для примера возьмем действие "взять"

Код:

unique бомба.cls = предмет
  .Вес = 50
  .lex = "бомб%;..;..;..Вп=у;" //лексема для парсера

action взять //объект категории действие (отдаленный аналог verb в TADS)
  .pat = "взять=возьми @Obj:предмет*Вп" //шаблон команды для парсера
  .Obj(Obj) //проверка для объекта, вызывается парсером
  { if(Obj.Вес > 100)
       return "а не надорвешься?" //не прошла проверка по весу
  }

При вводе комады "взять бомбу" парсер попытается подобрать подходящий шаблон и объекты к нему. В нашем случае это будет шаблон действия "взять" и объект "бомба".
При этом для объекта парсер выполнит проверки:
- бомба находится в текущей локации (префикс @ у переменной Obj)
- бомба отноится к классу "предмет" или имеет свойство "предмет" (Obj:предмет)
- вызовет проверку взять.Obj(бомба).
и только в случае если все проверки прошли успешно, парсет будет искать метод "взять(Obj)" у персонажа и выполнит его.
Обычно далее никаких ветвлений не требуется. Все объекты, способные браться, берутся одинаково.
----
2. Давно известно что любые конструкции языка можно заменить на if() и goto.
    При желании все можно представить как switch. Только зачем?
Основное отличие тут в том, что методы можно разнести по классам и при необходимости перегружать. С ветками switch-а так не получится...
----
3. Это как раз и есть исключительная реакция. Ее можно реализовать по разному. Например так:

Код:

class предмет
  .doTake(){} //обычно предметы берутся без последствий

бомба.doTake() //перегружаем метод
{ %Бабах! Бомба взорвалась у тебя в руках!
  die()
}

pers.взять(Obj)
{ %Ты взял {Obj*Вп}.
  this + Obj //Obj помещаем в инвентарь
  Obj.doTake() //вызываем метод объекта для нестандартных реакций
}

получаем:
> взять бомбу
Ты взял бомбу.
Бабах! Бомба взорвалась у тебя в руках!
Ты умер.

Отредактировано ASBer (15.12.2008 17:04)

Неактивен

0    0    #52
16.12.2008 10:32

ASBer
Модератор (+161, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

Re: Выложил альфа-версию

noname
> пожалуй, становится психологически трудно тестировать движок на примере одной и той же игры. хотя, для демы, игра просто суперская!
Noname, как самого упорного тестировщика готов включить тебя в раздел благодарностей (когда он появится) smile

После запуска игры невозможно получить список команд оболочки, типа Restart или Сохранить
Мне не удалось это повторить... у меня команда помощь/help/? работает везде и всегда.

> нельзя ли автоматизировать вывод этих списков? а то команда брось понятна мышонку, а в списке хелпа её нет
Помощь просто тупо проигрывает файлик help.txt из каталога игры. Если там чего-то нехватает, значит это нужно просто добавить.

> более серьёзным для автора платформы, но не столь важным для игрока, может будет:
очки[предмет, а не баллы] не отображаются в инвентаре, вообще нигде... нет команды, позволяющей получить прямое указание на наличие/отсутствие очков у мышонка.
Очки отображаются в описании персонажа. Отображать их еще и в инвентаре совсем не проблема

> ну, и совсем маловажные замечания связаны с возможностью отдавать команды другим персонажам:
Да, эти несуразности меня тоже повеселили. Будет исправлено в следующей версии.

>тестирование идёт вяло... хочется новой, не менее забавной демы
Сейчас нагло тырю демки из рТАДСа. Золотой череп почти работает.

Неактивен

0    0    #53
16.12.2008 11:42

ASBer
Модератор (+161, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

Re: Выложил альфа-версию

noname написал:

что ещё мне нужно знать, что бы написать для ТОМ свой интерфейс?

Скачать файлик ConTOM_s.rar (есть в Вики на страничке ТОМа). Там разобраться с constom.cpp - это весь интерфейс одним модулем, правда на С.
Все что тебе надо от ТОМа - это 3 функции:
   char* RunFile(char*FileName);
   char* RunText(char*Text );
   char* Command(char*Input);

Отредактировано ASBer (16.12.2008 14:39)

Неактивен

0    0    #54
16.12.2008 17:05

ASBer
Модератор (+161, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

Re: Выложил альфа-версию

Стручок гороха просто бессовестно недоделан!
Чтобы он отображался в инвентаре необходимо прописать свойство .ВКармане = "..."
для комнаты свойство .ЛежитВКомнате = "..."
для двора свойство .ВиденВоДворе = "..."
(очки кстати добавил в инвентарь)

Действие "сорвать" почти что синоним действия "взять" также как "положить" или "бросить".
Я не думаю что в хелпе должны быть описаны ВСЕ действия. Пусть автор игры сам решает что подсказывать игроку, а что нет.

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

Неактивен

0    0    #55
19.12.2008 09:25

ASBer
Модератор (+161, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

Re: Выложил альфа-версию

noname написал:

свежий баг:
сейчас пример "Диалоги на меню.tom" не выводит сообщений, кроме сообщений об ошибках. я уж и их архива заново доставал. по-моему это случилось как раз после того, как я вместо старой версии ТОМ скачал свежайшую. а старую удалил.

Да, это моя вина. Персонажам в примере необходимо добавить метод .onChangePers()

Код:

location Комната.title="Комната"
.description="в комнате Вася и Петя
(для разговора с Васей введите 'говорить с Васей')"

unique Вася.title="Вася"
unique Петя.title="Петя"
  .onChangePers(OldPers)
  { 
    // При смене персонажа показываем локацию
    if(.loc <> OldPers.loc)
    { %<location>
      %{.loc}</location>
      %{.loc.description}
    }
  }

unique Петя_говорящий_с_Васей.title="Петя"
  .onChangePers(OldPers)
  { 
    // При смене персонажа показываем локацию
    if(.loc <> OldPers.loc)
    { %<location>
      %{.loc}</location>
      %{.loc.description}
    }
  }
pers=Петя

Этот метод - обработчик нового события, возникающего при смене персонажа.
Теперь вывод локации не производится автоматически. Это теперь нужно программировать.
Я посчитал это более гибким, например, может понадобится изменить способ показа локации при входе в темную комнату.

Неактивен

0    0    #56
22.12.2008 10:28

ASBer
Модератор (+161, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

Re: Выложил альфа-версию

noname> 1) пока не вижу реакции на ключевые слова. допустим, ввод 'сокровища' будет непонят
ASBer: В ТОМе реализованы 2а способа реализации диалогов - менюшный и парсерный. В рассмотренном примере используется только менюшный способ, но самым интересным мне видится сочитание обоих методов. Тогда будет и реакция на ключевые слова в том числе.

noname> 2) дурацкий текст сообщения об ошибке в режиме диалога: 'Петя не может этого сделать'. собственно, Петя в этом режиме ничего не может сделать. в случае непонятой фразы( а любой ввод в этом режиме воспринимается как фраза, обращённая к собеседнику) хорошо бы выводить соответствующее сообщение.
ASBer: для объекта Петя_говорящий_с_Васей можно определить специальное свойство сan_not_execute. Например:

Код:

Петя_говорящий_с_Васей.сan_not_execute = "Вася тебя не понял."

(есть ряд подобных свойств, задокументирую их в ближайшее время)

noname> 3) игрок может искренне полагать, что ввод 'пр' бует понят как 'прощай', а это не так. т е система подбирает подходящую фразу сверху вниз до первого соответствия. впрочем, это тот момент, который лучше переложить на плечи авторов квестов: или пусть фразы тщательно подбирают, или игрока предупреждают, или надеются, что игрок поймёт принцип сам.
ASBer: Сейчас сортировка ответов по алфавиту. Скорее всего переделаю. Будет по порядку их объявления в коде игры. Т.е. фразы, которые должны быть сверху, нужно будет описывать раньше фраз, распологающихся ниже. Также в планах сделать автонумерацию пунктов меню. Вобщем есть над чем работать.

noname> 2) теоретически возможна (ASBer, подтверди) реакция и на другие, не перечисленные фразы. т е предложенные варианты не запрещают(теоретически) игроку ввести другое понятное ответчику слово, и получить соотв ответ
ASBer: да, такая возможность есть.

noname> 3) эта форма диалогов, естественно, не запрещает реализации обычных парсерных 'спросить Васю об ...', т е если кто из авторов хочет классических парсерных диалогов- наздоровье.
ASBer: парсерные диалоги базируются на специальном операторе:

Код:

 Персонаж > "произносимая фраза"

где Персонаж - объект, а "произносимая фраза" - строка.

noname> надеюсь архив исправлен?
ASBer: Мне стало понятно что этот пример требует доработки.
Попробую добавить туда парсерные возможности, и выложу все примеры отдельным архивом.

Отредактировано ASBer (22.12.2008 10:30)

Неактивен

0    0    #57
24.12.2008 11:11

ASBer
Модератор (+161, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

Re: Выложил альфа-версию

Предлагаю вниманию сообщества первую попытку портации стандартной библиотеки рТАДС на платформу ТОМ.

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

Хотелось бы услышать ваши мнения и пожелания.

P.S. Разрешение у GrAndrey на эксперименты с портацией библиотеки получено.
P.S.S. Разрешения у Michael J. Roberts не запрашивал, но условия лицензии, насколько я понимаю, подобной модификацией не нарушаются.

--------------------------------------------------------------------------------
Прикрепленные файлы:
TOMrTADS.rar, Размер: 236,863 байт, Скачано: 54

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru