Тема закрыта
Бета-версия 0.9.0.0 доступна для скачивания: http://ifwiki.ru/ТОМ
В этой версии добавлено определение используемого интерфейса, что дает возможность подстраивать код игры под различные платформы (пока выбор между ТОМ-консолью и Миленой).
Добавлена функция input().
Демоигра адаптирована для проигрывания в Милене, добавлены картинки.
Весь функционал, предусмотренный для версии 1.0 разработан.
До релиза первой версии необходимо провести:
- поиск и исправление багов и глюков, полировку и доводку функционала;
- доработку демоигры про мышек;
- доработку документации;
- разработку набора примеров, полностью покрывающих функционал;
- полное портирование библиотеки рТАДСа (собственной библиотеки к 1й версии не планируется);
- возможно что-то еще забыл...
Отредактировано ASBer (07.01.2009 23:17)
Неактивен
Korwin написал:
ASBer написал:
- полное портирование библиотеки рТАДСа (собственной библиотеки к 1й версии не планируется);
Изумлен. Это серьезно? Это возможно?
Это трудоемко, долго и муторно, но возможно.
Обе системы - парсерные, объектноориентированные, с C++ подобным языком. Это их роднит.
Надеюсь, что портирование библиотеки в дальнейшем позволит портировать игры между платформами, а также облегчит написание игр для ТОМа авторам, имеющим опыт работы в RTADS.
Неактивен
noname, я постараюсь это учесть, когда начну ваять собственную библиотеку (родную для ТОМа).
Неактивен
noname написал:
автор небольшого квеста может быть сильно удивлён тем, какие возможности будет иметь игрок в его игре благодаря командам, которые автор и не собирался использовать!
Библиотеку РТАДС я постараюсь сохранить в максимально близком к оригиналу состоянии. Переделывать ее логику в мои планы не входит.
-----
Если же рассуждать о метафизике ИЛ, то чем больше глаголов игра "понимает", тем лучше. Это производит выгодное впечатление и о игре и о платформе.
Другое дело что умолчальные реакции на действия ИМХО должны быть максимально нейтральны, и не приводить к тупиковым состояниям.
Неактивен
noname, постараюсь накидать примеров с локациями.
Обновленный пример с черепом, выложу чуть позже, вместе с черным плащем.
Милена нужна версии 2.0 с последним обновлением модулей.
Библиотеру tom.dll в милене нужно заменить на свежую.
Далее в Милене: Файл->Открыть->Выбираем файлы с расширением .tom->Выбираем файл->Open
Или выбрать для открытия файлов.tom Милену как программу по умолчанию (как у меня ).
Отредактировано ASBer (02.02.2009 09:38)
Неактивен
ну если совсем просто - то примерно так:
файл удален - устарел
Отредактировано ASBer (28.07.2009 13:15)
Неактивен
Перемещения в примере парсерные. Если делать на меню, как в лабиринте у мышек - будет попроще.
Неактивен
>хочу попробовать чистого парсера. на правильном русском.
- тогда смотри пример по морфологии и разбирайся с ключами.
>с по-возможности полным контролем над вводом игрока: сколько слов ввёл? какие конкретно? в каком порядке?
- смотри глобальную переменную token[]
>в каких формах
- для объектов, возвращаемых парсером, смотри свойство .key
>решил использовать в своём творилове только простые фразы- без связок 'и'
- связки 'и' сейчас сделать крайне затруднительно, это появится только во 2й версии.
>постараюсь сделать хотя бы одну команду с большим(3-и или более) кол-вом аргументов.
- а вот это как раз без проблем.
Отредактировано ASBer (03.02.2009 09:23)
Неактивен
В .title сейфа были ошибки:
unique сейф
.title="сейф%; НдМр; ИпЕч; //неодуш, мужск род, именит падеж, ед число
ИпЕч=; РпЕч=a; ДпЕч=у; ВпЕч=; ТпЕч=ом; ПпЕч=е"
.lex = .title
.описание="Надёжный сейф."
и далее...
unique ты
........................................................
.осмотреться()
{
%<location>
%{actor.loc.title}</location>
%{actor.loc.описание}
}
.осмотреть(obj)
{
%{obj.описание}
}
Отредактировано ASBer (04.02.2009 08:56)
Неактивен
noname пишет:
редактирую в обычном блокноте.
- и я тоже
заметил такую заморочку: ДО объявления объекта ссылаться на него- некорректно.
- Да, конечно. ТОМ - это однопроходный интерпретатор. Но есть предопределение объектов:
location a1
location a2
location a3
и далее...
location a1
.описание локации a1
...
location a2
.описание локации a2
...
location a3
.описание локации a3
...
мне удобно, что бы все служебные слова и системные переменные имели только английские имена
Все служебные слова имеют английские имена.
Все служебные слова будут иметь русские синонимы. (сейчас пока не у всех)
Каким именно языком пользоваться - это решение автора игры.
Отредактировано ASBer (04.02.2009 09:24)
Неактивен
описание локации выводится в двух случаях: когда ГГ входит в комнату, и когда ГГ вводит команду осмотреться
как сделать, что бы в обоих случаях вызывалась одна и та же фунция вывода описания?
при этом стандартный onEnter() тоже нужен - для некоторых локаций он будет определён по-своему, а по умолчанию- должен вызывать вышеупомянутую функцию
попробовал разные способы- чё-та не получилось... по-ходу я не разобрался с использованием функций
хотелось бы мини-микро-примерчик на эту тему
Вообще здесь стандартное ООП. Переопределение методов, и вызовы методов классов работают как и везде. Не совсем понял проблему... можно поподробнее?
дополнение:
Хотя небольшой примерчик по функциям и методам действительно лишним не будет.
дополнение:
Добавил в пример входы-выходы и команды войти-выйти
Отредактировано ASBer (04.02.2009 10:41)
Неактивен
2. %{obj.описание} - фигурные скобки позволяют вставлять выражения в оператор вывода?
Фигурные скобки позволяют вставлять выражения в любую строку. Так как все что справа от оператора % это строка, то и в оператор вывода тоже.
4. готов ли полный список служебных слов?
Практически все служебные слова перечислены в Вике на страничке ТОМ: язык программирования. Правда пока не все описаны...
хорошо бы найти редактор, аналогичный блокноту, но в котором можно их подцвечивать.
Думаю пойдет любой редактор с подсветкой синтаксиса Си.
5. поясняю сложность с командой 'войди' : из одной и той же локации могут быть входы в различные другие локации. и даже если вход всего один, то и тогда команда 'войди' без параметра, кажется мне не совсем 'красивой'. таким образом реализация команды 'войди' тесно связана с реализацией переходов по названиям локаций: 'иди в дом', 'войди в дом'...
Добавить параметры в команды совсем не сложно, но тогда для всех входов-выходов будут нужны .title и .lex, и желательно с синонимами. Но так будет правильно.
Отредактировано ASBer (04.02.2009 21:50)
Неактивен
Eten написал:
Хороший редактор с подсветкой СИ и прочих языков - Bred3.
Скачал, посмотрел - в целом понравилось.
но
- разбираться с подсветкой придется долго и серьезно.
- даже просто скопировать подсветку с .cpp на .tom не получилось получилось
- подсветка СИ к ТОМу подходит лишь отчасти, в некоторых местах подсвечивается как ошибки.
Отредактировано ASBer (05.02.2009 13:26)
Неактивен
2Korwin: я еще настройку синтаксиса поковыряю, и выложу. Пока еще сыро.
2Gremour: спасибо, посмотрю!
Неактивен
радует та лёгкость, с которой выводится список находящихся в комнате объектов в правильных формах, с разделением запятыми и союзом 'и'. видимо, есть так же и простые средства убрать из этого списка ГГ ?
нужно в {actor.loc.item} добавить некий аспект:
{actor.loc.item:аспект} //слово "аспект" заменить на необходимый признак.
в этом в случае в список попадают только те объекты, которые унаследованы от класса с именем "аспект", или имеют истинное свойство с именем "аспект".
Т.е. чтобы ГГ не отображался в списке, необходимо чтобы ГГ не имел некое свойство, которое имеют все остальные предметы в локации.
пример:
class нечто //наследуем от него всё сущее ... unique ты.cls = нечто //в том числе и ГГ, так как нечто имеет полезные свойства .нечто = нет //нейтрализуем аспект "нечто" для ГГ ... ... %{actor.loc.item:нечто} //в локации отображаем все, что имеет аспект "нечто" ...
а как насчёт выходов: может, стоит создать особый класс 'выходы', что бы можно было показывать список всех выходов из данной локации(я имею ввиду сзюв)?
Да, можно. Смотри мой пример с выходами/входами.
> осмотреть стол
Непонятно, что имелось в виду: стеклянный стол или дубовый стол;
> дубовый
Это предложение непонятно!
Да, уточнения все еще не работают. Нужно заново вводить более полную команду.
Но эта команда должна быть предусмотренна в игре!
upd: да, и хорошо бы русские и латинские буквы в именах пользовательских переменных различать по цвету. а то, например, 'монстр' содержит не известно сколько русских и латинских букв. на глаз не различимо, а для интерпретёра- да.
И мне это тоже хотелось бы...
'осмотреть стол' работает нормально, а 'осмотреть дубовый стол'- нет. код мышек мне так же не помог
В мышках пока нет команд с определениями.
Чтобы это работало нужно:
- к столам добавить лексемы с прилагательными "красный" и "зеленый".
- к действию "осмотреть" добавить шаблон с двумя переменными для объекта - одна переменная для существительного, 2я для прилагательного.
- к действию "осмотреть" добавить проверку на то, что обе переменные ссылаются на один объект.
Отредактировано ASBer (06.02.2009 10:36)
Неактивен
noname написал:
-а как насчёт выходов: может, стоит создать особый класс 'выходы', что бы можно было показывать список всех выходов из данной локации(я имею ввиду сзюв)?
-Да, можно. Смотри мой пример с выходами/входами.если делать таким способом, то каждому выходу придётся давать уникальное имя. этого делать не хотелось бы.
я не вижу никакой проблемы, если каждому выходу будет соответствовать свой объект. Можно будет осматривать выходы, или делать с ними другие действия - например закрывать-открывать двери.
а хотелось бы для каждой локации указывать существующие выходы, и куда они ведут. все навороты к выходам сверх этого- описать где-нить один раз, и забыть.
Можно попробывать и так... но с ходу не могу придумать как.
если в строчке
location a1.cls=место
убрать слово location, работа программы нисколько не изменится, так как по-любому объект 'a1' в результате принадлежит классу 'место'.
Вообще то изменится. Помимо классов в ТОМе есть категории. Именно они задаются ключевыми словами location, unique, action и т.д. И слово "class" кстати тоже обозначает специальную категорию объектов для описания классов.
думаю вот что: с одной стороны, объект типа 'location' должен иметь соотв свойства и методы, для простой организации работы с переходами как по направлениям, так и по названиям локаций. с другой стороны... в нормальной литературной игре и список объектов, и список выходов должны быть 'замаскированы' в описаниях локаций. т е игрок видит вменяемую литературную 'картину' обстановки, и взаимодействует с упомянутыми в тексте сущностями в меру своего разумения.
Помоему такому подходу ничто не мешает... кроме отсутствия стандартной библиотеки
описан класс 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)
Неактивен
В ближайшее время выйдет существенно переработанная и исправленная версия.
Надеюсь что эта и подобные ей ошибки повторяться не будут.
Отредактировано ASBer (27.06.2009 13:08)
Неактивен
noname написал:
положить и выложить - две разные команды
- выложить кафелем, например
Я думаю что "выложить"="положить на пол" и учитывая допустимую условность можно просто сделать синонимами "положить"="выложить".
>выложить на стол
>выложить в сундук
>выложить под кровать
Неактивен
uux, в ТОМе есть 2 возможности задать синонимы для глаголов:
- глобальные синонимы, которые подставляются перед началом парсинга;
- и локальные синонимы, которые действуют в границах парсерного шаблона.
Поэтому, предложенные тобой синонимы вполне реально сделать, если задавать их локально для каждого шаблона
Неактивен
Старик сказал - старик сделал! А если не сделал - не старик.
Отредактировано ASBer (22.07.2009 07:39)
Неактивен
> старик, скажи: "Старик, возьми ложку"
Старик: старик возьми ложку
Старик: вот, уже сам с собой начал говорить...
Старик взял ложку со стола.
noname так лучше?
Неактивен
noname написал:
по команде осмотреться 'не видны' предметы, которые есть в комнате.
Ок. Можно по команде "осмотреться" дергать метод OnEnter() текущей локации.
Тогда будет выводиться все как при входе в локацию.
Сейчас "осмотреться" = "осмотреть {loc}" - т.е. выводится свойство "описание" текущей локации.
> осмотреться
Хижина
Ветхая деревянная хижина. Все здесь очень старое, и непригодно для
использования.
Здесь есть стол и заплетенное паутиной окно. Ты находишься тут и старик
находится тут.
> осмотри хижину
Ветхая деревянная хижина. Все здесь очень старое, и непригодно для
использования.
В любом случае для каждой конкретной локации это можно поменять, перегрузив метод OnEnter() и свойство "описание"
Отредактировано ASBer (22.07.2009 15:36)
Неактивен
noname написал:
думаю, вызывать OnEnter при осмотре- не вполне корректно- ведь там могут и какие-то события на локацию быть повешены
OnEnter как раз и создавался для вывода описания локации. Он срабатывает только на управляемого персонажа и вешать на него дополнительные события не совсем корректно.
Для перемещений есть более универсальные обработчики событий - ChkMoveObj(), BefMoveObj(), AftMoveObj() - срабатывают при любом перемешении и для всех объектов.
noname написал:
допустим, в игре есть с десяток различных деревянных предметов. описание прилагательного деревянный придётся прописывать для каждого,
или же можно вынести описание прилагательного во всех формах отдельно, а в описании предметов только указывать те прилагательные, которые могут к нему относиться (естественно, с учётом рода предмета)?
Достаточно описать для одного объекта, а в остальные раскопировать. При этом описание должно быть полным - для всех родов. Каждый объект воспримет только ту часть, которая ему подходит.
Возможен например такой вариант:
global.прилагательное_деревянный = "... полное описание ..."
...
А.деревянный = global.прилагательное_деревянный
Б.деревянная = global.прилагательное_деревянный
В.деревянное = global.прилагательное_деревянный
Хотя лучше все же будет так:
global.прилагательное_деревянный = "... описание для м.р. ..."
global.прилагательное_деревянная = "... описание для ж.р. ..."
global.прилагательное_деревянное = "... описание для с.р. ..."
...
А.деревянный = global.прилагательное_деревянный
Б.деревянная = global.прилагательное_деревянная
В.деревянное = global.прилагательное_деревянное
noname написал:
и, да- исправить команду 'осмотреться' вполне смогу самостоятельно
Код в студию!
Отредактировано ASBer (22.07.2009 16:23)
Неактивен
noname написал:
не понятна роль {menu()} в конце
его надо исправлять на loc.menu, или это что-то глобальное?
Меню крепится к локации, следовательно должно быть loc.menu().
Если в локации есть хотя-бы одно menu_item(), строка меню добавится к описанию.
Неактивен
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)
Неактивен
игруха пишет: "ГГ находится тут", а надо: "ты находишься тут".
Чтобы писалось "ты находишься тут" вообще ничего менять у ГГ не надо! Если не работае - присылай код на мыло.
title для персонажей уже использованы в main.tml - их менять нельзя.
ГГ.описание = "самый крутой герой!" //меняет описание ГГ
ГГ.по_имени = "Вас%; ЕчОд; Ип; Зп=ь; Зп=я; Ип=я; Рп=и; Дп=е; Вп=ю; Тп=ей; Пп=е;" //меняет имя ГГ
ГГ.персонаж_по_месту = нет //отключает отображение ГГ в локации
unique нож //создаем предмет
{ cls = предмет
this.МожноВзять = да
ГГ + this //помещаем предмет в инвентарь ГГ
}
Отредактировано ASBer (23.07.2009 15:45)
Неактивен
noname написал:
в таком варианте она обзывает героя ГГ, а не ты
Угу, но это только при первом показе так... дальше нормально показывает "ты".
Исправлю.
noname написал:
и, да- а как вообще убрать постоянные упоминания присуствия ГГ в каждой локации?
Смотри мой пост выше: ГГ.персонаж_по_месту = нет //отключает отображение ГГ в локации
Неактивен
У меня нет аськи мэйл.ру-агент пойдет?
Неактивен
взял со стола ложку
осмотрел стол
надписи "на столе ничего нет" я не увидел
у меня этот баг не повторяется...
1. описание стола сделано в тесте, а не в библиотеке.
2. такое может быть, если на столе есть еще что-то невидимое - объект без свойства "предмет_по_месту"
3. покажи код стола
Отредактировано ASBer (23.07.2009 18:59)
Неактивен
код из сообщения #121 работает правильно...
попробуй в столе заменить
fnOписание()
{ if(item) return "{item:предмет_по_месту}."
else return "на столе ничего нет"
}
на
fnOписание()
{ if(item:предмет_по_месту.num) return "{item:предмет_по_месту}."
else return "на столе ничего нет"
}
Неактивен
Скорее стол засорился
поменяй на
fnOписание()
{ if(item) return "{item}."
else return "на столе ничего нет"
}
и увидишь сколько там мусора
Неактивен
ТОМ - Текстовая Основа Миростроения v.0.9.2.1 beta. ASBer(C)2008-2009
Последние библиотеки идут с версией v.0.9.2.2 (возьми в папке Libs4tom/Bin)
Отредактировано ASBer (23.07.2009 20:08)
Неактивен
noname написал:
в некоторой локации надо запретить некоторые действия(почти все). как было бы правильнее всего это сделать?
Наверное проще всего вариант "в лоб" - в каждом действии прописать проверку текущей локации.
персонаж.взял()
{ if(loc==запретная_локация)
{ %ты не можешь здесь ничего брать!
return;
}
//...
}
и далее также по всем действиям...
Или еще вариант - с подменой персонажа.
Подменный не должен наследоваться от класса "персонаж"
И в него нужно скопировать только те обработчики действий, которые нужны в этой локации.
Отредактировано ASBer (23.07.2009 22:18)
Неактивен
с учётом того, что её придётся доводить до ума- думаю, в этом году успею
А можно я набьюсь в бета-тестеры?
В файле набросок к лифту.
P.S. есть небольшая условность - числа в команде должны быть ПЕРЕД объектом. "5 этаж" - правильно. "Этаж 5" - будет ошибка.
--------------------------------------------------------------------------------
Прикрепленные файлы:
SixFloors.tom, Размер: 1,800 байт, Скачано: 27
Отредактировано ASBer (28.07.2009 13:28)
Неактивен
noname написал:
ты это, не томи- этож
Пример на один глагол и два объекта.
--------------------------------------------------------------------------------
Прикрепленные файлы:
to_pawn.tom, Размер: 2,050 байт, Скачано: 30
Отредактировано ASBer (27.07.2009 23:26)
Неактивен
fireton, единственный известный мне способ понять язык - это начать писать на нем
Подругому никак...
Неактивен
Тогда вот пока вам совсем маленькая но зато классическая игрушка - Плащ тьмы.
Возможности стандартной библиотеки пока гораздо скромнее рТАДСа - например, надеть плащ не получится.
В остальном получилось довольно близко к оригиналу...
О всех замеченных багах, несуразностях или нелогичности прошу писать сюда - исправлю
--------------------------------------------------------------------------------
Прикрепленные файлы:
Cloak.rar, Размер: 188,580 байт, Скачано: 26
Неактивен
> инв
У тебя есть бархатный плащ.
> з
Ты ушел на запад в гардероб.
Гардероб
Стены этой маленькой комнаты, очевидно, когда-то имели множество крючков для
одежды. Сейчас же остался только один. Единственная дверь ведет на восток.
Здесь есть маленький бронзовый крючок для одежды.
> осм его
Бархатный плащ или маленький бронзовый крючок для одежды?
> маленький крючок
Это просто маленький бронзовый крючок, прикрученный к стене.
noname, в ТОМе уточнения работают. Но я еще подумаю...
Отредактировано ASBer (06.08.2009 14:33)
Неактивен
Парсер не поддерживает местоимений - они поддерживаются библиотекой.
По последнему упоминанию объекта можно сделать - это правильно.
Здесь на троне правит королева в короне.
> осм ее
Королеву или корону?
вот с этим уже хуже... буду думать
Отредактировано ASBer (06.08.2009 17:20)
Неактивен
Серый Волк, спасибо, но все только начинается!
Неактивен
И до кучи вот еще игра про золотой череп портирована на стандартную библиотеку ТОМа.
--------------------------------------------------------------------------------
Прикрепленные файлы:
GOLDSKLR.rar, Размер: 188,249 байт, Скачано: 33
Отредактировано ASBer (11.08.2009 09:04)
Неактивен
Cheshire написал:
ASBer написал:
Здесь на троне правит королева в короне.
> осм ее
Королеву или корону?вот с этим уже хуже... буду думать
А разве нужно что-то придумывать? Обычная жизненная ситуация.
Если в тексте присутствуют персонаж и объект, то персонаж как правило более значим. В данном примере корона никак не акцентирована и служит как дополнительное описание самой королевы.
Cheshire написал:
Насчет примера про "пнуть Елену". Можно как-то отделить объекты в описаниях, инициированных игроком, от объектов в описаниях, инициированных программой?
угу, это можно.
Отредактировано ASBer (19.08.2009 15:08)
Неактивен
oleksus написал:
А кстати, что с Миленой, движется?
На вике лежит графический интерфейс для тома на основе милены лайт.
Там можно менять шрифт, форматировать текст, вставлять картинки и музыку. Все работает - спасибо Александру Графу
oleksus написал:
можно ли в ТОМ конструировать фразы-обращения, например "Робот, возьми гайку и закрути винт."?
В текущей версии можно только в два этапа:
>Робот, возьми гайку
>Робот, закрути винт
Но я думаю что эта проблема решаема, скоро иcправлю.
oleksus написал:
Насчёт "ты" и "вы" - даже при обращении на "ты" можно избежать личных окончаний, т.к. они лишь в прошедшем времени. Вместо "ты взял" - пишем "ты берёшь".
Личные окончания вполне нормально подставляются если правильно указан род персонажа (по умолчанию - Мр), с этим проблем быть не должно. Если только я еще не все глаголы в библиотеке расписал...
oleksus написал:
Обращение на "ты" должно быть, имхо, обусловлено сюжетом. Я тоже сторонник обращения на "вы", но вот сейчас делаю сюжет, герой которого - ученик колдуна. При всём уважении к игроку я не могу позволить обращения на "вы", ибо оно не так погрузит игрока в атмосферу, не заставит почувствовать себя учеником.
Добавлю в библиотеку возможность обращения к персонажу на "Вы". Пусть авторы игр сами решают как правильно.
Неактивен
oleksus написал:
А что насчёт фразы "Пусть робот возьмёт гайку."?
Без проблем.
Нужно создать действие "пусть" с соответствующим шаблоном.
Но я не уверен что такое действие должно быть включено в стандартную библиотеку.
Неактивен
Все файлы игр (.tom, .tml) это обычные текстовые файлы.
Можно просматривать и редактировать любым текстовым редактором.
Неактивен
Начиная с версии 0.9.2.8 beta возможна вставка выражений на естественном языке в код игры.
Для анализа выражений в коде игры использует тот-же парсер, что и для команд в процессе самой игре.
Выражения ЕЯ могут встраиваться в конструкции языка программирования.
Выражения ЕЯ не могут встраиваться в вычисляемые выражения - формулы, присвоения и т.п.
В конце выражения ЕЯ обязательно должна стоять точка.
Парсерная ошибка в коде приравнивается к синтаксической ошибке и приводит к прерыванию выполнения кода.
Выражения ЕЯ в коде эквивалентно оператору "<" для объекта this.
выполнение строки с синтаксисом:
команда на ЕЯ.
эквивалентно выполнению операции:
this < "команда на ЕЯ"
Неактивен
fireton написал:
Скачал ТОМ, попытался разобраться... Не очень получилось, если честно.
Если б какие-нибудь уроки были, о создании игры с нуля...
Набор примеров есть на ифвике - tom_sample.rar
Там примеры на различные темы, но без использования стандартной библиотеки.
Пошаговые уроки о создании игры с нуля наверное имеет смысл делать на основе стандартной библиотеки, которая всё еще в разработке...
В составе самой библиотеки есть тест и пара простых игр, можно попробовать делать по аналогии с ними.
В любом случае прийдется разбираться самостоятельно - удобочитаемого вводного материала пока к сожалению нет.
С удовольствием готов отвечать на любые возникающие вопросы - в данный момент я в отпуске, поэтому сейчас самое время
fireton написал:
И, как я понимаю, словоформы задавать приходится вручную, т.е. ни генератора словоформ, ни утилитки никаких нет.
Платформа не имеет жестко заданных парадигм словообразования. Библиотеки и даже отдельные игры могут применять свою собственную систему генерации словоформ и их согласования. Поэтому утилитку можно сделать только для стандартной библиотеки, которая всё еще в разработке...
Для существительных и прилагательных можно взять алгоритм генератора рТАДСа, если GrAndrey разрешит.
Для глаголов все сложнее... но новые глаголы нужны не так частно.
Неактивен
noname написал:
насколько я понимаю, утилитками тут не обойдёшся- нужны словари.
Одно другому не мешает, особенно если учесть что словари - ну ооочень дальняя перспектива.
Неактивен
Добавил ссылки на статьи http://ifwiki.ru/ТОМ:_Лексема и http://ifwiki.ru/ТОМ:_Морфологический_ключ
возможно это поможет...
Cheshire написал:
Но вот непонятно, почему не всегда все ключи прописываются
Потому что иногда можно сократить описание лексемы, не прописав некоторые ключи.
Например:
"пещер%; ЖрЕчНдСи; Ип; Ип=а; Рп=ы; Дп=е; Вп=у; Тп=ой; Тп=ою; Пп=е;"
эквивалентно
"пещер%; ; ЖрЕчНдСиИп; ЖрЕчНдСиИп=а; ЖрЕчНдСиРп=ы; ЖрЕчНдСиДп=е; ЖрЕчНдСиВп=у; ЖрЕчНдСиТп=ой; ЖрЕчНдСиТп=ою; ЖрЕчНдСиПп=е;"
Если для лексемы указан, например, женский род, то и каждая словоформа лексемы будет отнесена к женскому роду. В таком случае Жр достаточно указать один раз как свойство всей лексемы.
Cheshire написал:
или наоборот, после где-нибудь идет строчка this.род_число = "ЖрЕч" (или даже ЖрМрЕч)?
Это я сумел победить доработав парсер. В текущей версии в this.род_число = "ЖрЕч" никакой необходимости нет и можно забыть как страшный сон.
Cheshire написал:
Что означает первый Ип?
Первый Ип - это словоформа по умолчанию. Если Вы напишите
%{пещера}
на экран будет выведено
пещера
т.е. тоже самое, как если бы Вы написали
%{пещера*Ип}
Cheshire написал:
Что означают Си и Пи (существительное/прилагательное? а что за "и")?
Совершенно верно! Существительное имя , Прилагательное имя
Cheshire написал:
Нужны примеры с предметами в множественном числе, исчислимыми предметами, со сложными названиями (нож Васи, клубок ниток) и т.д.
Можно покопаться в играх, там это есть.
Принцип согласования по ключам тот же самый, только ключи подлиннее.
На самом деле механизм получился очень гибкий, думаю я сам еще не до конца осознал все его возможности...
upd:
Еще очень рекомендую разобраться с примером Морфология.tom (есть в наборе примеров)
Неактивен
Alexandr написал:
Почему ГГ так слушается других персонажей? Если они скажут ему убиться он тоже убъется?
Конечно
ГГ такой же персонаж как и все остальные NPC. Чтобы ГГ не слушал команд NPC нужно прописать метод
ГГ.свобода_воли(){ return нет }
Неактивен
Тема закрыта