Forum.iFiction.Ru

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

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

Вы не зашли.

   #1
07.01.2009 23:16

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

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

Бета-тестирование

Бета-версия 0.9.0.0 доступна для скачивания: http://ifwiki.ru/ТОМ

В этой версии добавлено определение используемого интерфейса, что дает возможность подстраивать код игры под различные платформы (пока выбор между ТОМ-консолью и Миленой).
Добавлена функция input().

Демоигра адаптирована для проигрывания в Милене, добавлены картинки.

Весь функционал, предусмотренный для версии 1.0 разработан.
До релиза первой версии необходимо провести:
- поиск и исправление багов и глюков, полировку и доводку функционала;
- доработку демоигры про мышек;
- доработку документации;
- разработку набора примеров, полностью покрывающих функционал;
- полное портирование библиотеки рТАДСа (собственной библиотеки к 1й версии не планируется);
- возможно что-то еще забыл...

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

Неактивен

   #2
08.01.2009 09:32

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

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

Re: Бета-тестирование

Korwin написал:

ASBer написал:

- полное портирование библиотеки рТАДСа (собственной библиотеки к 1й версии не планируется);

Изумлен. Это серьезно? Это возможно?

Это трудоемко, долго и муторно, но возможно.
Обе системы - парсерные, объектноориентированные, с C++ подобным языком. Это их роднит.
Надеюсь, что портирование библиотеки в дальнейшем позволит портировать игры между платформами, а также облегчит написание игр для ТОМа авторам, имеющим опыт работы в RTADS.

Неактивен

   #3
08.01.2009 12:06

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

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

Re: Бета-тестирование

noname, я постараюсь это учесть, когда начну ваять собственную библиотеку (родную для ТОМа).

Неактивен

   #4
09.01.2009 11:10

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

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

Re: Бета-тестирование

noname написал:

автор небольшого квеста может быть сильно удивлён тем, какие возможности будет иметь игрок в его игре благодаря командам, которые автор и не собирался использовать!

Библиотеку РТАДС я постараюсь сохранить в максимально близком к оригиналу состоянии. Переделывать ее логику в мои планы не входит.
-----
  Если же рассуждать о метафизике ИЛ, то чем больше глаголов игра "понимает", тем лучше. Это производит выгодное впечатление и о игре и о платформе.
  Другое дело что умолчальные реакции на действия ИМХО должны быть максимально нейтральны, и не приводить к тупиковым состояниям.

Неактивен

   #5
02.02.2009 09:34

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

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

Re: Бета-тестирование

noname, постараюсь накидать примеров с локациями.
Обновленный пример с черепом, выложу чуть позже, вместе с черным плащем.

Милена нужна версии 2.0 с последним обновлением модулей.
Библиотеру tom.dll в милене нужно заменить на свежую.
Далее в Милене: Файл->Открыть->Выбираем файлы с расширением .tom->Выбираем файл->Open
Или выбрать для открытия файлов.tom Милену как программу по умолчанию (как у меня wink ).

Отредактировано ASBer (02.02.2009 09:38)

Неактивен

   #6
02.02.2009 22:31

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

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

Re: Бета-тестирование

ну если совсем просто - то примерно так:

файл удален - устарел

Отредактировано ASBer (28.07.2009 13:15)

Неактивен

   #7
02.02.2009 22:32

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

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

Re: Бета-тестирование

Перемещения в примере парсерные. Если делать на меню, как в лабиринте у мышек - будет попроще.

Неактивен

   #8
03.02.2009 09:22

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

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

Re: Бета-тестирование

>хочу попробовать чистого парсера. на правильном русском.
- тогда смотри пример по морфологии и разбирайся с ключами.

>с по-возможности полным контролем над вводом игрока: сколько слов ввёл? какие конкретно? в каком порядке?
- смотри глобальную переменную token[]

>в каких формах
- для объектов, возвращаемых парсером, смотри свойство .key

>решил использовать в своём творилове только простые фразы- без связок 'и'
- связки 'и' сейчас сделать крайне затруднительно, это появится только во 2й версии.

>постараюсь сделать хотя бы одну команду с большим(3-и или более) кол-вом аргументов.
- а вот это как раз без проблем. smile

Отредактировано ASBer (03.02.2009 09:23)

Неактивен

   #9
04.02.2009 08:51

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

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

Re: Бета-тестирование

В .title сейфа были ошибки:

unique сейф
  .title="сейф%; НдМр; ИпЕч; //неодуш, мужск род, именит падеж, ед число
  ИпЕч=; РпЕч=a; ДпЕч=у; ВпЕч=; ТпЕч=ом; ПпЕч=е"
  .lex = .title
  .описание="Надёжный сейф."

и далее...

unique ты
  ........................................................
  .осмотреться()
  {
   %<location>
   %{actor.loc.title}</location>
   %{actor.loc.описание}
  }
  .осмотреть(obj)
  {
  %{obj.описание}
  }

Отредактировано ASBer (04.02.2009 08:56)

Неактивен

   #10
04.02.2009 09:12

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

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

Re: Бета-тестирование

noname пишет:

редактирую в обычном блокноте.

-  и я тоже smile

заметил такую заморочку: ДО объявления объекта ссылаться на него- некорректно.

- Да, конечно. ТОМ - это однопроходный интерпретатор. Но есть предопределение объектов:

location a1
location a2
location a3

и далее...

location a1
  .описание локации a1
  ...
location a2
  .описание локации a2
  ...
location a3
  .описание локации a3
  ...

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

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

Отредактировано ASBer (04.02.2009 09:24)

Неактивен

   #11
04.02.2009 09:22

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

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

Re: Бета-тестирование

описание локации выводится в двух случаях: когда ГГ входит в комнату, и когда ГГ вводит команду осмотреться
как сделать, что бы в обоих случаях вызывалась одна и та же фунция вывода описания?
при этом стандартный onEnter() тоже нужен - для некоторых локаций он будет определён по-своему, а по умолчанию- должен вызывать вышеупомянутую функцию

попробовал разные способы- чё-та не получилось... по-ходу я не разобрался с использованием функций

хотелось бы мини-микро-примерчик на эту тему

Вообще здесь стандартное ООП. Переопределение методов, и вызовы методов классов работают как и везде. Не совсем понял проблему... можно поподробнее?

дополнение:
Хотя небольшой примерчик по функциям и методам действительно лишним не будет. smile

дополнение:
Добавил в пример входы-выходы и команды войти-выйти

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


Прикрепленные файлы:
СЮЗВ.tom, Размер: 3,086 байт, Скачано: 397

Неактивен

   #12
04.02.2009 21:48

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

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

Re: Бета-тестирование

2. %{obj.описание} - фигурные скобки позволяют вставлять выражения в оператор вывода?

Фигурные скобки позволяют вставлять выражения в любую строку. Так как все что справа от оператора % это строка, то и в оператор вывода тоже.

4. готов ли полный список служебных слов?

Практически все служебные слова перечислены в Вике на страничке ТОМ: язык программирования. Правда пока не все описаны...

хорошо бы найти редактор, аналогичный блокноту, но в котором можно их подцвечивать.

Думаю пойдет любой редактор с подсветкой синтаксиса Си.

5. поясняю сложность с командой 'войди' : из одной и той же локации могут быть входы в различные другие локации. и даже если вход всего один, то и тогда команда 'войди' без параметра, кажется мне не совсем 'красивой'. таким образом реализация команды 'войди' тесно связана с реализацией переходов по названиям локаций: 'иди в дом', 'войди в дом'...

Добавить параметры в команды совсем не сложно, но тогда для всех входов-выходов будут нужны .title и .lex, и желательно с синонимами. Но так будет правильно.

Отредактировано ASBer (04.02.2009 21:50)

Неактивен

   #13
05.02.2009 11:54

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

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

Re: Бета-тестирование

Eten написал:

Хороший редактор с подсветкой СИ и прочих языков - Bred3.

Скачал, посмотрел - в целом  понравилось.
но
- разбираться с подсветкой придется долго и серьезно.
- даже просто скопировать подсветку с .cpp на .tom не получилось получилось smile
- подсветка СИ к ТОМу подходит лишь отчасти, в некоторых местах подсвечивается как ошибки.

Отредактировано ASBer (05.02.2009 13:26)

Неактивен

   #14
05.02.2009 16:58

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

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

Re: Бета-тестирование

2Korwin: я еще настройку синтаксиса поковыряю, и выложу. Пока еще сыро.

2Gremour: спасибо, посмотрю!

Неактивен

   #15
06.02.2009 09:27

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

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

Re: Бета-тестирование

радует та лёгкость, с которой выводится список находящихся в комнате объектов в правильных формах, с разделением запятыми и союзом 'и'. видимо, есть так же и простые средства убрать из этого списка ГГ ?

нужно в {actor.loc.item} добавить некий аспект:

{actor.loc.item:аспект} //слово "аспект" заменить на необходимый признак.

в этом в случае в список попадают только те объекты, которые унаследованы от класса с именем "аспект", или имеют истинное свойство с именем "аспект".
Т.е. чтобы ГГ не отображался в списке, необходимо чтобы ГГ не имел некое свойство, которое имеют все остальные предметы в локации.

пример:

Код:

class нечто //наследуем от него всё сущее
  ...
unique ты.cls = нечто //в том числе и ГГ, так как нечто имеет полезные свойства
  .нечто = нет //нейтрализуем аспект "нечто" для ГГ
  ...
...
%{actor.loc.item:нечто} //в локации отображаем все, что имеет аспект "нечто"
...

а как насчёт выходов: может, стоит создать особый класс 'выходы', что бы можно было показывать список всех выходов из данной локации(я имею ввиду сзюв)?

Да, можно. Смотри мой пример с выходами/входами.

> осмотреть стол
Непонятно, что имелось в виду: стеклянный стол или дубовый стол;

> дубовый
Это предложение непонятно!

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

upd: да, и хорошо бы русские и латинские буквы в именах пользовательских переменных различать по цвету. а то, например, 'монстр' содержит не известно сколько русских и латинских букв. на глаз не различимо, а для интерпретёра- да.

И мне это тоже хотелось бы... sad

'осмотреть стол' работает нормально, а 'осмотреть дубовый стол'- нет. код мышек мне так же не помог

В мышках пока нет команд с определениями.
Чтобы это работало нужно:
- к столам добавить лексемы с прилагательными "красный" и "зеленый".
- к действию "осмотреть" добавить шаблон с двумя переменными для объекта - одна переменная для существительного, 2я для прилагательного.
- к действию "осмотреть" добавить проверку на то, что обе переменные ссылаются на один объект.

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

Неактивен

   #16
06.02.2009 20:58

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

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

Re: Бета-тестирование

noname написал:

-а как насчёт выходов: может, стоит создать особый класс 'выходы', что бы можно было показывать список всех выходов из данной локации(я имею ввиду сзюв)?

-Да, можно. Смотри мой пример с выходами/входами.

если делать таким способом, то каждому выходу придётся давать уникальное имя. этого делать не хотелось бы.

я не вижу никакой проблемы, если каждому выходу будет соответствовать свой объект. Можно будет осматривать выходы, или делать с ними другие действия - например закрывать-открывать двери.

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

Можно попробывать и так... но с ходу не могу придумать как.

если в строчке
location a1.cls=место
убрать слово location, работа программы нисколько не изменится, так как по-любому объект 'a1' в результате принадлежит классу 'место'.

Вообще то изменится. Помимо классов в ТОМе есть категории. Именно они задаются ключевыми словами location, unique, action и т.д. И слово "class" кстати тоже обозначает специальную категорию объектов для описания классов.

думаю вот что: с одной стороны, объект типа 'location' должен иметь соотв свойства и методы, для простой организации работы с переходами как по направлениям, так и по названиям локаций. с другой стороны... в нормальной литературной игре и список объектов, и список выходов должны быть 'замаскированы' в описаниях локаций. т е игрок видит вменяемую литературную 'картину' обстановки, и взаимодействует с упомянутыми в тексте сущностями в меру своего разумения.

Помоему такому подходу ничто не мешает... кроме отсутствия стандартной библиотеки smile

описан класс T_parent_class
как создать класс-наследник T_child_class, который унаследует все его свойства и методы?

Код:

class T_parent_class
  ... //описание свойств и методов класса
class T_child_class.cls = T_parent_class
  ... //описание свойств и методов класса

При этом наследуются все свойства и методы класса-предка. Но при этом вложенные объекты .item по наследству не передаются.

что конкретно означает ошибка 'null=object!' ?

Это означает попытку присвоить объект некоторому пустому значению.

Отредактировано ASBer (06.02.2009 21:05)

Неактивен

   #17
27.06.2009 12:32

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

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

Re: Бета-тестирование

В ближайшее время выйдет существенно переработанная и исправленная версия.
Надеюсь что эта и подобные ей ошибки повторяться не будут.

Отредактировано ASBer (27.06.2009 13:08)

Неактивен

   #18
20.07.2009 07:25

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

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

Re: Бета-тестирование

noname написал:

положить и выложить - две разные команды

- выложить кафелем, например smile

Я думаю что "выложить"="положить на пол" и учитывая допустимую условность можно просто сделать синонимами "положить"="выложить".
>выложить на стол
>выложить в сундук
>выложить под кровать

Неактивен

   #19
21.07.2009 09:22

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

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

Re: Бета-тестирование

uux, в ТОМе есть 2 возможности задать синонимы для глаголов:
- глобальные синонимы, которые подставляются перед началом парсинга;
- и локальные синонимы, которые действуют в границах парсерного шаблона.
Поэтому, предложенные тобой синонимы вполне реально сделать, если задавать их локально для каждого шаблона smile

Неактивен

   #20
21.07.2009 23:48

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

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

Re: Бета-тестирование

Старик сказал - старик сделал!  А если не сделал - не старик. big_smilebig_smilebig_smile

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

Неактивен

   #21
22.07.2009 10:29

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

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

Re: Бета-тестирование

> старик, скажи: "Старик, возьми ложку"
Старик: старик возьми ложку
Старик: вот, уже сам с собой начал говорить...
Старик взял ложку со стола.

noname так лучше?

Неактивен

   #22
22.07.2009 15:29

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

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

Re: Бета-тестирование

noname написал:

по команде осмотреться 'не видны' предметы, которые есть в комнате.

Ок. Можно по команде "осмотреться" дергать метод OnEnter() текущей локации.
Тогда будет выводиться все как при входе в локацию.

Сейчас "осмотреться" = "осмотреть {loc}" - т.е. выводится свойство "описание" текущей локации.

> осмотреться
Хижина
  Ветхая деревянная хижина. Все здесь очень старое, и непригодно для
использования.
Здесь есть стол и заплетенное паутиной окно. Ты находишься тут и старик
находится тут.

> осмотри хижину
  Ветхая деревянная хижина. Все здесь очень старое, и непригодно для
использования.

В любом случае для каждой конкретной локации это можно поменять, перегрузив метод OnEnter() и свойство "описание"

Отредактировано ASBer (22.07.2009 15:36)

Неактивен

   #23
22.07.2009 16:13

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

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

Re: Бета-тестирование

noname написал:

думаю, вызывать OnEnter при осмотре- не вполне корректно- ведь там могут и какие-то события на локацию быть повешены

OnEnter как раз и создавался для вывода описания локации. Он срабатывает только на управляемого персонажа и вешать на него дополнительные события не совсем корректно.
Для перемещений есть более универсальные обработчики событий - ChkMoveObj(), BefMoveObj(), AftMoveObj() - срабатывают при любом перемешении и для всех объектов.

noname написал:

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

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

global.прилагательное_деревянный = "... полное описание ..."
...
А.деревянный = global.прилагательное_деревянный
Б.деревянная = global.прилагательное_деревянный
В.деревянное = global.прилагательное_деревянный

Хотя лучше все же будет так:

global.прилагательное_деревянный = "... описание для м.р. ..."
global.прилагательное_деревянная = "... описание для ж.р. ..."
global.прилагательное_деревянное = "... описание для с.р. ..."
...
А.деревянный = global.прилагательное_деревянный
Б.деревянная = global.прилагательное_деревянная
В.деревянное = global.прилагательное_деревянное

noname написал:

и, да- исправить команду 'осмотреться' вполне смогу самостоятельно

Код в студию! smile

Отредактировано ASBer (22.07.2009 16:23)

Неактивен

   #24
22.07.2009 17:37

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

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

Re: Бета-тестирование

noname написал:

не понятна роль {menu()} в конце
его надо исправлять на loc.menu, или это что-то глобальное?

Меню крепится к локации, следовательно должно быть loc.menu().
Если в локации есть хотя-бы одно menu_item(), строка меню добавится к описанию.

Неактивен

   #25
23.07.2009 13:56

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

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

Re: Бета-тестирование

noname написал:

допустим, имеются 4-ре локации a1,a2,b1 и b2 (2x2),
и надо, что бы м/ду a2 и b2 проход бы не был возможен

В этом конкретном случае проще всего повесить на персонажей проверку ChkMoveObj()

Код:

персонаж.ChkMoveObj(From,To)
{ if(From==a2 and To==b2 or From==b2 and To==a2)
   { %здесь прохода нет!
      return нет //перемещение отменяется
   }
}

В мышка смотри в файле Mouses.tom

Код:

МышеКрот.ПроверкаПеремещенияОбъекта(Откуда,Куда)
{ //Актер еще не вышел из локации, но намеревается это сделать
  ...  
  return нет //перемещение запрещено
}

P.S. модуль Map.tml предполагает что если локации расположены в соседних клетках, то проход между ними есть. "Стенами" между локациями служат пустые клетки карты.

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

Неактивен

Powered by PunBB
© copyright 2001–2018 iFiction.Ru