From e9ff4801aaf395c9aa1964868c4cad1c414cfd68 Mon Sep 17 00:00:00 2001 From: Oreolek Date: Thu, 6 Aug 2015 22:24:05 +0700 Subject: [PATCH] Internationalization --- choice.lua | 6 +- en.mo | Bin 0 -> 13986 bytes en.po | 356 +++++++++++++++++++++++++++++++++++++++++++++++++++ game.lua | 135 +++++++++++++++++++ init.lua | 27 ---- lowlevel.lua | 116 ----------------- main.lua | 87 ++++++++++++- 7 files changed, 575 insertions(+), 152 deletions(-) create mode 100644 en.mo create mode 100644 en.po create mode 100644 game.lua delete mode 100644 lowlevel.lua diff --git a/choice.lua b/choice.lua index 7d05055..217d8ca 100644 --- a/choice.lua +++ b/choice.lua @@ -1,5 +1,6 @@ --- Здесь я переделываю диалоги INSTEAD на другую структуру --- мне нужно, чтобы фразы не автоматически скрывались, а постоянно оставались и скрывались при просмотре комнаты, а не после кликов +-- Here I make an alternative to INSTEAD dialogs. +-- I need the phrases not to hide automatically on click. +-- They need to hide automatically on filter condition - when examining the room, not on click function isDisabled(v) if (type(v) ~= 'table') then return false end; @@ -72,7 +73,6 @@ option_action = function(self) return ret end - function option(filter, ask, answ, actfunc) local p = phr (ask, answ, actfunc); p.do_act = actfunc; diff --git a/en.mo b/en.mo new file mode 100644 index 0000000000000000000000000000000000000000..96e8e051c05b24d05f6f59b3dae092c9746007f5 GIT binary patch literal 13986 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\n" +"Language-Team: \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.7.5\n" +"X-Poedit-Basepath: .\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Poedit-KeywordsList: __\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-SearchPath-0: .\n" + +#: game.lua:3 +msgid "Персонаж" +msgstr "Character" + +#: game.lua:4 +msgid "Связи" +msgstr "Connections" + +#: game.lua:5 +msgid "Дерзость" +msgstr "Boldness" + +#: game.lua:6 +msgid "Осторожность" +msgstr "Cautious" + +#: game.lua:13 +msgid "Параметр Связи увеличился на " +msgstr "Connection stat has increased by " + +#: game.lua:18 +msgid "Параметр Дерзость увеличился на " +msgstr "Boldness stat has increased by " + +#: game.lua:23 +msgid "Параметр Осторожность увеличился на " +msgstr "Cautious stat has increased by " + +#: game.lua:26 +msgid "Вернуться на площадь" +msgstr "Go back to square" + +#: game.lua:30 +msgid "Осмотреть памятник" +msgstr "Examine the monument" + +#: game.lua:31 +msgid "" +"Чёрный памятник без таблички изображает высокого мужчину в старомодном " +"плаще, который держит в руках раскрытый зонт. Мужчина застыл, направив " +"взгляд на небо.^^\n" +" На основании памятника нацарапано: \"Господин Гронц видел тебя\"" +msgstr "" +"A black monument without a sign portraits a tall man in an old-fashioned " +"coat. He holds an opened umbrella in his grip. The man is stiff, watching " +"the sky.^^There is a scratch on the foundation, it says: \"Mister Grontz saw " +"you\"" + +#: game.lua:35 +msgid "Посетить музей Сгоревших Свечей" +msgstr "Visit the Museum of Burned Candles" + +#: game.lua:36 +msgid "Найти Глиняную Башню" +msgstr "Find the Mold Tower" + +#: game.lua:37 +msgid "Искать Отделение Криминального Давления" +msgstr "Search for the Division of Criminal Pressure" + +#: game.lua:40 +msgid "Глиняная Башня" +msgstr "Mold Tower" + +#: game.lua:41 +msgid "Вы подходите к старинной башне, целиком вылепленной из красной глины." +msgstr "You walk towards an ancient tower, completely made out of red loam." + +#: game.lua:42 +msgid "" +"На верхушке башни находится циферблат часов, застрявших на шести часах " +"двадцати минут." +msgstr "" +"There is a clock face on the top of the tower, stuck at six hours twenty " +"minutes." + +#: game.lua:47 +msgid "Музей Сгоревших Свечей" +msgstr "Museum of Burned Candles" + +#: game.lua:48 +msgid "" +"Музей Сгоревших Свечей -- это здание середины девятнадцатого века, изрядно " +"потрёпанное временем." +msgstr "" +"Museum of Burned Candles is a middle nineteenth century buiding badly " +"damaged by the time." + +#: game.lua:49 +msgid "На входе вам дают кусочек воска, на котором написан номер билета." +msgstr "" +"At the entrance you get a piece of wax with a ticket number scratched on it." + +#: game.lua:50 +msgid "Вы кидаете билет в камин, горящий на выходе." +msgstr "You throw the ticket in a fireplace standing near the exit." + +#: game.lua:55 +msgid "Отделение Криминального Давления" +msgstr "Division of Criminal Pressure" + +#: game.lua:56 +msgid "" +"Буклет-путеводитель описывает Отделение Криминального Давления как " +"\"департамент наивысшей безопасности по защите от наихудшей преступности.\"" +msgstr "" +"The booklet guide describes the Division of Criminal Pressure as the " +"“department of the highest security to protect against the worst crime.“" + +#: game.lua:57 +msgid "" +"Издалека вам кажется, что здание О.К.Д. украшено живыми прыгучими мышами, но " +"вблизи вы видите, что мышей всего лишь колышет лёгкий ветер. В здание часто " +"заходят люди в тёмно-синей форме, но, насколько вы можете заметить, через " +"тяжёлые двери выходят немногие. Вы не замечаете ничего странного, входя " +"внутрь, только половицы слишком громко скрипят." +msgstr "" +"It seems from afar that the D.C.P. building is decorated with a live jumping " +"mice but close up you see that it's only the light wind rustles the corpses. " +"There are people in dark blue uniforms entering often but as far as you can " +"tell the heavy doors open only for a few ones. You don't notice anything " +"strange entering inside, just the floorboards creaking too loud." + +#: game.lua:60 game.lua:66 +msgid "Вы засовываете руку в карман и находите там чужую" +msgstr "You put your hand in your pocket and find another one there." + +#: game.lua:62 game.lua:93 +msgid "На вас бросается женщина..." +msgstr "A woman dashes to you..." + +#: game.lua:67 +msgid "" +"Вы засовываете руку в карман и находите там чужую. Вы разворачиваетесь и " +"видите грязного мальчика, который пытается спрятать лицо под дырявой кепкой." +msgstr "" +"You put your hand in your pocket and find another one there. You turn around " +"and see a dirty boy trying to hide his face under a worn through cap." + +#: game.lua:70 +msgid "Побить вора" +msgstr "Give thief a beating" + +#: game.lua:70 +msgid "" +"Вы перетряхиваете мальчугана на всё, что у него есть. Он отдаёт вам " +"единственную монетку и теряется в тумане." +msgstr "" +"You shake the thief up for everything he got. He gives you the single coin " +"and gets lost in the mist." + +#: game.lua:78 +msgid "Отпустить и проследить за ним" +msgstr "Leave and follow him" + +#: game.lua:78 +msgid "" +"Вы отпускаете мальчугана и осторожно следуете за ним. Он отбегает в сторону, " +"оглядывается, и, не заметив вас в тумане, идёт по переулкам к старому " +"фонтану на Площади Жути.^^\n" +" По пустой улице проносится слабый звон, и мальчик быстро исчезает в " +"одном из домов. Вы подходите к пересохшему фонтану и видите одинокую " +"монетку, которая блестит на дне. Вы поднимаете монетку и осматриваете её. " +"Выглядит интересно. " +msgstr "" +"You leave the boy and cautiously follow him. He runs away sideways, glances " +"around and, unable to see you, goes through the twisty lanes to an old " +"fountain on the Dismay Square.^^ There is a faint clank on the empty " +"street, and the boy quickly disappears in one of the houses. You go to a " +"parched fountain and see a lone coin glinting on the bottom. You pick up it " +"and examine. Looks interesting." + +#: game.lua:88 +msgid "цент" +msgstr "cent" + +#: game.lua:89 +msgid "" +"Потемневшая монета в одну местную копейку. На реверсе монеты иголкой " +"нацарапана спираль." +msgstr "" +"A darkened coin of one local copeck. Its reverse has a spiral scratched on " +"it with a needle." + +#: game.lua:94 +msgid "" +"На вас бросается женщина с зарёванным лицом. Мужчина в форме, с которым она " +"до этого разговаривала, облегчённо вздыхает и уходит по своим делам. ^\n" +" -- Пожалуйста! Может, хоть вы мне поможете? Я не могу попасть домой и у " +"меня нет с собой денег, чтобы заплатить Охотникам. Я не могу пробиться через " +"эти грибы!" +msgstr "" +"A woman dashes to you, wearing blubbered face. An uniformed man she was " +"talking to previously sighs with relief and goes away to his business.^^ " +"-- Please! Can you help me maybe? I can't go home and I have no money with " +"myself to pay the Hunters. I can't go past these mushrooms!" + +#: game.lua:97 +msgid "Следовать к её дому" +msgstr "Follow to her house" + +#: game.lua:101 +msgid "Дом в квартале Улыбающихся Гончаров" +msgstr "A house in Smiling Potters block" + +#: game.lua:102 +msgid "" +"Она живёт к западу от Глиняной Башни, в квартале Улыбающихся Гончаров. Вы " +"медленно пробираетесь по петляющим улочкам и, наконец, выходите к старому " +"домику, перед которым раскинулись высокие коричневые заросли грибов.Она даёт " +"вам белый платок и показывает, как его завязать на лицо." +msgstr "" +"She lives to the west of Mold Tower, the Smiling Potters block. You slowly " +"make your way through windy passages and come out to an old house. There is " +"a high brown mushroom thickery in the front of it. She gives you a white " +"handkerchief and shows how to tie it up around your face." + +#: game.lua:103 +msgid "" +"-- Вы видите? Я не могу пройти к дому, не наглотавшись спор. Я читала, что " +"споры этих грибов превращают людей в.. в глину!" +msgstr "" +"-- Do you see that? I can't go to my house without swallowing the spores. " +"I've read that the spores of these mushrooms turn people into.. into mold!" + +#: game.lua:108 +msgid "Медленно протоптать дорожку" +msgstr "Slowly trample down a path" + +#: game.lua:108 +msgid "" +"Осторожно контролируя вес, вы протаптываете дорожку через заросли грибов. " +"Придётся ходить только в масках, но теперь здесь есть шансы жить.^^\n" +" -- Спасибо! Вот вам за труды. -- Женщина протягивает изогнутый кусок " +"пластилина. -- Говорят, за ноги Пластилиновых Творений дорого платят в музее " +"Сгоревших Свечей. " +msgstr "" +"Carefully controlling your weight, you trample down a path through the thick " +"mass of mushrooms. She will have to wear the mask but now she has a chance " +"to live here.^^ -- Thank you! That's for your trouble. -- The woman " +"extends a curved piece of plasticine. -- They say Plasticine Thing legs are " +"highly valued at Museum of Burned Candles." + +#: game.lua:116 +msgid "Быстро перепрыгнуть через заросли" +msgstr "Quickly jump over the thicket" + +#: game.lua:116 +msgid "" +"Разбежавшись, вы перепрыгиваете заросли и приземляетесь на пороге дома. " +"Похоже, хозяйке придётся упражняться в прыжках, но хотя бы у неё появились " +"шансы здесь жить.^^\n" +" -- Спасибо! Вот вам за труды. -- Женщина протягивает изогнутый кусок " +"пластилина. -- Говорят, за ноги Пластилиновых Творений дорого платят в музее " +"Сгоревших Свечей. " +msgstr "" +"You run up and jump over the thicket, landing on the house doorstep. Looks " +"like the lady will have to practice running, but at least she got a chance " +"to live here. -- Thank you! That's for your trouble. -- The woman extends " +"a curved piece of plasticine. -- They say Plasticine Thing legs are highly " +"valued at Museum of Burned Candles." + +#: game.lua:125 +msgid "пластилиновая нога" +msgstr "plasticine leg" + +#: game.lua:126 +msgid "Нога Пластилинового Творения." +msgstr "Plasticine Thing's Leg" + +#: game.lua:129 +msgid "Сесть на поезд домой" +msgstr "Board the train home" + +#: game.lua:132 +msgid "Конец игры" +msgstr "End of the game" + +#: game.lua:133 +msgid "" +"Ваше время в этом мрачном городе закончено, и вы уезжаете на старом поезде, " +"всё ещё слишком чужой для того, чтобы остаться.^^" +msgstr "" +"Your time in this grim town is over, and you depart on an old train, still " +"too alien to stay.^^" + +#: game.lua:133 +msgid "КОНЕЦ" +msgstr "THE END" + +#: main.lua:83 +msgid "Шестой город" +msgstr "Sixth City" + +#: main.lua:84 +msgid "" +"Облака никогда не рассеиваются, они могут только становиться светлее. Вы " +"стоите на круглой площади перед мрачным памятником, откуда начинается " +"извилистый лабиринт улиц Шестого города. Невысокие дома окружают вас со всех " +"сторон, скрываясь в тумане.^^\n" +" Потёртый буклет, который вы нашли в мусорном баке возле гостиницы, " +"предлагает несколько интересных занятий для \"гостей города Н.\"" +msgstr "" +"The clouds never disperse, they only can get lighter. You are standing on a " +"round square near a grim monument. A twisty labyringth of Sixth City streets " +"starts here. Small houses surround you from every side, fading into mists." +"^^An shabby booklet you've found in a trash near the hotel offers some " +"\"interesting avenues and events for guests of town N.\"" + +#~ msgid "Character" +#~ msgstr "Персонаж" + +#~ msgid "Connections" +#~ msgstr "Связи" + +#~ msgid "Boldness" +#~ msgstr "Дерзость" + +#~ msgid "Cautious" +#~ msgstr "Осторожность" + +#~ msgid "Sixth city" +#~ msgstr "Шестой город" + +#~ msgid "" +#~ "The clouds are always there. Never completely dispersed, they only can " +#~ "lighten up for a day. You're standing on a round square before a grim " +#~ "monument. The twisty labyrinth of Sixth City starts here. Small houses " +#~ "surround you, fading to mist.^^A worn booklet you found in a trash bin " +#~ "near the hotel: \"Avenues and events for the N. city guest\"" +#~ msgstr "" +#~ "Облака никогда не рассеиваются, они могут только становиться светлее. Вы " +#~ "стоите на круглой площади перед мрачным памятником, откуда начинается " +#~ "извилистый лабиринт улиц Шестого города. Невысокие дома окружают вас со " +#~ "всех сторон, скрываясь в тумане.^^Потёртый буклет, который вы нашли в " +#~ "мусорном баке возде гостиницы, предлагает несколько интересных занятий " +#~ "для \"гостей города Н.\"" diff --git a/game.lua b/game.lua new file mode 100644 index 0000000..b939c9c --- /dev/null +++ b/game.lua @@ -0,0 +1,135 @@ +playerdesc = stat { + nam = function() + pn(txtc(txtb(__('Персонаж')))); + pn(__('Связи')..': '..pl._connections); + pn(__('Дерзость')..': ' .. pl._boldness); + pn(__('Осторожность')..': ' .. pl._caution); + end, +} +take('playerdesc'); + +connected = function(i) + pl._connections = pl._connections + i; + pn (__("Параметр Связи увеличился на ")..i.."."); +end; + +bold = function(i) + pl._boldness = pl._boldness + i; + pn (__("Параметр Дерзость увеличился на ")..i.."."); +end; + +cautious = function(i) + pl._caution = pl._caution + i; + pn (__("Параметр Осторожность увеличился на ")..i.."."); +end; + +turn_back = option(nil, '-- '..__('Вернуться на площадь')..' --', '', 'walk("main")'); + +put(option( + 'pl._seen_monument ~= true', + __('Осмотреть памятник'), + __([[Чёрный памятник без таблички изображает высокого мужчину в старомодном плаще, который держит в руках раскрытый зонт. Мужчина застыл, направив взгляд на небо.^^ + На основании памятника нацарапано: "Господин Гронц видел тебя"]]), + function() connected(1); pl._seen_monument = true; end +)); +put(option(nil, __('Посетить музей Сгоревших Свечей'), nil, 'walk("museum")')); +put(option(nil, __('Найти Глиняную Башню'), nil, 'walk("clock")')); +put(option(nil, __('Искать Отделение Криминального Давления'), nil, 'walk("police")')); + +clock = choice { + nam = __('Глиняная Башня'), + enter = __([[Вы подходите к старинной башне, целиком вылепленной из красной глины.]]), + dsc = __([[На верхушке башни находится циферблат часов, застрявших на шести часах двадцати минут.]]), + obj = {turn_back} +} + +museum = choice { + nam = __('Музей Сгоревших Свечей'), + dsc = __('Музей Сгоревших Свечей -- это здание середины девятнадцатого века, изрядно потрёпанное временем.'), + enter = __('На входе вам дают кусочек воска, на котором написан номер билета.'), + exit = __('Вы кидаете билет в камин, горящий на выходе.'), + obj = {turn_back} +} + +police = choice { + nam = __('Отделение Криминального Давления'), + dsc = __([[Буклет-путеводитель описывает Отделение Криминального Давления как "департамент наивысшей безопасности по защите от наихудшей преступности."]]), + enter = __([[Издалека вам кажется, что здание О.К.Д. украшено живыми прыгучими мышами, но вблизи вы видите, что мышей всего лишь колышет лёгкий ветер. В здание часто заходят люди в тёмно-синей форме, но, насколько вы можете заметить, через тяжёлые двери выходят немногие. Вы не замечаете ничего странного, входя внутрь, только половицы слишком громко скрипят.]]), + obj = {} +} +thief_option = option('pl._boldness < 5 and not have("cent")', __('Вы засовываете руку в карман и находите там чужую'), nil, 'walk("thief")'); +put ('thief_option', 'police'); +put(option('pl._boldness < 5 and not have("clay_leg")', __('На вас бросается женщина...'), nil, 'walk("eradication")'), 'police'); +put (turn_back, 'police'); + +thief = choice { + nam = __('Вы засовываете руку в карман и находите там чужую'), + dsc = __([[Вы засовываете руку в карман и находите там чужую. Вы разворачиваетесь и видите грязного мальчика, который пытается спрятать лицо под дырявой кепкой.]]), + obj = {} +} +put(option(nil, __('Побить вора'), __('Вы перетряхиваете мальчугана на всё, что у него есть. Он отдаёт вам единственную монетку и теряется в тумане.'),function() + connected(1); + bold(1); + take('cent'); + walk('police'); + end +), 'thief'); + +put(option(nil, __('Отпустить и проследить за ним'), __([[Вы отпускаете мальчугана и осторожно следуете за ним. Он отбегает в сторону, оглядывается, и, не заметив вас в тумане, идёт по переулкам к старому фонтану на Площади Жути.^^ + По пустой улице проносится слабый звон, и мальчик быстро исчезает в одном из домов. Вы подходите к пересохшему фонтану и видите одинокую монетку, которая блестит на дне. Вы поднимаете монетку и осматриваете её. Выглядит интересно. ]]),function() + cautious(1); + connected(1); + take('cent'); + walk('police'); + end +), 'thief'); + +cent = obj { + nam = __('цент'), + inv = __('Потемневшая монета в одну местную копейку. На реверсе монеты иголкой нацарапана спираль.') +} + +eradication = choice { + nam = __('На вас бросается женщина...'), + dsc = __([[На вас бросается женщина с зарёванным лицом. Мужчина в форме, с которым она до этого разговаривала, облегчённо вздыхает и уходит по своим делам. ^ + -- Пожалуйста! Может, хоть вы мне поможете? Я не могу попасть домой и у меня нет с собой денег, чтобы заплатить Охотникам. Я не могу пробиться через эти грибы!]]), + obj = { + option(nil, __('Следовать к её дому'), nil, 'walk("eradication_cont")'), + } +} +eradication_cont = choice { + nam = __('Дом в квартале Улыбающихся Гончаров'), + enter = __([[Она живёт к западу от Глиняной Башни, в квартале Улыбающихся Гончаров. Вы медленно пробираетесь по петляющим улочкам и, наконец, выходите к старому домику, перед которым раскинулись высокие коричневые заросли грибов.Она даёт вам белый платок и показывает, как его завязать на лицо.]]), + dsc = __([[-- Вы видите? Я не могу пройти к дому, не наглотавшись спор. Я читала, что споры этих грибов превращают людей в.. в глину!]]), + obj = {}, +} + +-- тут можно придумать дополнительные варианты в зависимости от инвентаря +put(option(nil, __('Медленно протоптать дорожку'), __([[Осторожно контролируя вес, вы протаптываете дорожку через заросли грибов. Придётся ходить только в масках, но теперь здесь есть шансы жить.^^ + -- Спасибо! Вот вам за труды. -- Женщина протягивает изогнутый кусок пластилина. -- Говорят, за ноги Пластилиновых Творений дорого платят в музее Сгоревших Свечей. ]]),function() + cautious(1); + take('clay_leg'); + walk('police'); + end), +'eradication_cont'); + +put(option(nil, __('Быстро перепрыгнуть через заросли'), __([[Разбежавшись, вы перепрыгиваете заросли и приземляетесь на пороге дома. Похоже, хозяйке придётся упражняться в прыжках, но хотя бы у неё появились шансы здесь жить.^^ + -- Спасибо! Вот вам за труды. -- Женщина протягивает изогнутый кусок пластилина. -- Говорят, за ноги Пластилиновых Творений дорого платят в музее Сгоревших Свечей. ]]),function() + bold(1); + take('clay_leg'); + walk('police'); + end), +'eradication_cont'); + +clay_leg = obj { + nam = __('пластилиновая нога'), + inv = __('Нога Пластилинового Творения.') +} + +put(option('pl._connections > 0', __('Сесть на поезд домой'), nil, "walk('endgame')")); + +endgame = room { + nam = __('Конец игры'), + dsc = __([[Ваше время в этом мрачном городе закончено, и вы уезжаете на старом поезде, всё ещё слишком чужой для того, чтобы остаться.^^]])..txtc(__('КОНЕЦ')), +} + diff --git a/init.lua b/init.lua index 5b7563c..9703754 100644 --- a/init.lua +++ b/init.lua @@ -11,33 +11,6 @@ game.actions = {} pl._connections = 0; pl._boldness = 0; pl._caution = 0 -playerdesc = stat { - nam = function() - pn(txtc(txtb('Персонаж'))); - pn('Связи: '..pl._connections); - pn('Дерзость: ' .. pl._boldness); - pn('Осторожность: ' .. pl._caution); - -- if (game._action ~= nil) then - -- pn("Локация: "..game._action); - -- end - end, -} -take('playerdesc'); - -connected = function(i) - pl._connections = pl._connections + i; - pn ("Параметр Связи увеличился на "..i.."."); -end; - -bold = function(i) - pl._boldness = pl._boldness + i; - pn ("Параметр Дерзость увеличился на "..i.."."); -end; - -cautious = function(i) - pl._caution = pl._caution + i; - pn ("Параметр Осторожность увеличился на "..i.."."); -end; rndstr = function(strings) return strings[rnd(stead.table.maxn(strings))]; diff --git a/lowlevel.lua b/lowlevel.lua deleted file mode 100644 index a7ce9cb..0000000 --- a/lowlevel.lua +++ /dev/null @@ -1,116 +0,0 @@ -turn_back = option(nil, '-- Вернуться на площадь --', '', 'walk("main")'); - -put(option( - 'pl._seen_monument ~= true', - 'Осмотреть памятник', - [[ Чёрный памятник без таблички изображает высокого мужчину в старомодном плаще, который держит в руках раскрытый зонт. Мужчина застыл, направив взгляд на небо.^^ - На основании памятника нацарапано: "Господин Гронц видел тебя"]], - function() connected(1); pl._seen_monument = true; end -)); -put(option(nil, 'Посетить музей Сгоревших Свечей', nil, 'walk("museum")')); -put(option(nil, 'Найти Глиняную Башню', nil, 'walk("clock")')); -put(option(nil, 'Искать Отделение Криминального Давления', nil, 'walk("police")')); - -clock = room { - nam = 'Глиняная Башня', - enter = [[ Вы подходите к старинной башне, целиком вылепленной из красной глины. ]], - dsc = [[ На верхушке башни находится циферблат часов, застрявших на шести часах двадцати минут.]], - obj = {turn_back} -} - -museum = room { - nam = 'Музей Сгоревших Свечей', - dsc = 'Музей Сгоревших Свечей -- это здание середины девятнадцатого века, изрядно потрёпанное временем.', - enter = 'На входе вам дают кусочек воска, на котором написан номер билета.', - exit = 'Вы кидаете билет в камин, горящий на выходе.', - obj = {turn_back} -} - --- circus = action { --- nam = 'Направиться в Красный Цирк', --- } - -police = choice { - nam = 'Отделение Криминального Давления', - dsc = [[Буклет-путеводитель описывает Отделение Криминального Давления как "департамент наивысшей безопасности по защите от наихудшей преступности.]], - enter = [[Издалека вам кажется, что здание О.К.Д. украшено живыми прыгучими мышами, но вблизи вы видите, что мышей всего лишь колышет лёгкий ветер. В здание часто заходят люди в тёмно-синей форме, но, насколько вы можете заметить, через тяжёлые двери выходят немногие. Вы не замечаете ничего странного, входя внутрь, только половицы слишком громко скрипят.]], - obj = {} -} -thief_option = option('pl._boldness < 5 and not have("cent")', 'Вы засовываете руку в карман и находите там чужую', nil, 'walk("thief")'); -put ('thief_option', 'police'); -put(option('pl._boldness < 5 and not have("clay_leg")', 'На вас бросается женщина...', nil, 'walk("eradication")'), 'police'); -put (turn_back, 'police'); - -thief = choice { - nam = 'Вы засовываете руку в карман и находите там чужую', - dsc = [[Вы засовываете руку в карман и находите там чужую. Вы разворачиваетесь и видите грязного мальчика, который пытается спрятать лицо под дырявой кепкой.]], - obj = {} -} -put(option(nil, 'Побить вора', 'Вы перетряхиваете мальчугана на всё, что у него есть. Он отдаёт вам единственную монетку и теряется в тумане.',function() - connected(1); - bold(1); - take('cent'); - walk('police'); - end -), 'thief'); - -put(option(nil, 'Отпустить и проследить за ним', [[Вы отпускаете мальчугана и осторожно следуете за ним. Он отбегает в сторону, оглядывается, и, не заметив вас в тумане, идёт по переулкам к старому фонтану на Площади Жути.^^ - По пустой улице проносится слабый звон, и мальчик быстро исчезает в одном из домов. Вы подходите к пересохшему фонтану и видите одинокую монетку, которая блестит на дне. Вы поднимаете монетку и осматриваете её. Выглядит интересно. ]],function() - cautious(1); - connected(1); - take('cent'); - walk('police'); - end -), 'thief'); - -cent = obj { - nam = 'цент', - inv = 'Потемневшая монета в одну местную копейку. На реверсе монеты иголкой нацарапана спираль.' -} - -eradication = choice { - nam = 'На вас бросается женщина...', - dsc = [[ На вас бросается женщина с зарёванным лицом. Мужчина в форме, с которым она до этого разговаривала, облегчённо вздыхает и уходит по своим делам. ^ - -- Пожалуйста! Может, хоть вы мне поможете? Я не могу попасть домой и у меня нет с собой денег, чтобы заплатить Охотникам. Я не могу пробиться через эти грибы!]], - obj = { - option(nil, 'Следовать к её дому', nil, 'walk("eradication_cont")'), - } -} -eradication_cont = choice { - nam = 'Дом в квартале Улыбающихся Гончаров', - enter = [[ Она живёт к западу от Глиняной Башни, в квартале Улыбающихся Гончаров. Вы медленно пробираетесь по петляющим улочкам и, наконец, выходите к старому домику, перед которым раскинулись высокие коричневые заросли грибов.Она даёт вам белый платок и показывает, как его завязать на лицо.]], - dsc = [[-- Вы видите? Я не могу пройти к дому, не наглотавшись спор. Я читала, что споры этих грибов превращают людей в.. в глину!]], - obj = {}, -} - --- тут можно придумать дополнительные варианты в зависимости от инвентаря -put(option(nil, 'Медленно протоптать дорожку', [[ Осторожно контролируя вес, вы протаптываете дорожку через заросли грибов. Придётся ходить только в масках, но теперь здесь есть шансы жить.^^ - -- Спасибо! Вот вам за труды. -- Женщина протягивает изогнутый кусок пластилина. -- Говорят, за ноги Пластилиновых Творений дорого платят в музее Сгоревших Свечей. ]],function() - cautious(1); - take('clay_leg'); - walk('police'); - end), -'eradication_cont'); - -put(option(nil, 'Быстро перепрыгнуть через заросли', [[ Разбежавшись, вы перепрыгиваете заросли и приземляетесь на пороге дома. Похоже, хозяйке придётся упражняться в прыжках, но хотя бы у неё появились шансы здесь жить.^^ - -- Спасибо! Вот вам за труды. -- Женщина протягивает изогнутый кусок пластилина. -- Говорят, за ноги Пластилиновых Творений дорого платят в музее Сгоревших Свечей. ]],function() - bold(1); - take('clay_leg'); - walk('police'); - end), -'eradication_cont'); - -clay_leg = obj { - nam = 'пластилиновая нога', - inv = 'Нога Пластилинового Творения.' -} - --- абсолютно бесполезная строка -put(option('pl._connections > 5', 'Посетить тату-салон Чернильного Ткача', nil, nil)); - -put(option('pl._connections > 0', 'Сесть на поезд домой', nil, "walk('endgame')")); - -endgame = room { - nam = 'Конец игры', - dsc = [[Ваше время в этом мрачном городе закончено, и вы уезжаете на старом поезде, всё ещё слишком чужой для того, чтобы остаться.^^]]..txtc('КОНЕЦ'), -} diff --git a/main.lua b/main.lua index 1713772..adc3985 100644 --- a/main.lua +++ b/main.lua @@ -1,14 +1,89 @@ -- $Name: Шестой город$ +-- $Name(en): Sixth city$ -- Игра требует Lua 5.1+ instead_version "1.9.1" +dofile('choice.lua'); dofile("init.lua"); +function load_mo_file(mo_file) + -------------------------------- + -- open file and read data + -------------------------------- + local fd,err=io.open(mo_file,"rb") + if not fd then return nil,err end + local mo_data=fd:read("*all") + fd:close() + + -------------------------------- + -- precache some functions + -------------------------------- + local byte=string.byte + local sub=string.sub + + -------------------------------- + -- check format + -------------------------------- + local peek_long --localize + local magic=sub(mo_data,1,4) + -- intel magic 0xde120495 + if magic=="\222\018\004\149" then + peek_long=function(offs) + local a,b,c,d=byte(mo_data,offs+1,offs+4) + return ((d*256+c)*256+b)*256+a + end + -- motorola magic = 0x950412de + elseif magic=="\149\004\018\222" then + peek_long=function(offs) + local a,b,c,d=byte(mo_data,offs+1,offs+4) + return ((a*256+b)*256+c)*256+d + end + else + return nil,"no valid mo-file" + end + + -------------------------------- + -- version + -------------------------------- + local V=peek_long(4) + if V~=0 then + return nul,"unsupported version" + end + + ------------------------------ + -- get number of offsets of table + ------------------------------ + local N,O,T=peek_long(8),peek_long(12),peek_long(16) + ------------------------------ + -- traverse and get strings + ------------------------------ + local hash={} + for nstr=1,N do + local ol,oo=peek_long(O),peek_long(O+4) O=O+8 + local tl,to=peek_long(T),peek_long(T+4) T=T+8 + hash[sub(mo_data,oo+1,oo+ol)]=sub(mo_data,to+1,to+tl) + end + return function(text) + return hash[text] or text + end +end + +if not LANG then + LANG = "en" +end + +if LANG == 'en' then + __ = load_mo_file('en.mo'); +else + __ = function(text) + return text; + end; +end + main = choice{ - nam = 'Шестой город', - dsc = [[ - Облака никогда не рассеиваются, они могут только становиться светлее. Вы стоите на круглой площади перед мрачным памятником, откуда начинается извилистый лабиринт улиц Шестого города. Невысокие дома окружают вас со всех сторон, скрываясь в тумане.^^ - Потёртый буклет, который вы нашли в мусорном баке возде гостиницы, предлагает несколько интересных занятий для "гостей города Н." - ]], + nam = __('Шестой город'), + dsc = __([[Облака никогда не рассеиваются, они могут только становиться светлее. Вы стоите на круглой площади перед мрачным памятником, откуда начинается извилистый лабиринт улиц Шестого города. Невысокие дома окружают вас со всех сторон, скрываясь в тумане.^^ + Потёртый буклет, который вы нашли в мусорном баке возле гостиницы, предлагает несколько интересных занятий для "гостей города Н."]]), obj = {}, }; -dofile("lowlevel.lua"); + +dofile("game.lua");