911 lines
27 KiB
Lua
911 lines
27 KiB
Lua
mywear = obj {
|
||
nam = '棉袄',
|
||
dsc = function(s)
|
||
if here() == stolcorridor then
|
||
local st='.';
|
||
if not have('gun') then
|
||
st = ',我的猎枪就藏在它里面。';
|
||
end
|
||
return '架子上还有我的棉袄'..st;
|
||
else
|
||
return '松木门的钉子上挂着我的{棉袄}。';
|
||
end
|
||
end,
|
||
inv = '现在是冬天,但我穿着暖和的棉袄。',
|
||
tak = function(s)
|
||
if here() == stolcorridor then
|
||
if have('alienwear') then
|
||
return '我已经穿好衣服了……如果我把棉袄也带上,会显得很可疑……', false;
|
||
end
|
||
if me()._walked then
|
||
me()._walked = false;
|
||
inv():add('gun');
|
||
return '但我的棉袄是最棒的!';
|
||
end
|
||
return '那就太显眼了……', false;
|
||
else
|
||
return '我从钉子上取下外套。';
|
||
end
|
||
end,
|
||
use = function(s, o)
|
||
if o == 'guy' then
|
||
return '在短暂的耽搁之后,你们交换了外套……';
|
||
end
|
||
end
|
||
};
|
||
|
||
money = obj {
|
||
nam = '钱',
|
||
inv = '大钱就是大祸……幸好我没什么钱……',
|
||
use = function(s, w)
|
||
if w == 'shopman' then
|
||
if shopman._wantmoney then
|
||
shopman._wantmoney = false;
|
||
return '我付钱给弗拉基米尔。';
|
||
end
|
||
return '我不想无缘无故付钱……';
|
||
end
|
||
end
|
||
};
|
||
|
||
mybed = obj {
|
||
nam = '床',
|
||
dsc = '窗边有一张{床}。',
|
||
act = '现在没功夫睡觉。',
|
||
};
|
||
|
||
mytable = obj {
|
||
nam = '桌子',
|
||
dsc = '左边角落里有一张带抽屉的橡木{桌子}。',
|
||
act = function()
|
||
if not have(money) then
|
||
take('money');
|
||
return '我在抽屉里翻了翻,找到了些钱。';
|
||
end
|
||
return '桌子……我自己做的。';
|
||
end,
|
||
};
|
||
|
||
foto = obj {
|
||
nam = '照片',
|
||
dsc = '桌子上有一张镶框{照片}。',
|
||
tak = '我拿起照片。',
|
||
inv = '照片里是我和我的 Barsik。',
|
||
};
|
||
|
||
gun = obj {
|
||
nam = '猎枪',
|
||
dsc = '小屋右边的角落里有一把{猎枪}。',
|
||
tak = '我拿起猎枪,把它挂在背后。',
|
||
inv = function(s)
|
||
local st = '';
|
||
if s._obrez then
|
||
st = ' 顺便一提,现在是锉短的猎枪了。';
|
||
if s._hidden then
|
||
st = st..' 它藏在我衣服里。';
|
||
end
|
||
end
|
||
if s._loaded then
|
||
return '猎枪上膛了……'..st;
|
||
else
|
||
return '猎枪没有子弹…… 我很少在森林里用到它……'..st;
|
||
end
|
||
end,
|
||
use = function(s, w)
|
||
if not s._hidden then
|
||
if w == 'mywear' or w == 'alienwear' then
|
||
if not s._obrez then
|
||
return '我想把猎枪藏在衣服里,但它太长了。'
|
||
else
|
||
s._hidden = true;
|
||
return '现在我可以把锉短的猎枪藏在衣服里了!';
|
||
end
|
||
end
|
||
end
|
||
if not s._loaded then
|
||
return '没装子弹……', false;
|
||
end
|
||
if w == 'guard' then
|
||
return '是的,他们是无赖,但首先他们也是人;其次这样做也无济于事……', false;
|
||
end
|
||
if w == 'wire' then
|
||
return '太近了…… 我需要像剪线钳这样的东西……', false;
|
||
end
|
||
if w == 'cam' and not cam._broken then
|
||
cam._broken = true;
|
||
s._loaded = false;
|
||
return '我瞄准摄像头,双管开火…… 沉闷的枪声被阵阵风雪淹没……';
|
||
end
|
||
if w == 'mycat' or w == 'shopman' or w == 'guy' then
|
||
return '我不想这样……', false;
|
||
end
|
||
end
|
||
};
|
||
|
||
fireplace = obj {
|
||
nam = '壁炉',
|
||
dsc = '墙边有一个{壁炉},火焰不均匀地映照着小屋。',
|
||
act = '我喜欢在壁炉旁度过漫长的冬夜。',
|
||
};
|
||
|
||
mycat = obj {
|
||
nam = 'Barsik',
|
||
_lflast = 0,
|
||
lf = {
|
||
[1] = 'Barsik 在我怀里动来动去。',
|
||
[2] = 'Barsik 从我怀里探出头。',
|
||
[3] = 'Barsik 在我怀里打呼噜。',
|
||
[4] = 'Barsik 在我怀里发抖。.',
|
||
[5] = '我感受到 Barsik 在我怀里的温暖。',
|
||
[6] = 'Barsik 从我怀里探出头来,四处张望。',
|
||
},
|
||
life = function(s)
|
||
local r = rnd(6);
|
||
if r > 2 then
|
||
return;
|
||
end
|
||
r = rnd(6);
|
||
while (s._lflast == r) do
|
||
r = rnd(6);
|
||
end
|
||
s._lflast = r;
|
||
return s.lf[r];
|
||
end,
|
||
desc = { [1] = '我的猫{Barsik}正舒适地蜷缩成一团睡在壁炉边。',
|
||
[2] = '{Barsik}机敏地扫视着小屋周围。',
|
||
[3] = '{Barsik}就坐在我旁边的座位上。',
|
||
[4] = '{Barsik}正在垃圾桶旁研究着什么……',
|
||
[5] = '{Barsik}在我脚边蹭来蹭去。',
|
||
},
|
||
inv = 'Barsik在我的怀里……可怜的小猫咪……我会救你的,还有整个世界!!!',
|
||
dsc = function(s)
|
||
local state
|
||
if here() == home then
|
||
state = 1;
|
||
elseif here() == forest then
|
||
state = 2;
|
||
elseif here() == inmycar then
|
||
state = 3;
|
||
elseif here() == village then
|
||
state = 4;
|
||
elseif here() == escape3 then
|
||
state = 5;
|
||
end
|
||
return s.desc[state];
|
||
end,
|
||
act = function(s)
|
||
if here() == escape3 then
|
||
take('mycat');
|
||
lifeon('mycat');
|
||
return '我把{Barsik}放进了我的怀里。';
|
||
end
|
||
return '我挠了挠Barsik的耳后……';
|
||
end,
|
||
};
|
||
|
||
inmycar = room {
|
||
nam = '在车里',
|
||
dsc = '我坐在我的皮卡车里,这辆车像匹任劳任怨的老马一样……',
|
||
pic = 'gfx/incar.png',
|
||
way = {'forest', 'village'},
|
||
enter = function(s, f)
|
||
local s = '我打开车门';
|
||
if have('mybox') then
|
||
return '我不能带着这个箱子一起进驾驶舱……', false;
|
||
end
|
||
if seen('mycat') then
|
||
s = s..',Barsik跳进车里。'
|
||
move('mycat','inmycar');
|
||
elseif not me()._know_where then
|
||
return '不……我必须先找到Barsik!', false
|
||
end
|
||
if f == 'guarddlg' then
|
||
return ' 嗯……我得想个办法……';
|
||
end
|
||
return cat(s, ' 好,是时候出发了……');
|
||
end,
|
||
exit = function(s, t)
|
||
local s=''
|
||
if seen('mycat') then
|
||
s = 'Barsik第一个跳出车外。';
|
||
move('mycat',t);
|
||
end
|
||
if ref(t) ~= from() then
|
||
from().obj:del('mycar');
|
||
move('mycar', t);
|
||
return [[
|
||
车子勉勉强强地发动起来……经过漫长的车程,我终于得以关掉引擎并打开车门……]]..s;
|
||
end
|
||
return '不……我觉得好像忘了什么……'..s;
|
||
end
|
||
};
|
||
|
||
mycar = obj {
|
||
nam = '我的车',
|
||
desc = {
|
||
[1] = '在小屋前停着我的老旧丰田{皮卡}。',
|
||
[2] = '停车场上有我的老旧{皮卡}。',
|
||
[3] = '在检查站旁边停着我的{皮卡}。',
|
||
[4] = '在墙角后面停着我的{皮卡}。',
|
||
},
|
||
dsc = function(s)
|
||
local state
|
||
if here() == forest then
|
||
state = 1;
|
||
elseif here() == village then
|
||
state = 2;
|
||
elseif here() == inst then
|
||
state = 3;
|
||
elseif here() == backwall then
|
||
state = 4;
|
||
end
|
||
return s.desc[state];
|
||
end,
|
||
act = function(s)
|
||
return walk('inmycar');
|
||
end
|
||
};
|
||
|
||
iso = obj {
|
||
nam = '绝缘胶带',
|
||
inv = '一卷蓝色的绝缘胶带……',
|
||
use = function(s, o)
|
||
if o == 'trap' and not trap._iso then
|
||
trap._iso = true;
|
||
return '我用胶带将陷阱绝缘。';
|
||
end
|
||
if o == 'wire' then
|
||
return '我为什么要这么做?反正我也穿不过铁丝网。何况我也没法把它绝缘——我会触电的!';
|
||
end
|
||
end
|
||
};
|
||
|
||
trap = obj {
|
||
nam = '陷阱',
|
||
dsc = '雪地里埋伏着一个铁{陷阱}。', -- !!!!
|
||
tak = '该死的偷猎者!我要把陷阱拆走。',
|
||
inv = function(s)
|
||
if s._salo then
|
||
return '大捕鼠夹,还是绝缘的!';
|
||
end
|
||
if s._iso then
|
||
return '铁的,非常锋利,还用胶带绝缘了。';
|
||
else
|
||
return '铁的,非常锋利。';
|
||
end
|
||
end,
|
||
use = function(s, o)
|
||
if o == 'wire' and not wire._broken then
|
||
if not s._iso then
|
||
return '陷阱是金属的,我会被电击,然后……就没有然后了……';
|
||
end
|
||
wire._broken = true;
|
||
onwall.way:add('eside');
|
||
return '我用陷阱夹住并切割铁丝网,如我所料,铁丝网被夹断了!';
|
||
end
|
||
end
|
||
};
|
||
|
||
deepforest = room {
|
||
i = 0,
|
||
nam = '森林深处',
|
||
pic = 'gfx/deepforest.png',
|
||
dsc = function(s)
|
||
local st = '我到了森林深处……';
|
||
if s._i == 1 then
|
||
return st..'松树和云杉……没什么别的……';
|
||
elseif s._i == 2 then
|
||
return st..'美丽的白桦树——小心别迷了路……';
|
||
elseif s._i == 3 then
|
||
return st..'茂密的丛林……完全搞不清我是不是迷路了……';
|
||
elseif s._i == 4 then
|
||
return st..'美丽的湖泊……我是不是该回去了?';
|
||
elseif s._i == 5 then
|
||
s._trap = true;
|
||
return st..'一些灌木丛……灌木丛……还是灌木丛……';
|
||
else
|
||
return st..'树桩……一根多么漂亮的树桩……';
|
||
end
|
||
end,
|
||
enter = function(s,f)
|
||
if f == 'forest' then
|
||
s._trap = false;
|
||
end
|
||
s._lasti = s._i;
|
||
while (s._i == s._lasti) do
|
||
s._i = rnd(6);
|
||
end
|
||
s.obj:del('trap');
|
||
s.way:del('forest');
|
||
if s._i == 5 and not inv():srch('trap') then
|
||
s.obj:add('trap');
|
||
end
|
||
if s._i == 3 and s._trap then
|
||
s.way:add('forest');
|
||
end
|
||
if f == 'forest' and inv():srch('trap') then
|
||
return [[我已经在森林里散过步了谢谢。]], false;
|
||
end
|
||
if f == 'deepforest' then
|
||
return '嗯……我们来瞧瞧……';
|
||
end
|
||
return [[走进这片茂密的森林,步行?
|
||
嗯……为什么不呢——毕竟这是我的工作……我得赶走偷猎者……]], true;
|
||
--Я пол часа бродил по лесу, когда наткнулся на капкан...
|
||
--Проклятые браконьеры! Я взял капкан с собой.]], false;
|
||
end,
|
||
way = {'deepforest'},
|
||
};
|
||
|
||
road = room {
|
||
nam = '马路',
|
||
enter = function()
|
||
return '步行?还事饶了我罢……', false;
|
||
end
|
||
};
|
||
|
||
forest = room {
|
||
nam = '小屋前',
|
||
pic = 'gfx/forest.png',
|
||
dsc = [[
|
||
小屋前的一切被积雪覆盖着。野树林环绕着小屋。通往小镇的道路上也残存着积雪。]],
|
||
way = { 'home', 'deepforest', 'road' },
|
||
obj = { 'mycar' },
|
||
};
|
||
|
||
home = room {
|
||
nam = '小屋',
|
||
pic = function(s)
|
||
if not seen('mycat') then
|
||
return "gfx/house-empty.png"
|
||
end
|
||
return "gfx/house.png";
|
||
end,
|
||
dsc = [[
|
||
我在这间小屋里度过了10年。10年前我亲手盖的这座房子。屋内有些狭窄,但很舒适。]],
|
||
obj = { 'fireplace', 'mytable', 'foto', 'mycat', 'gun',
|
||
vobj(1,'window', '小屋只有一扇{窗户}。'),
|
||
'mybed', 'mywear' },
|
||
way = { 'forest' },
|
||
act = function(s,o)
|
||
if o == 1 then
|
||
return '外面的一切都披上了一层雪白的颜色……';
|
||
end
|
||
end,
|
||
exit = function()
|
||
if not have('mywear') then
|
||
return '外面很冷……不穿棉袄我可不出去。', false
|
||
end
|
||
if seen(mycat) then
|
||
move('mycat','forest');
|
||
return [[
|
||
当我离开小屋时,Barsik突然醒了,扑到我脚边。我抚摸着他的耳朵。“要跟我一起走吗?”
|
||
]]
|
||
end
|
||
end
|
||
};
|
||
---------------- here village begins
|
||
truck = obj {
|
||
nam = '黑色高级车',
|
||
dsc = '有辆茶色玻璃的{黑色高级车}停在商店旁边。',
|
||
act = '嗯……其实是辆小货车……车体还装了甲,从车轮负载可以看出来……',
|
||
};
|
||
|
||
guydlg = dlg {
|
||
pic = 'gfx/guy.png',
|
||
nam = '和流浪汉的对话',
|
||
dsc = '我朝他走去……他是一个戴着破帽子穿着破棉袄的矮个子——用匆忙的眼神回头看了看我。',
|
||
obj = {
|
||
[1] = phr('嗨!今儿真冷,是吧?', '确实……有点……'),
|
||
[2] = phr('你为什么流落街头?',
|
||
[[我在为博士学位而努力……写一篇物质结构方面的论文……但是……我的大脑累坏了……我试图平静下来,然后……我就在这儿了……]]),
|
||
[3] = phr('你叫什么名字?', '爱德华……'),
|
||
[4] = _phr('我刚才离开的时候,你身边有只猫……它去哪了?', '嗯……', 'pon(5)'),
|
||
[5] = _phr('是的……一只小猫,一只普通的、在垃圾桶旁边闲逛的猫。', '所以那是你的猫么?嗯……', 'pon(6)');
|
||
[6] = _phr('对……那是我的Barsik!快告诉我!',
|
||
'……嗯……好像有个人把它带走了…… \n —— 我的背后传来一阵寒意……', 'pon(7)'),
|
||
[7] = _phr('哪儿,他去哪了?', '抱歉,老兄,我没注意……', 'shopdlg:pon(4); pon(8);'),
|
||
[8] = phr('好吧……没关系……', '……', 'pon(8); back()'),
|
||
},
|
||
exit = function()
|
||
pon(1);
|
||
return '他转身离开我,又开始在垃圾桶中翻找……';
|
||
end
|
||
};
|
||
|
||
guy = obj {
|
||
nam = '流浪汉',
|
||
dsc = '一个{流浪汉}正在垃圾桶里翻找着什么。',
|
||
act = function()
|
||
return walk('guydlg');
|
||
end,
|
||
used = function(s, w)
|
||
if w == 'money' then
|
||
return [[
|
||
我走近他,拿出来一些钱给他……“我不需要其他人的钱……”他说。]];
|
||
else
|
||
return '他要这个干什么呢?';
|
||
end
|
||
end,
|
||
};
|
||
|
||
nomoney = function()
|
||
pon(1,2,3,4,5);
|
||
shopdlg:pon(2);
|
||
return cat('这时我突然想起来,我身上压根没带钱,一点都没带……^',back());
|
||
end
|
||
|
||
ifmoney ='if not have("money") then return nomoney(); end; shopman._wantmoney = true; ';
|
||
|
||
dshells = obj {
|
||
nam = '弹壳',
|
||
dsc = function(s)
|
||
-- Note for translators:
|
||
-- this block picks the appropriate plural form
|
||
-- for “shells” for a given numeral. Since English has
|
||
-- only 1 form, I commented it out.
|
||
-- Uncomment and use form-number combinations
|
||
-- appropriate for your language
|
||
-- if here()._dshells > 4 then
|
||
return '我脚下有'..here()._dshells..'枚猎枪{弹壳}……';
|
||
-- else
|
||
-- return 'Under my feet there are '..here()._dshells..' empty shotgun {shells}...';
|
||
-- end
|
||
end,
|
||
act = '这是我射击留下的弹壳……我不再需要它们了……';
|
||
};
|
||
|
||
function dropshells()
|
||
if here() == deepforest then
|
||
return;
|
||
end
|
||
if not here()._dshells then
|
||
here()._dshells = 2;
|
||
else
|
||
here()._dshells = here()._dshells + 2;
|
||
end
|
||
here().obj:add('dshells');
|
||
end
|
||
|
||
shells = obj {
|
||
nam = '子弹',
|
||
inv = '猎枪子弹。我很少用到,通常是用来对付偷猎者的。',
|
||
use = function(s, on)
|
||
if on == 'gun' then
|
||
if gun._loaded then
|
||
return '已经装过弹了……';
|
||
end
|
||
if gun._loaded == false then
|
||
gun._loaded = true;
|
||
dropshells();
|
||
return '我打开弹匣,抛出两枚弹壳,重新装入子弹。';
|
||
end
|
||
gun._loaded = true;
|
||
return '我拿出两枚子弹,装入猎枪的双管……';
|
||
end
|
||
end
|
||
};
|
||
|
||
news = obj {
|
||
nam = '报纸',
|
||
inv = [[
|
||
最新报纸……“位于泰加林中新近建立的量子力学研究所强烈否认其与任何异常事件的联系”……嗯……]],
|
||
used = function(s, w)
|
||
if w == 'poroh' then
|
||
if have('trut') then
|
||
return '我已经有一个引信了。';
|
||
end
|
||
inv():add('trut');
|
||
inv():del('poroh');
|
||
return '我撕下一片报纸,倒上了火药……';
|
||
end
|
||
end,
|
||
};
|
||
|
||
hamb = obj {
|
||
nam = '汉堡包',
|
||
inv = function()
|
||
inv():del('hamb');
|
||
return '我吃了点零食。垃圾食品……';
|
||
end
|
||
};
|
||
|
||
zerno = obj {
|
||
nam = '谷物',
|
||
inv = '就是一些荞麦,荞麦粒……',
|
||
};
|
||
|
||
shop2 = dlg {
|
||
nam = 'buy',
|
||
pic = 'gfx/shopbuy.png',
|
||
obj = {
|
||
[1] = phr('猎枪子弹……我需要弹药……', '没问题……价格照旧', ifmoney..'inv():add("shells")'),
|
||
[2] = phr('谷物……', '好……', ifmoney..'inv():add("zerno")'),
|
||
[3] = phr('和一个汉堡包……', '行……', ifmoney..'inv():add("hamb")'),
|
||
[4] = phr('新报纸……', '当然……', ifmoney..'inv():add("news")'),
|
||
[5] = phr('一卷绝缘胶带……', '好的,这儿呢。', ifmoney..'inv():add("iso")'),
|
||
[6] = phr('没别的了……', '如你所愿……', 'pon(6); back()'),
|
||
[7] = _phr('我还需要梯子和一把钢丝钳……', '抱歉,我这儿没这些东西——弗拉基米尔摇了摇头'),
|
||
},
|
||
exit = function(s)
|
||
if have('news') then
|
||
s.obj[4]:disable();
|
||
end
|
||
end
|
||
};
|
||
|
||
shopdlg = dlg {
|
||
nam = '与售货员交谈',
|
||
pic = 'gfx/shopman.png',
|
||
dsc = '小眼睛用油腻的目光盯着我。',
|
||
obj = {
|
||
[1] = phr('你好,弗拉基米尔!近来可好?', '你好,'..me().nam..'……我这儿一般般……弗拉基米尔狡猾地笑了笑。', 'pon(2)'),
|
||
[2] = _phr('我想买点东西……', '好的……我们来瞧瞧——您需要什么?', 'pon(2); return walk("shop2")'),
|
||
[3] = phr('拜拜……', '耶……祝你好运!', 'pon(3); return back();'),
|
||
[4] = _phr('刚才有一个人在这儿——他是谁?', '嗯?——弗拉基米尔的细眉毛微微扬起……','pon(5)'),
|
||
[5] = _phr('由于某些缘故,他带走了我的猫……也许以为它是流浪猫……那个穿灰色外套的男人是谁?',
|
||
[[
|
||
Actually, he's some boss... - Vladimir scratches his unshaved chin. — In that new institute, which has been built in our backwoods a year ago...
|
||
— Vladimir's pince-nez twitched as he spoke — he often comes to our shop,
|
||
doesn't like crowds — those physicists — you know... Odd bunch, — Vladimir shrugged...]],'pon(6)'),
|
||
[6] = _phr('Where is this institute located?',
|
||
'Kilometer marker 127... But well, you know — Vladimir lowered his voice — there are rumours about his institute...', 'me()._know_where = true; inmycar.way:add("inst");pon(7)'),
|
||
[7] = _phr('I\'m just going to get back my cat...', 'Take care... If I was in you shoes... — Vladimir shakes his head. — By the way, I think his name is Belin. I\'ve seen his credit card... Even though, as you know, I don\'t accept them — Vladimir moved his lips, his monocle stirred slyly'),
|
||
},
|
||
};
|
||
|
||
shopman = obj {
|
||
nam = 'salesman',
|
||
dsc = 'There\'s a {salesman} behind the counter. His wide face with stubble is complemented by a monocle.',
|
||
act = function()
|
||
return walk('shopdlg');
|
||
end
|
||
};
|
||
|
||
shop = room {
|
||
nam = 'shop',
|
||
pic = 'gfx/inshop.png',
|
||
enter = function(s, f)
|
||
if village.obj:look('truck') then
|
||
village.obj:del('truck');
|
||
village.obj:del('mycat');
|
||
return [[
|
||
When I entered the shop, I almost ran into an unpleasant man in a grey coat and broad-brimmed hat... He apologized in a sort of hissing voice and feighned raising his hat... White teeth flashed from under the brim... When I reached the counter, I heard the engine starting.]];
|
||
end
|
||
end,
|
||
act = function(s,w)
|
||
if w == 1 then
|
||
return 'There\'s only my car left in the parking lot.';
|
||
end
|
||
end,
|
||
dsc = [[
|
||
The store is somewhat unusual... Here you can find ironware, food, even ammunition... No wonder, since it's the only store in a 100 km area...]],
|
||
way = { 'village' },
|
||
obj = {'shopman',vobj(1, 'окно', 'Through the {window} the parking lot is visible.') },
|
||
exit = function(s, t)
|
||
if t ~= 'village' then
|
||
return;
|
||
end
|
||
if shopman._wantmoney then
|
||
return 'I was going to step outside, when I was stopped by Vlsdimir\'s quiet semicough... Of course, I forgot to pay...', false;
|
||
end
|
||
if not have('news') then
|
||
shop2.obj[4]:disable();
|
||
inv():add('news');
|
||
return 'I was going to leave, when Vladimir\'s voice stopped me. — Take the fresh newspaper — it\'s free for you. I walk back, take the paper and leave.';
|
||
end
|
||
end
|
||
};
|
||
|
||
carbox = obj {
|
||
_num = 0,
|
||
nam = function(s)
|
||
if s._num > 1 then
|
||
return 'boxes in the car';
|
||
else
|
||
return 'a box in the car';
|
||
end
|
||
end,
|
||
act = function(s)
|
||
if inv():srch('mybox') then
|
||
return 'I\'ve already got a box in my hands...';
|
||
end
|
||
s._num = s._num - 1;
|
||
if s._num == 0 then
|
||
mycar.obj:del('carbox');
|
||
end
|
||
take('mybox');
|
||
return 'I took a box from the car.';
|
||
end,
|
||
dsc = function(s)
|
||
if s._num == 0 then
|
||
return;
|
||
elseif s._num == 1 then
|
||
return 'There is one {box} in the cargo body of my car.';
|
||
-- Again not needed, since "boxes" stays the same for all numerals
|
||
-- elseif s._num < 5 then
|
||
-- return 'There are '..tostring(s._num)..' {boxes} in the cargo body of my car.';
|
||
else
|
||
return 'There are '..tostring(s._num)..' {boxes} in the cargo body of my car..';
|
||
end
|
||
end,
|
||
};
|
||
|
||
mybox = obj {
|
||
nam = 'a box',
|
||
inv = 'I am holding a wooden box... A soundly built thing! Might come in handy.',
|
||
use = function(s, o)
|
||
if o == 'boxes' then
|
||
inv():del('mybox');
|
||
return 'I put the box back...';
|
||
end
|
||
if o == 'mycar' then
|
||
inv():del('mybox');
|
||
mycar.obj:add('carbox');
|
||
carbox._num = carbox._num + 1;
|
||
return 'I put the box in the cargo body of my car...';
|
||
end
|
||
if o == 'ewall' or o == 'wboxes' then
|
||
if not cam._broken then
|
||
return 'The camera won\'t let me...';
|
||
end
|
||
if wboxes._num > 7 then
|
||
return "It's enough I think..."
|
||
end
|
||
inv():del('mybox');
|
||
ewall.obj:add('wboxes');
|
||
wboxes._num = wboxes._num + 1;
|
||
if wboxes._num > 1 then
|
||
return 'I put another box on top of the previous one...';
|
||
end
|
||
return 'I put the box next to the wall...';
|
||
end
|
||
end
|
||
};
|
||
|
||
boxes = obj {
|
||
nam = 'ящики',
|
||
desc = {
|
||
[1] = 'Near the parking lot there are many empty wooden {boxes} that once held tins.',
|
||
},
|
||
dsc = function(s)
|
||
local state = 1;
|
||
return s.desc[state];
|
||
end,
|
||
act = function(s, t)
|
||
if carbox._num >= 5 then
|
||
return 'Maybe I\'ve got enough boxes already?...';
|
||
end
|
||
if inv():srch('mybox') then
|
||
return 'I\'m holding one box already...';
|
||
end
|
||
take('mybox');
|
||
return 'I took a box.';
|
||
end,
|
||
};
|
||
|
||
village = room {
|
||
nam = 'parking lot in front of the store',
|
||
dsc = 'A familiar place in front of the store. The parking lot. All covered with snow...',
|
||
pic = 'gfx/shop.png',
|
||
act = function(s, w)
|
||
if w == 1 then
|
||
return 'Ordinary bins... White snow covers the garbage...';
|
||
end
|
||
end,
|
||
exit = function(s, t)
|
||
if t == 'shop' and seen('mycat') then
|
||
return 'I called Barsik, but he was too busy with the dumpster... OK, it won\'t take long...';
|
||
end
|
||
end,
|
||
enter = function(s, f)
|
||
if ewall:srch('wboxes') and wboxes._num == 1 then
|
||
ewall.obj:del('wboxes');
|
||
ewall._stolen = true;
|
||
wboxes._num = 0;
|
||
end
|
||
if f == 'shop' and not s._ogh then
|
||
s._ogh = true;
|
||
set_music("mus/revel.s3m");
|
||
guydlg:pon(4);
|
||
guydlg:poff(8);
|
||
return 'I glanced over the parking lot and called — Barsik! Barsik! — Where did my cat disappear?';
|
||
end
|
||
end,
|
||
way = { 'road', 'shop' },
|
||
obj = { 'truck', vobj(1,'bins', 'Rusty dumpster {bins} are covered with snow.'), 'guy','boxes' },
|
||
};
|
||
----------- trying to go over wall
|
||
function guardreact()
|
||
pon(7);
|
||
if inst:srch('mycar') then
|
||
inst.obj:del('mycar');
|
||
inmycar.way:add('backwall');
|
||
inst.way:add('backwall');
|
||
return cat([[Four people with submachine guns escorted me to my car. I had to start the engine and drive away from the institute. I drove a dozen kilometers before the military jeep with the seeing-off guards disappeared from the rear-view mirror... ]], walk('inmycar'));
|
||
end
|
||
return cat([[Four armed people throw me out of the check-point.^^]], walk('inst'));
|
||
end
|
||
|
||
guarddlg = dlg {
|
||
nam = 'guard',
|
||
pic = 'gfx/guard.png',
|
||
dsc = [[I can see the angular face of the guard. His eyes look archly, but corners of his mouth are turned down, discouraging any conversation...]],
|
||
obj = {
|
||
[1] = phr('One of the institute staff took my cat by mistake — I need to get in.','— Show the pass...', 'poff(2); pon(3);'),
|
||
[2] = phr('I forgot my pass — may I come in?','— No...', 'poff(1); pon(3);'),
|
||
[3] = _phr('Do you know Belin? He\'s got my cat — I need to take it...', '— No pass?', 'pon(4)'),
|
||
[4] = _phr('I just came to get back my cat! Give me Belin\'s number.',
|
||
[[The guard's eyes change their color. The corners of his lips move up. — Mister, as I understand you have no pass. Walk out of here while you still can...]], 'pon(5, 6)'),
|
||
[5] = _phr('I\'m gonna hit your face...', 'The guard\'s hand moves to his submachine gun. ', 'poff(6); return guardreact();'),
|
||
[6] = _phr('OK, I\'m leaving...', '— Don\'t hurry, — the guard no longer hides his smile — I don\'t like you...','poff(5); return guardreact()'),
|
||
[7] = _phr('Now I\'m gonna shotgun you all...', 'This time the guard doesn\'t even answer. His bloodshot eyes speak louder than any words.','return guardreact()'),
|
||
},
|
||
};
|
||
guard = obj {
|
||
nam = 'guards',
|
||
dsc = [[
|
||
There are {guards} in the kiosk. Looks like they are armed with Kalashnikov submachine guns.
|
||
]],
|
||
act = function(s)
|
||
return walk('guarddlg');
|
||
end,
|
||
};
|
||
kpp = room {
|
||
nam = 'checkpoint',
|
||
pic = 'gfx/kpp.png',
|
||
dsc = [[The checkpoint leaves no doubt that strangers are not welcome in the institute. Lift gate. Latticed kiosk. And silence.
|
||
]],
|
||
obj = { 'guard' },
|
||
way = { 'inst' }
|
||
};
|
||
inst = room {
|
||
nam = 'institute',
|
||
pic = 'gfx/inst.png',
|
||
dsc = [[
|
||
The building rises over the empty field of snow. Its sinister outline looks more like a jail rather than a research institute. There are railways behind the building. ]],
|
||
act = function(s, w)
|
||
if w == 1 then
|
||
return 'The wall is 5 meters high. Moreover, there is barbed wire on its top, and I suppose it\'s alive...';
|
||
end
|
||
if w == 2 then
|
||
return 'Yes, Vladimir was right... It\'s some sort of a military headquaters...';
|
||
end
|
||
if w == 3 then
|
||
return 'Yes — this looks like the van in which the man in gray coat took away my Barsik.';
|
||
end
|
||
end,
|
||
used = function(s, w, b)
|
||
if b == 'mybox' and w == 1 then
|
||
return 'I think the guards will notice me at once.';
|
||
end
|
||
if w == 2 and b == 'gun' and gun._loaded then
|
||
return 'I\'d get canned for that... Or just beaten... The guards are quite near.';
|
||
end
|
||
if w == 3 and b == 'gun' and gun._loaded then
|
||
return 'I need the cat, not destruction...';
|
||
end
|
||
end,
|
||
obj = {vobj(1, 'wall', 'The institute building is surrounded by a heavy concrete {wall}. There\'s a checkpoint at the centre.'),
|
||
vobj(2, 'cameras', 'Survelliance {cameras} watch the area from the towers.'),
|
||
vobj(3, 'van', 'Behind the gate I can see the black {van}.')},
|
||
way = { 'road', 'kpp' },
|
||
exit = function(s, t)
|
||
if have('mybox') and t ~= 'inmycar' then
|
||
return 'I won\'t walk around with the box...', false;
|
||
end
|
||
end,
|
||
};
|
||
|
||
cam = obj {
|
||
nam = 'surveillance camera',
|
||
dsc = function(s)
|
||
if not s._broken then
|
||
return 'One of the surveillance {cameras} isn\'t far from here. I press myself to the wall to stay unnoticed.';
|
||
end
|
||
return 'The shards of the surveillance {camera} are lying around. They\'re already dusted by snow.';
|
||
end,
|
||
act = function(s)
|
||
if not s._broken then
|
||
return 'Damned camera...';
|
||
end
|
||
return 'Ha... You\'ve had it coming, damned mechanism, hadn\'t you? I wonder when will the guards come...';
|
||
end,
|
||
};
|
||
|
||
wire = obj {
|
||
nam = 'barbed wire',
|
||
dsc = function(s)
|
||
if s._broken then
|
||
return 'I can see the shreds of barbed {wire}.';
|
||
end
|
||
return 'I can see barbed {wire}.';
|
||
end,
|
||
act = function(s)
|
||
if s._broken then
|
||
return 'Now it\'s safe! I can get inside...';
|
||
end
|
||
return 'What if it\'s alive?';
|
||
end,
|
||
};
|
||
|
||
onwall = room {
|
||
pic = 'gfx/onwall.png',
|
||
nam = 'on the wall',
|
||
dsc = 'I am standing atop the boxes, my head is on the wall top level. It\'s cold.',
|
||
enter = function(s)
|
||
if have('mybox') then
|
||
return 'I cannot climb the wall with a box in my hands.', false;
|
||
end
|
||
if wboxes._num < 5 then
|
||
return 'I try to climb the wall... But it\'s still to high...',false;
|
||
end
|
||
return 'I climb the wall over the boxes.';
|
||
end,
|
||
obj = { 'wire' },
|
||
way = { 'backwall' }
|
||
};
|
||
|
||
wboxes = obj {
|
||
_num = 0,
|
||
nam = function(s)
|
||
if (s._num > 1) then
|
||
return 'boxes by the wall';
|
||
end
|
||
return 'a box by the wall';
|
||
end,
|
||
act = function(s)
|
||
return walk('onwall');
|
||
end,
|
||
dsc = function(s)
|
||
if s._num == 0 then
|
||
return;
|
||
elseif s._num == 1 then
|
||
return 'There is one {box} by the wall.';
|
||
-- And again only one plural form
|
||
-- elseif s._num < 5 then
|
||
-- return 'There are '..tostring(s._num)..' {boxes}, stacked by the wall.';
|
||
else
|
||
return 'There are '..tostring(s._num)..' {boxes}, stacked by the wall.';
|
||
end
|
||
end,
|
||
};
|
||
|
||
ewall = obj {
|
||
nam = 'wall',
|
||
dsc = 'Here {the wall} is 4 meters high. The howling snowdrift tosses snowflakes to its bottom.',
|
||
act = function(s)
|
||
if not s._ladder then
|
||
s._ladder = true;
|
||
shop2:pon(7);
|
||
end
|
||
return 'Too high... I\'ll need a ladder.';
|
||
end
|
||
};
|
||
|
||
backwall = room {
|
||
pic = 'gfx/instback.png',
|
||
enter = function(s, f)
|
||
local st = '';
|
||
if ewall._stolen then
|
||
ewall._stolen = false;
|
||
st = 'Oho!!! Somebody has stolen my box!!!';
|
||
end
|
||
if f == 'inmycar' then
|
||
return 'Great... Looks like I managed to get here unnoticed...'..' '..st;
|
||
end
|
||
if f == 'onwall' then
|
||
return
|
||
end
|
||
return 'Rambling through the snowfield I got to the back wall.'..' '..st;
|
||
end,
|
||
nam = 'eastern wall of the institute',
|
||
dsc = 'I am at the back side of the institute.',
|
||
obj = { 'ewall', 'cam' },
|
||
way = { 'inst', },
|
||
exit = function(s, t)
|
||
if have('mybox') and t ~= 'inmycar' then
|
||
return 'I won\'t walk around with the box in my hands...', false;
|
||
end
|
||
end,
|
||
};
|