Я далёк от технологических тем INSTEAD, поэтому когда мне захотелось поиграть в игры Инстедоза-6, то я скачал последний Инстед под Windows (3.3.0, версия, не требующая установки), скачал модуль Метапарсер 1.3, скачал игры… и начал искать, как это всё заставить работать вместе.
Да, gloomy мне как-то давал несколько советов, как заставить всё работать: http://instead-games.ru/forum/index.php … ment_12114 Но мне почему-то хотелось, чтобы Инстед с Метапарсером у меня лежали отдельно, а игры отдельно, чтобы не приходилось каждую игру дополнять модулями Метапарсера, либо Метапарсер набивать файлами игр (которые даже называются одинаково).
Далее будет Адъ и рубрика "Зачем просто, когда можно сложно", возможно есть и более умные способы, а то и описание, как это сделать изящно и правильно, но я сходу ничего не нашёл.
После нескольких фальстартов я запустил утилиту отслеживания обращения программ к диску, запустил Инстед с -debug и начал сопоставлять обращения к модулям Метапарсера и получаемым ошибкам.
----------
1
Запускаю: Голый Инстед, Метапарсера нет, голая игра
Результат: Инстед, не найдя файл "mp-ru.lua" в каталоге игры, ищет его в каталоге "\stead\stead3\"
Действие: Копирую файл "mp-ru.lua" из архива Метапарсера в каталог "\stead\stead3\"
----------
2
Запускаю: Инстед + "\stead\stead3\mp-ru.lua", голая игра
Результат: Инстед, не найдя файл "morph\lang-ru.lua" в каталоге игры, ищет его в каталоге "\stead\stead3\"
Действие: Копирую каталог "morph" из архива Метапарсера в каталог "\stead\stead3\"
----------
3
Запускаю: Инстед + "\stead\stead3\mp-ru.lua" + "\stead\stead3\morph", голая игра
Результат: Инстед, не найдя файл "mp.lua" в каталоге игры, НЕ ИЩЕТ его в каталоге "\stead\stead3\", а сразу сообщает об ошибке
Действие: Копирую файл "mp.lua" из архива Метапарсера в каталог игры
----------
4
Запускаю: Инстед + "\stead\stead3\mp-ru.lua" + "\stead\stead3\morph", игра + "mp.lua"
Результат: Инстед, не найдя файл "mplib.lua" в каталоге игры, НЕ ИЩЕТ его в каталоге "\stead\stead3\", а сразу сообщает об ошибке
Действие: Копирую файл "mplib.lua" из архива Метапарсера в каталог игры
----------
5
Запускаю: Инстед + "\stead\stead3\mp-ru.lua" + "\stead\stead3\morph", игра + "mp.lua" + "mplib.lua"
Результат: Игра запустилась
----------
И казалось бы всё хорошо, но я заметил, что Инстед ищет ещё пару файлов в каталоге игры, но не найдя их, не ищет их в каталоге Инстеда: "morph\rgramtab.tab" и "dict.mrd". Насколько я помню, "dict.mrd" в каталоге игры это урезанный словарь, так что тут всё нормально. И в игре "heidi" из архива Метапарсера это используется.
Пробуем игру "heidi":
Все старые ошибки повторились, в каталог игры добавлены файлы "mp.lua" и "mplib.lua".
Запускаю: Инстед + "\stead\stead3\mp-ru.lua" + "\stead\stead3\morph", игра + "mp.lua" + "mplib.lua"
Результат: Ошибка с кучей отладочной информации
Действие: Просто по прошлому опыту создаю в каталоге игры подкаталог "morph" и копирую в него файл "rgramtab.tab" из архива Метапарсера
----------
Запускаю: Инстед + "\stead\stead3\mp-ru.lua" + "\stead\stead3\morph", игра + "mp.lua" + "mplib.lua" + "morph\rgramtab.tab"
Результат: Игра запустилась
----------
Что-то тут явно не так с обращением платформы к файлам "mp.lua", "mplib.lua" и "morph\rgramtab.tab" (это как минимум). Хотя возможно, что всё так и должно работать, просто я перемудрил.
Неактивен
У каждой игры должны быть свой словарь и своя версия Метапарсера. Например, потому что глаголы из одной игры не заработают в другой. Общие модули - это только те, которые идут вместе с инстедом, метапарсер - это вообще не модуль в понимании игрока, его нельзя класть отдельно от игры.
То что демки все ссылаются на общий словарик - это плохой пример, потому что все демки готовятся в одном репозитории. Для произвольных игр такое не принято.
Отредактировано Oreolek (03.04.2019 17:53)
Неактивен
Так как Инстедоз-6 ещё не вышел, на форум выкладываются отдельные файлы. Запустить их могут только разработчики.
А так алгоритм не очень сложный: распаковал metaparser-1.3.zip и положил в этот каталог main3.lua. Запустил.
Неактивен
Я могу сделать так, чтоб все файлы с metaparser находились в подкаталоге с игрой. Это не очень сложно, так будет проще?
Неактивен
Oreolek написал:
У каждой игры должны быть свой словарь и своя версия Метапарсера. Например, потому что глаголы из одной игры не заработают в другой. Общие модули - это только те, которые идут вместе с инстедом, метапарсер - это вообще не модуль в понимании игрока, его нельзя класть отдельно от игры.
Мне кажется, слово "должны" тут чересчур категоричное. То, как INSTEAD обращается к файлам отдельных модулей, говорит как раз о том, что Метапарсер наравне с прочими модулями вполне может быть частью INSTEAD, а игры — иметь общие данные и общий словарь. Свой словарь — это всего лишь сокращение общего словаря для уменьшения размера игры, а то, что модули разных версий Метапарсера называются одинаково говорит либо о хорошей обратной совместимости, либо не совсем правильно. Но я могу и ошибаться.
В любом случае Метапарсер позиционируется как модуль Инстеда, поэтому при обновлении модуля, мне хотелось бы обновить его в файлах Платформы, а не пихать заново в каждую из игр. Тем более, что некоторые из них а архивах.
Неактивен
В принципе, да, можно попробовать класть модуль отдельно. Но есть две проблемы:
- модуль не знает путь, по которому он находится сам. Поэтому не ясно как читать большой словарь. К тому-же, это запретит делать песочница.
- модуль должен прочитать все lua файлы с игрой, чтобы сгенерировать словарь. Но стандартная библиотека является тоже исходным кодом. В итоге, та же самая проблема.
Ну и еще одно. МП постоянно развиваетсЯ, поэтому в релизах мы кладём именно тот мп, с которым была написана игра.
Что точно можно сделать:
я могу сделать так, что в игру достаточно будет скопировать каталог parser/. Но проблема в том. что нужна еще и тема инстеда специальная. Сейчас же довольно все просто. распаковал parser.zip и в нем пишешь игру main3.lua.
Неактивен
Общий модуль на все игры работает, когда ты играешь только в старенькое и стабильное, а не в самый свежак с форума, который ещё даже не оформили в общую подборку. Потому что в git лежит одна самая-самая-окончательная версия МП, в игре автор поставил на 1 коммит раньше, а игрок скачал МП давным-давно и внезапно надо обновлять не только игру.
Мой совет - жди релиза.
Неактивен
Да не вопрос. Я не пытаюсь навязать своё видение МП, просто я нигде не нашёл описание, что делать дальше, имея на руках архив с INSTEAD и архив с Метапарсером. Как мне запустить ту же HEIDI, чтобы, например, посмотреть как оно работает/выглядит. Отсюда все эти танцы с бубном. Потому как объяснение, что вот я скачал архив с Метапарсером, а потом должен из этого архива часть файлов скопировать во вложенный подкаталог с Heidi, чтобы всё это заработало, звучит очень странно.
Неактивен
В доке для разработчиков это написано :
Также, в репозитории в каталоге metaparser/demos есть несколько дополнительных демонстрационных игр. Вы можете скопировать необходимые файлы любой из игр (обычно main3.lua и dict.mrd) в каталог с МП3 и запустить её.
Но релиза ещё не было, повторюсь. Так бы оно просто работало бы само.
Неактивен
Тут недопонимание возникает и на уровне работы с демоиграми. Потому как, согласно логике данного объяснения (из руководства), нужно взять файлы из зелёного каталога и скопировать их в красный каталог. Если хочешь попробовать другую игру (из синего каталога), то нужно сперва удалить из красного каталога файлы от предыдущей игры и скопировать все файлы из синего каталога опять же в красный.
metaparser
demos
heidi
wtell
doc
morph
theme
mp.lua
mp-ru.lua
mplib.lua
theme.ini
Вот если бы вынести demos из каталога metaparser, то уже стало бы понятнее. Хотя файл общего словаря может оказаться лишним, а может и нет.
В общем, не вполне понятная иерархия минимально необходимого набора файлов: игра-метапарсер-инстед, усугубляемая перемешиванием файлов игры с файлами метапарсера. Возможно, после изучения руководства всё становится понятным, но ведь сперва хочется посмотреть, а как это всё выглядит в работе, а потом уже опускаться до технических деталей.
Неактивен
Агу, ну я подумаю к след. релизу метапарсера как лучше сделать.
Неактивен
Кажется, у меня получилось. В 1.4 скорее всего можно будет класть модуль отдельно.
Неактивен