--luacheck: no self local lang = require "morph/lang-ru" require "parser/mp" require "parser/mplib" local mp = _'@metaparser' std.mod_init( function() mp:init(lang) end) game.dsc = function() p ([[МЕТАПАРСЕР3 Версия: ]]..mp.version.."^") p [[http://instead-hub.github.io^^ Если вам необходима справка по игре, наберите "помощь". ^]] end -- local utf = mp.utf _'@all'.word = -"всё/~од" _'@darkness'.word = -"тьма,темнота,темень" _'@darkness'.before_Any = "Полная, кромешная тьма." _'@darkness':attr 'persist' _'@n_to'.word = -"север"; _'@ne_to'.word = -"северо-восток"; _'@e_to'.word = -"восток"; _'@se_to'.word = -"юго-восток"; _'@s_to'.word = -"юг"; _'@sw_to'.word = -"юго-запад"; _'@w_to'.word = -"запад"; _'@nw_to'.word = -"северо-запад"; _'@u_to'.word = -"наверх,вверх,верх"; _'@d_to'.word = -"вниз,низ"; _'@out_to'.word = -"наружу,выход,назад"; _'@in_to'.word = -"внутрь,вход" mp.shorten = { ["с"] = "север"; ["в"] = "восток"; ["з"] = "запад"; ["ю"] = "юг"; ["св"] = "северо-восток"; ["юв"] = "юго-восток"; ["юз"] = "юго-запад"; ["сз"] = "северо-запад"; ["вн"] = "вниз"; ["вв"] = "вверх"; } mp.shorten_expert = { ["и"] = "инвентарь"; ["ж"] = "ждать"; ["о"] = "осмотреть"; ["осм"] = "осмотреть"; ["вкл"] = "включить"; ["выкл"] = "выключить"; ["см"] = "смотреть"; } function mp:skip_filter(w) for _, v in ipairs(w) do if v == 'не' or v == 'кроме' or v == 'вместо' then return false end end return true end _'@compass'.before_Default = 'Попробуйте глагол "идти".' function mp.msg.SCORE(d) if d > 0 then pn ("{$fmt em|(Счёт увеличился на ", d, ")}") else pn ("{$fmt em|(Счёт уменьшился на ", d, ")}") end end mp.door.word = -"дверь"; mp.msg.TITLE_SCORE = "Счёт: " mp.msg.TITLE_TURNS = "Ходы: " mp.msg.YES = "Да" mp.msg.WHEN_DARK = "Кромешная тьма." mp.msg.UNKNOWN_THEDARK = "Возможно, это потому что в темноте ничего не видно?" mp.msg.COMPASS_NOWAY = "Этот путь недоступен." mp.msg.COMPASS_EXAM_NO = "В этом направлении не видно ничего примечательного." mp.msg.ENUM = "шт." mp.msg.CUTSCENE_HELP = "Для продолжения нажмите <ввод> или введите {$fmt em|дальше}." mp.msg.DLG_HELP = "Для выбора фразы введите цифру." mp.msg.NO_ALL = "Это действие нельзя применить на всё." mp.msg.DROPPING_ALL = function(w) pn (iface:em("(бросить "..w:noun'вн'..")")) end mp.msg.TAKING_ALL = function(w) pn (iface:em("(взять "..w:noun'вн'..")")) end mp.msg.TAKE_BEFORE = function(w) pn (iface:em("(сначала взяв "..w:noun'вн'..")")) end mp.msg.DISROBE_BEFORE = function(w) pn (iface:em("(сначала сняв "..w:noun'вн'..")")) end mp.msg.CLOSE_BEFORE = function(w) pn (iface:em("(сначала закрыв "..w:noun'вн'..")")) end --"находиться" mp.msg.SCENE = "{#Me} {#word/находиться,#me,нст} {#if_has/#here,supporter,на,в} {#here/пр,2}."; mp.msg.INSIDE_SCENE = "{#Me} {#word/находиться,#me,нст} {#if_has/#where,supporter,на,в} {#where/пр,2}."; mp.msg.TITLE_INSIDE = "{#if_has/#where,supporter,на,в} {#where/пр,2}"; mp.msg.COMPASS_EXAM = function(dir, ob) if dir == 'u_to' then p "Вверху" elseif dir == 'd_to' then p "Внизу" elseif dir == 'out_to' or dir == 'in_to' then p "В этом направлении" else p "На {#first/пр,2}" end if ob:hint'plural' then p "находятся" else p "находится" end p (ob:noun(),".") end mp.msg.enter = "<ввод>" mp.msg.EMPTY = 'Простите?' mp.msg.UNKNOWN_VERB = "Непонятный глагол" mp.msg.UNKNOWN_VERB_HINT = "Возможно, вы имели в виду" mp.msg.INCOMPLETE = "Нужно дополнить предложение." mp.msg.INCOMPLETE_NOUN = "К чему вы хотите применить команду" mp.msg.INCOMPLETE_SECOND_NOUN = "Уточните команду:" mp.msg.UNKNOWN_OBJ = function(w) if not w then p "Об этом предмете ничего не известно." else p "Об этом предмете ничего не известно " p ("(",w,").") end end mp.msg.NOTHING_OBJ = "Ничего подходящего нет." mp.msg.UNKNOWN_WORD = function(w) if not w then p "Фраза не распознана." else p "Фраза не распознана " p ("(",w,"?).") end end mp.msg.HINT_WORDS = "Может быть" mp.msg.HINT_OR = "или" mp.msg.HINT_AND = "и" mp.msg.AND = "и" mp.msg.MULTIPLE = "Тут есть" mp.msg.LIVE_ACTION = function(w) p (w:It'дт'," это не понравится.") end mp.msg.NO_LIVE_ACTION = "Действие применимо только к одушевлённым объектам." mp.msg.NOTINV = function(t) p (lang.cap(t:noun'вн') .. " сначала нужно взять.") end --"надет" mp.msg.WORN = function(w) local hint = w:gram().hint pr (" (",mp.mrd:word('надет/' .. hint), ")") end --"открыт" mp.msg.OPEN = function(w) local hint = w:gram().hint pr (" (",mp.mrd:word('открыт/' .. hint), ")") end mp.msg.EXITBEFORE = "Возможно, {#me/дт} нужно сначала {#if_has/#where,supporter,слезть с {#where/рд}.,покинуть {#where/вн}.}" mp.default_Event = "Exam" mp.default_Verb = "осмотреть" --"доступен" mp.msg.ACCESS1 = "{#First} отсюда не{#word/доступен,#first}." mp.msg.ACCESS2 = "{#Second} отсюда не{#word/доступен,#second}." mp.msg.Look.HEREIS = "Здесь находится" mp.msg.Look.HEREARE = "Здесь находятся" mp.msg.NOROOM = function(w) if w == std.me() then p ("У {#me/рд} слишком много вещей.") elseif w:has'supporter' then p ("На ", w:noun'пр,2', " больше нет места.") else p ("В ", w:noun'пр,2', " больше нет места.") end end --"включён" --"выключен" mp.msg.Exam.SWITCHSTATE = "{#First} сейчас {#if_has/#first,on,{#word/включён,#first},{#word/выключен,#first}}." mp.msg.Exam.NOTHING = "ничего нет." mp.msg.Exam.IS = "находится" mp.msg.Exam.ARE = "находятся" mp.msg.Exam.IN = "В {#first/пр,2}" mp.msg.Exam.ON = "На {#first/пр,2}" --"видеть" mp.msg.Exam.DEFAULT = "{#Me} не {#word/видеть,#me,нст} {#vo/{#first/пр}} ничего необычного."; mp.msg.Exam.SELF = "{#Me} не {#word/видеть,#me,нст} в себе ничего необычного."; --"открыт" mp.msg.Exam.OPENED = "{#First} {#word/открыт,нст,#first}." --"закрыт" mp.msg.Exam.CLOSED = "{#First} {#word/закрыт,нст,#first}." --"находить" mp.msg.LookUnder.NOTHING = "{#Me} не {#word/находить,нст,#me} под {#first/тв} ничего интересного." --"могу" --"закрыт" --"держать" --"залезать" mp.msg.Enter.ALREADY = "{#Me} уже {#if_has/#first,supporter,на,в} {#first/пр,2}." mp.msg.Enter.INV = "{#Me} не {#word/могу,#me,нст} зайти в то, что {#word/держать,#me,нст} в руках." mp.msg.Enter.IMPOSSIBLE = "Но в/на {#first/вн} невозможно войти, встать, сесть или лечь." mp.msg.Enter.CLOSED = "{#First} {#word/закрыт,#first}, и {#me} не {#word/мочь,#me,нст} зайти туда." mp.msg.Enter.ENTERED = "{#Me} {#word/залезать,нст,#me} {#if_has/#first,supporter,на,в} {#first/вн}." mp.msg.Enter.DOOR_NOWHERE = "{#First} никуда не ведёт." --"закрыт" mp.msg.Enter.DOOR_CLOSED = "{#First} {#word/закрыт,#first}." mp.msg.Walk.ALREADY = mp.msg.Enter.ALREADY mp.msg.Walk.WALK = "Но {#first} и так находится здесь." mp.msg.Walk.NOWHERE = "Куда именно?" mp.msg.Walk.INV = "Но {#first} у {#me/рд} с собой." mp.msg.Enter.EXITBEFORE = "Сначала нужно {#if_has/#where,supporter,слезть с {#where/рд}.,покинуть {#where/вн}.}" mp.msg.Exit.NOTHERE = "Но {#me} сейчас не {#if_has/#first,supporter,на,в} {#first/пр,2}." mp.msg.Exit.NOWHERE = "Но {#me/дт} некуда выходить." mp.msg.Exit.CLOSED = "Но {#first} {#word/закрыт,#first}." --"покидать" --"слезать" mp.msg.Exit.EXITED = "{#Me} {#if_has/#first,supporter,{#word/слезать с,#me,нст} {#first/рд},{#word/покидать,#me,нст} {#first/вн}}." mp.msg.GetOff.NOWHERE = "Но {#me/дт} не с чего слезать." mp.msg.Inv.NOTHING = "У {#me/рд} с собой ничего нет." mp.msg.Inv.INV = "У {#me/рд} с собой" --"открывать" mp.msg.Open.OPEN = "{#Me} {#word/открывать,нст,#me} {#first/вн}." mp.msg.Open.NOTOPENABLE = "{#First/вн} невозможно открыть." --"открыт" mp.msg.Open.WHENOPEN = "{#First/} уже {#word/открыт,#first}." --"заперт" mp.msg.Open.WHENLOCKED = "Похоже, что {#first/} {#word/заперт,#first}." --"закрывать" mp.msg.Close.CLOSE = "{#Me} {#word/закрывать,нст,#me} {#first/вн}." mp.msg.Close.NOTOPENABLE = "{#First/вн} невозможно закрыть." --"закрыт" mp.msg.Close.WHENCLOSED = "{#First/} уже {#word/закрыт,#first}." mp.msg.Lock.IMPOSSIBLE = "{#First/вн} невозможно запереть." --"заперт" mp.msg.Lock.LOCKED = "{#First} уже {#word/заперт,#first}." --"закрыть" mp.msg.Lock.OPEN = "Сначала необходимо закрыть {#first/вн}." --"подходит" mp.msg.Lock.WRONGKEY = "{#Second} не {#word/подходит,#second} к замку." --"запирать" mp.msg.Lock.LOCK = "{#Me} {#word/запирать,#me,нст} {#first/вн}." mp.msg.Unlock.IMPOSSIBLE = "{#First/вн} невозможно отпереть." --"заперт" mp.msg.Unlock.NOTLOCKED = "{#First} не {#word/заперт,#first}." --"подходит" mp.msg.Unlock.WRONGKEY = "{#Second} не {#word/подходит,нст,#second} к замку." --"отпирать" mp.msg.Unlock.UNLOCK = "{#Me} {#word/отпирать,#me,нст} {#first/вн}." mp.msg.Take.HAVE = "У {#me/вн} и так {#firstit} уже есть." mp.msg.Take.TAKE = "{#Me} {#verb/take} {#first/вн}." mp.msg.Take.SELF = "{#Me} есть у {#me/рд}." --"находиться" mp.msg.Take.WHERE = "Нельзя взять то, в/на чём {#me} {#word/находиться,#me}." mp.msg.Take.LIFE = "{#First/дт} это вряд ли понравится." --"закреплён" mp.msg.Take.STATIC = "{#First} жестко {#word/закреплён,#first}." mp.msg.Take.SCENERY = "{#First/вн} невозможно взять." --"надет" mp.msg.Take.WORN = "{#First} {#word/надет,#first} на {#firstwhere/вн}." mp.msg.Take.PARTOF = "{#First} {#if_hint/#first,plural,являются,является} частью {#firstwhere/рд}." mp.msg.Remove.WHERE = "{#First} не находится {#if_has/#second,supporter,на,в} {#second/пр,2}." mp.msg.Remove.REMOVE = "{#First} {#if_has/#second,supporter,поднят,извлечён из} {#second/рд}." mp.msg.Drop.SELF = "У {#me/рд} не хватит ловкости." mp.msg.Drop.WORN = "{#First/вн} сначала нужно снять." --"помещать" mp.msg.Insert.INSERT = "{#Me} {#word/помещать,нст,#me} {#first/вн} в {#second/вн}." mp.msg.Insert.CLOSED = "{#Second} {#word/закрыт,#second}." mp.msg.Insert.NOTCONTAINER = "{#Second} не {#if_hint/#second,plural,могут,может} что-либо содержать." mp.msg.Insert.WHERE = "Нельзя поместить {#first/вн} внутрь себя." mp.msg.Insert.ALREADY = "Но {#first} уже и так {#word/находиться,#first} там." mp.msg.PutOn.NOTSUPPORTER = "Класть что-либо на {#second/вн} бессмысленно." --"класть" mp.msg.PutOn.PUTON = "{#Me} {#word/класть,нст,#me} {#first/вн} на {#second/вн}." mp.msg.PutOn.WHERE = "Нельзя поместить {#first/вн} на себя." --"брошен" mp.msg.Drop.DROP = "{#First} {#word/брошен,#first}." mp.msg.ThrowAt.NOTLIFE = "Бросать {#first/вн} в {#second/вн} бесполезно." mp.msg.ThrowAt.THROW = "У {#me/рд} не хватает решимости бросить {#first/вн} в {#second/вн}." mp.msg.Wear.NOTCLOTHES = "Надеть {#first/вн} невозможно." mp.msg.Wear.WORN = "{#First} уже на {#me/дт}." --"надевать" mp.msg.Wear.WEAR = "{#Me} {#word/надевать,#me,нст} {#first/вн}." mp.msg.Disrobe.NOTWORN = "{#First} не на {#me/дт}." --"снимать" mp.msg.Disrobe.DISROBE = "{#Me} {#word/снимать,#me,нст} {#first/вн}." mp.msg.SwitchOn.NONSWITCHABLE = "{#First/вн} невозможно включить." --"включён" mp.msg.SwitchOn.ALREADY = "{#First} уже {#word/включён,#first}." --"включать" mp.msg.SwitchOn.SWITCHON = "{#Me} {#word/включать,#me,нст} {#first/вн}." mp.msg.SwitchOff.NONSWITCHABLE = "{#First/вн} невозможно выключить." --"выключён" mp.msg.SwitchOff.ALREADY = "{#First} уже {#word/выключён,#first}." --"выключать" mp.msg.SwitchOff.SWITCHOFF = "{#Me} {#word/выключать,#me,нст} {#first/вн}." --"годится" mp.msg.Eat.NOTEDIBLE = "{#First} не {#word/годится,#first} в пищу." mp.msg.Taste.TASTE = "Никакого необычного вкуса нет." --"съедать" mp.msg.Eat.EAT = "{#Me} {#word/съедать,нст,#me} {#first/вн}." mp.msg.Drink.IMPOSSIBLE = "Выпить {#first/вн} невозможно." mp.msg.Push.STATIC = "{#First/вн} трудно сдвинуть с места." mp.msg.Push.SCENERY = "{#First/вн} двигать невозможно." mp.msg.Push.PUSH = "Ничего не произошло." mp.msg.Pull.STATIC = "{#First/вн} трудно сдвинуть с места." mp.msg.Pull.SCENERY = "{#First/вн} двигать невозможно." mp.msg.Pull.PULL = "Ничего не произошло." mp.msg.Turn.STATIC = "{#First/вн} трудно сдвинуть с места." mp.msg.Turn.SCENERY = "{#First/вн} двигать невозможно." mp.msg.Turn.TURN = "Ничего не произошло." mp.msg.Wait.WAIT = "Проходит немного времени." mp.msg.Touch.LIVE = "Не стоит давать волю рукам." mp.msg.Touch.TOUCH = "Никаких необычных ощущений нет." mp.msg.Touch.MYSELF = "{#Me} на месте." mp.msg.Rub.RUB = "Тереть {#first/вн} бессмысленно." mp.msg.Sing.SING = "С таким слухом и голосом как у {#me/рд} этого лучше не делать." mp.msg.Give.MYSELF = "{#First} и так у {#me/рд} есть." mp.msg.Give.GIVE = "{#Second/вн} это не заинтересовало." mp.msg.Show.SHOW = "{#Second/вн} это не впечатлило." mp.msg.Burn.BURN = "Поджигать {#first/вн} бессмысленно." mp.msg.Burn.BURN2 = "Поджигать {#first/вн} {#second/тв} бессмысленно." --"поверь" mp.msg.Wake.WAKE = "Это не сон, а явь." mp.msg.WakeOther.WAKE = "Будить {#first/вн} не стоит." mp.msg.WakeOther.NOTLIVE = "Бессмысленно будить {#first/вн}." mp.msg.PushDir.PUSH = "Передвигать это нет смысла." mp.msg.Kiss.NOTLIVE = "Странное желание." mp.msg.Kiss.KISS = "{#Firstit/дт} это может не понравиться." mp.msg.Kiss.MYSELF = "Ну уж нет." mp.msg.Think.THINK = "Отличная идея!" mp.msg.Smell.SMELL = "Никакого необычного запаха нет." mp.msg.Smell.SMELL2 = "Пахнет как {#first}." mp.msg.Listen.LISTEN = "Никаких необычных звуков нет." --"прислушаться" mp.msg.Listen.LISTEN2 = "{#Me} {#word/прислушаться,#me,прш} к {#first/дт}. Никаких необычных звуков нет." --"выкопать" mp.msg.Dig.DIG = "{#Me} ничего не {#word/выкопать,#me,прш}." mp.msg.Dig.DIG2 = "Копать {#first/вн} бессмысленно." mp.msg.Dig.DIG3 = "Копать {#first/вн} {#second/тв} бессмысленно." mp.msg.Cut.CUT = "Резать {#first/вн} бессмысленно." mp.msg.Cut.CUT2 = "Резать {#first/вн} {#second/тв} бессмысленно." mp.msg.Tear.TEAR = "Рвать {#first/вн} бессмысленно." mp.msg.Tie.TIE = "Привязывать {#first/вн} бессмысленно." mp.msg.Tie.TIE2 = "Привязывать {#first/вн} к {#second/дт} бессмысленно." mp.msg.Blow.BLOW = "Дуть на/в {#first/вн} бессмысленно." mp.msg.Attack.LIFE = "Агрессия к {#first/дт} неоправданна." mp.msg.Attack.ATTACK = "Сила есть -- ума не надо?" --"хотеть" mp.msg.Sleep.SLEEP = "{#Me} не {#word/хотеть,#me,нст} спать." mp.msg.Swim.SWIM = "Для этого здесь недостаточно воды." mp.msg.Fill.FILL = "Наполнять {#first/вн} бессмысленно." --"подпрыгивать" mp.msg.Jump.JUMP = "{#Me} глупо {#word/подпрыгивать,#me,нст}." mp.msg.JumpOver.JUMPOVER = "Прыгать через {#first/вн} бессмысленно." --"находить" mp.msg.Consult.CONSULT = "{#Me} не {#word/находить,#me,нст} ничего подходящего." --"помахать" mp.msg.WaveHands.WAVE = "{#Me} глупо {#word/помахать,прш,#me} руками." mp.msg.Wave.WAVE = "{#Me} глупо {#word/помахать,прш,#me} {#first/тв}." mp.msg.Talk.SELF = "Беседы не получилось." --"уметь" mp.msg.Talk.NOTLIVE = "{#First} не {#word/уметь,#first,нст} разговаривать." --"отреагировать" mp.msg.Talk.LIVE = "{#First} никак не {#word/отреагировать,#first}." mp.msg.Tell.SELF = "Беседы не получилось." --"безмолвен" mp.msg.Tell.NOTLIVE = "{#First} {#word/безмолвен,#first}." --"отреагировать" mp.msg.Tell.LIVE = "{#First} никак не {#word/отреагировать,#first}." --"нашёл" mp.msg.Tell.EMPTY = "{#Me} не {#word/нашёл,#me,прш} что сказать." --"отвечать" mp.msg.Ask.NOTLIVE = "Ответа не последовало." --"ответить" mp.msg.Ask.LIVE = "{#First} не {#word/ответить,прш,#first}." --"придумать" mp.msg.Ask.EMPTY = "{#Me} не {#word/придумать,#me,прш} что спросить." mp.msg.Ask.SELF = "Хороший вопрос." --"отвечать" mp.msg.Answer.NOTLIVE = "Ответа не последовало." --"ответить" mp.msg.Answer.LIVE = "{#First} не {#word/ответить,прш,#first}." --"придумать" mp.msg.Answer.EMPTY = "{#Me} не {#word/придумать,#me,прш} что ответить." mp.msg.Answer.SELF = "Хороший ответ." mp.msg.Yes.YES = "Вопрос был риторическим." mp.msg.Use.USE = "Как именно?" --"продаваться" mp.msg.Buy.BUY = "{#First} не {#word/продаваться,нст,#first}." mp.keyboard_space = '<пробел>' mp.keyboard_backspace = '<удалить>' mp.msg.verbs.take = -"брать,#me,нст" mp.msg.GAMEOVER_HELP = [[Чтобы начать заново, введите рестарт.]]; local function dict(t, hint) local g = std.split(hint, ",") for _, v in ipairs(g) do if t[v] then return t[v] end end end function mp:myself(_, hint) local ww = dict({ ["вн"] = "себя"; ["дт"] = "себе"; ["тв"] = "собой"; ["пр"] = "себе"; ["рд"] = "себя"; }, hint) return { ww } end function mp:it(w, hint) hint = hint or '' if w:hint'plural' then return mp.mrd:noun(-"они/"..hint) elseif w:hint'neuter' then return mp.mrd:noun(-"оно/"..hint) elseif w:hint'female' then return mp.mrd:noun(-"она/"..hint) end return mp.mrd:noun(-"он/"..hint) end function mp:synonyms(w, hint) local nt = { ['его'] = 'него'; ['её'] = 'неё'; ['ее'] = 'нее'; ['ей'] = 'ней'; ['им'] = 'ним'; ['ими'] = 'ними'; ['их'] = 'них'; ['ему'] = 'нему'; } local t = self:it(w, hint) return { t, nt[t] } end mp.keyboard = { 'А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й', 'К','Л','М','Н','О','П','Р','О','С','Т','У','Ф', 'Х','Ц','Ч','Ш','Щ','Ь','Ы','Ъ','Э','Ю','Я' } local function hints(w) local h = std.split(w, ",") local ret = {} for _, v in ipairs(h) do ret[v] = true end return ret end function mp:err_noun(noun) if noun == '*' then return "{$fmt em|<любое слово>}" end local hint = std.split(noun, "/") local rc = "{$fmt em|" if #hint == 2 then local h = hints(hint[2]) local acc = 'кто/что' if h["им"] then acc = 'кто/что' elseif h["рд"] then acc = 'кого/чего' elseif h["дт"] then acc = 'кому/чему' elseif h["вн"] then acc = 'кого/что' elseif h["тв"] then acc = 'кем/чем' elseif h["пр"] or h["пр2"] then acc = 'ком/чём' end rc = rc .. acc else rc = rc .. "кто/что" end rc = rc .. "}" return rc end function mp.shortcut.vo(hint) return "в ".. hint -- local w = std.split(hint) -- w = w[#w] -- if mp.utf.len(w) > 2 and -- (lang.is_vowel(utf.char(w, 1)) or -- lang.is_vowel(utf.char(w, 2))) then -- return "в ".. hint -- end -- return "во ".. hint end function mp.shortcut.so(hint) return "с ".. hint -- local w = std.split(hint) -- w = w[#w] -- if mp.utf.len(w) > 2 and -- (lang.is_vowel(utf.char(w, 1)) or -- lang.is_vowel(utf.char(w, 2))) then -- return "с ".. hint -- end -- return "со ".. hint end function mp:before_Enter(w) if mp:compass_dir(w) then mp:xaction("Walk", w) return end return false end mp.msg.HELP = [[{$fmt b|КАК ИГРАТЬ?}^^ Вводите ваши действия в виде простых предложений вида: глагол -- существительное. Например:^ > открыть дверь^ > отпереть дверь ключом^ > идти на север^ > взять кепку^ ^ Чтобы снова увидеть описание обстановки, введите "осмотреть", "осм" или просто нажмите "ввод".^ ^ Чтобы осмотреть предмет, введите "осмотреть книгу" или просто "книга".^ ^ Попробуйте "осмотреть себя" и узнать, кто вы.^ ^ Чтобы узнать какие предметы у вас с собой, наберите "инвентарь" или "инв".^ ^ Для перемещений используйте стороны света, например: "идти на север" или "север" или просто "с".^ Кроме сторон света можно перемещаться вверх ("вверх" или "вв") и вниз ("вниз" или "вн"). ^^ Вы можете воспользоваться клавишей "TAB" для автодополнения ввода. ]] function mp.token.compass1(_) return "{noun_obj}/@n_to,compass|{noun_obj}/@ne_to,compass|{noun_obj}/@e_to,compass|{noun_obj}/@se_to,compass|{noun_obj}/@s_to,compass|{noun_obj}/@sw_to,compass|{noun_obj}/@w_to,compass|{noun_obj}/@nw_to,compass" end function mp.token.compass2(_) return "{noun_obj}/@u_to,compass|{noun_obj}/@d_to,compass|{noun_obj}/@in_to,compass|{noun_obj}/@out_to,compass" end function mp.shortcut.pref1() return '[по|подо|за|во|про]' end function mp.shortcut.pref2() return '[по|под|за|в|про]' end function mp.shortcut.pref3() return 'по|подъ|за|въ|про' end std.mod_init(function(_) Verb { "#Walk", "идти,{#pref1}йти,{#pref1}йди,иди,бежать,{#pref2}бежать,бег/и,{#pref2}бег/и,влез/ть,".. "[|{#pref3}]ехать,едь,сесть,сядь,лечь,ляг,[в|]стать,[в|]стан/ь", "на {compass1} : Walk", "на|в|во {noun}/вн,scene,enterable : Enter", "внутрь {noun}/рд,scene,enterable : Enter", "к {noun}/дт,scene : Walk", "{compass2}: Walk" } Verb { "#Exit", "[вы|у]йти,выйд/и,уйд/и,вылез/ти,выхо/ди,обратно,назад,выбраться,выберись,выбираться", "из|с|со {noun}/рд,scene : Exit", "в|через|на {noun}/вн,scene,enterable : Enter", "?наружу : Exit" } Verb { "#Exam", "[о| |по|рас]смотр/еть,[раз|по]гляд/еть", "?на {noun}/вн : Exam", " : Look", "инвентарь : Inv", "~ под {noun}/тв : LookUnder", "~ под {noun}/вн : LookUnder", "~ в|во|на {noun}/пр,2 : Search", "~ внутри {noun}/рд : Search", "~ в|во {noun}/вн : Search", "~ в|во {noun}/пр,2 о|об|обо|про * : Consult", "~ о|об|обо|про * в|во {noun}/пр,2 : Consult reverse", } Verb { "#Search", "[|по]искать,обыскать,[|по]ищ/и,обыщ/и,[|по]изуч/ать,[|по]исслед/овать", "{noun}/вн : Search", "в|во|на {noun}/пр,2 : Search", "под {noun}/тв : LookUnder", "~ в|во {noun}/пр,2 * : Consult", "~ * в|во {noun}/пр,2 : Consult reverse", } Verb { "#Open", "откр/ыть,распах/нуть,раскр/ыть,отвори/ть", "{noun}/вн : Open", "{noun}/вн {noun}/тв,held : Unlock", "~ {noun}/тв,held {noun}/вн : Unlock reverse", } Verb { "#Unlock", "отпереть,отопр/и", "{noun}/вн {noun}/тв,held : Unlock", "~ {noun}/тв,held {noun}/вн : Unlock reverse", } Verb { "#Close", "закр/ыть", "{noun}/вн : Close", "{noun}/вн {noun}/тв,held : Lock", "~ {noun}/вн на {noun}/вн,held : Lock", "~ {noun}/тв,held {noun}/вн : Lock reverse", } Verb { "#Lock", "запереть", "{noun}/вн {noun}/тв,held : Lock", "~ {noun}/вн на {noun}/вн,held : Lock", "~ {noun}/тв,held {noun}/вн : Lock reverse", } Verb { "#Inv", "инв/ентарь,с собой", "Inv" } function mp.shortcut.pref4() return '[ |за|подо]' end function mp.shortcut.pref5() return '[ |за|под]' end Verb { "#Take", "взять,возьм/и,{#pref4}брать,{#pref5}бер/и,доста/ть,схват/ить,".. "украсть,украд/и,извле/чь,вын/уть,вытащ/ить", "{noun}/вн,scene : Take", "{noun}/вн,scene из|с|со|у {noun}/рд,inside,holder: Remove", "~ из|с|со|у {noun}/рд,inside,holder {noun}/вн,scene: Remove reverse", } Verb { "#Drop", "полож/ить,постав/ить,посади/ть,класть,клади/,помест/ить,".. "[|про|за]сун/уть,воткн/уть,втык/ать,вставить,вставь/,влож/ить", "{noun}/вн,held : Drop", "{noun}/вн,held в|во {noun}/вн,inside : Insert", "~ {noun}/вн,held внутрь {noun}/рд : Insert", "{noun}/вн,held на {noun}/вн : PutOn", "~ в|во {noun}/вн {noun}/вн : Insert reverse", "~ внутрь {noun}/рд {noun}/вн : Insert reverse", "~ на {noun}/вн {noun}/вн : PutOn reverse", } Verb { "#ThrowAt", "брос/ить,выбро/сить,кин/уть,кида/ть,швыр/нуть,метн/уть,метать", "{noun}/вн,held : Drop", "{noun}/вн,held в|во|на {noun}/вн : ThrowAt", "~ в|во|на {noun}/вн {noun}/вн : ThrowAt reverse", "~ {noun}/вн {noun}/дт : ThrowAt", "~ {noun}/дт {noun}/вн : ThrowAt reverse", } Verb { "#Wear", "наде/ть,оде/ть", "{noun}/вн,held : Wear", } Verb { "#Disrobe", "снять,сним/ать", "{noun}/вн,worn : Disrobe", "~ {noun}/вн с|со {noun}/рд : Remove", "~ с|со {noun}/рд {noun}/вн : Remove reverse" } Verb { "#SwitchOn", "включ/ить,вруб/ить,активи/ровать", "{noun}/вн : SwitchOn", } Verb { "#SwitchOff", "выключ/ить,выруб/ить,деактиви/ровать", "{noun}/вн : SwitchOff", } Verb { "#Eat", "есть,съе/сть,куша/ть,скуша/ть,сожр/ать,жри,жрать,ешь", "{noun}/вн,held : Eat", } Verb { "#Taste", "лизать,лизн/уть,попроб/овать,полиз/ать,сосать,пососа/ть", "{noun}/вн : Taste" } Verb { "#Drink", "пить,выпить,выпей,выпью,пью", "{noun}/вн,held : Drink", } function mp.shortcut.pref6() return 'с|по|пере|за' end Verb { "#Push", "толк/ать,пих/ать,нажим/ать,нажм/и,нажать,[{#pref6}]двин/уть,[|{#pref6}]двига/ть,".. "запих/нуть,затолк/ать,[|на]давить", "?на {noun}/вн : Push", "{noun}/вн на|в|во {noun}/вн : Transfer", "~ {noun}/вн к {noun}/дт : Transfer", "{noun}/вн {compass2} : Transfer", "~ на|в|во {noun}/вн {noun}/вн : Transfer reverse", "~ {compass2} {noun}/вн : Transfer reverse" } Verb { "#Pull", "[|вы|по]тян/уть,[|вы|по]тащ/ить,тягать,[|по]волоч/ь,[|по]волок/ти,дёрн/уть,дёрг/ать", "?за {noun}/вн : Pull", "{noun}/вн на|в|во {noun}/вн : Transfer", "~ {noun}/вн к {noun}/дт : Transfer", "{noun}/вн {compass2} : Transfer", "~ на|в|во {noun}/вн {noun}/вн : Transfer reverse", "~ {compass2} {noun}/вн : Transfer reverse" } Verb { "#Turn", "враща/ть,поверн/уть,верт/еть,поверт/еть,крути/ть", "{noun}/вн : Turn" } Verb { "#Wait", "ждать,жди,подожд/ать,ожид/ать", "Wait" } function mp.shortcut.pref7() return 'за|по|про|пере|вы' end Verb { "#Rub", "[|{#pref7}]тереть,[|{#pref7}]три/,[{#pref7}]тира/ть,", "{noun}/вн : Rub" } Verb { "#Sing", "[|с]петь,спой/,пой", "Sing" } Verb { "#Touch", "[ |по]трога/ть,трон/уть,дотрон/уться,[ |при]косну/ться,касать/ся,[ |по|о]щупа/ть,[ |по]глад/ить", "{noun}/вн : Touch", "~ до {noun}/рд : Touch", "~ к {noun}/дт : Touch", "~ {noun}/рд : Touch", } Verb { "#Give", "дать,отда/ть,предло/жить,предла/гать,дам,даю,дадим", "{noun}/вн,held {noun}/дт,live : Give", "~ {noun}/дт,live {noun}/вн,held : Give reverse", } Verb { "#Show", "показ/ать,покаж/и", "{noun}/вн,held {noun}/дт,live : Show", "~ {noun}/дт,live {noun}/вн,held : Show reverse", } Verb { "#Burn", "[|под]жечь,жг/и,подожги/,поджиг/ай,зажг/и,зажиг/ай,зажечь", "{noun}/вн : Burn", "{noun}/вн {noun}/тв,held : Burn", "~ {noun}/тв,held {noun}/вн reverse", } Verb { "#Wake", "будить,разбуд/ить,просн/уться,бужу", "{noun}/вн,live : WakeOther", "Wake", } Verb { "#Kiss", "целовать,поцел/овать,чмок/нуть,обним/ать,обнять,целуй", "{noun}/вн,live : Kiss" } Verb { "#Think", "дума/ть,мысл/ить,подум/ать,рассужд/ать", "Think" } Verb { "#Smell", "нюха/ть,понюха/ть,занюх/ать,нюхн/уть,принюх/аться", "Smell", "{noun}/вн : Smell" } Verb { "#Listen", "слуша/ть,послуша/ть,прислушать/ся,слыш/ать,слух/", "Listen", "{noun}/вн : Listen", "~ к {noun}/дт : Listen", } Verb { "#Dig", "копа/ть,выкопа/ть,выры/ть,рыть,рой,вырой", "Dig", "{noun}/вн,scene : Dig", "{noun}/вн,scene {noun}/тв,held : Dig", "~ {noun}/тв,held {noun}/вн,scene : Dig reverse", } function mp.shortcut.pref8() return '[|раз|на|по|от|пере|вы]' end Verb { "#Cut", "{#pref8}рез/ать,{#pref8}реж/ь", "{noun}/вн : Cut", "{noun}/вн {noun}/тв,held: Cut", "~ {noun}/тв,held {noun}/вн: Cut reverse" } function mp.shortcut.pref9() return '[ |по|разо|со]' end Verb { "#Tear", "{#pref9}рвать,{#pref9}рви/,{#pref9}рву", "{noun}/вн : Tear", } Verb { "#Tie", "[при|с]вяз/ать,[при|с]вяж/и", "{noun}/вн : Tie", "{noun}/вн к {noun}/дт : Tie", "~ {noun}/вн с|со {noun}/тв : Tie", "~ к {noun}/дт {noun}/вн : Tie reverse", "~ с|со {noun}/тв {noun}/вн : Tie reverse", } Verb { "#Blow", "дуть,дуй/,дун/ь,задут/ь,задун/ь,задуй/", "в|во|на {noun}/вн : Blow", "~ {noun}/вн : Blow", -- задуть } Verb { "#Attack", "атак/овать,[|у|вы|раз|по|выши]бить,[|по|раз]бей/,удар/ить,".. "[|с|раз|по|вы|вз]лома/ть,разруш/ить,побь/,круш/ить,напасть,напад/ать,пнуть", "?на {noun}/вн : Attack" } Verb { "#Sleep", "спать,усн/уть,засн/уть,дрем/ать", "Sleep", } Verb { "#Swim", "плыть,плав/ать,ныря/ть,уплы/ть,поплы/ть,нырн/уть,[ |ис]купа/ться", "Swim", } Verb { "#Consult", "[|про|по]чита/ть,проч/есть", "в|во {noun}/пр,2 о|об|обо|про * : Consult", "~ о|об|обо|про * в|во {noun}/пр,2 : Consult reverse", "~ {noun}/вн : Exam", } Verb { "#Fill", "наполн/ить,нали/ть", "?в {noun}/вн : Fill", "~ внутрь {noun}/рд : Fill" } Verb { "#Jump", "[|по]прыг/ать,скак/ать,[|пере|под]прыг/нуть,переско/чить", "Jump", "через {noun}/вн,scene : JumpOver", "~ в {noun}/вн,scene : Enter", "~ на {noun}/вн,scene : Climb", "~ с|со {noun}/рд,scene : GetOff", "~ {compass2} : Walk", "~ +через {noun}/вн,scene : JumpOver", } Verb { "#Wave", "[|по]мах/ать,взмахн/уть,помаш/и", "WaveHands", "~ руками : WaveHands", "{noun}/тв,held : Wave" } Verb { "#Climb", "[|за|по|про|в]лез/ть,карабк/аться,взбир/ться,взобраться,взбери/сь", "на {noun}/вн,scene : Climb", "по {noun}/дт,scene : Climb", "~ внутрь {noun}/рд,scene : Enter", "~ в|во {noun}/вн,scene : Enter", "{compass2}: Walk", } Verb { "#GetOff", "слез/ть,спусти/ться,встать,встан/ь", "GetOff", "{compass2}: Walk", "с|со {noun}/рд,scene : GetOff", } Verb { "#Buy", "купи/ть,покупать", "{noun}/вн,scene : Buy" } Verb { "#Talk", "[|по]говор/ить,[|по]бесед/овать,разговарива/ть", "с|со {noun}/тв,live : Talk" } Verb { "#Tell", "сказать,сообщи/ть,сообщу,рассказать,расскаж/ите", "{noun}/дт,live о|об|обо|про * : Tell", "~ * {noun}/дт,live : Tell reverse", "~ {noun}/дт * : AskTo", } Verb { "#Ask", "спросит/ь,расспросит/ь", "{noun}/вн,live о|об|обо|про * : Ask", "~ у {noun}/рд,live о|об|обо|про * : Ask", "~ о|об|обо|про * у {noun}/рд,live : Ask reverse", } Verb { "#AskFor", "попроси/ть,выпроси/ть,уговори/ть,проси/ть,попрош/у,выпрош/у", "у {noun}/рд,live * : AskFor", "* у {noun}/рд,live : AskFor reverse", "~ {noun}/вн,live * : AskTo", } Verb { "#Answer", "ответ/ить,отвеч/ать", "{noun}/дт,live * : Answer", "~ * {noun}/дт,live : Answer reverse", } Verb { "#Yes", "да", "Yes", } Verb { "#No", "нет", "No", } Verb { "~ использ/овать,воспольз/оваться", "{noun}/вн : Use", "{noun}/тв : Use", } if DEBUG then MetaVerb { "#MetaWord", "~_слово", "* : MetaWord" } MetaVerb { "#MetaNoun", "~_сущ/ествительное", "* : MetaNoun" } MetaVerb { "#MetaTrace", "~_трассировка", "да : MetaTraceOn", "нет : MetaTraceOff", } MetaVerb { "#MetaDump", "~_дамп", "MetaDump" } end MetaVerb { "#MetaTranscript", "~транскрипт", "да : MetaTranscriptOn", "нет : MetaTranscriptOff", "MetaTranscript", } MetaVerb { "#MetaExpert", "~парсер", "эксперт да : MetaExpertOn", "эксперт нет : MetaExpertOff", } MetaVerb { "#MetaSave", "~сохрани/ть", "MetaSave" } MetaVerb { "#MetaLoad", "~загрузи/ть", "MetaLoad" } if DEBUG then MetaVerb { "#MetaAutoplay", "~автоскрипт", "MetaAutoplay" } end mp.msg.MetaRestart.RESTART = "Начать заново?"; MetaVerb { "#MetaRestart", "~заново,~рестарт", "MetaRestart" } MetaVerb { "#MetaHelp", "~помощь,помоги/те", "MetaHelp", } end, 1) std.mod_start(function() if mp.undo > 0 then mp.msg.MetaUndo.EMPTY = "Отменять нечего." MetaVerb { "#MetaUndo", "~отмен/ить", "MetaUndo", } end end) -- Dialog std.phr.default_Event = "Exam" Verb ({"~ сказать", "{select} : Exam" }, std.dlg) Verb ({'#Next', "дальше", "Next" }, mp.cutscene) Verb ({'#Exam', "~ осмотреть", "Look" }, std.dlg) mp.cutscene.default_Verb = "дальше" mp.cutscene.help = fmt.em "<дальше>"; std.dlg.default_Verb = "осмотреть" std.player.word = -"ты/мр,2л"