From d1388fc15380c83ab769df8c0ba6ffb2422a913d Mon Sep 17 00:00:00 2001
From: "p.kosyh"
Date: Thu, 19 Nov 2009 20:08:34 +0000
Subject: [PATCH] good bye cat
---
games/Makefile.windows | 8 +-
games/cat/ep1.lua | 908 ------------------
games/cat/ep2.lua | 1524 ------------------------------
games/cat/ep3.lua | 1639 ---------------------------------
games/cat/gfx/bholes.png | Bin 34961 -> 0 bytes
games/cat/gfx/cab.png | Bin 69054 -> 0 bytes
games/cat/gfx/chme3.png | Bin 44816 -> 0 bytes
games/cat/gfx/cor3.png | Bin 44702 -> 0 bytes
games/cat/gfx/cor4.png | Bin 32341 -> 0 bytes
games/cat/gfx/deepforest.png | Bin 91259 -> 0 bytes
games/cat/gfx/entrance.png | Bin 57787 -> 0 bytes
games/cat/gfx/eside.png | Bin 69446 -> 0 bytes
games/cat/gfx/esidee.png | Bin 78257 -> 0 bytes
games/cat/gfx/floor2.png | Bin 57344 -> 0 bytes
games/cat/gfx/floor3.png | Bin 44025 -> 0 bytes
games/cat/gfx/floor4.png | Bin 34207 -> 0 bytes
games/cat/gfx/floor5.png | Bin 56256 -> 0 bytes
games/cat/gfx/floor5e.png | Bin 62042 -> 0 bytes
games/cat/gfx/forest.png | Bin 93557 -> 0 bytes
games/cat/gfx/fromwin1.png | Bin 47042 -> 0 bytes
games/cat/gfx/fromwin2.png | Bin 37082 -> 0 bytes
games/cat/gfx/guard.png | Bin 47065 -> 0 bytes
games/cat/gfx/guard4.png | Bin 30316 -> 0 bytes
games/cat/gfx/guard42.png | Bin 37183 -> 0 bytes
games/cat/gfx/guy.png | Bin 42596 -> 0 bytes
games/cat/gfx/hall1.png | Bin 41123 -> 0 bytes
games/cat/gfx/hall2.png | Bin 43698 -> 0 bytes
games/cat/gfx/hall5.png | Bin 63064 -> 0 bytes
games/cat/gfx/handhoh.png | Bin 31687 -> 0 bytes
games/cat/gfx/house-empty.png | Bin 87746 -> 0 bytes
games/cat/gfx/house.png | Bin 88369 -> 0 bytes
games/cat/gfx/ilya.png | Bin 44426 -> 0 bytes
games/cat/gfx/incar.png | Bin 70912 -> 0 bytes
games/cat/gfx/inshop.png | Bin 93066 -> 0 bytes
games/cat/gfx/inst.png | Bin 59998 -> 0 bytes
games/cat/gfx/instback.png | Bin 39341 -> 0 bytes
games/cat/gfx/kitchen.png | Bin 57712 -> 0 bytes
games/cat/gfx/kitchencor.png | Bin 35605 -> 0 bytes
games/cat/gfx/kpp.png | Bin 68039 -> 0 bytes
games/cat/gfx/krysha.png | Bin 52231 -> 0 bytes
games/cat/gfx/ladder.png | Bin 53116 -> 0 bytes
games/cat/gfx/lection.png | Bin 41021 -> 0 bytes
games/cat/gfx/lection2.png | Bin 42362 -> 0 bytes
games/cat/gfx/lift.png | Bin 26704 -> 0 bytes
games/cat/gfx/manroom.png | Bin 41113 -> 0 bytes
games/cat/gfx/me.png | Bin 32600 -> 0 bytes
games/cat/gfx/meandgun.png | Bin 53451 -> 0 bytes
games/cat/gfx/nside.png | Bin 68612 -> 0 bytes
games/cat/gfx/onwall.png | Bin 60064 -> 0 bytes
games/cat/gfx/pman.png | Bin 38963 -> 0 bytes
games/cat/gfx/pmanb.png | Bin 37860 -> 0 bytes
games/cat/gfx/podnos.png | Bin 44290 -> 0 bytes
games/cat/gfx/povar.png | Bin 34582 -> 0 bytes
games/cat/gfx/prof2.png | Bin 24975 -> 0 bytes
games/cat/gfx/room4.png | Bin 50699 -> 0 bytes
games/cat/gfx/servers.png | Bin 91497 -> 0 bytes
games/cat/gfx/shooting.png | Bin 66427 -> 0 bytes
games/cat/gfx/shop.png | Bin 72653 -> 0 bytes
games/cat/gfx/shopbuy.png | Bin 44576 -> 0 bytes
games/cat/gfx/shopman.png | Bin 46726 -> 0 bytes
games/cat/gfx/sside.png | Bin 69079 -> 0 bytes
games/cat/gfx/sto.png | Bin 67341 -> 0 bytes
games/cat/gfx/sto2.png | Bin 69365 -> 0 bytes
games/cat/gfx/sto3.png | Bin 70468 -> 0 bytes
games/cat/gfx/thecat.png | Bin 60388 -> 0 bytes
games/cat/gfx/toil3.png | Bin 38164 -> 0 bytes
games/cat/gfx/toil4.png | Bin 25583 -> 0 bytes
games/cat/gfx/wside.png | Bin 48295 -> 0 bytes
games/cat/main.lua | 50 -
games/cat/mus/foot.mod | Bin 78096 -> 0 bytes
games/cat/mus/hispeed.s3m | Bin 213480 -> 0 bytes
games/cat/mus/hybrid.xm | Bin 51355 -> 0 bytes
games/cat/mus/ice.s3m | Bin 235521 -> 0 bytes
games/cat/mus/liberty.s3m | Bin 730632 -> 0 bytes
games/cat/mus/new.s3m | Bin 126076 -> 0 bytes
games/cat/mus/ofd.xm | Bin 803601 -> 0 bytes
games/cat/mus/revel.s3m | Bin 724288 -> 0 bytes
games/cat/mus/under.s3m | Bin 704472 -> 0 bytes
setup.iss | 4 +-
79 files changed, 3 insertions(+), 4130 deletions(-)
delete mode 100644 games/cat/ep1.lua
delete mode 100644 games/cat/ep2.lua
delete mode 100644 games/cat/ep3.lua
delete mode 100644 games/cat/gfx/bholes.png
delete mode 100644 games/cat/gfx/cab.png
delete mode 100644 games/cat/gfx/chme3.png
delete mode 100644 games/cat/gfx/cor3.png
delete mode 100644 games/cat/gfx/cor4.png
delete mode 100644 games/cat/gfx/deepforest.png
delete mode 100644 games/cat/gfx/entrance.png
delete mode 100644 games/cat/gfx/eside.png
delete mode 100644 games/cat/gfx/esidee.png
delete mode 100644 games/cat/gfx/floor2.png
delete mode 100644 games/cat/gfx/floor3.png
delete mode 100644 games/cat/gfx/floor4.png
delete mode 100644 games/cat/gfx/floor5.png
delete mode 100644 games/cat/gfx/floor5e.png
delete mode 100644 games/cat/gfx/forest.png
delete mode 100644 games/cat/gfx/fromwin1.png
delete mode 100644 games/cat/gfx/fromwin2.png
delete mode 100644 games/cat/gfx/guard.png
delete mode 100644 games/cat/gfx/guard4.png
delete mode 100644 games/cat/gfx/guard42.png
delete mode 100644 games/cat/gfx/guy.png
delete mode 100644 games/cat/gfx/hall1.png
delete mode 100644 games/cat/gfx/hall2.png
delete mode 100644 games/cat/gfx/hall5.png
delete mode 100644 games/cat/gfx/handhoh.png
delete mode 100644 games/cat/gfx/house-empty.png
delete mode 100644 games/cat/gfx/house.png
delete mode 100644 games/cat/gfx/ilya.png
delete mode 100644 games/cat/gfx/incar.png
delete mode 100644 games/cat/gfx/inshop.png
delete mode 100644 games/cat/gfx/inst.png
delete mode 100644 games/cat/gfx/instback.png
delete mode 100644 games/cat/gfx/kitchen.png
delete mode 100644 games/cat/gfx/kitchencor.png
delete mode 100644 games/cat/gfx/kpp.png
delete mode 100644 games/cat/gfx/krysha.png
delete mode 100644 games/cat/gfx/ladder.png
delete mode 100644 games/cat/gfx/lection.png
delete mode 100644 games/cat/gfx/lection2.png
delete mode 100644 games/cat/gfx/lift.png
delete mode 100644 games/cat/gfx/manroom.png
delete mode 100644 games/cat/gfx/me.png
delete mode 100644 games/cat/gfx/meandgun.png
delete mode 100644 games/cat/gfx/nside.png
delete mode 100644 games/cat/gfx/onwall.png
delete mode 100644 games/cat/gfx/pman.png
delete mode 100644 games/cat/gfx/pmanb.png
delete mode 100644 games/cat/gfx/podnos.png
delete mode 100644 games/cat/gfx/povar.png
delete mode 100644 games/cat/gfx/prof2.png
delete mode 100644 games/cat/gfx/room4.png
delete mode 100644 games/cat/gfx/servers.png
delete mode 100644 games/cat/gfx/shooting.png
delete mode 100644 games/cat/gfx/shop.png
delete mode 100644 games/cat/gfx/shopbuy.png
delete mode 100644 games/cat/gfx/shopman.png
delete mode 100644 games/cat/gfx/sside.png
delete mode 100644 games/cat/gfx/sto.png
delete mode 100644 games/cat/gfx/sto2.png
delete mode 100644 games/cat/gfx/sto3.png
delete mode 100644 games/cat/gfx/thecat.png
delete mode 100644 games/cat/gfx/toil3.png
delete mode 100644 games/cat/gfx/toil4.png
delete mode 100644 games/cat/gfx/wside.png
delete mode 100644 games/cat/main.lua
delete mode 100644 games/cat/mus/foot.mod
delete mode 100644 games/cat/mus/hispeed.s3m
delete mode 100644 games/cat/mus/hybrid.xm
delete mode 100644 games/cat/mus/ice.s3m
delete mode 100644 games/cat/mus/liberty.s3m
delete mode 100644 games/cat/mus/new.s3m
delete mode 100644 games/cat/mus/ofd.xm
delete mode 100644 games/cat/mus/revel.s3m
delete mode 100644 games/cat/mus/under.s3m
diff --git a/games/Makefile.windows b/games/Makefile.windows
index bc72710..e3a999a 100644
--- a/games/Makefile.windows
+++ b/games/Makefile.windows
@@ -1,13 +1,9 @@
all:
install:
- if not exist ..\bin\games\cat mkdir ..\bin\games\cat
- copy cat ..\bin\games\cat
- if not exist ..\bin\games\cat\gfx mkdir ..\bin\games\cat\gfx
- copy cat\gfx ..\bin\games\cat\gfx
- if not exist ..\bin\games\cat\mus mkdir ..\bin\games\cat\mus
- copy cat\mus ..\bin\games\cat\mus
if not exist ..\bin\games\tutorial2 mkdir ..\bin\games\tutorial2
copy tutorial2 ..\bin\games\tutorial2
if not exist ..\bin\games\tutorial2-en mkdir ..\bin\games\tutorial2-en
copy tutorial2-en ..\bin\games\tutorial2-en
+ if not exist ..\bin\games\tutorial2-es mkdir ..\bin\games\tutorial2-es
+ copy tutorial2-es ..\bin\games\tutorial2-es
clean:
diff --git a/games/cat/ep1.lua b/games/cat/ep1.lua
deleted file mode 100644
index 35a881b..0000000
--- a/games/cat/ep1.lua
+++ /dev/null
@@ -1,908 +0,0 @@
-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 = 'На этой фотографии изображены я и мой Барсик.',
-};
-
-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 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 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 == 'mycat' or w == 'shopman' or w == 'guy' then
- return 'Это не моя мысль...', false;
- end
- end
-};
-
-fireplace = obj {
- nam = 'камин',
- dsc = 'У стены стоит {камин}. Огоньки пламени неравномерно освещают хижину.',
- act = 'Мне нравится сидеть у камина долгими зимними вечерами.',
-};
-
-mycat = obj {
- nam = 'Барсик',
- _lflast = 0,
- lf = {
- [1] = 'Барсик шевелится у меня за пазухой.',
- [2] = 'Барсик выглядывает из за пазухи.',
- [3] = 'Барсик мурлычет у меня за пазухой.',
- [4] = 'Барсик дрожит у меня за пазухой.',
- [5] = 'Я чувствую тепло Барсика у себя за пазухой.',
- [6] = 'Барсик высовывает голову из за пазухи и осматривает местность.',
- },
- 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] = 'Возле камина уютно свернувшись в клубок спит мой кот {Барсик}.',
- [2] = '{Барсик} изучает местность вокруг хижины.',
- [3] = '{Барсик} сидит на соседнем сидении.',
- [4] = '{Барсик} что-то изучает у мусорных баков...',
- [5] = '{Барсик} трется у моих ног.',
- },
- inv = 'Барсик у меня за пазухой... Бедный мой котик... Я спасу тебя!!! И весь мир...',
- 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 'Я забираю Барсика к себе за пазуху.';
- end
- return 'Я почесал Барсика за ушами...';
- 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..' Барсик запрыгивает в кабину.'
- move('mycat','inmycar');
- elseif not me()._know_where then
- return 'Нет... Сначала я должен найти Барсика!', false
- end
- if f == 'guarddlg' then
- return 'Хмм... Нужно что-то придумать...';
- end
- return cat(s, ' Ну что же, пора ехать...');
- end,
- exit = function(s, t)
- local s=''
- if seen('mycat') then
- s = ' Барсик выпрыгивает из машины первым.';
- 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] = 'Перед хижиной стоит мой старенький {пикап} Toyota.',
- [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 goto('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,'окно', 'В хижине есть единственное {окно}.'),
- '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 [[
-Когда я выходил из хижины, Барсик внезапно проснулся и бросился мне под ноги.
-Я погладил его за ушами -- Значит едем вместе?
-]]
- 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('Да... Это мой Барсик! Говори же!',
-'... Ммм... Кажется его взял этот человек... Ммм... -- холодок пробежал у меня по спине...', '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 goto('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)
- if here()._dshells > 4 then
- return 'Под ногами валяется '..here()._dshells..' {гильз} от моего дробовика...';
- else
- return 'Под ногами валяются '..here()._dshells..' {гильзы} от моего дробовика...';
- 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 = 'купить',
- 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 goto("shop2")'),
- [3] = phr('Ну пока!...', 'Ага... Удачи!', 'pon(3); return back();'),
- [4] = _phr('Здесь только что был человек -- кто он?', 'Гм? -- тонкие брови Володи приподнимаются..','pon(5)'),
- [5] = _phr('Он почему-то взял моего кота... Наверное подумал, что он бездомный... Кто этот человек в сером пальто?',
-[[
-Вообще-то он какая-то шишка... - поскреб Владимир свой небритый подбородок. -- В этом новом институте, что построили в
-нашей глуши год назад... -- пенсне Владимира задергалось в такт его речи -- он часто заходит в наш магазин,
-не любит толпы -- эти физики -- ну ты понимаешь... Странный народ -- Владимир пожал плечами...]],'pon(6)'),
- [6] = _phr('А где этот институт находится?',
-'Да на 127-ом.. Только это, знаешь чего -- Владимир понизил голос -- об этом институте всякое говорят...', 'me()._know_where = true; inmycar.way:add("inst");pon(7)'),
- [7] = _phr('Я только заберу своего кота назад...', 'Ну смотри, как знаешь.. Я бы на твоем месте... - качает головой Владимир. - Да, кажется его фамилия Белин. Я видел его кредитку... Хотя ты знаешь -- я их не принимаю -- Владимир зашамкал губами, пенсне хитро зашевелилось.'),
- },
-};
-
-shopman = obj {
- nam = 'продавец',
- dsc = 'За прилавком стоит {продавец}. Довольно полное его лицо с небритой щетиной дополняет монокль.',
- act = function()
- return goto('shopdlg');
- end
-};
-
-shop = room {
- nam = 'магазин',
- pic = 'gfx/inshop.png',
- enter = function(s, f)
- if village.obj:look('truck') then
- village.obj:del('truck');
- village.obj:del('mycat');
- return [[
-Когда я заходил в магазин, я чуть не с толкнулся с неприятным типом в сером пальто и
-шляпе с длинными полями... Он извинился каким-то шипящим голосом и сделал вид, что приподнимает шляпу... Из под
-ее полей блеснули белые зубы... Дойдя до прилавка я услышал звук запускающегося двигателя.]];
- end
- end,
- act = function(s,w)
- if w == 1 then
- return 'Теперь на стоянке стоит только моя машина.';
- end
- end,
- dsc = [[
-Это довольно странный магазин... Здесь вы найдете и скобяные изделия, и продукты и
-даже патроны... Не удивительно, ведь это единственный магазин на 100км...]],
- way = { 'village' },
- obj = {'shopman',vobj(1, 'окно', 'Сквозь {окно} видно стоянку машин.') },
- exit = function(s, t)
- if t ~= 'village' then
- return;
- end
- if shopman._wantmoney then
- return 'Я собираюсь выйти, когда меня останавливает деликатное покашливание Владимира... Конечно, я забыл заплатить...', false;
- end
- if not have('news') then
- shop2.obj[4]:disable();
- inv():add('news');
- return 'Я собираюсь уходить, когда меня останавливает голос Владимира -- Возьми свежую прессу, для тебя -- бесплатно. Я возвращаюсь, беру газету и выхожу из магазина.';
- end
- end
-};
-
-carbox = obj {
- _num = 0,
- nam = function(s)
- if s._num > 1 then
- return 'ящики в машине';
- else
- return 'ящик в машине';
- end
- end,
- act = function(s)
- if inv():srch('mybox') then
- return 'У меня уже есть ящик в руках...';
- end
- s._num = s._num - 1;
- if s._num == 0 then
- mycar.obj:del('carbox');
- end
- take('mybox');
- return 'Я взял ящик из машины.';
- end,
- dsc = function(s)
- if s._num == 0 then
- return;
- elseif s._num == 1 then
- return 'В кузове моей машины лежит один {ящик}.';
- elseif s._num < 5 then
- return 'В кузове моей машины лежат '..tostring(s._num)..' {ящика}.';
- else
- return 'В кузове моей машины лежит '..tostring(s._num)..' {ящиков}.';
- end
- end,
-};
-
-mybox = obj {
- nam = 'ящик',
- inv = 'Я держу в руках ящик.... Добротно сделанная вещь! Пригодится в хозяйстве.',
- use = function(s, o)
- if o == 'boxes' then
- inv():del('mybox');
- return 'Я положил ящик обратно...';
- end
- if o == 'mycar' then
- inv():del('mybox');
- mycar.obj:add('carbox');
- carbox._num = carbox._num + 1;
- return 'Я положил ящик в кузов своей машины...';
- end
- if o == 'ewall' or o == 'wboxes' then
- if not cam._broken then
- return 'Мне мешает камера...';
- end
- inv():del('mybox');
- ewall.obj:add('wboxes');
- wboxes._num = wboxes._num + 1;
- if wboxes._num > 1 then
- return 'Я поставил следующий ящик на предыдущий...';
- end
- return 'Я поставил ящик у стены...';
- end
- end
-};
-
-boxes = obj {
- nam = 'ящики',
- desc = {
- [1] = 'Около стоянки валяются пустые деревянные {ящики} из-под тушенки.',
- },
- dsc = function(s)
- local state = 1;
- return s.desc[state];
- end,
- act = function(s, t)
- if carbox._num >= 5 then
- return 'А может хватит уже брать ящики?...';
- end
- if inv():srch('mybox') then
- return 'У меня уже есть один ящик...';
- end
- take('mybox');
- return 'Я взял ящик в руки.';
- end,
-};
-
-village = room {
- nam = 'стоянка перед магазином',
- dsc = 'Привычное место перед магазином. Стоянка машин. Все в снегу...',
- pic = 'gfx/shop.png',
- act = function(s, w)
- if w == 1 then
- return 'Баки как баки... Белый снег прикрывает мусор...';
- end
- end,
- exit = function(s, t)
- if t == 'shop' and seen('mycat') then
- return 'Я позвал барсика, но он был сильно увлечен мусорными баками... Ладно -- я не на долго...';
- 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 'Окинув стоянку беглым взглядом я позвал -- Барсик! Барсик! -- Куда запропастился мой кот?';
- end
- end,
- way = { 'road', 'shop' },
- obj = { 'truck', vobj(1,'баки', 'Ржавые мусорные {баки} покрыты снегом.'), '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([[Четверо людей с автоматами провожают меня до моей машины.
-Мне пришлось завести двигатель и отъехать от института. Я проехал с дюжину километров, прежде чем в зеркале заднего вида
-исчез военный джип, с моими провожающими... ]], goto('inmycar'));
- end
- return cat([[Четверо вооруженных людей вышвыривают меня из КПП.^^]], goto('inst'));
-end
-
-guarddlg = dlg {
- nam = 'охранник',
- pic = 'gfx/guard.png',
- dsc = [[Передо мной угловатое лицо охранника. Его глаза глядят насмешливо, но уголки рта загнуты
-вниз, что не располагает к беседе...]],
- obj = {
- [1] = phr('Моего кота по ошибке забрал сотрудник вашего института -- мне нужно войти.','-- Пропуск...', 'poff(2); pon(3);'),
- [2] = phr('Я забыл свой пропуск -- можно мне зайти?','-- Нет...', 'poff(1); pon(3);'),
- [3] = _phr('Вы знаете Белина? У него мой кот -- мне нужно его забрать...', '-- Нет пропуска?', 'pon(4)'),
- [4] = _phr('Я просто пришел забрать своего кота! Дайте телефон Белина.',
-[[Глаза охранника меняют свой цвет. Уголки губ поднимаются наверх -- вот что, господин хороший, -- я так понял,
-пропуска у вас нет, идите-ка отсюда, пока можете...]], 'pon(5, 6)'),
- [5] = _phr('Ну все, щас я дам по твоей роже...', 'Рука охранника тянется к автомату. ', 'poff(6); return guardreact();'),
- [6] = _phr('Ладно, я пошел...', '-- Не спеши - охранник уже не скрывает свою ухмылку - ты мне не нравишься...','poff(5); return guardreact()'),
- [7] = _phr('Щас я вас всех перестреляю из своего дробовика...', 'На этот раз охранник даже не отвечает. Его налитые кровью глаза красноречивей всяких слов.','return guardreact()'),
- },
-};
-guard = obj {
- nam = 'охрана',
- dsc = [[
-В будке сидит {охрана}. Кажется, она вооружена автоматами Калашникова.
-]],
- act = function(s)
- return goto('guarddlg');
- end,
-};
-kpp = room {
- nam = 'КПП',
- pic = 'gfx/kpp.png',
- dsc = [[КПП -- контрольно пропускной пункт не оставляет никаких сомнений в том, что в институте не жалуют посторонних. Шлагбаум. Решетчатая будка. И тишина.
-]],
- obj = { 'guard' },
- way = { 'inst' }
-};
-inst = room {
- nam = 'институт',
- pic = 'gfx/inst.png',
- dsc = [[
-Институт возвышается посреди пустынного снежного поля. Его зловещие контуры напоминают скорее тюрьму, чем научное
-учреждение. Позади территории института находятся железнодорожные пути. ]],
- act = function(s, w)
- if w == 1 then
- return 'Высота стены около 5 метров. Но этого мало -- сверху проходит колючая проволока -- думаю, она под напряжением...';
- end
- if w == 2 then
- return 'Нет, Владимир был прав... Это какой-то военный штаб...';
- end
- if w == 3 then
- return 'Да -- это, похоже, тот самый фургон, в котором человек в сером пальто увез моего Барсика.';
- end
- end,
- used = function(s, w, b)
- if b == 'mybox' and w == 1 then
- return 'Я думаю, меня сразу заметит охрана.';
- end
- if w == 2 and b == 'gun' and gun._loaded then
- return 'Меня посадят... Или просто побьют... Охранники совсем недалеко.';
- end
- if w == 3 and b == 'gun' and gun._loaded then
- return 'Мне нужен мой кот, а не разрушения...';
- end
- end,
- obj = {vobj(1, 'стена', 'Здание института окружено массивной бетонной {стеной}. В центре находится КПП.'),
- vobj(2, 'камеры', 'На вышках установлены {камеры} слежения.'),
- vobj(3, 'фургон', 'За шлагбаумом виднеется черный {фургон}')},
- way = { 'road', 'kpp' },
- exit = function(s, t)
- if have('mybox') and t ~= 'inmycar' then
- return 'Я не буду ходить с ящиком в руках...', false;
- end
- end,
-};
-
-cam = obj {
- nam = 'камера слежения',
- dsc = function(s)
- if not s._broken then
- return 'Неподалеку от меня -- одна из {камер} слежения. Я прижимаюсь к стене, чтобы меня не заметили.';
- end
- return 'Неподалеку валяются осколки {камеры} слежения. Их уже запорошило снегом.';
- end,
- act = function(s)
- if not s._broken then
- return 'Проклятая камера...';
- end
- return 'Ха... Получил, проклятый механизм? Интересно, когда придет охрана...';
- end,
-};
-
-wire = obj {
- nam = 'колючая проволока',
- dsc = function(s)
- if s._broken then
- return 'Перед моими глазами обрывки колючей {проволоки}.';
- end
- return 'Перед моими глазами колючая {проволока}.';
- end,
- act = function(s)
- if s._broken then
- return 'Теперь она безопасна! Можно пробраться внутрь...';
- end
- return 'А вдруг она под напряжением?';
- end,
-};
-
-onwall = room {
- pic = 'gfx/onwall.png',
- nam = 'на стене',
- dsc = 'Я стою на ящиках, моя голова находится на уровне вершины стены. Холодно.',
- enter = function(s)
- if have('mybox') then
- return 'Я не могу взобраться на стену с ящиком в руках.', false;
- end
- if wboxes._num < 5 then
- return 'Я пытаюсь взобраться на стену... Но все-еще слишком высоко...',false;
- end
- return 'Я взбираюсь на стену по ящикам.';
- end,
- obj = { 'wire' },
- way = { 'backwall' }
-};
-
-wboxes = obj {
- _num = 0,
- nam = function(s)
- if (s._num > 1) then
- return 'ящики у стены';
- end
- return 'ящик у стены';
- end,
- act = function(s)
- return goto('onwall');
- end,
- dsc = function(s)
- if s._num == 0 then
- return;
- elseif s._num == 1 then
- return 'У стены лежит один {ящик}.';
- elseif s._num < 5 then
- return 'У стены стоит '..tostring(s._num)..' {ящика}, поставленные один на другой.';
- else
- return 'У стены стоят '..tostring(s._num)..' {ящиков}, поставленные один на другой.';
- end
- end,
-};
-
-ewall = obj {
- nam = 'стена',
- dsc = '{Стена} здесь возвышается на 4 метра. Снежная метель с воем бросает ледяные снежинки к ее подножию.',
- act = function(s)
- if not s._ladder then
- s._ladder = true;
- shop2:pon(7);
- end
- return 'Слишком высокая... Нужна лестница.';
- end
-};
-
-backwall = room {
- pic = 'gfx/instback.png',
- enter = function(s, f)
- local st = '';
- if ewall._stolen then
- ewall._stolen = false;
- st = 'Ого!!! Кто-то украл мой ящик!!!';
- end
- if f == 'inmycar' then
- return 'Отлично... Кажется удалось добраться незамеченным...'..' '..st;
- end
- return 'Плутая по снежному полю, я добрался до задней стены.'..' '..st;
- end,
- nam = 'восточная стена института',
- dsc = 'Я нахожусь у задней стороны института.',
- obj = { 'ewall', 'cam' },
- way = { 'inst', },
- exit = function(s, t)
- if have('mybox') and t ~= 'inmycar' then
- return 'Я не буду ходить с ящиком в руках...', false;
- end
- end,
-};
diff --git a/games/cat/ep2.lua b/games/cat/ep2.lua
deleted file mode 100644
index bd9dfb8..0000000
--- a/games/cat/ep2.lua
+++ /dev/null
@@ -1,1524 +0,0 @@
-------------- now got inside!!! -----------------------
-napil = obj {
- nam = 'напильник',
- dsc = 'Под воротами валяется {напильник}.',
- inv = 'Уже начал ржаветь...',
- tak = 'Я взял напильник.',
- use = function(s, w)
- if w == 'knife' and not knife._oster then
- knife._oster = true;
- return 'Я затачиваю напильником нож... Теперь он острый!';
- elseif w == 'gun' and not gun._obrez then
- if here() == wside or here() == sside then
- return 'Тут много людей вокруг!';
- end
- gun._obrez = true;
- return 'Я присел, взял покрепче дробовик и укоротил напильником оба ствола.';
- else
- return 'Нет, это бесполезно пилить...';
- end
- end
-};
-eside = room {
- pic = 'gfx/eside.png',
- nam = 'сзади института',
- dsc = [[ Я нахожусь у задней стены здания института. Здесь проходят рельсы.]],
- act = function(s,w)
- if w == 1 then
- return 'Пулеметы направлены на внешнюю - южную сторону периметра, надо держаться от них подальше.';
- end
- if w == 2 then
- return 'Ворота железные. И заперты изнутри.';
- end
- end,
- obj = {
- vobj(1,'пулеметные вышки', 'Въезд поезда охраняется пулеметными {вышками}..'),
- vobj(2,'ворота', 'Железнодорожные пути проходят мимо больших железных {ворот} -- видимо через них обеспечивается снабжение.'),
- 'napil',
- },
- exit = function(s, t)
- if t == 'sside' then
- return 'На южной стороне меня смущают пулеметы. Лучше не рисковать.', false
- end
- end,
- enter = function(s, f)
- if f == 'onwall' then
- -- end of episode 1
- inmycar = nil;
- deepforest = nil;
- road = nil;
- forest = nil;
- home = nil;
- shop = nil;
- village = nil;
- kpp = nil;
- inst = nil;
- onwall = nil;
- backwall = nil;
- guydlg = nil;
- shop2 = nil;
- shopdlg = nil;
- guarddlg = nil;
- set_music("mus/ice.s3m");
- end
- end,
- way = {'nside','sside'},
-};
-
-card = obj {
- nam = 'пропуск',
- inv = [[Это пропуск.
-Электронная смарткарта с фотографией какого-то металлюги. Написано: Алексей Подковин -- 3-й уровень, категория: материя. Гммм...]],
-};
-alienwear = obj {
- xnam = {'джинсовка', 'красная куртка', 'пальто','куртка', 'белая куртка', 'пиджак', 'косуха', 'спортивная куртка',},
- xinv = {
- 'Холодновато, но стильно!',
- 'Очень красиво смотрится на фоне снега!',
- 'Длиннополое пальто -- это ретро!',
- 'Я -- терминатор!',
- 'Я -- пацифист!',
- 'Пиджачок сидит на мне как влитой!',
- 'Рок-н-ролл мертв, а я еще нет!',
- 'Когда-то я занимался альпинизмом!',
- },
- nam = function(s)
- return s.xnam[s._num];
- end,
- inv = function(s)
- if s._num == 7 and not have('card') then
- inv():add('card');
- return 'Немного покопавшись в карманах косухи, я нашел карточку.';
- end
- return s.xinv[s._num];
- end,
-};
-
-garderob = obj {
- nam = 'гардероб',
- dsc = 'На правой стороне коридора висят {вешалки} с одеждой.',
- act = function(s, w)
- if have('mywear') or have('alienwear') then
- return 'Здесь много людей, я не думаю, что я смогу сделать это незаметно.';
- elseif tonumber(w) and tonumber(w) > 0 and tonumber(w) <= 8 then
- if not me()._walked then
- return 'Это будет слишком заметно...';
- end
- alienwear._num = w;
- inv():add('alienwear');
- ref(s.obj[w]):disable();
- me()._walked = false;
- inv():add('gun');
- return 'Я спокойно беру чужую одежду и также спокойно одеваю ее... Дробовик я снимаю из-под своего ватника.';
- else
- return 'Надо определиться...';
- end
- end,
- used = function(s, w)
- if w == 'mywear' then
- garderob.obj:add('mywear');
- inv():del('mywear');
- inv():del('gun');
- return 'Я вешаю ватник на вешалку. Дробовик придется спрятать под ватником.';
- end
- if w == 'alienwear' then
- local v = alienwear._num;
- ref(s.obj[v]):enable();
- inv():del('alienwear');
- inv():del('gun');
- return 'Я вешаю чужую одежду на вешалку. Дробовик я вешаю под свой ватник на вешалке.';
- end
- end,
- obj = {
- vobj(1,'джинсовка','{Джинсовка}.'),
- vobj(2,'красная куртка','{Куртка} ало-красного цвета.'),
- vobj(3,'пальто','{Пальто}.'),
- vobj(4,'куртка терминатора', "{Куртка} с надписью I\'ll back."),
- vobj(5,'куртка с ромашками', "Белая {куртка} с изображением ромашек."),
- vobj(6,'пиджак', "Шерстяной {пиджак}."),
- vobj(7,'косуха','Клевая {косуха}.'),
- vobj(8,'спортивная куртка', "Оранжевая альпинистская {куртка}."),
- }
-};
-portrait = obj {
- nam = 'портреты',
- dsc = 'По стенам развешены большие {портреты} в деревянных рамах.',
- act = 'Гм... На портретах одно и тоже лицо! Улыбающееся холодной улыбкой лицо человека, лет сорока, с пустым, ничего не выражающим взглядом.',
-};
-
-salo = obj {
- nam = 'сало',
- inv = 'Это кусочек сала. Я не могу его доесть, он очень жесткий...',
- use = function(s, w)
- if w == 'trap' and not trap._salo then
- inv():del('salo');
- trap._salo = true;
- return 'Гм... По-моему у меня получилась мышеловка!';
- end
- end
-};
-
-food = obj {
- nam = 'еда',
- inv = function (s)
- inv():del('food');
- return 'Я не выдерживаю и съедаю все это великолепие стоя, держа поднос в левой руке. Ухх... Затем я отношу поднос в мойку.';
- end
-};
-
-knife = obj {
- nam = 'нож',
- dsc = 'На подносе лежит {нож}.',
- inv = function(s)
- if s._oster then
- return 'Железный и очень острый ножик.';
- end
- return 'Железный и тупой ножик.';
- end,
- use = function(s, w)
- if w == 'shells' then
- if not s._oster then
- return 'Нож тупой.';
- end
- if have('poroh') then
- return 'У меня уже есть порох.';
- end
- inv():add('poroh');
- return 'Я расковыриваю один из патронов и высыпаю на ладонь порох.';
- end
- end,
- tak = function(s)
- if have('knife') then
- return 'У меня уже есть один...', false
- end
- return 'Возьму его пока с собой.';
- end
-};
-
-ostatki = obj {
- nam = 'остатки еды',
- dsc = '{Объедки} равномерно распределены по тарелкам.',
- tak = function(s)
- if food._num ~= 2 or have('salo') then
- return 'Ничего полезного...', false;
- else
- take('salo');
- return 'Кусочек сала!', false;
- end
- end
-};
-
-podnos = obj {
- nam = 'поднос',
- dsc = 'На столе стоит {поднос}.',
- act = function(s, w)
- if w == 1 then
- return 'Вилка как вилка... Не очень чистая.';
- end
- if w == 2 then
- return 'Ложка не отличается оригинальностью своей конструкции.';
- end
- return 'Синий пластик. Немного жирный на ощупь.';
- end,
- obj = { 'ostatki',
- vobj(1, 'вилка', 'Рядом лежат {вилка} и'),
- vobj(2, 'ложка', '{ложка}.')
- },
-};
-
-moika = room {
- nam = 'мойка',
- enter = function()
- return cat('Я отношу грязную посуду в мойку.^^', goto('kitchen')), false;
- end
-};
-
-eating = room {
- pic = 'gfx/podnos.png',
- enter = function(s, f)
- podnos.obj:add('knife');
- inv():del('food');
- if not me()._kitchendlg then
- me()._kitchendlg = true;
- return goto('kitchendlg'), false;
- end
- if f ~= 'kitchendlg' then
- return 'Я сажусь за пустой столик и слегка перекусываю.';
- end
- end,
- nam = 'за столом',
- dsc = 'Под моими руками гладкая поверхность стола.',
- obj = { 'podnos' },
- way = { 'moika' },
- exit = function(s)
- end
-};
-
-gotfood = function(w)
- inv():add('food');
- food._num = w;
- return back();
-end
-
-invite = obj {
- nam = 'приглашение',
- inv = 'Приглашение на лекцию Белина: 4-й уровень, зал 2... Гммм.... Мне нужно туда попасть... У него мой Барсик.',
-}
-
-povardlg = dlg {
- nam = 'на кухне',
- pic = 'gfx/povar.png',
- dsc = 'Передо мной полное лицо женщины - повара в белом колпаке и усталым взглядом...',
- obj = {
- [1] = phr('Мне вот-этих зелененьких... Ага -- и бобов!', 'На здоровье!', [[pon(1); return gotfood(1);]]),
- [2] = phr('Картошку с салом, пожалуйста!', 'Приятного аппетита!', [[pon(2); return gotfood(2);]]),
- [3] = phr('Две порции чесночного супа!!!', 'Прекрасный выбор!', [[pon(3);return gotfood(3);]]),
- [4] = phr('Мне что-нибудь легонькое, у меня язва...', 'Овсянка!', [[pon(4); return gotfood(4);]]),
- },
-};
-kitchendlg = dlg {
- nam = 'разговор с сотрудником института',
- pic = 'gfx/ilya.png',
- dsc = 'Я взял свой поднос и присел за свободный столик. Через минуту со словами "Не занято?" ко мне подсел молодой парень.',
- obj = {
- [1] = phr('Нет, не занято...', '-- Спасибо. Как дела? Ты из какого отдела?', [[pon(3,4,5); poff(2);]]),
- [2] = phr('Занято...', '-- Ха ха ха! Хорошая шутка! Ты из какого отдела?', [[pon(3,4,5); poff(1);]]),
- [3] = _phr('Хм... Из отдела искривления пространства...', '-- Старье!', [[pon(6);poff(4,5)]]),
- [4] = _phr('Ааа... Отдел квантовых скачков..', '-- Хм? Не слышал о таком.', [[pon(6);poff(3,5)]]),
-
- [5] = _phr('Эээ... Отдел изучения квазипространства!', '-- Ого! Прикольно!', [[pon(6);poff(3,4)]]),
- [6] = _phr('Хм... ', '-- А у тебя какой уровень секретности?', [[pon(7,8)]]),
- [7] = _phr('Супер секретно!', '-- Ух ты! ... ', [[poff(8); pon(9)]]),
- [8] = _phr('Анонимный.', '-- Да? Не слышал о таком, наверное это более секретный уровень, чем мой...',
-[[poff(7); pon(9)]]),
- [9] = _phr('Мэээ...', '-- Меня зовут Илья... Просто Илья -- тянет худую руку парень -- а тебя как?', [[pon(10, 11, 12)]]),
- [10] = _phr('Пп.. Пк... Пупкин... Василий Пупкин.', '-- Редкая фамилия!', [[poff(11,12); pon(13)]]),
- [11] = _phr('Сережка.', '-- Дай пятерню, братан!', [[poff(10,12); pon(13)]]),
- [12] = _phr('Гоша...', '-- Ну, будем знакомы, Гошка!', [[poff(10,11); pon(13)]]),
- [13] = _phr('Кхмм...',
-[[-- Какой ты странный... Но это не важно. Мы все здесь -- Илья сделал выразительное лицо -... Мне тут поручили
-распространить приглашения на закрытую лекцию Белина... Только для друзей... Ты мне нравишься, да и по уровню
-доступа проходишь... Так что...]], [[pon(14)]]),
- [14] = _phr('Где он?... Гм.. Где лекция?',
-[[-- Четвертый уровень секретности. Зал 2. Ну, приходи! Хороший шанс приблизиться к... -- Илья посмотрел на один из портретов на стене. -- Да, чуть не забыл -- протягивает он своей гибкой рукой кусок белого
-пластика -- Ну, до встречи!... -- Уххх...]],[[inv():add('invite');return goto('eating');]]),
- }
-};
-kitchen = room {
- nam = 'столовая',
- pic = 'gfx/kitchen.png',
- dsc = 'Небольшой зал столовой.',
- act = function(s, w)
- if w == 4 then
- return 'Я вижу как чьи-то руки берут подносы с грязной посудой и уносят их вглубь...';
- end
- if w == 1 then
- if not have('food') then
- return 'Я присел за свободный столик. Ну -- отдохнул, теперь пора за работу!';
- end
- return goto('eating');
- end
- if w == 2 then
- return 'Гудят как пчелы...';
- end
- if w == 3 and not have('food') then
- return cat([[Я встал в очередь... Взял в руки поднос, столовые приборы и салфетки. Время тянется мучительно долго, но вот, наконец, я заказываю
-еду...^^]], goto('povardlg'));
- end
- end,
- used = function(s, w, ww)
- if w == 1 and ww == 'food' then
- return s:act(1);
- end
- end,
- enter = function(s)
- if not have('mywear') and not have('alienwear') then
- me()._walked = true;
- end
- set_music('mus/foot.mod');
- end,
- exit = function(s, t)
- if have('food') and t ~= 'eating' then
- return 'Уйти с подносом в руках? Не могу.', false;
- end
- if t == 'stolcorridor' then
- set_music('mus/ice.s3m');
- end
- end,
- obj = { 'portrait', vobj(1, 'столики', 'По залу размещены {столы} на 4 или 8 человек.'),
- vobj(2, 'люди', 'Столовая полна {людей}.'),
- vobj(3, 'очередь', '{Очередь} за раздачей еды движется довольно быстро.'),
- vobj(4, 'мойка', 'В углу расположено {окно} для сдачи грязной посуды.'),
- },
- way = { 'stolcorridor' },
-};
-
-stolcorridor = room {
- nam = 'вход в столовую',
- pic = 'gfx/kitchencor.png',
- dsc = 'Длинный и узкий коридор тускло освещен флоуресцентным светом.',
- act = function(s, w)
- if w == 1 then
- return 'Да, эти люди пришли за тем, чтобы поесть...';
- end
- end,
- obj = {'garderob', vobj(1,'люди', 'По коридору ходят {люди}.')},
- way = {'sside', 'kitchen'},
- exit = function(s, t)
- if t == 'sside' and not have('mywear') and not have('alienwear') then
- return 'На улице холодно... Я не пойду без одежды.. Нет...', false;
- end
- end,
- enter = function(s)
- -- generate garderob
- if have('gun') and not gun._hidden then
- return 'Я боюсь, что мой дробовик там внутри будет вызывать лишние вопросы...', false;
- end
- local i
- for i=1, 8 do
- local o = garderob.obj[i];
- ref(o):disable();
- end
- local k = 7;
- for i=1, 5 do
- if not have('alienwear') or k ~= alienwear._num then
- local o = garderob.obj[k];
- ref(o):enable();
- end
- k = rnd(8);
- end
- end
-};
-
-sside = room {
- nam = 'южная сторона',
- pic = 'gfx/sside.png',
- dsc = [[Я нахожусь у южной стены здания института. ]],
- act = function(s, w)
- if w == 1 then
- ways():add('stolcorridor');
- return "Я подошел к подъезду. На двери подъезда надпись -- 'Столовая'. Хм -- зайти внутрь?";
- end
- if w == 2 then
- return 'Те, кто выходят, выглядят более довольными...';
- end
- end,
- way = {'eside','wside'},
- obj = { vobj(1, "подъезд", "У восточного угла находится небольшой {подъезд}."),
- vobj(2, "люди", "Время от времени дверь подъезда хлопает, впуская и выпуская {людей}.")},
- exit = function(s, t)
- if t == 'eside' then
- return 'Если я пойду туда, я попаду в зону видимости пулеметных вышек.', false
- end
- end
-};
-
-nside = room {
- nam = 'северная сторона',
- pic = 'gfx/nside.png',
- dsc = 'Я нахожусь у северной стены здания института.',
- way = {'eside','wside' },
- act = function(s, w)
- if w == 1 then
- return 'Да -- водосточная труба... Довольно крепкая. Но вряд ли я смогу взобраться по ней наверх.';
- end
- end,
- obj = { vobj(1, 'труба', 'Водосточная {труба} проходит по восточному углу здания.')},
-};
-
-
-wside = room {
- nam = 'фронтальная сторона',
- pic = 'gfx/wside.png',
- dsc = 'Фронтальная часть института.',
- way = {'entrance', 'nside','sside' },
- act = function(s, w)
- if w == 1 then
- return 'Тот самый фургон, с которого все началось...';
- end
- if w == 5 then
- return 'Она начинается слишком высоко, к тому-же снизу она закрыта на замок. Возможно, это будет кому-то полезно при пожаре, хотя я лично сомневаюсь...'
- end
- if w == 2 then
- return 'Наверняка охранники в КПП узнают меня. Лучше я сначала спасу своего Барсика.';
- end
- if w == 3 then
- return 'Красиво сделано, нечего сказать... Но я не могу избавиться от мысли, что институт пожирает входящих в него людей.';
- end
- if w == 4 then
- return 'Уже почти стемнело, но в институт все-еще заходят сотрудники...';
- end
- end,
- obj = { vobj(3, 'вход', 'Главный {вход} представляет собой крутящуюся стеклянную дверь'),
- vobj(4, 'люди', ' впускающую и выпускающую {людей}.'),
- vobj(1, 'фургон', 'Перед входом стоит черный {фургон}.'),
- vobj(2, 'КПП', 'Дальше, в метрах 60 от меня, во все сгущающейся темноте я едва различаю {КПП}.'),
- vobj(5, 'лестница', 'В южной части стены я вижу пожарную {лестницу}, поднимающуюся со второго до пятого этажа.' ),
- }
-};
-
-turn1 = obj {
- nam = 'турникеты',
- dsc = 'Проход к лифтам с улицы заграждают блестящие стальные {турникеты}. <<Для всех уровней и категорий>> - светится зеленым надпись на турникетах.',
- act = function(s, w)
- if s._inside then
- s._inside = false;
- here().way:del('lift');
- return 'Я подхожу к турникетам, подношу карточку и выхожу к двери главного входа.';
- end
- if s._unlocked then
- s._inside = true;
- here().way:add('lift');
- return 'Я подхожу к турникетам, подношу карточку и через пару секунд я у лифтов.';
- end
- return 'Я подхожу к одному из аппаратов. Турникеты функционируют автономно. Проход закрыт -- на торце горит красная лампочка.';
- end,
- used = function(s,w)
- if w == 'card' then
- s._unlocked = true;
- s._inside = true;
- here().way:add('lift');
- return 'Я подношу карточку к турникету. Загорается зеленый сигнал. Проход открыт! Я прохожу к лифтам.';
- end
- end
-};
-
-lustra = obj {
- nam = 'люстры',
- dsc = 'Над головой висят прекрасные сверкающие {люстры}.',
- act = 'Не могу на них наглядеться... Наверное, это хрусталь?';
-
-};
-
-divan = obj {
- nam = 'диван',
- dsc = 'На противоположной стороне от охранника, в углу стоит {диван}.',
- act = function(s)
- return 'Черный кожаный, очень мягкий диван.';
- end,
-};
-
-entrance = room {
- nam = 'главный вход',
- pic = 'gfx/entrance.png',
- dsc = 'Первый этаж института поражает своим великолепием.',
- act = function(s, w)
- if w == 2 then
- return 'Ворота заперты. На них висит замок.';
- end
- if w == 3 then
- if not turn1._inside then
- return 'К лифтам мне мешают пройти турникеты.';
- end
- return 'Четыре лифта явно не справляются с количеством сотрудников института.';
- end
- if w == 4 then
- return 'Стеклянный или хрустальный стол, за которым стоит терминал...';
- end
- if w == 5 then
- return 'Лучше я не буду лишний раз попадаться ему на глаза. Вряд ли он мне поможет.';
- end
- if w == 6 then
- return 'Люди.. Я отвык от такого количества людей.';
- end
- end,
- obj = {
- 'lustra',
- vobj(2, 'ворота', 'Железные {ворота}, ведущие к путям, занимают всю восточную стену.'),
- vobj(3, 'лифты', 'Среднюю часть этажа занимают четыре {лифта}.'),
- 'turn1',
- vobj(4, 'стол', 'Перед турникетами находится {стол},'),
- vobj(5, 'охранник', 'за которым сидит {охранник}.'),
- vobj(6, 'люди', 'В институт входят и выходят {люди}, образовывая очереди у лифтов.'),
- 'divan',
- },
- way = { 'wside' },
- enter = function(s, f)
- if have('gun') and f == 'wside' and not gun._hidden then
- return 'Мне кажется, там внутри возникнет множество вопросов по-поводу моего дробовика... Я должен его как-то спрятать.', false
- end
- end,
- exit = function(s, t)
- if t == 'wside' then
- turn1._inside = false;
- s.way:del('lift');
- end
- end,
-};
-
-pinlift = obj {
- nam = function(s)
- if s._num == 3 then
- return '';
- end
- return 'люди';
- end,
- act = function(s)
- return 'Подавленные и пустые взгляды... Тягостное молчание.';
- end,
- dsc = function(s)
- if s._num == 1 then
- return 'В лифте полно {людей}.';
- end
- if s._num == 2 then
- return 'В лифте несколько {человек}.';
- end
- if s._num == 3 then
- return 'Лифт пуст.'
- end
- end
-};
-
-lift = room {
- nam = 'лифт',
- pic = 'gfx/lift.png',
- dsc = 'В лифте должно быть светло и уютно, но меня мучает клаустрофобия. На панели я вижу кнопки:',
- enter = function(s, t)
- if here() == entrance then
- s._from = 1;
- pinlift._num = 1;
- return 'Я дожидаюсь, когда подойдет один из лифтов и захожу внутрь.';
- end
- pinlift._num = rnd(3);
- if here() == floor2 then
- s._from = 2;
- elseif here() == floor3 then
- s._from = 3;
- elseif here() == floor4 then
- s._from = 4;
- elseif here() == floor5 then
- s._from = 5;
- end
- return 'Я нажимаю кнопку вызова лифта и жду. Проходит некоторое время и я захожу внутрь.';
- end,
- act = function(s, w)
- local to,st
- if not tonumber(w) then
- return
- end
- if w == s._from then
- return cat('Нет!!! Клаустрофобия выгоняет меня из лифта.^^', back());
- end
- if w == 8 then
- st = '';
- if galstuk._wear then
- st = ' К тому же, я в галстуке.';
- end
- if me()._brit then
- return 'Я смотрю в зеркало и вижу усталое, но гладко-выбритое лицо. Это я.'..st;
- end
- return 'Я смотрю в зеркало и вижу усталое, заросшее щетиной лицо. Это я.'..st;
- end
- if w == 6 or w == 7 then
- return 'Я нервничаю... Не надо нервов.';
- end
- if w == 1 then
- to = 'entrance';
- else
- to = 'floor'..w;
- end
- return cat('Я нажимаю кнопку и жду. Меня мучает клаустрофобия, но я жду.. Уххх... Приехали!^^',
- goto(to));
- end,
- exit = function()
- return 'За моей спиной закрываются двери лифта.';
- end,
- obj = {
- vobj(1,'1', '{1},'),
- vobj(2,'2', '{2},'),
- vobj(3,'3', '{3},'),
- vobj(4,'4', '{4},'),
- vobj(5,'5', '{5},'),
- vobj(6,'стоп','{стоп}'),
- vobj(7,'ход','и {ход}.'),
- vobj(8,'зеркало', '{Зеркало} занимает всю заднюю часть.'),
- 'pinlift',
- },
-};
-
-floor2 = room {
- nam = 'площадка 2-го этажа',
- pic = 'gfx/floor2.png',
- dsc = "На площадке второго этажа нет окон. Невысокий потолок и серо-зеленые стены. Тихо и холодно.",
- act = function(s, w)
- if w == 1 then
- return 'Дверь, похоже, сделана из свинца... Я не вижу возможности попасть внутрь. И хорошо. На двери, кроме знака надпись -- <<Уровень:2 Категория:Ядерная энергия>>.';
- end
- if w == 2 then
- return 'Да, на одном из этих лифтов я приехал на этот проклятый этаж...';
- end
- end,
- obj = {
- vobj(1, 'дверь', 'Я вижу массивную {дверь} с знаком <<осторожно - радиация!!!>>'),
- vobj(2, 'лифты', 'Кажется, что четыре проема дверей {лифтов} мрачно следят за мной.'),
- },
- way = { 'lift' },
-};
-
-resh = obj {
- nam = 'решетка',
- dsc = function(s)
- if not s._unscrew then
- return 'Отверстие закрыто железной {решеткой}.';
- end
- if vent._off then
- return 'В отверстии видны лопасти большого вентилятора. На полу валяется {решетка}.';
- end
- return 'В отверстии вращаются лопасти большого вентилятора. На полу валяется {решетка}.';
- end,
- act = function(s)
- if s._unscrew then
- return 'Вот что можно сделать обычным тупым ножом при наличии сноровки и терпения!';
- end
- if not stoly._moved then
- return 'Не достать...';
- end
- return 'Решетка крепко привинчена 12 шурупами...';
- end,
- used = function(s, w)
- if w == 'knife' and not s._unscrew and stoly._moved then
- s._unscrew = true;
- return 'Я встаю на стол и долго пытаюсь открутить шурупы ножом. Наконец, мне это удается. Решетка падает на пол. Я спускаюсь со стола.';
- end
- if w ~= 'stol' then
- return 'Не получится...';
- end
- end,
-};
-
-vent = obj {
- nam = 'вентиляция',
- dsc = 'В центре потолка находится большое квадратное вентиляционное {отверстие}.',
- act = function(s)
- if not stoly._moved then
- return 'До него не достать...';
- end
- if not resh._unscrew then
- return 'Я встаю на стол и изучаю отверстие. Оно закрыто решеткой... Я разочарованно спускаюсь на пол.';
- end
- if not s._off then
- return 'Я встаю на стол и смотрю на острые лопасти вентилятора. Боюсь, это слишком опасно...';
- end
- if not s._trap then
- return 'Я встаю на стол, хватаюсь руками за края отверстия и подтягиваюсь... Темно и сыро. Я пытаюсь забраться внутрь вентиляции, когда вдруг перед моими глазами я вижу красные глазки и зубы жирной крысы... Нет!!! Я падаю обратно на стол и скатываюсь на пол.';
- end
--- here we go!
- return goto('toilet');
- end,
-
- used = function(s, w)
- if w == 'stol' then
- return
- end
- if not stoly._moved then
- return 'Я не могу добраться до отверстия...';
- end
- if not resh._unscrew then
- return 'Отверстие закрыто решеткой...';
- end
- if not s._off then
- return 'Мне мешают лопасти вентилятора...';
- end
- if w == 'gun' and not s._trap then
- gun._loaded = false;
- return 'Я встаю на стол и просовываю руку с дробовиком в отверстие. Оба ствола выстреливают одновременно с глухим звуком. Я прислушиваюсь. В отверстии тихо... Я спускаюсь со стола на пол. Я думаю, это бесполезно...';
- end
- if w == 'trap' then
- if not trap._salo then
- return 'Я устанавливаю капкан на край отверстия. Жду. Но крыса не дура -- я забираю капкан обратно. Нужна приманка.';
- end
- inv():del('trap');
- vent._trap = true;
- return 'Я встаю на стол и устанавливаю капкан-мышеловку на край отверстия... Мне не приходится долго ждать... Лязг железа и визг крысы красноречиво говорит о том, что дело сделано!';
- end
- end,
- obj = {
- 'resh'
- }
-};
-
-stol = obj {
- nam = 'стол',
- inv = 'Я держу один из столов за угол. Дуб.',
- use = function(s, w)
- if w == 'vent' or w == 'resh' then
- inv():del('stol');
- stoly._moved = true;
- return 'Напрягая свои силы, я сдвигаю один из столов в центр комнаты.';
- end
- end
-};
-
-stoly = obj {
- nam = 'столы',
- dsc = function(s, w)
- if not s._moved then
- return 'Четыре дубовых {стола} занимают все углы комнаты.';
- end
- return 'Три дубовых {стола} стоят в углах комнаты. Один стол передвинут в центр комнаты.';
- end,
- act = function(s, w)
- if s._moved then
- return 'Поставить один стол на другой? Нет -- я не смогу...';
- end
- inv():add('stol');
- return [[Добротная мебель... Но стол в моей хижине лучше -- я сделал его своими руками. Я держу
-руками угол стола.]];
- end
-};
-
-eroom = room {
- nam = 'отдел СТО',
- pic = function()
- if not stoly._moved then
- return 'gfx/sto.png';
- end
- if not resh._unscrew then
- return 'gfx/sto2.png';
- end
- return 'gfx/sto3.png';
-
- end,
- dsc = [[Я нахожусь в небольшой комнате с бежевыми стенами.]],
- enter = function(s, f)
- if f == 'cor3' then
- return [[Открыв дверь, я заглядываю внутрь комнаты. Ухх... Пусто! Можно осмотреться...]];
- end
- if f == 'toilet' then
- return 'Ну что же... Я поднимаю железную решетку в полу туалета и лезу в темноту... Через несколько минут я уже спрыгиваю из вентиляционного отверстия на стол, и спускаюсь на пол.';
- end
- end,
- act = function(s, w)
- if w == 1 then
- return 'Отодвинув жалюзи я смотрю в уже черную даль, но наталкиваюсь на свое тусклое отражение. Опустив глаза вниз я вижу пулеметные вышки и железнодорожные пути.';
- end
- if w == 2 then
- return 'Это всего лишь терминалы. Клиенты, которые подсоединяются к серверам института. Впрочем, меня это не интересует -- я 10 лет не видел компьютеров.';
- end
- end,
- obj = {
- vobj(1, 'окно', 'Большое {окно} выходит на восток.'),
- 'stoly',
- vobj(2, 'терминалы', 'На каждом столе стоит 17 дюймовый {терминал}.'),
- 'vent',
- 'portrait',
- },
- way = { 'cor3' },
- exit = function()
- inv():del('stol');
- end
-};
-
-key = obj {
- nam = 'ключ',
- dsc = 'В двери торчит {ключ}.',
- tak = 'Я осторожно вытаскиваю ключ и кладу его в карман.',
- inv = 'Удивительно, но в институте вместе с электроникой используется такой простой и понятный механизм, как обычный дверной замок!',
-};
-
-room33 = room {
- nam = 'комната',
- pic = 'gfx/bholes.png',
- dsc = [[Постояв несколько секунд у двери я открываю ее и вхожу внутрь.]],
- act = function(s, w)
- if w == 1 then
- return cat('Седой человек в толстых очках оборачивается и с секунду смотрит на меня. -- Кто это? Выйдите немедленно!!^^',back());
- end
- end,
- obj = {
- vobj(1, 'люди', [[Я вижу как группа {людей} в белых халатах расположилась перед доской в центре комнаты и о чем-то ожесточенно спорит.]]),
- 'portrait',
- 'key'
- };
- way = { 'cor3' },
- exit = [[ Я осторожно выхожу из комнаты.]];
-};
-room3x = room {
- nam = 'комната',
- enter = function(s, f)
- if s._num == 2 then
- return [[Я приоткрываю дверь и заглядываю внутрь. Квадратная комната с двумя окнами.
-Множество людей сидят за терминалами, расставленными вдоль стен. Я поскорее прикрываю дверь.]], false;
- end
- if s._num == 4 then
- return [[Я берусь за холодный металл ручки и осторожно открываю дверь... -- Идет моделирование!!!
--- слышу я из-за двери. Я быстро отпускаю ручку -- дверь закрывается...]],false;
- end
- if s._num == 5 then
- ref(f).way:add('eroom');
- return goto('eroom'), false;
- end
- if s._num == 6 then
- return [[Я начинаю открывать дверь, когда вдруг начинаю слышать странное все нарастающее гудение. -- Какой идиот не закрыл дверь? -- слышу я изнутри. Я поспешно отхожу от двери.]], false;
- end
- end,
-};
-switch = obj {
- nam = 'выключатель',
- dsc = function(s)
- local t
- if vent._off then
- t = ' в позиции <<выключено>>.';
- else
- t = ' в позиции <<включено>>.';
- end
- return 'В углу, перед входной дверью находится {выключатель}'..t;
- end,
- act = function(s)
- if vent._off then
- vent._off = false;
- return 'Включаю!'
- end
- if not cor3._locked then
- return [[Я перевожу выключатель в позицию <<выключено>> и иду вдоль стен, когда
-одна из дверей за мной вдруг открывается и старческий голос звучит на весь коридор -- Безобразие!!! Включите обратно!!! --
-мне приходится вернуться к выключателю и перевести его в позицию <<включено>>.]];
- end
- vent._off = true;
- return 'Выключаю!';
- end
-};
-
-cor3 = room {
- nam = 'коридор 3-го этажа',
- pic = 'gfx/cor3.png',
- enter = function(s, f)
- if f == 'floor3' then
- return 'Я подношу карточку к считывателю... Красная лампочка сначала моргает, а затем меняет свой цвет на зеленый... Проход открыт!';
- end
- end,
- dsc = 'Длинный коридор идет до самой стены здания. На потолке тускло горят лампы дневного света. На полу постелена зеленая ковровая дорожка.',
- act = function(s, w)
- if w == 1 then
- return 'Я подхожу к одной из дверей и заглядываю в окошко-иллюминатор... Люди в белых костюмах, словно пчелы, снуют у причудливых аппаратов. -- Наверное, это лаборатории -- догадываюсь я.';
- end
- if not tonumber(w) then
- return nil, false
- end
- if w == 3 then
- if s._locked then
- return 'Эта комната закрыта... И слыша приглушенные, но настойчивые звуки изнутри, мне не хочется ее открывать.';
- end
- return goto('room33');
- end
- if tonumber(w) >=2 and tonumber(w) <=6 then
- room3x._num = w;
- return goto('room3x');
- end
- if w == 7 then
- return 'Окно выходит на южную сторону... Темно -- ничего не видно, кроме снежинок, ударяющихся о стекло...';
- end
- if w == 8 then
- return 'Зайти?';
- end
- end,
- used = function(s, w, ww)
- if w == 1 or w == 2 or w == 4 or w == 5 or w == 6 then
- return 'Не подходит...';
- end
- if w == 3 and ww == 'key' then
- if s._locked then
- return 'Уже закрыто...';
- end
- s._locked = true;
- return 'Я вставляю ключ в замочную скважину и закрываю замок на два оборота. Вынимаю ключ и кладу обратно в карман.';
- end
- end,
- obj = {
- vobj(1, 'белые двери', 'По правой стороне коридора находятся белые металлические {двери} с стеклянными окошками.'),
- vobj(2, 'гравитация', 'По левой стороне коридора я вижу несколько дверных проемов с надписями: {гравитация},'),
- vobj(4, 'моделирование','{моделирование},'),
- vobj(5, 'эффекты СТО','{эффекты СТО},'),
- vobj(3, 'черные дыры', '{черные дыры},'),
- vobj(6, 'квазипространство', '{квазипространство}.'),
- vobj(7, 'окно', 'В конце коридора виднеется {окно}.'),
- vobj(8, 'туалет', 'Возле окна находятся {туалеты}.'),
- 'switch',
- 'portrait',
- },
- way = {'floor3', 'toilet3', 'toiletw'},
-};
-
-mylo = obj {
- nam = 'мыло',
- inv = function(s)
- if s._pena then
- return 'Кусочек мыла в пене.';
- end
- return 'Кусочек мыла.';
- end,
- dsc = 'На умывальнике лежит кусочек {мыла}.',
- tak = 'Я взял в руки скользкий кусочек мыла... Он выпал в умывальник, но я поймал его снова и сунул в карман...';
-};
-
-sushka = obj {
- nam = 'сушка',
- dsc = 'Рядом с умывальником находится {сушка}.',
- act = function(s,w)
- return 'Я подношу руки к сушке, сушка включается... Наваждение...';
- end,
-};
-
-umyvalnik = obj {
- nam = 'умывальник',
- dsc = 'У входа находится {умывальник}.',
- act = function(s)
- if me()._mylo then
- me()._mylo = false;
- return 'Я смываю мыло со своего лица...';
- end
- return 'Я пью хлорированную воду жадными глотками... Да -- это не та вода из ручья, которую я пью в лесу...';
- end,
- used = function(s, w)
- if w == 'mylo' then
- mylo._pena = true;
- return 'Я опускаю мыло в теплую воду...';
- end
- end
-};
-
-toilet3 = room {
- nam = 'туалет',
- pic = 'gfx/toil3.png',
- dsc = 'Я в туалете. Стандартная архитектура. Без окон. Белый кафель.',
- act = function(s, w)
- if w == 2 then
- return 'Все заняты!';
- end
- if w == 3 then
- return 'Люди равномерно распределены по туалету. Все унитазы заняты. Еще пару человек ждут своей очереди.';
- end
- end,
- obj = {
- 'umyvalnik',
- 'mylo',
- 'tzerkalo',
- 'sushka',
- vobj(2, 'унитазы', 'В этом туалете установлено 4 {унитаза}.'),
- vobj(3, 'люди', 'В туалете несколько {человек}...'),
- },
- way = { 'cor3' },
- exit = function()
- if me()._mylo then
- return 'В мыле? Нет...', false
- end
- objs():del('face');
- end
-};
-floor3 = room {
- nam = 'площадка 3-го этажа',
- pic = 'gfx/floor3.png',
- dsc = [[На
-площадке третьего этажа довольно просторно. Бежевые стены. Высокие потолки.]],
- act = function(s, w)
- if w == 1 then
- return 'С минуту я зачарованно смотрю в окно... Белая пустыня погруженная в темноту... В эту минуту я понимаю, в какое чужое место я попал...';
- end
- if w == 2 then
- if not s._unlocked then
- return 'Металл обитый кожей. Дверь снабжена считывателем электронных карт. Надпись на двери: <<Уровень:3 Категория: Прикладная физика>>';
- end
- return goto('cor3');
- end
- if w == 3 then
- return 'Крепкие тут двери, не то что в моей хижине... Считыватель карточек возле замка. Надпись на двери: <<Уровень:3 Категория:Нанотехнологии>>';
- end
- end,
- used = function(s,w,ww)
- if ww ~= 'card' then
- return 'Это не поможет...';
- end
- if w == 2 then
- s._unlocked = true;
- s.way:add('cor3');
- return goto('cor3');
- end
- if w == 3 then
- return 'Я подношу карточку к считывателю... Раздается раздражающий писк -- доступ не разрешен.';
- end
- end,
- obj = {
- vobj(1, 'окно', 'Широкое {окно} выходит на запад.'),
- vobj(2, 'коричневая дверь', 'Справа от окна находится коричневая {дверь}.'),
- vobj(3, 'белая дверь', 'Слева -- белая {дверь}.'),
- },
- way = { 'lift' },
-};
-
-britva = obj {
- nam = 'бритва',
- dsc = 'На умывальнике лежит безопасная {бритва}.',
- tak = 'Я незаметно кладу бритву в карман.',
- inv = 'Бритва, немного ржавое лезвие...',
-};
-
-face = obj {
- nam = 'лицо',
- dsc = 'В зеркале отражается мое {лицо}.',
- act = function(s)
- local st = '';
- if me()._brit then
- st = ' Гладко выбритое.';
- elseif me()._mylo then
- st = ' Все в мыле.';
- end
- if galstuk._wear then
- st = st..' К тому же, в галстуке.';
- end
- return 'Это мое лицо, отраженное в зеркале.'..st;
- end,
- used = function(s, w)
- if w == 'mylo' then
- if me()._brit then
- return 'Я уже брился...';
- end
- if not mylo._pena then
- return 'Мыло совсем сухое...';
- end
- if not have('britva') then
- return 'Я намыливаю лицо и смываю грязь... Фуххх....';
- end
- me()._mylo = true;
- return 'Я намыливаю лицо...';
- end
- if w == 'britva' then
- if me()._brit then
- return 'Я уже брился...';
- end
- if not me()._mylo then
- return 'Я не намылил лицо...';
- end
- me()._brit = true;
- me()._mylo = false;
- return 'Я бреюсь... Через несколько минут я смываю мыло...';
- end
- end
-};
-
-tzerkalo = obj {
- nam = 'зеркало',
- dsc = 'Над умывальником установлено {зеркало}.',
- act = function(s)
- local st = '';
- objs():add('face');
- if galstuk._wear then
- st = ' К тому же, в галстуке...';
- end
- if me()._brit then
- return 'Грустное, но гладко выбритое лицо.'..st;
- end
- return 'Дикое, заросшее щетиной лицо смотрит из зеркала.'..st;
- end,
-};
-
-toilet = room {
- nam = 'туалет',
- pic = 'gfx/toil4.png',
- dsc = 'Довольно просторный туалет. Белый кафель. Желтые разводы. Сырость и звуки журчащей воды. Деревянная дверь ведет в коридор.',
- enter = function(s, f)
- if f == 'eroom' then
- return 'Я лезу в вентиляционное отверстие. Внутри пыльно и тихо. Я блуждаю по причудливым переплетениям вентиляции пока, наконец, не вижу над головой свет. Еще мгновение и я выталкиваю железную решетку в полу туалета...';
- end
- end,
- act = function(s, w)
- if w == 2 then
- return 'Да... Мне повезло, я чувствую, что туалет мужской...';
- end
- if w == 3 then
- return 'Странная у них система вентиляции, но благодаря ей я здесь!...';
- end
- end,
- obj = {
- vobj(2, 'унитазы', 'В этом туалете установлено всего 2 {унитаза}.'),
- 'umyvalnik',
- 'britva',
- 'tzerkalo',
- 'sushka',
- vobj(3, 'решетка', 'На полу находится железная {решетка}.'),
- },
- way = { 'eroom', 'cor4'},
- exit = function(s, t)
- if me()._mylo then
- return 'В мыле? Нет...', false
- end
- objs():del('face');
- if t ~= 'eroom' then
- return 'Я осторожно выхожу из туалета.';
- end
- end
-};
-
-toiletw = room {
- nam = 'женский туалет',
- enter = function(s, w)
- return 'Фууххх... Чуть не ошибся...', false;
- end
-};
-
-function room4x_hear()
- local ph = {
- [1] = '...Согласно соотношению неопределенностей мы не можем одновременно измерить координату частицы и ее импульс...',
- [2] = '...Мгновенная передача возмущения волновой функции не есть передача сигнала, ибо здесь нет физических объектов, движущихся быстрее света...',
- [3] = '...Редукция фон Неймана — мгновенное изменение описания квантового состояния (волновой функции) объекта, происходящее при измерении...',
- [4] = '...Допустим, две одинаковые частицы A и B образовались в результате распада третьей частицы C. В этом случае, по закону сохранения импульса, их суммарный импульс p_A + p_B должен быть равен исходному импульсу третьей частицы p_C...',
- [5] = '...представим себе, что на двух планетах в разных концах Галактики есть две монетки, выпадающие всегда одинаково. Если запротоколировать результаты всех подбрасываний, а потом сравнить их, то они совпадут. Сами же выпадания случайны, на них никак нельзя повлиять. Нельзя, например, договориться, что орёл — это единица, а решка — это ноль, и передавать таким образом двоичный код. Ведь последовательность нулей и единиц будет случайной и на том и на другом <<конце провода>> и не будет нести никакого смысла...';
- [6] = '...Впервые ЭПР-парадокс был сформулирован Альбертом Эйнштейном в 1928 году на 5-ом Сольвеевском конгрессе, в дискуссии с Нильсом Бором. Эйнштейн не признавал вероятностного характера квантовой механики и считал вероятностное описание микромира неполным...',
- [7] = '...это интерпретация квантовой механики, которая предполагает существование <<параллельных вселенных>>, в каждой из которых действуют одни и те же законы природы и которым свойственны одни и те же мировые постоянные, но которые находятся в различных состояниях...',
- [8] = 'Докторская работа Эверетта как раз и предлагала подобную альтернативу. Эверетт предложил считать, что для составной системы (каковой является частица, взаимодействующая с измерительным прибором) утверждение о том, что какая-либо подсистема находится в определённом состоянии, является бессмысленным. Это привело Эверетта к заключению об относительном характере состояния одной системы по отношению к другой...',
- [9] = '...Этот шестимерный объект можно представить в виде суперпозиции двух <<альтернативных историй>> системы S, в одной из которых наблюдался результат измерения <<вверх>>, а в другой — <<вниз>>...',
- [10] = '...Например, можно приготовить две частицы, находящиеся в едином квантовом состоянии так, что когда одна частица наблюдается в состоянии со спином, направленным вверх, то спин другой оказывается направленным вниз, и наоборот, и это несмотря на то, что согласно квантовой механике, предсказать, какие фактически каждый раз получатся направления, невозможно...',
- };
- return ph[rnd(10)];
-end
-
-room4x = room {
- nam = 'комната',
- enter = function(s, f)
- if s._num == 1 then
- return 'Я осторожно берусь за ручку и пытаюсь открыть дверь. Закрыто...', false;
- elseif s._num == 2 then
- return 'Я подхожу к двери и прислушиваюсь... -- '..room4x_hear()..' --- Ухх... Я отхожу от двери..', false;
- elseif s._num == 3 then
- return 'Я подхожу к двери и прислушиваюсь... -- Внутри я слышу, как кто-то ожесточенно спорит... -- я отхожу от двери...', false;
- elseif s._num == 4 then
- return 'Открыв дверь я захожу внутрь. На меня пристально смотрят 12 пар глаз сидящих за столами. . Еще одна пара глаз принадлежит человеку у доски. -- Простите, ошибся -- бормочу я и выхожу из комнаты...', false;
- elseif s._num == 5 then
- return 'Закрыто... ', false;
- end
- end,
-};
-
-galstuk = obj {
- nam = function(s)
- if s._gal then
- return 'галстук';
- end
- return 'тряпка';
- end,
- inv = function(s, w)
- if not s._gal then
- s._gal = true;
- return 'Я рассматриваю тряпку и понимаю, что когда-то это было галстуком.';
- end
- if s._hot then
- if not s._wear then
- s._wear = true;
- return 'Я с достоинством надеваю галстук...';
- end
- return 'Галстук надет...';
- end
- if s._mylo then
- return 'Он весь в мыле!';
- end
- if not s._water then
- return 'Он грязный! Я не надену это!';
- end
- if not s._hot then
- return 'Он мокрый! Я не надену это!';
- end
- end,
- used = function(s, w)
- if s._wear then
- return 'Галстук надет...';
- end
- if w == 'mylo' then
- if not mylo._pena then
- return 'Мыло сухое...';
- end
- s._mylo = true;
- if not s._gal then
- s._gal = true;
- return 'Намыливая тряпку, я понимаю, что когда-то это было галстуком.';
- end
- return 'Я намылил галстук...';
- end
- end,
- use = function(s, w)
- if s._wear and w ~= 'hand' then
- return 'Галстук надет...', false;
- end
- if w == 'umyvalnik' then
- if not s._mylo then
- return 'Просто водой? Вряд ли это отмоет мел...';
- end
- s._water = true;
- s._mylo = false;
- return 'Я помыл галстук в теплой воде...';
- end
- if w == 'sushka' then
- if not s._water then
- return 'Зачем мне сушить это?';
- end
- s._hot = true;
- s._water = false;
- return 'Через 5 минут я полностью высушил галстук...';
- end
- end
-};
-
-room46 = room {
- nam = 'аудитория 6',
- pic = 'gfx/room4.png',
- enter = 'Я открываю дверь и вхожу внутрь... Комната пуста...',
- dsc = 'Я нахожусь внутри аудитории... Несколько столов стоят в два ряда по направлению к доске.',
- act = function(s, w)
- if w == 1 then
- if not have('galstuk') then
- inv():add('galstuk');
- return 'На доске лежит тряпка. Я беру ее в руки.';
- end
- return 'Гм... Ничего не понимаю...';
- end
- if w == 2 then
- return 'Внизу я вижу, как следы прожекторов шарят по снежному полю...';
- end
- if w == 3 then
- return 'Я сажусь за клавиатуру, но вовремя вспоминаю, что я завязал с прошлым... Я больше не хакер - я лесник.';
- end
- end,
- obj = {
- vobj(3,'терминал', 'На каждом столе стоит {терминал}.'),
- vobj(1,'доска', 'На {доске} написаны какие-то формулы...'),
- vobj(2,'окно', '{Окно} выходит на восток.'),
- 'portrait',
- },
- way = { 'cor4' },
-};
-
-facectrl = dlg {
- nam = 'фэйсконтроль',
- pic = 'gfx/guard4.png',
- dsc = 'Я вижу перед собой неприятное лицо полного охранника.',
- obj = {
- [1] = phr('Я пришел послушать лекцию Белина...',
- '-- Я не знаю кто вы -- ухмыляется охранник -- но мне велели пускать сюда только приличных людей.',
- [[pon(2);]]),
- [2] = _phr('У меня есть приглашение!',
- '-- А мне плевать! Посмотри на себя в зеркало!!! Ты пришел слушать самого Белина -- правую руку самого... -- охранник почтительно помолчал -- Так что пошел вон..', [[pon(3,4)]]),
- [3] = _phr('Сейчас я дам тебе по роже!', '-- Ну все... Мощные руки выталкивают меня в коридор...',
- [[poff(4)]]),
- [4] = _phr('Ты, кабан! Я же тебе сказал -- у меня есть приглашение!',
- '-- Чтоооооо? Глаза охранника наливаются кровью... Мощный пинок отправляет меня в коридор...',
- [[poff(3)]]),
- [5] = _phr('Я хочу послушать лекцию Белина...',
- '-- Во-первых -- доктора Белина, а во-вторых -- без галстука нельзя...',
- [[pon(2)]]),
- [6] = _phr('Я очень хочу послушать лекцию доктора Белина!!!',
- 'Охранник смотрит на меня пристальным взглядом и нехотя произносит. -- Ваше приглашение...',
- [[pon(7)]]),
- [7] = _phr('Держи... св... пожалуйста...', 'Ладно... Проходите, не задерживайтесь... Лекция уже началась...',
- [[inv():del('invite'); return goto('hall42')]]);
- },
- exit = function(s,w)
- s:pon(1);
- end
-};
-
-hall42 = room {
- nam = 'Зал 2',
- pic = 'gfx/hall2.png',
- dsc = 'Множество людей. Судя по тишине -- лекция уже идет.',
- obj = {
- vobj(1, 'Белин', 'Перед доской стоит {Белин} -- тот самый человек, который забрал моего кота.'),
- vobj(2, 'места', 'В третьем ряду с краю я вижу несколько свободных {мест}.'),
- vobj(3, 'окно', 'Три широких {окна} выходят на запад.'),
- vobj(4, 'лампы', 'Зал освещают флоуресцентные {лампы}.'),
- },
- act = function(s, w)
- if w == 1 then
- return 'Сейчас он без пальто и шляпы и я могу его рассмотреть... Довольно полный, но высокий... Хитрая улыбка, но лицо открытое... Он ведет лекцию -- подожду пока она закончится и поговорю с ним...';
- end
- if w == 2 then
- return goto('lection');
- end
- if w == 3 then
- return 'За окнами тьма... Только белые снежинки изредка попадают в зону освещения флоуресцентных ламп.';
- end
- if w == 4 then
- return 'Шесть ламп... Ненавижу этот мерцающий свет...';
- end
- end,
- exit = function(s, t)
- if t == 'cor4' then
- return 'Не хочу терять Белина из виду...', false;
- end
- end,
- enter = function(s, f)
- if f == 'facectrl' then
- return 'Я прохожу в лекционный зал...';
- end
- if not galstuk._wear then
- facectrl:pon(5);
- facectrl:poff(1);
- end
- if not me()._brit or not galstuk._wear then
- return cat(
-'Я захожу в зал, когда меня останавливает человек в форме с надписью <<ОХРАНА>>. В его руках помповое ружье.^^', goto('facectrl')), false;
- end
- facectrl:poff(1, 5);
- facectrl:pon(6);
- return goto('facectrl'), false;
- end,
- way = { 'cor4' },
-};
-
-hall41 = room {
- nam = 'Зал 1',
- dsc = [[Я захожу в пустой зал. Похоже -- это один из залов для проведения лекций. Множество мест уходят
-под небольшим уклоном к потолку.]],
- pic = 'gfx/hall1.png',
- act = function(s, w)
- if w == 1 then
- return 'Глядя в ночную темноту, я с тоской вспоминаю Барсика...';
- end
- if w == 2 then
- return 'Примерно такие были у нас в институте, когда я... Ладно...';
- end
- if w == 3 then
- return 'Все, что я мог бы вспомнить, я благополучно забыл.';
- end
- end,
- obj = {
- vobj(1, 'окна', 'Три больших {окна} выходят на западную сторону.'),
- vobj(2, 'стол', 'Длинный {стол} стоит перед доской.'),
- vobj(3, 'доска', 'На {доске} видны следы формул прошлой лекции.'),
- 'portrait',
- },
- way = {
- 'cor4',
- },
-};
-
-cor4 = room {
- nam = 'коридор 4-го этажа',
- pic = 'gfx/cor4.png',
- dsc = 'Я нахожусь в коридоре. Потолки на этом этаже очень высокие. В конце коридора находятся туалеты. Под ногами -- ковровая дорожка зеленого цвета.',
- act = function(s, w)
- if not tonumber(w) then
- return;
- end
- if w == 11 then
- return 'Некоторые из них заходят в зал 2.';
- end
- if w == 1 then
- return 'Я тоскливо гляжу в ночную тьму... Я понимаю -- что очень устал... Но я должен идти...';
- end
- if w == 12 then
- return 'Эта дверь, как и многие здесь, снабжена считывателем смарт-карт. На нем горит красная лампочка.';
- end
- if tonumber(w) >=5 and tonumber(w) <=9 then
- room4x._num = w - 4;
- return goto('room4x');
- end
- if w == 10 then
- ways():add('room46');
- return goto('room46');
- end
- if w == 2 then
- ways():add('hall41');
- return goto('hall41');
- end
- if w == 3 then
- ways():add('hall42');
- return goto('hall42');
- end
- end,
- used = function(s, w, ww)
- if w == 12 and ww == 'card' then
- return 'Я подношу карточку к считывателю... Биип... Доступ не разрешен...';
- end
- end,
- obj = {
- vobj(1, 'окно', '{Окно} выходит на юг.'),
- vobj(2, 'зал 1','На западной стороне я вижу два широких дверных проема: {зал 1},'),
- vobj(3, 'зал 2', '{зал 2}.'),
- vobj(5, 'аудитория 1', 'На восточной стороне расположены двери поменьше. Надписи на дверях: {аудитория 1},'),
- vobj(6, 'аудитория 2', '{аудитория 2},'),
- vobj(7, 'аудитория 3', '{аудитория 3},'),
- vobj(8, 'аудитория 4', '{аудитория 4},'),
- vobj(9, 'аудитория 5', '{аудитория 5},'),
- vobj(10, 'аудитория 6', '{аудитория 6}.'),
- vobj(11, 'люди', 'Время от времени в коридоре появляются {люди}.'),
- vobj(12, 'входная дверь', 'Входная {дверь} находится на северном конце коридора.'),
- 'portrait',
- },
- way = {
- 'toilet',
- 'toiletw',
- }
-};
-floor4 = room {
- nam = 'площадка 4-го этажа',
- pic = 'gfx/floor4.png',
- dsc = 'На четвертом этаже высокие потолки.',
- act = function(s, w)
- if w == 1 then
- return 'Тьма... Нет ни одного огонька... Я даже не вижу звезд, тусклый, но тягостный свет ламп дневного освещения мешает их увидеть...';
- end
- if w == 2 then
- return 'Я ненавижу лифты...';
- end
- if w == 3 or w == 4 then
- return 'Обычная дверь для этого здания. Электронный замок. Без карточки я не пройду.';
- end
- end,
- used = function(s, w, ww)
- if ww == 'card' then
- if w == 3 or w == 4 then
- return [[Я подношу карточку к считывателю. Бииип... В доступе отказано...]];
- end
- end
- end,
- obj = {
- vobj(1, 'окно','{Широкое} окно смотрит на запад.'),
- vobj(2, 'лифты', 'Площадка с четырьмя {лифтами} тускло освещена лампами.'),
- vobj(3, 'южная дверь', 'Две двери ведут в северный и южный коридоры. Надпись на южной {двери}: <<уровень:4 категория:теоретическая физика>>'),
- vobj(4, 'северная дверь', 'На северной {двери}: <<уровень:4 категория: биология>>'),
- },
- way = { 'lift' },
-};
-
-floor5 = room {
- nam = 'площадка 5-го этажа',
- pic = 'gfx/floor5.png',
- dsc = [[Потолки на пятом этаже очень высокие.]],
- act = function(s, w)
- if w == 1 then
- return 'Мои ноги утопают в красном бархате... Не наследить бы...';
- end
- if w == 2 then
- return 'Нет, все-таки это хрусталь...';
- end
- if w == 3 then
- return 'Я подхожу к окну... Любопытно, я вижу, что окно выходит на довольно широкий участок крыши, который проходит через фронтальную часть здания...';
- end
- if w == 4 or w == 5 then
- return 'Изучить двери мне мешает охранник... А мой пропуск здесь не подойдет...';
- end
- if w == 6 then
- return 'Пока он не обращает на меня внимания, но все-равно не стоит нарываться...';
- end
- end,
- used = function(s, w)
- if not tonumber(w) then
- return
- end
- if w == 6 then
- return 'Не надо его раздражать...';
- end
- if w >=1 and w <=5 then
- return 'Я не буду делать это при охраннике.';
- end
- end,
- obj = {
- vobj(1, 'ковер', 'Лифтовую площадку покрывает красный {ковер}.'),
- vobj(2, 'люстра', 'Хрустальная {люстра} висит на высоком потолке.'),
- vobj(3, 'окно', 'Широкое {окно} выходит на запад.'),
- vobj(4, 'информация', 'Я вижу две двери, ведущие в южный и северный коридоры. На южной {двери} написано: <<уровень 5, категория: информация>>.'),
- vobj(5, 'красная дверь', 'На северной {двери} нет надписей. Это массивная дверь, обитая красной кожей.'),
-
- vobj(6, 'охранник', 'Между проходами в коридоры установлен стол, за которым сидит {охранник},');
- },
- way = { 'lift' },
-};
-
diff --git a/games/cat/ep3.lua b/games/cat/ep3.lua
deleted file mode 100644
index 8c00548..0000000
--- a/games/cat/ep3.lua
+++ /dev/null
@@ -1,1639 +0,0 @@
-lection = room {
- nam = 'Лекция Белина',
- pic = 'gfx/lection.png',
- dsc = [[Я пробираюсь к месту и сажусь... Отсюда хорошо слышно -- послушаем именитого физика... -- Думаю я... ^^Итак, в ноябре 1935г. Шредингер опубликовал статью,
-в которой проводился следующий мысленный эксперимент -- продолжал Белин --
-в чем суть эксперимента? -- С этими словами Белин вытащил и поставил на стол
-ящик странного вида -- Люблю опыты -- белоснежная улыбка тускло блеснула в свете ламп --
-Как вы можете видеть это ящик -- Белин похлопал ладонью
-по гладкой поверхности. -- В ящик встроена капсула с ядовитым газом
-Кроме того, в статико-динамическом поле ящика находятся счетчик радиации,
-изотопный элемент и таймер. Параметры эксперимента подобраны так, что вероятность того, что ядро распадётся за 1 час, составляет 50%.^^
-
-
-Если ядро распадается, оно приводит механизм в действие, он открывает ёмкость с газом. --
-Пока все просто -- не так ли, господа? -- Улыбается Белин -- но дело в том,
-что Шредингер в своем эксперименте помещает в ящик кота -- живое существо. ^^
-
-Согласно квантовой механике, если над ядром не производится наблюдения, то его состояние описывается суперпозицией (смешением) двух состояний — распавшегося ядра и нераспавшегося ядра, следовательно, кот, сидящий в ящике, и жив, и мёртв одновременно. -- Белин повышает голос. -- можно сказать, что это просто игры разума, отвлеченная лирика, но я покажу и докажу, что это не совсем так... ^^
-
--- Итак, если ящик открыть, то экспериментатор обязан увидеть только какое-нибудь одно конкретное состояние — <<ядро распалось, кот мёртв>> или <<ядро не распалось, кот жив>>. Сам Шредингер думал, что его парадокс доказывает несостоятельность квантовой механики, но мы то с вами знаем, что квантовая механика и есть истинное представление о нашем мире -- снова повышает тон голоса Белин -- и вот, независимо друг от друга, что доказывает отчасти истинность предположения -- Ганс Моравек в 1987 и Бруно Маршал в 1988 рассмотрели ситуацию с точки зрения самого кота!^^
-
--- Если верна многомировая интерпретация Эверетта, то в результате каждого проведенного эксперимента с котом вселенная расщепляется на две вселенных, в одной из которых кот остается жив, а в другой погибает. В мирах, где кот умирает, он перестает существовать. Напротив, с точки зрения неумершего кота, эксперимент будет продолжаться, не приводя к исчезновению кота. Это происходит потому, что в любом ответвлении кот способен наблюдать результат эксперимента лишь в том мире, в котором он выживает. И если многомировая интерпретация верна, то кот может заметить, что он никогда не погибнет в ходе эксперимента... -- Белин замолкает и осматривает зал... ^^
-
--- Но что вытекает из этого, господа? Я спрашиваю, что из этого вытекает? -- Представим, что участник эксперимента взрывает ядерную бомбу вблизи себя. С точки зрения многомировой интерпретации, практически во всех параллельных вселенных ядерный взрыв уничтожит участника. Но несмотря на это, должно существовать небольшое множество альтернативных вселенных, в которых участник каким-либо образом выживает. И мы переходим к идее -- Белин снова поднял голос -- идее квантового бессмертия!!! ^^
-
--- Идея квантового бессмертия состоит в том, что участник остаётся в живых, и тем самым способен воспринимать окружающую реальность, по меньшей мере в одной из вселенных в множестве, пусть даже количество таких вселенных пренебрежимо мало в сравнении с количеством всех возможных вселенных. Таким образом, со временем участник обнаружит, что он может жить вечно!!! ^^
-
-Мы все с вами тяжело работали этот год, под четким руководством... -- тут Белин бросил взгляд в сторону портретов -- и должен вам сказать, что информации в нашем информационном центре -- Белин посмотрел в потолок -- достаточно, чтобы доказать, я повторяю, научно доказать теоретически и экспериментально истинность многомировой интерпретации... -- Но что это значит для нас? -- Вы не можете этого видеть, но -- Белин смотрит на часы -- уже через несколько минут состав с ураном прибывает к задним воротам института... Урана хватит для того, чтобы обеспечить каждого из вас ядерной бомбой. Так как вы скоро убедитесь в том, что квантовое бессмертие это реальность, то каждый из нас сможет стать непобедимым террористом!!! Вселенная расщепится на множество миров, в каждом из который Вы -- палец Белина указывает в зал -- будете его диктатором и господином!!! -- Белин почти кричал...^^
-
-Зал не выдержал и взревел. Люди вставали и хлопали... Их глаза горели каким-то бешеным огнем... О Боже, -- подумал я -- это какое-то наваждение... Мои ноги не слушались меня -- я сидел на своем месте и не мог пошевелиться...^^
-
-Но я отвлекся -- говорит Белин -- продолжим наш опыт. С этими словами он достал из-под стола живой комочек... Это был мой Барсик... -- Сейчас я помещу эту кошку в ящик и мы с вами... -- красная пелена застилает мои глаза...
- ]],
- enter = function(s)
- -- end of episode 2
- eside = nil;
- moika = nil;
- eating = nil;
- kitchen = nil;
- stolcorridor = nil;
- entrance = nil;
- floor2 = nil;
- eroom = nil;
- room33 = nil;
- room3x = nil;
- cor3 = nil;
- toilet3 = nil;
- floor3 = nil;
- toilet = nil;
- toiletw = nil;
- room4x = nil;
- room46 = nil;
- hall42 = nil;
- hall41 = nil;
- floor4 = nil;
- floor5 = nil;
- povardlg = nil;
- kitchendlg = nil;
- facectrl = nil;
- end,
- act = function(s, w)
- if w == 1 then
- set_music("mus/under.s3m");
- return goto('escape1');
- end
- end,
- obj = {
- vobj(1, 'дальше', '{Дальше}.'),
- };
-};
-
-profdlg = dlg {
- nam = '!!!',
- pic = 'gfx/me.png',
- dsc = 'Я собираюсь с силами, встаю и во всю глотку кричу...',
- obj = {
- [1] = phr('Это кот, а не кошка!',
- '-- Рука Белина останавливается -- его взгляд фокусируется на мне -- он узнает меня!! -- Охрана -- в зале посторонний!!! Убе... Уберите его!!! -- кричит он..',
- [[poff(2);escape1.obj:add('guardian')]]),
- [2] = phr('Не трогай моего кота!',
- '-- Белин замирает, затем смотрит мне прямо в глаза -- его лицо выражает удивление -- Охрана!!! Охрана!!! В зале посторонний!!!',
- [[poff(1);escape1.obj:add('guardian')]]),
- },
-};
-
-profdlg2 = dlg {
- nam = 'Белин',
- pic = 'gfx/prof2.png',
- dsc = 'Белин бледен. Он смотрит на дробовик рассеянным взглядом.',
- obj = {
- [1] = phr('Я пришел за своим котом.',
- 'Я выхватываю Барсика из руки Белина и засовываю себе за пазуху.',
- [[inv():add('mycat'); lifeon('mycat')]]),
- [2] = phr('Скажи им, что бы расходились!!!',
- '-- Белин бледен, похоже он не понимает меня..',
- [[pon(3)]]),
- [3] = _phr('Ну же!!! Скажи им, чтобы расходились...', 'Я трясу его. Белин не чувствует, он лишь смотрит на черные стволы дробовика.',[[pon(3); back();]]);
- },
-};
-gdlg1 = dlg {
- nam = 'охранник',
- pic = 'gfx/guard42.png',
- dsc = 'Я кричу охраннику и не узнаю свой голос...',
- obj = {
- [1] = phr('Положи свое ружье прикладом вперед на стол и толкни его сюда..',
- 'Охранник неуверенно смотрит на меня..',
- [[pon(2)]]),
- [2] = _phr('Я сказал на стол ружье!!! -- я посильнее надавливаю стволами на Белина -- он близок к обмороку.', 'Охранник осторожно кладет помповое ружье на стол и толкает его ко мне... -- я быстро забираю ружье. Теперь в левой руке у меня обрез, в правом -- помповое ружье.',
- [[pon(3); inv():add('shotgun')]]),
- [3] = phr('Не нравилось тебе мое лицо да?? Дааа???',
- 'Охранник молчит, на его лбу выступает пот...',
- [[pon(3); back();]]),
- };
-};
-
-shotgun = obj {
- nam = 'ружье',
- inv = 'Помповое ружье... На 6 зарядов. Интересно, сколько там осталось?',
- dsc = 'На полу валяется помповое {ружье}.',
- tak = function(s)
- if s._unloaded then
- return 'Оно мне больше не нужно. Полностью разряжено.', false
- end
- return 'Я беру свое ружье обратно.';
- end,
-};
-
-guardian = obj {
- nam = 'охранник',
- dsc = function(s, w)
- if not professor._gun then
- return 'Я вижу как {охранник} с помповым ружьем медленно, но верно пробирается к моему месту.';
- end
- if have('shotgun') then
- return 'Я вижу обезоруженного {охранника}, внимательно смотрящего на меня.';
- end
- return 'Я вижу {охранника}, неуверенно держащего в руках помповое ружье.';
- end,
- act = function(s, w)
- if not professor._gun then
- return 'Скоро он доберется до меня...';
- end
- return goto('gdlg1');
- end,
- used = function(s, w)
- if w == 'shotgun' then
- return 'Нет, я не могу пойти на это...';
- end
- if w == 'gun' then
- if not professor._gun then
- return 'Мой обрез не для дальнего боя...';
- end
- return 'Я опасаюсь отводить обрез от Белина, к тому же, потом мне придется его перезаряжать...';
- end
- end
-};
-
-professor = obj {
- nam = 'Белин',
- dsc = function(s, w)
- if not s._gun then
- return 'Перед доской стоит {Белин} и держит в руке моего Барсика.';
- end
- return 'Я упираюсь обоими стволами дробовика в грудь {Белина}.';
- end,
- act = function(s)
- if not s._gun then
- return goto('profdlg');
- end
- return goto('profdlg2');
- end,
- used = function(s, w)
- if w == 'gun' then
- if s._gun then
- return 'Я еще сильнее надавливаю обоими стволами на грудь Белина.';
- end
- s._gun = true;
- objs():add('guardian');
- gun._hidden = false;
- return 'Я достаю обрез из-под одежды и, перепрыгивая через стол, бросаюсь к Белину.';
- end
- end,
-};
-pdlg = dlg {
- nam = 'люди',
- pic = 'gfx/me.png',
- dsc = 'Я смотрю в зал и кричу...',
- obj = {
- [1] = phr('Вас обманывают!!! Никакого доказательства нет!!!',
- '-- никакой реакции...',[[pon(2)]]),
- [2] = _phr('Мир един!!! Каждый из вас знает об это с детства!!! Уходите от сюда!! Бегите от этих сектантов!!!', ' -- ответом мне было молчание...'),
- [3] = phr('Стадо баранов!!! Неужели вас так легко обмануть???',
- '-- они молчат -- и мне не нравится их взгляды...',
- [[pon(3); back();]]),
- },
-};
-narod = obj {
- nam = 'люди',
- dsc = function(s)
- if not professor._gun then
- if seen('guardian') then
- return '{Люди} в зале смотрят на меня с недоумением. Они в замешательстве.';
- end
- return '{Люди} в зале следят за Белиным.';
- end
- return '{Люди} в зале замерли. Они не спускают с меня взгляд. Если я ошибусь -- мне конец... И всему миру...';
- end,
- act = function(s)
- if professor._gun then
- return goto('pdlg');
- end
- if seen('guardian') then
- return 'Пока они на меня не бросились и это хорошо...';
- end
- return 'Фанатики, они фанатики...';
- end,
- used = function(s, w)
- if w == 'gun' or w =='shotgun' then
- return 'Я думаю, что патронов не хватит.';
- end
- return 'Увы...';
- end
-};
-
-win = obj {
- nam = 'окно',
- dsc = function(s)
- local st = '';
- if s._broken then
- st = ' Одно из окон разбито.';
- end
- return 'Три широких {окна} выходят на запад.'..st;
- end,
- act = 'За окнами тьма... Только белые снежинки изредка попадают в зону освещения флоуресцентных ламп.';
- used = function(s, w)
- if w ~= 'gun' and w ~= 'shotgun' then
- return 'Не поможет...';
- end
- if s._broken then
- return 'Уже разбито...';
- end
- if not have('shotgun') then
- return 'Охранник подстрелит меня..';
- end
- s._broken = true;
- ways():add('window');
- return 'Я разбиваю прикладом ближайшее окно...';
- end
-};
-
-escape1 = room {
- nam = 'Зал 2',
- dsc = 'Я нахожусь в зале. Люди в зале ждут продолжения эксперимента.',
- pic = function()
- if professor._gun then
- return 'gfx/meandgun.png';
- end
- return 'gfx/lection2.png';
- end,
- obj = {
- 'win',
- vobj(4, 'лампы', 'Зал освещают флоуресцентные {лампы}.'),
- 'professor',
- 'narod',
- vobj(5, 'ящик', 'На столе стоит {ящик}.'),
- 'portrait',
- },
- act = function(s, w)
- if w == 5 then
- return 'Проклятая коробка...';
- end
- if w == 4 then
- return 'Шесть ламп... Ненавижу этот мерцающий свет...';
- end
- end,
- used = function(s, w, ww)
- if ww == 'gun' or ww == 'shotgun' then
- if not professor._gun then
- return 'Не стоит...';
- end
- if w == 4 then
- return 'Темнота поможет не только мне, но и им... А их больше...';
- end
- if w == 5 then
- return 'Там яд. Я боюсь навредить моему Барсику.';
- end
- end
- end,
- exit = function(s, t)
- if t == 'window' and not have('mycat') then
- return 'А как же Барсик?', false
- end
- if t == 'cor4' then
- return 'Я должен что-то сделать сейчас же!', false;
- end
- end,
- way = { 'cor4' },
-};
-lest = obj {
- nam = function(s, w)
- if s._seen then
- return 'лестница';
- else
- return 'нечто';
- end
- end,
- dsc = function(s, w)
- if s._seen then
- return 'За метелью я едва различаю пожарную {лестницу}!';
- end
- return 'За метелью я едва различаю контуры какой-то {конструкции}.';
- end,
- act = function(s, w)
- if not s._seen then
- ways():add('ladder');
- s._seen = true;
- return 'Это же пожарная лестница!!!';
- end
- return 'Прыгать или нет? Вот в чем вопрос...';
- end,
-};
-
-window = room {
- nam = function(s)
- if here() == window then
- return 'на подоконнике';
- end
- return 'в окно';
- end,
- pic = 'gfx/fromwin1.png',
- enter = "Это безумие, но все же я бросаюсь к окну... За спиной я слышу рев толпы...";
- dsc = 'Я стою на подоконнике и всматриваюсь в ночную пустоту.',
- obj = {
- 'lest',
- },
- exit = function(s, t)
- if t == 'escape1' then
- return 'Мне нельзя назад... Там толпа фанатиков...', false;
- end
- end,
- way = { 'escape1',},
-};
-
-down = room {
- nam = 'вниз';
-};
-
-window5 = obj {
- nam = 'окно',
- dsc = function(s, w)
- if s._broken then
- return 'Слева от меня, разбитое {окно}.';
- end
- return 'Слева от меня желтый огонек {окна}.';
- end,
- act = function(s)
- if not s._broken then
- return 'Окно закрыто...';
- end
- return goto('room5');
- end,
- used = function(s, w)
- if w == 'gun' or w == 'shotgun' then
- if s._broken then
- return 'Уже разбито...';
- end
- s._broken = true;
- return 'Я выбиваю стекло прикладом... Осколки стекла падают в темноту...';
- end
- end
-};
-
-
-up = room {
- _num = 0;
- nam = 'наверх',
- enter = function(s, w)
- s._num = s._num + 1;
- if s._num == 2 then
- lifeon('ladder');
- return 'Внезапно, ночную тьму разрезает луч прожектора и тишину нарушает вой сирены... Похоже, внизу меня заметили...', false;
- end
- if s._num > 4 then
- ladder.way:del('up');
- ladder.obj:add('window5');
- end
- return 'Я медленно ползу вверх...', false;
- end
-};
-
-ladder = room {
- nam = 'лестница',
- pic = 'gfx/ladder.png',
- dsc = [[Я стою на холодной лестнице. Ледяные иголки снежинок больно ударяются о мое лицо.]],
- act = function(s, w)
- if w == 1 then
- return 'Я скоро окоченею... Надо двигаться..';
- end
- end,
- obj = {
- vobj(1, 'поручни', 'В моих руках, железные {поручни}.'),
- };
- enter = function(s)
- inv():del('gun');
- return [[Я разбегаюсь и прыгаю... Несколько секунд мое сердце сжимается, но я чувствую тепло Барсика за пазухой и уже в следующий миг мои руки хватаются за черную сталь... Дробовик срывается с моего плеча и летит вниз...]];
- end,
- way = { 'up', 'down' },
- life = function(s)
- if rnd(2) == 1 then
- return 'Я слышу треск автоматных очередей -- несколько пуль проходят совсем рядом...';
- end
- end,
- exit = function(s, t)
- if t == 'down' then
- if s._shoot then
- return 'Меня убьют... И Барсика... И разрушат весь мир...', false;
- end
- lifeon('ladder');
- s._shoot = true;
- return 'Я начинаю спускаться вниз, когда ночную тьму вдруг разрезает луч прожектора и тишину нарушает вой сирены... Похоже, внизу меня заметили...', false;
- end
- if t ~= 'up' then
- lifeoff('ladder');
- end
- end
-};
-
-hand = obj {
- nam = 'кровавая рука',
- inv = 'Моя рука кровоточит... Мне кажется, что скоро я потеряю сознание...',
- life = 'Капли крови падают с моей правой руки на пол...',
- used = function(s, w)
- if w == 'galstuk' then
- inv():del('galstuk');
- inv():del('hand');
- lifeoff('hand');
- return 'Я перевязываю руку галстуком... Пока сойдет...';
- end
- end
-};
-
-computers = obj {
- nam = 'компьютеры',
- dsc = 'Большую площадь занимают высокие стойки с компьютерным {оборудованием}. Тихое жужжание вентиляторов едва слышно. Нервно подмигивают лампочки сетевого оборудования.';
- act = function(s)
- if kover._fire then
- return 'Ну что же... Гори, зло, гори!!! Пора выбираться отсюда.';
- end
- return 'Это оборудование хранит зло... Мне нужно уничтожить все это, но как? Из своего прошлого я знаю, что самый надежный способ уничтожить информацию на магнитных носителях -- провести ее через точку Кюри, другими словами -- сжечь это все к чертям собачьим... Но где мне взять огонь?';
- end,
- used = function(s, w)
- if w == 'shotgun' then
- return 'Расстрелять серверы? Ненадежно... Я должен сжечь это зло...';
- end
- end
-};
-
-poroh = obj {
- nam = 'порох',
- inv = 'Этот порох должен мне помочь.',
-};
-
-trut = obj {
- nam = 'трут',
- inv = 'Кусок газеты с порохом. Да это же трут!!!',
- use = function(s, w)
- if w == 'ibp' and ibp._knife and not ibp._trut then
- ibp._trut = true;
- inv():del('trut');
- return 'Я кладу трут на ИБП.';
- end
- end
-};
-fire = obj {
- nam = 'огонь',
- inv = 'Бумажка быстро горит... Надо что-то делать!!!',
- use = function(s, w)
- if w == 'poroh' then
- return 'Рванет прямо в руке.';
- end
- if w == 'news' then
- return 'Я отрываю еще кусок от газеты. Пламя перекидывается на него.';
- end
- inv():del('fire');
- if w ~= 'kover' then
- return 'Бумага догорает и гаснет...';
- end
- if kover._fire then
- return 'Я кидаю бумажку на горящий ковер...';
- end
- kover._fire = true;
- return 'Я кладу бумагу на ковер... Волоски ковра вспыхивают... Похоже, начинается пожар..';
- end
-};
-
-ibp = obj {
- nam = 'ИБП',
- dsc = 'Один разобранный {ИБП} валяется на полу.',
- inv = function(s)
- if not s._knife then
- return 'Это источник бесперебойного питания. Что мне с ним делать?';
- end
- local st = '';
- if s._trut then
- st = ' На батарее лежит бумага с порохом.';
- end
- return 'Разобранный ИБП. Я вижу клеммы, ведущие к батарее...'..st;
- end,
- act = function(s)
- if not have('ibp') then
- if not have('fire') and not kover._fire then
- take('ibp');
- return 'Я снова беру ИБП в руки.';
- end
- return 'Мне он больше не нужен.';
- end
- return s:inv();
- end,
- used = function(s, w)
- if not have('ibp') then
- return 'Не сработает...';
- end
- if w == 'knife' then
- s._knife = true;
- return 'Я раскручиваю винты и разбираю ИБП. Теперь я вижу клеммы, ведущие к батарее...';
- end
- if w == 'provodki' and s._knife then
- if not provodki._knife then
- return 'Проводки не оголены.';
- end
- if not s._trut then
- return 'Я подсоединяю проводки к клеммам и замыкаю усики проводов -- от замыкания проскакивает искра. Нужен трут...';
- end
- drop('ibp');
- ibp._trut = false;
- inv():add('fire');
- return 'Я подсоединяю проводки к клеммам и замыкаю усики проводов. Проскакивает искра и перекидывается на трут. Трут вспыхивает!!! Огонь!!!';
- end
- if w == 'provod' then
- return 'Я вставил, а затем снова вытащил провод из ИБП... Хммм...';
- end
- end,
-};
-
-provodki = obj {
- nam = 'тонкие проводки',
- inv = function(s)
- if s._knife then
- return 'Пара тонких проводков с усиками на конце.'
- end
- return 'Пара тонких проводков.'
- end,
- used = function(s, w)
- if w == 'knife' and not s._knife then
- s._knife = true;
- return 'Я отрезаю изоляцию с концов проводка и достаю тоненькие усики.';
- else
- return 'Не сработает...';
- end
- end
-};
-
-provod = obj {
- nam = 'провод от ИБП',
- inv = 'Это провод от ИБП.',
- used = function(s, w)
- if w == 'knife' then
- if not knife._oster then
- return 'Лезвие ножа слишком тупое...';
- end
- inv():del('provod');
- inv():add('provodki');
- return 'Я разрезаю оплетку и достаю две жилы провода.'
- end
- end
-};
-
-ups = obj {
- nam = 'ибп',
- dsc = 'Множество {источников бесперебойного питания} стоят у каждой стойки.',
- act = function(s)
- if have('hand') then
- return 'У меня поранена рука. Кровь так и хлещет, я не могу таскать ИБП.';
-
- end
- if not have('ibp') and not seen('ibp') then
- inv():add('ibp');
- inv():add('provod');
- return 'Немного порывшись я отсоединяю один из источников и держу его в руках...';
- end
- return 'Я уже брал один UPS.';
- end,
-};
-
-kover = obj {
- nam = 'ковер',
- dsc = function(s)
- if s._fire then
- return '{Ковер} на полу занимается пламенем.';
- end
- return 'На полу постелен красный {ковер}.';
- end,
- act = 'Ненужная роскошь.',
-};
-
-room5 = room {
- nam = 'центр информации';
- pic = 'gfx/servers.png',
- dsc = [[Я в огромном помещении, занимающем всю южную часть института.]],
- enter = function(s, f)
- if f == 'ladder' then
- set_music('mus/hybrid.xm');
- lifeon('hand');
- inv():add('hand');
- return 'Я прыгаю и хватаюсь за раму окна. Моя правая рука в крови. Не обращая внимания на боль, я спрыгиваю на пол комнаты...';
- end
- end,
- exit = function(s, f)
- set_music("mus/under.s3m");
- end,
- act = function(s, w)
- if w == 1 then
- return 'Я не полезу назад... Там холодно и стреляют...';
- end
- end,
- obj = { 'computers', 'ups',
- vobj(1, 'окно', 'В разбитое {окно} дует холодный зимний ветер.'),
- 'kover',
- 'dout',
- 'portrait',
- },
-};
-dout = obj {
- nam = 'дверь',
- dsc = function(s)
- return 'Далеко впереди я могу видеть выходную {дверь}.'
- end,
- act = function(s)
- if not kover._fire then
- return 'Это центр обработки информации. Я должен уничтожить его, чтобы спасти мир от заразы, что хранится в недрах его накопителей...';
- end
- return 'Я подбегаю к двери. Дверь ведет на площадку пятого этажа и она электронная!!! Это значит, что открыть я ее могу только с помощью карточки с требуемым уровнем доступа. Я сгорю?';
- end,
- used = function(s, w)
- if not kover._fire then
- return s:act();
- end
- if w == 'card' then
- return 'Я подношу карточку к двери. Биип -- в доступе отказано! Я сгорю здесь!!!';
- end
- if w == 'shotgun' then
- return goto('escape2');
- end
- return 'Не поможет...';
- end
-};
-
-handgdlg = dlg {
- nam = 'охранник',
- pic = 'gfx/handhoh.png',
- dsc = 'Охранник -- еще молодой парень лет 30 -- смотрит на меня. Он растерян.',
- obj = {
- [1] = phr('Отдай мне свое оружие!', '-- Я без оружия -- качает охранник головой... Не знаю верить ему или нет, но обыскивать его мне не хочется...'),
- [2] = phr('Мне нужен ключ от красной двери.', 'Охранник бледнеет. -- Ни у кого нет ключа от ЭТОЙ двери. -- произносит он. -- Что за чушь? -- Думаю я.'),
- [3] = phr('Ок! Просто стой и не дергайся.', 'Охранник молча смотрит на меня',
- [[pon(3);back();]]),
- },
-};
-
-win5 = obj {
- nam = 'окно',
- dsc = function (s)
- if s._broken then
- return 'В разбитое {окно} завывает зимний ветер. Снежинки вихрем залетают на этаж.';
- end
- return 'Широкое {окно} выходит на запад.';
- end,
- act = function(s)
- if not s._broken then
- return 'Я подхожу к окну... Любопытно, я вижу, что окно выходит на довольно широкий участок крыши, который проходит через фронтальную часть здания...';
- end
- return 'Окно разбито... Третье за сегодня.';
- end,
- used = function(s, w)
- if s._broken then
- return s:act();
- end
- if w == 'shotgun' then
- s._broken = true;
- ways():add('krysha');
- return 'Уххх.... Третье окно за сегодня... Я размахиваюсь и осколки стекла вылетают на крышу...';
- end
- end,
-};
-
-escape2 = room {
- _timer = 0,
- nam = 'площадка 5-го этажа',
- pic = 'gfx/floor5e.png',
- dsc = [[Потолки на пятом этаже очень высокие.]],
- enter = function(s, f)
- if f == 'room5' then
- lifeon('escape2');
- return 'В бессилии я бью прикладом в ненавистную дверь. И вдруг, через несколько секунд слышу, как кто-то подходит к двери с внешней стороны... Это охранник!!! Писк срабатывания считывателя -- и вот, дверь открывается. Охранник пятится -- ему в грудь упирается ствол помпового ружья. Мы выходим на площадку пятого этажа.';
- end
- if f == 'krysha' then
- lifeon('escape2');
- end
- end,
- life = function(s)
- s._timer = s._timer + 1;
- if s._timer == 3 then
- return 'Внезапно, на этаже раздается звук сирены. -- Внимание!!! На пятом этаже лицо с нулевым уровнем допуска. Повторяю... -- льется голос из невидимых динамиков.';
- end
- if s._timer > 3 then
- return '-- На пятом этаже лицо с нулевым уровнем доступа!!! -- от воя сирены меня начинает мутить.';
- end
- end,
- act = function(s, w)
- if w == 1 then
- return 'Мои ноги утопают в красном бархате... Проклятая роскошь!';
- end
- if w == 2 then
- return 'Нет, все-таки это хрусталь...';
- end
- if w == 4 then
- return 'Пожар уже начался...';
- end
- if w == 5 then
- return 'Не думаю, что мой пропуск здесь подойдет.';
- end
- if w == 6 then
- return goto('handgdlg');
- end
- end,
- used = function(s, w, ww)
- if w == 6 then
- return 'Я держу охранника на мушке.';
- end
- if w == 5 then
- return 'Не поможет.';
- end
- end,
- obj = {
- vobj(1, 'ковер', 'Лифтовую площадку покрывает красный {ковер}.'),
- vobj(2, 'люстра', 'Хрустальная {люстра} висит на высоком потолке.'),
- 'win5',
- vobj(4, 'информация', '{Дверь} в центр обработки информации распахнута. Из нее начинает валить дым.'),
- vobj(5, 'красная дверь', 'Напротив нее находится {дверь} без надписей. Это массивная дверь, обитая красной кожей.'),
-
- vobj(6, 'охранник', 'В центре площадки подняв руки, стоит {охранник}.');
- },
- way = { 'lift','room5' },
- exit = function(s, t)
- if t == 'room5' then
- return 'Там пламя!', false
- end
- if t == 'lift' then
- return 'Я вижу, что лампочки вызова всех лифтов горят. Скорее всего это означает, что сюда поднимается охрана... Надо спешить!', false;
- end
- if t == 'krysha' then
- lifeoff('escape2');
- end
- end
-};
-
-swin = obj {
- nam = 'южное окно',
- dsc = 'Из южного {окна} валит дым.',
- act = 'Да, это одно из окон информационного центра. Я заглядываю в окно и вижу пламя.',
-};
-nwin = obj {
- nam = 'северное окно',
- dsc = function(s)
- local st = '';
- if s._broken then
- st = ' Оно разбито.';
- end
- return 'Северное {окно} светит в темноту желтым светом.'..st;
- end,
- act = function(s)
- if s._broken then
- return goto('hall5');
- end
- return 'Гм... Я заглядываю в окно и вижу прекрасный зал.';
- end,
- used = function(s, w)
- if w == 'shotgun' then
- s._broken = true;
- ways():add('hall5');
- return 'Уххх... Надеюсь, это последнее??? Я размахиваюсь и разбиваю стекло прикладом помпового ружья.';
- end
- end,
-};
-
-hall5 = room {
- nam = 'зал',
- pic = 'gfx/hall5.png',
- enter = function(s, f)
- if f == 'krysha' then
- return 'Я спрыгиваю в зал и оглядываюсь...';
- end
- end,
- act = function(s, w)
- if w == 1 then
- return 'Ненужная роскошь.';
- end
- if w == 2 then
- return 'Я провожу ладонью по скользкой поверхности одной из колонн... Мрамор!';
- end
- if w == 3 then
- return 'Но уж эта-то люстра точно из горного хрусталя.';
- end
- if w == 4 then
- return 'Темно... Хотя... Что это? Мне кажется, что у задней стороны института стоит поезд.';
- end
- if w == 5 then
- return 'У разбитого окна кружатся снежинки.';
- end
- if w == 6 then
- if s.way:srch('escape3') then
- return goto('escape3');
- end
- return goto('gudlg');
- end
- if w == 7 then
- return 'Эта дверь закрыта. Вряд ли ее можно открыть моим ключом.';
- end
- if w == 8 then
- return 'Гммм... Пикассо?';
- end
- if w == 9 then
- return 'Страшная слабость охватывает меня... Нет -- мне нельзя спать...';
- end
- end,
- used = function(s, w, ww)
- return 'Зачем?';
- end,
- dsc = 'Прекрасный и огромный зал занимает почти всю северную часть здания!',
- obj = {
- vobj(1,'ковер', 'Под ногами бархат красного {ковра}.'),
- vobj(2,'колонны', 'Восемь мраморных {колонн} образуют коридор.'),
- vobj(3,'люстра', 'Великолепная {люстра} свисает с потолка.'),
- vobj(4,'восточные окна', 'На восток выходит четыре {окна}.'),
- vobj(5,'западные окна', 'Разбитое {окно} находится слева от меня.'),
- vobj(6,'небольшая дверь', 'В конце зала, в его северной части, я вижу небольшую деревянную {дверь}.'),
- vobj(7,'входная дверь', 'За моей спиной входная {дверь}.'),
- vobj(8,'картины', 'По стенам развешаны {картины} в красивых рамах.'),
- vobj(9,'диваны', 'У стен расставлены мягкие {диваны}.'),
- },
- way = { 'krysha' },
-};
-
-krysha = room {
- nam = 'крыша',
- pic = 'gfx/krysha.png',
- enter = function(s, f)
- return 'Я быстро подхожу к разбитому окну и вот, я на крыше...';
- end,
- dsc = 'Видимо, пятый этаж был достроен позже остальных четырех. По участку крыши я могу добраться до первых окон южного и северного крыла.',
- obj = {'nwin', 'swin'},
- way = {'escape2'},
-};
-
-gudlg2 = dlg {
- nam = 'человек с портрета',
- pic = 'gfx/pmanb.png',
- dsc = 'Я смотрю на его поникшее лицо. Оно по-прежнему спокойно.',
- obj = {
- [1] = phr('Получил, гад?',
- 'В ответ я слышу едва различимый стон.',
- [[pon(1); back();]]),
- [2] = phr('Но зачем, зачем это все?',
- 'Он поднял на меня свои глаза. -- Я просто делал свою работу...',
- [[pon(3);poff(1);]]),
- [3] = _phr('Что за ерунда?',
- '-- А потом, потом стал не нужен... Ну что же -- подумал я... -- Мир заплатит за эту ошибку...',[[pon(4)]]),
- [4] = _phr('Что ты несешь?',
- '-- Я работал профессором... Но я был не нужен.. Я ... Я не мог это вынести...',
- [[pon(5)]]),
- [5] = _phr('Какой мерзавец...',
- '-- Но я заставлю их... Заставлю... Я, я, я - я буду жить вечно... Сам... Один.',
- [[pon(6)]]),
- [6] = _phr('Мне кажется, что ты спятил...',
- 'Его тело дергается в углу -- это озноб.',
- [[pon(1); back()]]),
- }
-};
-
-gudlg = dlg {
- nam = 'человек с портрета',
- pic = 'gfx/pman.png',
- enter = function(s)
- lifeoff('mycat');
- inv():del('shotgun');
- return [[Странно... Дверь не закрыта... Я осторожно открываю дверь и вхожу в комнату.^^Внезапно я обнаруживаю, что на меня смотрит дуло револьвера. -- Браво, браво, браво -- говорит мне человек в кресле, владелец револьвера. -- Я уже заждался. Тот самый лесник? Ну что же, подождем охрану. А пока -- брось ружье на пол. Мне ничего не остается, как сделать то, что он сказал.]];
- end,
- dsc = [[Передо мной то самое лицо. Лицо с портретов, которыми увешаны почти все комнаты этого здания. Лицо спокойное, ничего не выражающее. Слабая улыбка на губах. Надо тянуть время... И я спрашиваю у него:]],
- obj = {
- [1] = phr('Может, поговорим?',
- 'Гм... Ну о чем нам говорить? О чем мне говорить с лесником?', [[pon(2)]]),
- [2] = _phr('Например, правда ли то, что многомировая интерпретация Эверетта верна?',
- '-- Ха ха ха ха!!! -- невыразительно смеется человек с портрета -- Конечно, это фокус... Что бы заставить этих идиотов верить в собственное бессмертие... А может...',[[pon(3)]] ),
- [3] = _phr('...То-есть никакого доказательства нет?',
- 'Человек перестает смеяться -- ...А может -- это все-таки правда? -- загадочно произносит он -- Какой ответ истина? Как ТЫ думаешь?', [[pon(4)]]),
- [4] = _phr('Я знаю, что это ложь!',
- 'Знаешь ли? -- пустые глаза смотрят на меня -- Да или нет? - Вдруг паника оглушает меня.'
- ,[[pon(5,9)]]),
- [5] = _phr('Ложь!',
- 'А что если? Представь, что если?... Ты же хакер да? Любишь продумывать все заранее...',
-[[pon(6);poff(9)]]),
- [6] = _phr('Нет! Это не может быть правдой! Если это правда -- рано или поздно мир будет обречен! Тогда...',
- '-- Да, ты правильно понял... Тогда есть только ТЫ!!! Послушай себя -- кто дал тебе этот ответ? Не его ли ты жаждешь? Не его ли жаждет твое Я? -- Я проваливаюсь в его бездонный взгляд.', [[pon(7)]]),
- [7] = _phr('Если... Если... То зачем?',
- '-- Правильно... Правильно -- вкрадчиво говорит мне человек с портрета... Новая волна страха оглушает меня, я падаю на колени... Сердце бешено стучит и вылетает из груди...',
- [[pon(8)]]),
- [8] = _phr('Не могу... Нет...',
- '-- И если все так, то тебе нечего бояться -- мурлычет он. -- Сердце бьется еще сильнее. И наконец, моя грудь взрывается, мягкий комочек шерсти отталкивается от нее лапами и летит в лицо человеку с портрета. Раздается выстрел, резкая боль в левом плече отрезвляет меня, я вскакиваю на ноги и бросаюсь вперед...',[[return goto('escape3')]]),
- [9] = _phr('Допустим, это правда.',
- '-- Так... Правильно... Думай, думай...Ты же хакер, да? -- шепчет человек с портрета.',
- [[pon(6);poff(5)]])
- },
-};
-
---shkf = obj {
--- nam = 'край шкафа',
--- inv = 'Я держу в руках край шкафа.',
---};
-
-shkaf = obj {
- nam = 'шкаф',
- inv = 'Я держу в руках край шкафа.',
- dsc = function(s)
- if s._fall then
- return 'Дверь завалена {шкафом}.';
- end
- return 'Один из книжных {шкафов} стоит возле двери.';
- end,
- act = function(s)
- if not escape3._guards or s._fall then
- return 'Какая-то философия... И еще физика.';
- end
- inv():add('shkaf');
- return 'Я крепко схватился за край шкафа.';
- end,
-};
-
-fromw5 = room {
- nam = 'на подоконнике',
- dsc = 'Я стою на подоконнике, ледяной ветер мешает дышать.',
- pic = 'gfx/fromwin2.png',
- enter = 'Ну что-же, надеюсь это в последний раз...',
- act = function(s, w)
- if w == 1 then
- return goto('nwall');
- end
- end,
- obj = {
- vobj(1, 'труба', 'Справа от себя я едва различаю водосточную {трубу}.'),
- },
- way = { 'escape3' },
- exit = function(s, t)
- if t == 'escape3' then
- return 'Надо спешить!', false;
- end
- end
-};
-
-winr5 = obj {
- nam = 'окно',
- dsc = function(s)
- if s._broken then
- return 'Сквозь разбитое {окно} в комнату дышит зимний ветер.';
- else
- return '{Окно} выходит на северную сторону.';
- end
- end,
- act = function(s, w)
- if escape3._guards then
- if not shkaf._fall then
- return 'Некогда любоваться видами... Надо задержать охранников.';
- end
- if not have('mycat') then
- return 'Без Барсика? Лучше погибнуть вместе!';
- end
--- if not have('revol') then
--- return 'Лучше поднять с пола пистолет, на всякий случай.';
--- end
- if s._broken then
- ways():add('fromw5');
- return goto('fromw5');
- else
- return 'Окно закрыто.';
- end
- end
- escape3._guards = true;
- lifeon('escape3');
- return 'За окном полная темнота. Я смотрю в темноту, когда вдруг слышу за спиной приглушенный шум шагов... Звуки идут из зала, наверное охрана добралась сюда! Нужно действовать!';
- end,
- used = function(s, w)
- if escape3._guards and not shkaf._fall then
- return 'Некогда... Скоро охрана ворвется сюда...';
- end
- if w == 'shotgun' then
- if not s._broken then
- s._broken = true;
- return 'Опять? Ну что же... Я размахиваюсь и разбиваю стекло прикладом. Осколки улетает в темноту.';
- end
- return 'Это окно уже разбито.';
- end
- end,
-};
-
-revol = obj {
- nam = 'револьвер',
- dsc = 'На полу валяется {револьвер}.',
- inv = 'Шесть зарядов.',
- tak = 'Я поднимаю с пола револьвер.',
-};
-
-escape3 = room {
- nam = 'в комнате',
- pic = 'gfx/manroom.png',
- enter = function(s, f)
- if f == 'gudlg' then
- inv():del('mycat');
- hall5.way:add('escape3');
- return 'Я слышу звук падающего пистолета... Потом я бью в чье-то лицо изо-всех сил. Снова и снова. Барсик носится вокруг и жалобно мяукает. Через несколько секунд я встаю с пола.';
- end
- end,
- act = function(s, w)
- if w == 1 then
- return goto('gudlg2');
- end
- if w == 2 then
- return 'Абстракционисты не в моем вкусе.';
- end
- if w == 3 then
- local st = '';
- if shkaf._fall then
- st = ' Завалена шкафом.';
- end
- return 'Дверь ведущая в зал.'..st;
- end
- end,
- used = function(s, w, ww)
- if w == 1 and ww == 'shotgun' or ww == 'revol' then
- return 'Да -- это зло. Но я не могу стрелять в беспомощного человека.';
- end
- if w == 3 and ww == 'shkaf' then
- shkaf._fall = true;
- inv():del('shkaf');
- return 'Я толкаю шкаф и он падает, заграждая собой дверь.';
- end
- end,
- dsc = [[Я нахожусь в небольшой, но уютной комнате. Посреди стоит стол. Рядом опрокинуто кресло. Из небольшой люстры равномерно льется свет. Два небольших книжных шкафа стоят у стен.]],
- obj = {
- vobj(1, 'человек', 'На полу, прислонившись к столу, сидит {человек} с портретов. Струйка крови стекает с его губ -- он стонет.'),
- vobj(2, 'картины', 'По стенам развешаны {картины}.'),
- vobj(3, 'дверь', 'За моей спиной {дверь}.'),
- 'revol',
- 'shkaf',
- 'shotgun',
- 'mycat',
- 'winr5',
- },
- life = function(s)
- if rnd(3) == 1 then
- return 'Я слышу выстрелы... Пули прошивают дверь... Надо что-то делать...';
- end
- end,
- exit = function(s,t)
- if t == 'hall5' then
- if shkaf._fall then
- return 'Проход завален шкафом.', false;
- end
- if s._guards then
- return 'Меня там подстрелят...', false;
- end
- s._guards = true;
- lifeon('escape3');
- return 'Я собираюсь выйти в зал, когда вдруг на другом конце открывается дверь и в зал вбегают охранники. Я быстро захлопываю дверь.',false;
- end
- lifeoff('escape3');
- end,
- way = {
- 'hall5'
- },
-};
-
-nwall = room {
- nam = 'северная сторона',
- dsc = 'Я нахожусь у северной стены здания института.',
- pic = 'gfx/nside.png',
- way = {'eside2','wside' },
- act = function(s, w)
- if w == 1 then
- return 'Да -- водосточная труба... Довольно крепкая. Но вряд ли я смогу взобраться по ней наверх.';
- end
- end,
- enter = function(s, f)
- if f == 'fromw5' then
- return 'Превозмогая боль в левом плече я прыгаю с подоконника на трубу... Мое сердце бешено стучит в груди, пока мы падаем с Барсиком в зимнюю темноту. Но вот, в следующее мгновение я уже соскальзываю, обдирая кожу с ладоней, по водосточной трубе...';
- end
- end,
- obj = { vobj(1, 'труба', 'Водосточная {труба} проходит по восточному углу здания.')},
- exit = function(s, t)
- if t == 'wside' then
- if not s._guards then
- s._guards = true;
- return 'Я высовываюсь из-за угла и вижу, как толпа охранников приближается ко мне из КПП. -- Вон он -- слышу я крик... Треск выстрелов отгоняет меня обратно.', false;
- end
- return 'Там меня ждут...', false;
- end
- end
-};
-
-eside2 = room {
- nam = 'сзади института',
- pic = 'gfx/esidee.png',
- dsc = [[ Я нахожусь у задней стены здания института. Здесь проходят рельсы.]],
- act = function(s,w)
- if w == 1 then
- return 'Пулеметы направлены на внешнюю - южную сторону периметра, надо держаться от них подальше.';
- end
- if w == 2 then
- return 'Гм... Похоже это тот самый поезд... Разгрузка еще не началась, но ворота уже открыты.';
- end
- if w == 3 then
- return 'Четыре вагона. Тип тепловоза - ЧМЭ3. Поезд полностью помещается на территории института.';
- end
- end,
- obj = {
- vobj(1,'пулеметные вышки', 'Въезд поезда охраняется пулеметными {вышками}..'),
- vobj(3,'поезд', 'Перед институтом стоит темная громада {поезда}.'),
- vobj(2,'ворота', 'Большие железные {ворота} в стене института открыты -- я вижу свет, который льется из дверного проема.'),
- },
- exit = function(s, t)
- if t == 'sside' then
- return 'На южной стороне меня смущают пулеметы. Лучше не рисковать.', false
- end
- if t == 'nwall' and nwall._guards then
- return 'Назад пути нет...', false;
- end
- end,
- way = {'nwall','train','sside'},
-};
-function checkloc()
- if p1._off or p2._off then -- battary or switch off off
- p3._off = true;
- p4._off = true;
- p5._off = true;
--- p51._off = true;
--- p6._off = true;
- end
- if p3._off or p4._off then
--- p7._off = true;
--- p71._off = true;
- end
- if p5._off then
- p7._off = true;
- end
- if p51._off then
- p71._off = true;
- end
- if p6._off then
--- p7._off = true;
--- p71._off = true;
- end
- if p7._off then
--- p71._off = true;
- end
-end
-p1 = obj {
- _off = false,
- nam = 'разъединитель',
- dsc = function(s)
- local st = 'включено.';
- if s._off then
- st = 'выключено.';
- end
- return '{Разъеденитель} батареи ВБ: '..st;
- end,
- act = function(s)
- if s._off then
- s._off = false;
- else
- s._off = true;
- end
- checkloc();
- return 'Переключаю...';
- end
-};
-
-p2 = obj {
- _off = true;
- nam = 'ключ',
- dsc = function(s)
- local st = 'повернут вниз.';
- if s._off then
- st = 'повернут вверх.';
- end
- return '{Ключ} кнопочных выключателей: '..st;
- end,
- act = function(s)
- if s._off then
- s._off = false;
- else
- s._off = true;
- end
- checkloc();
- return 'Я поворачиваю ключ.';
- end
-};
-p3 = obj {
- _off = true,
- nam = 'электроманометр',
- dsc = function(s)
- local st = 'включено.';
- if s._off then
- st = 'выключено.';
- end
- return '{Электроманометр}: '..st;
- end,
- act = function(s)
- if p1._off or p2._off then
- return 'Странно... Не получается.'
- end
- if s._off then
- s._off = false;
- else
- s._off = true;
- end
- checkloc();
- return 'Переключаю...'
- end
-};
-p4 = obj {
- _off = false,
- nam = 'электротермометр',
- dsc = function(s)
- local st = 'включено.';
- if s._off then
- st = 'выключено.';
- end
- return '{Электротермометр}: '..st;
- end,
- act = function(s)
- if p1._off or p2._off then
- return 'Странно... Не получается.'
- end
- if s._off then
- s._off = false;
- else
- s._off = true;
- end
- checkloc();
- return 'Переключаю...'
- end
-};
-p5 = obj {
- _off = true,
- nam = 'насос 2-й секции',
- dsc = function(s)
- local st = 'включено.';
- if s._off then
- st = 'выключено.';
- end
- return 'Топливный {насос} 2-й секции: '..st;
- end,
- act = function(s)
- if p1._off or p2._off then
- return 'Странно... Не получается.'
- end
- if s._off then
- s._off = false;
- else
- s._off = true;
- end
- checkloc();
- return 'Переключаю...'
- end
-};
-
-p6 = obj {
- _off = true,
- nam = 'управление',
- dsc = function(s)
- local st = 'включено.';
- if s._off then
- st = 'выключено.';
- end
- return '{Управление}: '..st;
- end,
- act = function(s)
- if p1._off or p2._off then
- return 'Странно... Не получается.'
- end
- if s._off then
- s._off = false;
- else
- s._off = true;
- end
- checkloc();
- return 'Переключаю...'
- end
-};
-
-p7 = obj {
- _off = true,
- nam = 'пуск дизеля 2-й секции',
- dsc = function(s)
- local st = 'включено.';
- if s._off then
- st = 'выключено.';
- end
- return '{Пуск} дизеля 2-й секции: '..st;
- end,
- act = function(s)
- if p3._off or p4._off or p5._off or p6._off then
- return 'Странно... Не получается.'
- end
- if s._off then
- s._off = false;
- else
- s._off = true;
- end
- checkloc();
- return 'Переключаю...'
- end
-};
-
-p51 = obj {
- _off = true,
- nam = 'насос 1-й секции',
- dsc = function(s)
- local st = 'включено.';
- if s._off then
- st = 'выключено.';
- end
- return 'Топливный {насос} 1-й секции: '..st;
- end,
- act = function(s)
- if p1._off or p2._off then
- return 'Странно... Не получается.'
- end
- if s._off then
- s._off = false;
- else
- s._off = true;
- end
- checkloc();
- return 'Переключаю.';
- end
-};
-
-p71 = obj {
- _off = true,
- nam = 'пуск дизеля 1-й секции',
- dsc = function(s)
- local st = 'включено.';
- if s._off then
- st = 'выключено.';
- end
- return '{Пуск} дизеля 1-й секции: '..st;
- end,
- act = function(s)
- if p3._off or p4._off or p5._off or p6._off or p7._off then
- return 'Странно... Не получается.'
- end
- if s._off then
- s._off = false;
- else
- s._off = true;
- end
- checkloc();
- return 'Переключаю...';
- end
-};
-
-p8 = obj {
- _num = 1,
- nam = 'реверсор',
- dsc = function(s)
- local st;
- if s._num == 1 then
- st = 'нейтрально.';
- elseif s._num == 2 then
- st = 'назад.';
- elseif s._num == 3 then
- st = 'вперед.';
- end
- return 'Рукоятка {реверсора}: '..st;
- end,
- act = function(s)
- s._num = s._num + 1;
- if s._num == 4 then
- s._num = 1;
- end
- return 'Переключаю...';
- end
-};
-
-p9 = obj {
- _num = 1,
- nam = 'контроллер',
- dsc = function(s)
- local st;
- if s._num == 1 then
- st = '0.';
- elseif s._num == 2 then
- st = '1.';
- elseif s._num == 3 then
- st = '2.';
- end
- return 'Рукоятка {контроллера}: '..st;
- end,
- act = function(s)
- s._num = s._num + 1;
- if s._num == 4 then
- s._num = 1;
- end
- if s._num == 1 then
- return 'Переключаю.';
- end
- if not p71._off and not p7._off then
- if p8._num == 2 then
- s._num = 1;
- return 'Локомотив вздрагивает и начинает ехать назад. Я перевожу контроллер на 0.';
- elseif p8._num == 3 then
- lifeoff('mycat');
- set_music('mus/liberty.s3m');
- return goto('theend');
- end
- end
- s._num = 1;
- return 'Ничего не происходит... Я перевожу контроллер в положение 0.';
- end
-};
-
-train = room {
- nam = function(s)
- if here() == train then
- return 'в локомотиве';
- end
- return 'к поезду';
- end,
- pic = 'gfx/cab.png',
- dsc = 'Итак, я в локомотиве. Толстая сталь надежно укрывает меня от пуль. Кабина машиниста оказалась пуста. Я вижу перед собой множество приборов.',
- act = function(s, w)
- if w == 2 then
- if p1._off or p2._off then
- return 'Я нажал кнопку гудка, но ничего не услышал.';
- end
- return 'Раздается унылый звук сигнала. -- Я машинист!';
- end
- if w == 1 then
- return 'Только бы успеть завести эту штуку... И никакие ворота меня не остановят.';
- end
- end,
- life = function(s)
- local st = '';
- if not p7._off or not p71._off then
- st = 'Я чувствую как дрожит локомотив. Работает дизель. ';
- end
- if rnd(10) < 5 then
- st = st..'В кабине раздаются звуки ударов пуль о металл.';
- end
- return st;
- end,
- exit = function(s,t)
- if t == 'eside2' then
- return 'Нет... Лучше остаться здесь, мы будем сопротивляться до последнего.', false;
- end
- lifeoff('train');
- end,
- enter = function(s, f)
- if f == 'eside2' and not guards1._broken then
- return cat('Пригнувшись, я бегу к поезду.^^', goto('vorota')), false;
- end
- lifeon('train');
- set_music('mus/hispeed.s3m');
- return 'Пригнувшись, я бегу к поезду... Пробегая мимо вагонов я успеваю заметить знаки <<осторожно -- радиация!!>>. Еще немного и я добираюсь до локомотива. Сзади я слышу звуки выстрелов. Впереди охрана разворачивает пулеметы. Я открываю тяжелую дверь и вот я -- внутри.'
- end,
- obj = {
- 'p2', 'p1', 'p4', 'p3', 'p71','p51', 'p7', 'p5', 'p9', 'p8', 'p6',
- vobj(2, 'гудок', '{Гудок}.');
- vobj(1, 'окно', 'В {окнах} я вижу закрытые ворота.'),
- },
- way = { 'eside2' },
-};
-
-guards1 = obj {
- nam = 'охрана',
- dsc = function(s, w)
- if s._broken then
- return '{Охранники} за турникетами завалены обломками люстры.';
- end
- if s._shoot then
- return 'Я вижу {охранников}, которые укрываются от моего огня за турникетами.';
- end
- return 'Я вижу {охранников} с автоматами, которые пробираются ко мне через зал первого этажа.';
- end,
- act = function(s, w)
- if s._broken then
- return 'Похоже, они в замешательстве...';
- end
- if s._shoot then
- return 'Вот негодяи!';
- end
- return 'Удивительно, что я еще жив...';
- end,
- used = function(s, w)
- if w == 'shotgun' or w == 'revol' then
- if s._shoot then
- return 'Бесполезно, охранники защищены металлом турникетов.';
- end
- s._shoot = true;
- return 'Я высовываюсь из-за стены и стреляю несколько раз наугад.';
- end
- end,
-};
-
-lustra1 = obj {
- nam = 'люстры',
- dsc = function(s, w)
- if s._broken then
- return 'На потолке висит одна {люстра}.';
- end
- return 'Две ослепительные {люстры} свисают с потолка.';
- end,
- act = function(s, w)
- if guards1._shoot then
- return 'Одна из люстр находится прямо над турникетами.';
- end
- return 'Не могу на них наглядеться... Наверное, это хрусталь?';
- end,
- used = function(s, w)
- if w == 'revol' then
- return 'Вряд ли этот пистолет принесет сильный ущерб люстрам.';
- end
- if w == 'shotgun' then
- shotgun._unloaded = true;
- s._broken = true;
- guards1._broken = true;
- lifeoff('vorota');
- drop('shotgun');
- return 'Я высовываюсь из-за стены и разряжаю помповое ружье. Сильный грохот и звуки щелкающего затвора оглушают меня. Я вижу как одна из люстр, сопровождаемая криками охранников, медленно оторвавшись летит вниз. Я выбрасываю бесполезное ружье на пол.';
- end
- end,
-
-};
-
-vorota = room {
- nam = 'у ворот',
- pic = 'gfx/shooting.png',
- enter = function(s, f)
- if f == 'eside2' and not guards1._broken then
- lifeon('vorota');
- return 'Поравнявшись с открытыми воротами я слышу треск выстрелов и прижимаюсь к стене.';
- end
- end,
- life = function(s)
- if rnd(6) < 4 then
- return 'Раздается треск выстрелов. Я вжимаюсь в стену.';
- end
- end,
- act = function(s, w)
- if w == 1 then
- return 'Те самые турникеты, через которые я попал внутрь. Теперь я нахожусь с другой стороны.';
- end
- end,
- dsc = 'Я нахожусь у открытых ворот. Ворота ведут на первый этаж института.',
- obj = {
- vobj(1, 'турникеты', 'Я вижу ряд {турникетов}.'),
- 'lustra1',
- 'guards1',
- },
- exit = function(s, t)
- if not guards1._broken and t == 'train' then
- return 'Я бросаюсь вперед, но автоматные очереди заставляют меня вернуться.', false;
- end
- end,
- way = { 'train', 'eside2' },
-};
-
-theend = room {
- nam = 'эпилог',
- pic = 'gfx/chme3.png',
- dsc = [[Я передвинул ручку контроллера в самое переднее положение и локомотив,
-вздрогнув, двинулся вперед. Я услышал крики, и пулеметные очереди с новой силой застучали
-по стенкам кабины... Но локомотив набирал ход, и скоро послышался сильный лязг -- это ворота,
-не выдержав натиска 1350 лошадиных сил, вылетели из своих петель и протащились несколько
-десятков метров вдоль путей...^^
-
-Барсик высунул морду из-за пазухи и осмотрелся вокруг. Я привычно погладил его за ушами.
-Когда лязг раздавленных ворот и стук пуль утихли, я выглянул из окна и последний раз посмотрел в сторону института. Он полыхал словно факел -- пожар уже захватил весь пятый этаж.
-Я посмотрел на небо и теперь, уже в полной темноте, смог разглядеть россыпи звезд. ^^
-
-Совсем скоро поле уступило место тайге, и привычные очертания сосен и елей замелькали под
-ровный стук колес. Рана в плече ныла, и я почувствовал сильную усталость... Присев на пол
-и прислонившись к холодному железу кабины, я слушал гудение локомотива и гладил Барсика за
-ушами...^^
-
-Барсик посмотрел на меня своими умными глазами и вопросительно замурлыкал -- Домой,
-ответил я ему -- Мы едем домой...^^
-КОНЕЦ^^
-
- ---^^
-
-История и движок: ^
-Косых Петр a.k.a. gl00my // 2009^^
-
-Графика: ^
-Косых Петр, несколько фотографий из открытых источников.^^
-
-Музыка: ^
-One fine day // Elwood^
-Revelation // necros^
-New beginning // Purple Motion^
-Ice frontier // Skaven^
-Planete football // Frank Amoros^
-Underwater world II // Slightly Magic^
-Hybrid song // Quazar^
-Hispeed - track whatever // Purple Motion^
-Liberty // Zapper^^
-
-Тестеры:^
-Каличев Сергей a.k.a. Pkun^
-Подобаев Владимир a.k.a. zloyvov^^
-
-
-Если вам понравилась игра, самое лучшее, что вы можете сделать, это написать свою историю на движке instead. :)^^
-
-Благодарности:^
-Всем тем, кто не мешал. :)^^
-]],
-};
-
diff --git a/games/cat/gfx/bholes.png b/games/cat/gfx/bholes.png
deleted file mode 100644
index e60787c595a9ae238620fb8d5c592497baa2a5b2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 34961
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 |