в этой игре полно локаций, и они представляют из себя отнюдь НЕ прямоугольный лабиринт
думаю, хорошим выходом будет снабдить каждую локацию списком выходов (я уже так когда-то делал)
при этом хорошо бы, что бы выйти было возможно и по сзюв, и по названию локации-цели, и по командам войти/выйти
попробую поискать у себя примеры в архивах
---
опять, же подразнюсь немного: в RTADS в создаваемой локации автор может указать, в каком направлении из неё можно выйти, и куда при этом игрок попадёт- довольно просто с точки зрения автора. точно не помню, но вроде бы и переход в соседнюю локацию по названию тоже поддерживается(а может и нет) // недостатком ( с точки зрения автора) в этом случае может быть необходимость самому отслеживать, что бы переходы были двусторонними(т е и туда и обратно), прописывая один и тот же переход в обеих локациях. но это уже выбор автора- односторонние переходы хоть и редки, но тоже бывают
UPD
кроме переходов сзюв(они-чаще всего) в игре есть переходы вверх/вниз, а так же перенос в несвязанные локации, а так же одна комната с входом, но без выходов ( выход- с помощью особых действий ); а так же локации, в которых возможности персонажа ограничены только общением с одним неписем, а почти все остальные действия в этой ситуации лишены смысла
// т е на самом деле карта- именно прямоугольный лабиринт, НО соседние локации очень часто разделены(нет прохода)
Отредактировано noname (23.07.2009 14:27)
Неактивен
пример (с предпоследними библиотеками):
include "std.lib\UnusVerb.tml" include "std.lib\Main.tml" include "std.lib\Map.tml" location название_локации { // текст локации убрал (ибо- спойер), но проверено- всё работает this + ГГ // вводим главного героя }
проблема в том, что куда бы я не впихивал pers.title="ты; Мр2лЕч;", всё равно игруха пишет: "ГГ находится тут", а надо: "ты находишься тут". хотя по-большому счёту отображение присутствия ГГ вообще лучше убрать- ведь [почти]всегда ГГ находится там, где находится // ИМХО лучше отображение ГГ по-умолчанию убрать, но оставить возможность его включать по желанию автора
UPD
заодно дай пример переопределения некоторых свойств ГГ: внешний вид и инвентарь на момент начала квеста
Отредактировано noname (23.07.2009 15:03)
Неактивен
игруха пишет: "ГГ находится тут", а надо: "ты находишься тут".
Чтобы писалось "ты находишься тут" вообще ничего менять у ГГ не надо! Если не работае - присылай код на мыло.
title для персонажей уже использованы в main.tml - их менять нельзя.
ГГ.описание = "самый крутой герой!" //меняет описание ГГ
ГГ.по_имени = "Вас%; ЕчОд; Ип; Зп=ь; Зп=я; Ип=я; Рп=и; Дп=е; Вп=ю; Тп=ей; Пп=е;" //меняет имя ГГ
ГГ.персонаж_по_месту = нет //отключает отображение ГГ в локации
unique нож //создаем предмет
{ cls = предмет
this.МожноВзять = да
ГГ + this //помещаем предмет в инвентарь ГГ
}
Отредактировано ASBer (23.07.2009 15:45)
Неактивен
вот вырезка из твоего собственного примера:
include "std.lib\UnusVerb.tml" include "std.lib\Main.tml" include "std.lib\Map.tml" //отладка действий //осмотрел.Debug = да //взял.Debug = да //команда.Debug = да //создаем тестовую локацию location хижина { cls = место title = "хижин%; ЖрЕчНдСи; Ип; Ип=а; Рп=ы; Дп=е; Вп=у; Тп=ой; Пп=е;" this.старая = "стар%; ЖрЕчНдПи; Ип; Ип=ая; Рп=ой; Дп=ой; Вп=ую; Тп=ой; Пп=ой;" this.ветхая = "ветх%; ЖрЕчНдПи; Ип; Ип=ая; Рп=ой; Дп=ой; Вп=ую; Тп=ой; Пп=ой;" this.деревянная = "деревянн%; ЖрЕчНдПи; Ип; Ип=ая; Рп=ой; Дп=ой; Вп=ую; Тп=ой; Пп=ой;" this.описание = "__Ветхая деревянная хижина. Все здесь очень старое, и непригодно для использования." unique стол { cls = предмет title = "стол%; МрЕчНдСи; Ип; Ип=; Рп=а; Дп=у; Вп=; Тп=ом; Пп=е;" this.старый = "стар%; МрЕчНдПи; Ип; Ип=ый; Рп=ого; Дп=ому; Вп=ый; Тп=ым; Пп=ом;" this.деревянный = "деревянн%; МрЕчНдПи; Ип; Ип=ый; Рп=ого; Дп=ому; Вп=ый; Тп=ым; Пп=ом;" this.описание = "{fnOписание()}" fnOписание() { if(item) return "{item:предмет_по_месту}." else return "на столе ничего нет" } counting ложка { cls = предмет title = "лож%; ЖрНдСи; ИпЕч; ИпЕч=ка; РпЕч=ки; ДпЕч=ке; ВпЕч=ку; ТпЕч=кой; ПпЕч=ке; ИпМч=ки; РпМч=ек; ДпМч=кам; ВпМч=ки; ТпМч=ками; ПпМч=ках;" this.деревянная = "деревянн%; ЖрНдПи; Ип; ИпЕч=ая; РпЕч=ой; ДпЕч=ой; ВпЕч=ую; ТпЕч=ой; ПпЕч=ой; ИпМч=ые; РпМч=ых; ДпМч=ым; ВпМч=ые; ТпМч=ыми; ПпМч=ых;" this.МожноВзять = да } this + ложка } unique окно { cls = предмет this.предмет_по_месту = "заплетенное паутиной окно" } unique старик { cls = персонаж this.по_имени = "старик%; МрЕчОдСи; Ип; Зп=; Ип=; Рп=а; Дп=у; Вп=а; Тп=ом; Пп=е;" } this + ГГ //вводим главного героя }
в таком варианте она обзывает героя ГГ, а не ты
( т е если весь пример урезать до такого состояния )
// и, да- а как вообще убрать постоянные упоминания присуствия ГГ в каждой локации?
ЗЫ
не то, чтоб я настаивал на том, чтобы главгерой в локациях не упоминался, просто хочу, чтобы была возможность сделать и так и эдак- по желанию автора. конкретно в этом квесте(и в большинстве других) главгерой в описаниях локаций не упоминается
Отредактировано noname (23.07.2009 15:53)
Неактивен
noname написал:
в таком варианте она обзывает героя ГГ, а не ты
Угу, но это только при первом показе так... дальше нормально показывает "ты".
Исправлю.
noname написал:
и, да- а как вообще убрать постоянные упоминания присуствия ГГ в каждой локации?
Смотри мой пост выше: ГГ.персонаж_по_месту = нет //отключает отображение ГГ в локации
Неактивен
взял со стола ложку
осмотрел стол
надписи "на столе ничего нет" я не увидел
у меня этот баг не повторяется...
1. описание стола сделано в тесте, а не в библиотеке.
2. такое может быть, если на столе есть еще что-то невидимое - объект без свойства "предмет_по_месту"
3. покажи код стола
Отредактировано ASBer (23.07.2009 18:59)
Неактивен
код приведён в сообщении #121
ИМХО: необходимо разделить примеры библиотек, так как в навороченной куче всё работает, а при попытке сделать отдельно самому- нет
библиотеки- последние из выложенных здесь
Неактивен
код из сообщения #121 работает правильно...
попробуй в столе заменить
fnOписание()
{ if(item) return "{item:предмет_по_месту}."
else return "на столе ничего нет"
}
на
fnOписание()
{ if(item:предмет_по_месту.num) return "{item:предмет_по_месту}."
else return "на столе ничего нет"
}
Неактивен
Скорее стол засорился
поменяй на
fnOписание()
{ if(item) return "{item}."
else return "на столе ничего нет"
}
и увидишь сколько там мусора
Неактивен
fnOписание() { if(item) return "{item}." else return "на столе ничего нет" }
ТОМ - Текстовая Основа Миростроения v.0.9.2.1 beta. ASBer(C)2008-2009
Контактный адрес - 2008_TOM@mail.ru
Введите '?', 'help' или 'помощь' для справки.
Хижина
Ветхая деревянная хижина. Все здесь очень старое, и непригодно для
использования.
Здесь есть стол и заплетенное паутиной окно. ГГ находится тут и старик находится
тут.
> осм стол
?item?.
> взять ложку
Ты взял ложку со стола.
> осм стол
?item?.
>
этот пример привёл исключительно из-за того, что у моего ГГ тоже не всё как надо отображалось.
так например, один из предметов, для которого не было указано местоположения было невозможно осмотреть, так как этого предмета здесь нет, НО в инвентаре его было видно
видимо, надо перед началом игры делать какую-то читску памяти
---
с другой стороны, мож ты найдёшь другое решение проблемы
Неактивен
ТОМ - Текстовая Основа Миростроения v.0.9.2.1 beta. ASBer(C)2008-2009
Последние библиотеки идут с версией v.0.9.2.2 (возьми в папке Libs4tom/Bin)
Отредактировано ASBer (23.07.2009 20:08)
Неактивен
всё, разобрался: всё у меня было правильно распаковано, НО у меня с *.tom стояла ассоциация файлов с другим constom.exe, в другом месте, про который я уже и забыл
теперь пример из #121 работает как надо
Неактивен
ещё вопрос:
допустим, у ГГ есть спелое аппетитное съедобное красное яблоко, и все прилагательные для яблока указаны
как сделать, что бы при осмотре инвентаря ГГ видел именно 'красное яблоко', а не просто 'яблоко'(и не какое-нить другое)
UPD
ой, что-то я ударился в усложнения. так, вопрос про яблоко пока не актуален. попробую сделать эту примитивную игруху поближе к оригиналу
UPD
щазз более актуально выкладывание предметов(просто на пол)- сразу проще будет тестировать корректность работы игрухи
Отредактировано noname (23.07.2009 21:07)
Неактивен
как выкладывать(и обменивать) предметы- тоже разобрался
есть ещё такая непонятка:
в некоторой локации надо запретить некоторые действия(почти все). как было бы правильнее всего это сделать?
ЗЫ
разобрался почти во всём, что необходимо для этой примитивной игрушки
но в таком(приближённом к оригиналу) виде, в наши дни она будет смотреться как позор парсера
как будет готова- начну её доводить до ума, усложнять и переделывать
Неактивен
noname написал:
в некоторой локации надо запретить некоторые действия(почти все). как было бы правильнее всего это сделать?
Наверное проще всего вариант "в лоб" - в каждом действии прописать проверку текущей локации.
персонаж.взял()
{ if(loc==запретная_локация)
{ %ты не можешь здесь ничего брать!
return;
}
//...
}
и далее также по всем действиям...
Или еще вариант - с подменой персонажа.
Подменный не должен наследоваться от класса "персонаж"
И в него нужно скопировать только те обработчики действий, которые нужны в этой локации.
Отредактировано ASBer (23.07.2009 22:18)
Неактивен
отчёт о приблизительном времени работы над игрой:
нормальная реализация данной игры требут от 3-х до 30-ти дней упорного перевода и кодинга
я скорее всего провожусь над ней месяца 3-и ( я ж ещё по олдгамесам шарюсь и играю в тамошние игрухи регулярно )
с учётом того, что её придётся доводить до ума- думаю, в этом году успею ( впрочем, меньше чем через неделю у меня днюха, а потом- буду искать работу; с другой стороны- когда я буду работать я мож больше времени буду именно написанием квеста заниматься, чем сейчас, когда целыми днями занимаюсь всякой фигнёй) // короче буду стремиться сделать в этом году (и не просто сделать бету, НО ещё и успеть её отшлифовать обезбажить и доработать )
особых чудес от игры ждать не стоит- её все уже прошли в том или ином варианте. я делаю её в-основном ради овладения навыками кодинга в ТОМе
ЗЫ
а комнату с невозможностью выполнения почти всех действий можно ещё реализовать через меню- оставить только возможные пункты
и ещё вопрос: допустим, устройство(напр лифт) имеет 9-ть нумерованных кнопок (от 1 до 9):
игрок пишет (к примеру): езжай на 6й этаж (или езжаё на шестой этаж) - как бы сделать это в ТОМе ?
Неактивен
с учётом того, что её придётся доводить до ума- думаю, в этом году успею
А можно я набьюсь в бета-тестеры?
В файле набросок к лифту.
P.S. есть небольшая условность - числа в команде должны быть ПЕРЕД объектом. "5 этаж" - правильно. "Этаж 5" - будет ошибка.
--------------------------------------------------------------------------------
Прикрепленные файлы:
SixFloors.tom, Размер: 1,800 байт, Скачано: 27
Отредактировано ASBer (28.07.2009 13:28)
Неактивен
в бетатестеры, конечно можно. но- не скоро
---
немного теории
что вообще автору может быть нужно от движка?:
- лично мне хотелось бы, чтоб от игрока требовался ввод фраз, правильных с т з русского языка // в том числе и знаки препинания // в этой игре знаков препинания пока не нужно
- штоп можно было сделать всё, что хочется, И штоп игра на вводимые фразы реагировала так, как хочет именно этот автор именно в этом квесте // т е - широкие возможности использования движка
- штоп движок хорошо различала различные фразы: т е понимал отличие 'кинуть банку в коробку' от 'кинуть коробку в банку'; И особенно это актуально для обработки ошибок: напр если игрок пытается неправильно использовать известный проге глагол- автор пишет на этот случай один текст(напр подсказку по исп этого глагола), а если он пытается использовать какое-то непонятное слово(команду, судя по тому, что слово идёт в начале фразы) с известным проге предметом- автор пишет на этот случай другой текст(напр подсказку по исп предмета)
---
впрочем, пока буду делать основной 'костяк' игры
позже- обязательно нужно будет доработать, штоп она понимала все упомянутые в описаниях существительные, глаголы (и прилагательные?) И выдавала разумные ответы на любую фразу; (особенно- если фраза построена неверно- ведь в этом случае игроку необходима помощь программы)
//
на сюжет именно этой поделки можно не обращать внимания- он может заинтересовать только после полной переделки. напр если весь сюжет этого квеста станет необязательной частью более другого квеста. т е всё, что я сейчас делаю имеет ценность скорее как тренировка в кодинге, чем как создание новой игры // да, много времени убивает перевод- я-то знаю, как там что переводится, но как сделать эти фразы читабельными на русском- приходится поломать голову
Отредактировано noname (25.07.2009 13:33)
Неактивен
в Багтрекер я тебе уже написал кое-о-чём
теперь вот что:
не нашёл, как переопределить стандартное сообщение "<предмет> не годится для этого действия."
Отредактировано noname (25.07.2009 18:00)
Неактивен
ох блин, ежовая морковка!
не сходятся в этой игре на квадратной карте входы с выходами.
первый проект однозначно необходимо делать совместно с автором платформы
тем более, что библиотека пока в стадии разработки
- заодно будет видно, что в библиотеку следует добавить
---
в связи с этим даю объяву в разделе 'игры' с просьбой солюшенов маленьких игр:
щазз открою там тему UPD: ссылка на тему
UPD
с тебя, ASBer - библиотека, с меня- перевод и кодинг, с любителей парсерных игр- солюшен
все промежуточные результаты работы буду выкладывать на форум
Отредактировано noname (26.07.2009 15:29)
Неактивен
Здесь важно понимать различие: если действие даёт 2 разных результата - это 2 разных действия, даже если они используют один глагол. И описывать из нужно как 2 разных объекта
ага- понял. это как стандартное 'открыл' и особое 'открыл_фонарик'
Название объекта также является его свойством. Поэтому пример будет один
ну, щазз не буду вдаваться в уточнения, НО в более сложных квестах эта тема ещё всплывёт
UPD: жду пример :)
Отредактировано noname (27.07.2009 18:19)
Неактивен