diff --git a/game/begin.coffee b/game/begin.coffee index f6e28fb..91575dd 100644 --- a/game/begin.coffee +++ b/game/begin.coffee @@ -101,8 +101,10 @@ class ImprovModel cunit = (name, spec) -> spec.act = () -> + # re-enter the room, reroll the description salet.view.clearContent() - salet.here().entering("start") + r = salet.here() + r.entering(r.name) return ''+@enact.fcall(this)+'' return unit(name, spec) state = new ImprovModel diff --git a/game/language/ru.coffee b/game/language/ru.coffee index 6d2585a..ea14fef 100644 --- a/game/language/ru.coffee +++ b/game/language/ru.coffee @@ -18,8 +18,7 @@ module.exports = Поезд тихо тронулся. """ window: "За {{окном}} проносятся столбы." - dsc: (Improv, state) -> - """ + dsc: """ ##### В купе поезда Это маленькое купе на четырёх человек. @@ -29,18 +28,24 @@ module.exports = На верхней полке напротив вас сидит {{#{if salet.character.knows_alexey then "Лёша" else "небритый парень в тёмном спортивном костюме"}.}} #{Improv.gen("alexey", state)} """ + alexey_end: """ + Парень в спортивном костюме обыскивает нижние полки. + """ margo: (Improv, state) -> """ На нижней полке рядом с вами отдыхает {{#{if salet.character.knows_margo then "Марго" else "красивая дама с ручным хорьком и циничным взглядом"}.}} #{Improv.gen("margo", state)} """ + margo_end: """ + Девушка ищет хорька в своём багаже. + Сумка, пакеты, несколько чемоданов… она застряла надолго. + """ owindow: "Вы замечаете, что окно {{неплотно закрыто.}}" dsc_ferret: """ ##### В купе поезда Это маленькое купе на четырёх человек. Сейчас здесь именно четыре человека, хотя на ваш счёт этого сразу и не скажешь. - """ window_end: "Вы уже не обращаете внимания на лютую метель за {{окном.}}" owindow_end: "Но вы замечаете, что окно так никто и не {{закрыл до конца.}}" @@ -209,6 +214,86 @@ module.exports = blood_dsc: "Вы замечаете на полу {{красное пятно.}}" blood_act: "Кровь. Вы не очень удивлены." ferret_dsc: "{{Ручной хорёк}} Маргариты внимательно смотрит на вас." - ferret_act: "Хорёк не реагирует." # подсказка 1 - ferret_one_margo: "Хорёк не реагирует." # подсказка 2 - ferret_one_alexey: "Хорёк не реагирует." # подсказка 3 + ferret_dsc_end: "{{Ручной хорёк}} Юля смотрит на вас из тёмного угла." + ferret_act: """ + Маргарита не выпускает хорька из рук, но маленькому прохвосту не терпится + побегать. + """ + ferret_one_margo: """ + Хорёк пускается в бег, но внимательная хозяйка не даёт ему убежать. + """ + ferret_one_alexey: """ + Хорёк пускается в бег, но ваш сосед замечает его и быстро ловит. + """ + ferret_run: """ + Когда оба человека отвлекаются, хорёк пулей летит прочь с полки. + Он прячется в дальнем углу, где вам хорошо его видно. + + Когда Маргарита обнаруживает пропажу, она поднимает крик. + — Караул! Юля! Юля! Она же может быть где угодно в вагоне! + + Видимо, хорёк был девочкой. + Хозяйка уходит, а через некоторое время возвращается вместе с проводником + вагона. + + — Я точно говорю, она не могла далеко убежать. + Давайте поищем сначала в вашем купе. + + Как раз тут вам и нужен проводник. + Как же теперь его… нейтрализовать? + """ + conductor: """ + {{Проводник}} осматривает пол. + Он не двигается с места, поэтому не может заметить хорька. + """ + table: """ + {{Раскладной столик}} собран, чтобы открыть пол. + """ + table_act: """ + Вы опускаете столик. + Вы не в силах поставить его на защёлку, поэтому он тут же складывается обратно. + """ + alexey_final: """ + Вы опускаете столик прямо на голову Алексею. + Он тихо охает и складывается на полу. + """ + alexey_final_dsc: "На полу под столиком лежит бесчувственный спортсмен." + margo_final: """ + Проводник прыгает, чтобы поймать хорька, но случайно задевает + девушку, которая пытается дотянуться до защёлки окна. + + Девушка падает и ударяется головой о стену. Она лежит без сознания. + """ + margo_final_dsc: """ + На полке лежит бессознательная любительница редких животных. + """ + ferret_whereto: "Вы можете выманить хорька, но куда?" + ferret_close: "Приманить к столу" + ferret_close_dsc: """ + Хорёк делает два прыжка к столу, но тут же разворачивается и прячется обратно. + """ + ferret_far: "Приманить на середину купе" + ferret_far_dsc: """ + Хорёк прыгает на середину купе, делает круг и возвращается в тёмный угол, + так никем и не замеченный. + """ + ferret_blood: "Приманить к луже крови" + ferret_blood_dsc: """ + Хорёк не хочет бежать так далеко — там слишком много людей. + """ + conductor_examine: """ + Злобный кондуктор, который убил вас, но ещё не знает, что вы стали призраком + и теперь навечно будете обитать в таинственном четырёхместном купе поезда Москва-Владивосток. + + И если ваш план удастся, то он останется здесь с вами. + """ + final: """ + — Ага, вот ты где! + + Проводник идёт к хорьку, но вместо этого подскальзывается на луже из вашей крови. + Он падает, и ударяется головой об угол полки. Если он выживет, это будет ещё долго болеть. + + Месть совершена. Вы чувствуете, что можете выйти из поезда. + + ### КОНЕЦ + """ diff --git a/game/story.coffee b/game/story.coffee index af413ec..119a552 100644 --- a/game/story.coffee +++ b/game/story.coffee @@ -6,9 +6,9 @@ room "start", if (!from) return "intro".l() dsc: () -> - if salet.character.ferret == true + if salet.character.ferret return "dsc_ferret".l() - return "dsc".l(Improv, state) + return "dsc".l() afterChoices: () -> if ( salet.character.lastBeat() > 3 and @@ -20,18 +20,18 @@ room "start", salet.character.newBeat() salet.goTo("killed") - if (salet.character.book == true and salet.character.lastBeat() == 2) + if (salet.character.book and salet.character.lastBeat() == 2) salet.view.write "**"+"reset_book".l()+"**" - if (salet.character.window == true and salet.character.lastBeat() == 2) + if (salet.character.window and salet.character.lastBeat() == 2) salet.view.write "**"+"reset_window".l()+"**" - if (salet.character.window == true and salet.character.lastBeat() > 3) + if (salet.character.window and salet.character.lastBeat() > 3) salet.character.window = false salet.character.newBeat() salet.view.write "**"+"reset_window_ends".l()+"**" - if (salet.character.book == true and salet.character.lastBeat() > 3) + if (salet.character.book and salet.character.lastBeat() > 3) salet.character.book = false salet.character.newBeat() salet.view.write "**"+"reset_book_ends".l()+"**" @@ -41,47 +41,51 @@ room "start", salet.view.append(""+"#{to}_reaction".l()+"") return false units:[ - unit "window", + cunit "window", order: 5 dsc: () -> - if salet.character.ferret == true + if salet.character.ferret return "\n\n"+"window_end".l() return "\n\n"+"window".l() - act: () -> - # re-enter the room, reroll the description - salet.view.clearContent() - salet.here().entering("start") - return ""+procgen("window")+"" - unit "owindow", + enact: () -> + return procgen("window") + cunit "owindow", order: 6 dsc: () -> - if salet.character.ferret == true + if salet.character.ferret return "owindow_end".l() return "owindow".l() - act: () -> - salet.view.clearContent() - salet.here().entering("start") + enact: () -> if salet.character.killed salet.character.window = true salet.character.newBeat() - return ""+"window_open".l()+"" + return "window_open".l() else - return ""+"window_open_no".l()+"" - unit "alexey", + return "window_open_no".l() + cunit "alexey", order: 3 dsc: () -> - "alexey".l(Improv, state) - act: () -> + if salet.character.alexey + return "alexey_final_dsc".l() + if salet.character.ferret + return "alexey_end".l() + return "alexey".l(Improv, state) + enact: () -> salet.goTo("alexey") - unit "margo", + cunit "margo", order: 4 dsc: () -> + if salet.character.margo + return "margo_final_dsc".l() + if salet.character.ferret + return "margo_end".l() "margo".l(Improv, state) - act: () -> + enact: () -> salet.goTo("margo") - unit "debug", + cunit "debug", dsc: "
{{Пропустить всё до загадок}}
" - act: () -> + order: 666 + enact: () -> state.setTag("weather", "cold") salet.here().take(book) salet.here().take(blood) @@ -91,9 +95,7 @@ room "start", salet.character["knows_margo"] = true salet.here().drop("debug") salet.character.killed = true - salet.view.clearContent() - salet.here().entering("start") - return "*Сделано.*" + return "Сделано." ] book = cunit "book", @@ -117,18 +119,46 @@ blood = cunit "blood", enact: "blood_act".l() ferret = cunit "ferret", - dsc: "ferret_dsc".l() + dsc: () -> + if salet.character.ferret + return "ferret_dsc_end".l() + return "ferret_dsc".l() order: 4 enact: () -> - if salet.character.window == true and salet.character.book == true + if salet.character.ferret + return salet.goTo("ferret") + if salet.character.window and salet.character.book # хорьку никто не мешает - else if salet.character.window == true + salet.character.book = false + salet.character.window = false + salet.character.ferret = true + salet.here().take(conductor) + salet.here().take(table) + salet.view.clearContent() + salet.here().entering("start") + return "ferret_run".l() + else if salet.character.window return "ferret_one_margo".l() - else if salet.character.book == true + else if salet.character.book return "ferret_one_alexey".l() else return "ferret_act".l() +conductor = cunit "conductor", + dsc: "conductor".l() + order: 2 + enact: "conductor_examine".l() + +table = cunit "table", + dsc: "table".l() + order: 7 + enact: () -> + if salet.character.book and !salet.character.alexey + salet.character.alexey = true + return "alexey_final".l() + else + return "table_act".l() + ## ACTUALLY DIALOGUES dlg = (name) -> @@ -216,3 +246,45 @@ room "killed5", true if salet.isVisited("killed4_a") or salet.isVisited("killed4_b") after: () -> return salet.goTo("start") + +room "ferret", + clear: true + dsc: "ferret_whereto".l() + choices: "#ferret" + +room "ferret_close", + clear: false + optionText: "ferret_close".l() + dsc: () -> + if salet.character.window and !salet.character.margo + salet.character.margo = true + return "margo_final".l() + return "ferret_close_dsc".l() + after: () -> + salet.goTo("start") + tags: ["ferret"] + +room "ferret_blood", + clear: false + optionText: "ferret_blood".l() + dsc: () -> + if salet.character.alexey and salet.character.margo + salet.goTo("final") + return "" + return "ferret_blood_dsc".l() + tags: ["ferret"] + after: () -> + unless salet.character.alexey and salet.character.margo + salet.goTo("start") + +room "ferret_far", + clear: false + optionText: "ferret_far".l() + dsc: "ferret_far_dsc".l() + tags: ["ferret"] + after: () -> + salet.goTo("start") + +room "final", + clear: true + dsc: "final".l()