------------- now got inside!!! ----------------------- napil = obj { nam = 'rasp', dsc = 'There\'s a {rasp} lying under the gates.', inv = 'A rusty thing...', tak = 'I took the rasp.', use = function(s, w) if w == 'knife' and not knife._oster then knife._oster = true; return 'I\'m sharpening the knife... Now it\'s sharp!'; elseif w == 'gun' and not gun._obrez then if here() == wside or here() == sside then return 'There are people around here!'; end gun._obrez = true; return 'I took a seat and sawed off the shotgun barells.'; else return 'No, sawing is useless here...'; end end }; eside = room { pic = 'gfx/eside.png', nam = 'behind the institute', dsc = [[ I am at the back wall of the institute building. There's a railway here.]], act = function(s,w) if w == 1 then return 'The machine guns are turned to the south side of the institute perimeter. It\'s better to stay far from them.'; end if w == 2 then return 'The gates are iron made. And they are locked from the inside.'; end end, obj = { vobj(1,'gun towers', 'The railway entrance is guarded by the {towers} with machine guns...'), vobj(2,'the gates', 'The rails flow near the big iron {gates}. It seems they are used for supply.'), 'napil', }, exit = function(s, t) if t == 'sside' then return 'The machine guns on the south side make me nervous. Too risky.' , 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 = 'pass', inv = [[It's a someone's pass - an electronic smartcard with a photo of some heavy-metal guy. The label says: Alexey Podkovin — Level: 3, Category: The Matter. Hmmm...]], }; alienwear = obj { xnam = {'denim jacket', 'red jacket', 'overcoat', 'jacket', 'white jacket', 'coat', 'black leather jacket', 'sport jacket',}, xinv = { 'A cold clothes for this season, but has a certain style!', 'Nice look on snowy background.', 'A long coat - some kind of retro!', 'I\'m the Terminator!', 'Make peace, not war!', 'It suits me', '"And nothing else matters!.."', 'There were days I liked mountaineering!', }, 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 'I\'ve examined the pockets of the leather jacket and found some card.'; end return s.xinv[s._num]; end, }; garderob = obj { nam = 'wardrobe', dsc = 'There is a {wardrobe} with visitors outerwear on the right.', act = function(s, w) if have('mywear') or have('alienwear') then return 'There are too much people here. I don\'t think I can change clothes without being noticed.'; elseif tonumber(w) and tonumber(w) > 0 and tonumber(w) <= 8 then if not me()._walked then return 'It will be too noticeable if I do it now...'; end alienwear._num = w; inv():add('alienwear'); ref(s.obj[w]):disable(); me()._walked = false; inv():add('gun'); return 'Feeling confidently I take someone else\'s clothes and put it on... I take my shotgun with me.'; else return 'I should make a decision...'; end end, used = function(s, w) if w == 'mywear' then garderob.obj:add('mywear'); inv():del('mywear'); inv():del('gun'); return 'I take off my quilted jacket. I need to leave my shotgun in it.'; end if w == 'alienwear' then local v = alienwear._num; ref(s.obj[v]):enable(); inv():del('alienwear'); inv():del('gun'); return 'I put someone else\'s clothes back to wardrobe. I hide the shotgun in my quilted jacket.'; end end, obj = { vobj(1,'denim jacket','{A denim jacket}.'), vobj(2,'red jacket','{A red-coloured jacket}.'), vobj(3,'overcoat','{An overcoat}.'), vobj(4,'terminator jacket', "{A jacket} with \"I\'ll be back\"."), vobj(5,'jacket with daisies', "{A white jacket} with daisies."), vobj(6,'coat', "{A wool jacket}."), vobj(7,'leather jacket','{A cool black leather jacket}.'), vobj(8,'sport jacket', "{An orange sport jacket}."), } }; portrait = obj { nam = 'portraits', dsc = 'There are big {portraits} in wooden frames on the walls.', act = 'Hmm... There is the same face on all portraits! The cold-smiled face of a fourty-aged man with an empty chilling sight.', }; salo = obj { nam = 'lard', inv = 'This piece of lard is too hard to eat...', use = function(s, w) if w == 'trap' and not trap._salo then inv():del('salo'); trap._salo = true; return 'Hmm... I think I\'ve made a mousetrap!'; end end }; food = obj { nam = 'food', inv = function (s) inv():del('food'); return 'I\'m so hungry, so I eat all this yummy food just right now without even taking a seat. Wow... Then I take the tray with empty plates to the washers.'; end }; knife = obj { nam = 'knife', dsc = 'I observe {a knife} on the tray.', inv = function(s) if s._oster then return 'A steel knife. Very sharp.'; end return 'A steel knife. Too blunt.'; end, use = function(s, w) if w == 'shells' then if not s._oster then return 'The knife is not sharp enough to be used.'; end if have('poroh') then return 'I have the gunpowder already.'; end inv():add('poroh'); return 'I crack one of the shells and take the gunpowder out.'; end end, tak = function(s) if have('knife') then return 'I\'ve already got one...', false end return 'I think I\'ll take it with me.'; end }; ostatki = obj { nam = 'food leftovers', dsc = '{The leftovers of food} are evenly distributed on the plates.', tak = function(s) if food._num ~= 2 or have('salo') then return 'Nothing useful...', false; else take('salo'); return 'A piece of lard!', false; end end }; podnos = obj { nam = 'tray', dsc = 'There is my {tray} on the table.', act = function(s, w) if w == 1 then return 'A fork like a fork... Not ideally clean.'; end if w == 2 then return 'The design of this spoon has no remarkable features.'; end return 'Blue plastic. A little oily by touch.'; end, obj = { 'ostatki', vobj(1, 'fork', 'A {fork} and'), vobj(2, 'spoon', 'a {spoon} lie beside.') }, }; moika = room { nam = 'dish washing', enter = function() return cat('I take the tray to the dish washing area.^^', walk('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 walk('kitchendlg'), false; end if f ~= 'kitchendlg' then return 'I take a seat at a free table and have some meal.'; end end, nam = 'at the table', dsc = 'I feel a plain surface of the table under my hands.', obj = { 'podnos' }, way = { 'moika' }, exit = function(s) end }; gotfood = function(w) inv():add('food'); food._num = w; return back(); end invite = obj { nam = 'invitation', inv = 'The invitation to the lecture of Belin: Level:4, Hall:2... Hmmm... I need to get there... He has my Barsik.', } povardlg = dlg { nam = 'in the kitchen', pic = 'gfx/povar.png', dsc = 'I see the tired fat face of the service woman in a white cap...', obj = { [1] = phr('Please, give me these green... Yeah - and beans!', 'Here you are!', [[pon(1); return gotfood(1);]]), [2] = phr('Potatoes with bacon, please!', 'Bon appetite!', [[pon(2); return gotfood(2);]]), [3] = phr('Two garlic soups!!!', 'Nice choice!', [[pon(3);return gotfood(3);]]), [4] = phr('Please, something not hard. I have an ulcer...', 'Oatmeal!', [[pon(4); return gotfood(4);]]), }, }; kitchendlg = dlg { nam = 'talking to employee', pic = 'gfx/ilya.png', dsc = 'I took my tray and sat at a free table. A minute later some guy tried to join my table with a question: "Occupied?"', obj = { [1] = phr('No, not occupied...', '— Thanks. How\'s it going? What unit are you from?', [[pon(3,4,5); poff(2);]]), [2] = phr('Occupied...', '— Ha-ha! Nice joke! What unit are you from?', [[pon(3,4,5); poff(1);]]), [3] = _phr('Hmm... Space Curvatures...', '— Oh, that\'s an old stuff!', [[pon(6);poff(4,5)]]), [4] = _phr('E-er... Quantum Jumps...', '- Hmm? Haven\'t heard about it.', [[pon(6);poff(3,5)]]), [5] = _phr('Oh... The Department of Quasispace Research!', '— Wow! Cool!', [[pon(6);poff(3,4)]]), [6] = _phr('Hmm... ', '— And what is your security level?', [[pon(7,8)]]), [7] = _phr('Super-secret!', '— Wow! ... ', [[poff(8); pon(9)]]), [8] = _phr('Anonymous.', '— Really? Haven\'t heard about it. Maybe it\'s even more classified than mine...', [[poff(7); pon(9)]]), [9] = _phr('Mmm...', '— I\'m Ilya... — the guy reaches his thin hand — And what\'s your name?', [[pon(10, 11, 12)]]), [10] = _phr('Pp.. Pk... Pupkin... Vasily Pupkin.', '— Oh, a rare last name!', [[poff(11,12); pon(13)]]), [11] = _phr('Sergey.', '— Give me five, man!', [[poff(10,12); pon(13)]]), [12] = _phr('George...', '— Ok, nice to meet you, Gosha!', [[poff(10,11); pon(13)]]), [13] = _phr('Hmm...', [[— You're some kind weird... But it doesn't matter. We are all here... — Ilya made an expressive face -... I'm distributing invitations to the classified lecture of Belin... Only for friends... I think I like you. And your security level is high enough... So...]], [[pon(14)]]), [14] = _phr('Where is he?... Hmm.. Where the lecture will take place?', [[— Security level 4. Hall 2. So, be there! It's a good opportunity to get close to... — Ilya gave a look at one of the portraits on the wall. — Oh, I almost forgot! — he gave me a piece of white plastic — Well, see ya!... — Uhhh...]],[[inv():add('invite');return walk('eating');]]), } }; kitchen = room { nam = 'canteen', pic = 'gfx/kitchen.png', dsc = 'A small canteen.', act = function(s, w) if w == 4 then return 'I see someone\'s hands taking trays with used plates to somewhere inside...'; end if w == 1 then if not have('food') then return 'I took a seat at a free table. Ok, got some rest - now it\'s time to go!'; end return walk('eating'); end if w == 2 then return 'They sound like a hive of bees...'; end if w == 3 and not have('food') then return cat([[I joined the queue... I took a tray, cutlery and wipes. Time flows painfully slowly. At last I make an order...^^]], walk('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 'Just leave with a tray in my hands? No.', false; end if t == 'stolcorridor' then set_music('mus/ice.s3m'); end end, obj = { 'portrait', vobj(1, 'tables', '{Tables} for 4 and 8 persons are placed evenly in the hall.'), vobj(2, 'people', 'The canteen is full of {people}.'), vobj(3, 'queue', 'The {queue} of hungry people waiting for their food moves fast enough.'), vobj(4, 'dish washing', 'In the corner there\'s a {slot} for disposal of used trays and washing-up.'), }, way = { 'stolcorridor' }, }; stolcorridor = room { nam = 'canteen entrance', pic = 'gfx/kitchencor.png', dsc = 'The long and narrow corridor is illuminated by fluorescent light.', act = function(s, w) if w == 1 then return 'Yeah, these people came here to eat...'; end end, obj = {'garderob', vobj(1,'люди', '{People} walk back and forth along the corridor.')}, way = {'sside', 'kitchen'}, exit = function(s, t) if t == 'sside' and not have('mywear') and not have('alienwear') then return 'It\'s cold outside... I won\'t go there without a coat... No...', false; end end, enter = function(s) -- generate garderob if have('gun') and not gun._hidden then return 'I\'m afraid there will be some questions to me if I go inside with a shotgun...', 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 = 'south side', pic = 'gfx/sside.png', dsc = [[I am at the south wall of the institute building. ]], act = function(s, w) if w == 1 then ways():add('stolcorridor'); return "I came across the entrance and saw a label - 'Canteen'. Hmm... Maybe go inside?"; end if w == 2 then return 'The ones who walk out seem to be more pleased than others...'; end end, way = {'eside','wside'}, obj = { vobj(1, "entrance", "There's an {entrance} near the east corner."), vobj(2, "people", "The entrance door opens from time to time letting {people} in and out.")}, exit = function(s, t) if t == 'eside' then return 'If I go there I will be a good target for machine guns.', false end end }; nside = room { nam = 'north side', pic = 'gfx/nside.png', dsc = 'I am at the north wall of the institute building.', way = {'eside','wside' }, act = function(s, w) if w == 1 then return 'Yeah — a drainpipe... Seems strong enough. But I doubt I can climb it up.'; end end, obj = { vobj(1, 'tube', 'A {drainpipe} flows along the east corner.')}, }; wside = room { nam = 'front side', pic = 'gfx/wside.png', dsc = 'The front side of the institute.', way = {'entrance', 'nside','sside' }, act = function(s, w) if w == 1 then return 'The van my story began with...'; end if w == 5 then return 'It starts too high to reach. Also it\'s locked. Maybe it may be of some use during fire, but I really doubt about it...' end if w == 2 then return 'The guards will recognize me for sure. I\'d better save my Barsik first.'; end if w == 3 then return 'Nice entrance... But I can\'t get rid of an idea that the institute eats people.'; end if w == 4 then return 'It\'s almost dark outside, but people still keep going inside...'; end end, obj = { vobj(3, 'entrance', 'The main {entrance} has a big rotating door'), vobj(4, 'people', ' letting {people} in and out.'), vobj(1, 'van', 'There\'s a black {van} in front of the door.'), vobj(2, 'checkpoint', 'Sixty meters further I can hardly distinguish a {checkpoint}.'), vobj(5, 'ladder', 'I see a fire-escape {ladder} on the south part of the wall. The ladder stretches from the second to the fifth floor.' ), } }; turn1 = obj { nam = 'tourniquet', dsc = 'Shiny steel {tourniquets} block the passage to the elevators. The green indicators show the message: <>.', act = function(s, w) if s._inside then s._inside = false; here().way:del('lift'); return 'I approach the tourniquets, use the card and go out from the restricted area.'; end if s._unlocked then s._inside = true; here().way:add('lift'); return 'I approach the tourniquets, use the card and and in a moment I\'m at the elevators.'; end return 'I approach a tourniquet, but I see a red X sign shining. Bad idea to go further.'; end, used = function(s,w) if w == 'card' then s._unlocked = true; s._inside = true; here().way:add('lift'); return 'I apply the card to a tourniquet and see a green light. The passage is clear. I go to the elevators.'; end end }; lustra = obj { nam = 'chandeliers', dsc = 'Big shiny {chandeliers} hang over my head.', act = 'I can\'t help watching them... I think they are made of crystal.'; }; divan = obj { nam = 'sofa', dsc = 'In the corner there\'s a {sofa} for guests placed opposite to the guard table.', act = function(s) return 'Black-leathered, very soft sofa.'; end, }; entrance = room { nam = 'main entrance', pic = 'gfx/entrance.png', dsc = 'The first floor of the institute is shocking by its magnificence.', act = function(s, w) if w == 2 then return 'A big padlock hangs on the gates.'; end if w == 3 then if not turn1._inside then return 'The tourniquets block my way to the elevators.'; end return 'Four elevators seem not enough for all institute employees.'; end if w == 4 then return 'A table made from glass or crystal. There\'s a terminal beyond the table.'; end if w == 5 then return 'It would be better for me if he doesn\'t see me once again.'; end if w == 6 then return 'People... It\'s very unusual for me to see so many people.'; end end, obj = { 'lustra', vobj(2, 'gates', 'Iron {gates} to railways occupy all space of east wall.'), vobj(3, 'elevators', 'In the middle of the hall there are {elevators}.'), 'turn1', vobj(4, 'table', 'There\'s a {table} before tourniquets.'), vobj(5, 'guard', 'The {guard} sits at the table.'), vobj(6, 'people', '{People} come and go in and out making a queue near the elevators.'), 'divan', }, way = { 'wside' }, enter = function(s, f) if have('gun') and f == 'wside' and not gun._hidden then return 'I think there will be many questions about my shotgun if I take it inside with me... I should hide it somewhere', 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 'people'; end, act = function(s) return 'Empty and depressed sights... Painful silence.'; end, dsc = function(s) if s._num == 1 then return 'The elevator is full of {people}.'; end if s._num == 2 then return 'There are several {men} in the elevator.'; end if s._num == 3 then return 'The elevator is empty.' end end }; lift = room { nam = 'elevator', pic = 'gfx/lift.png', dsc = 'It must be bright and comfortably in the elevator. But I am tormented by claustrophobia. I see buttons on the panel:', enter = function(s, t) if here() == entrance then s._from = 1; pinlift._num = 1; return 'I wait for one of the elevators and go inside.'; 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 'I press an elevator call button and wait. After some time I go inside an elevator.'; end, act = function(s, w) local to,st if not tonumber(w) then return end if w == s._from then return cat('No!!! The claustrophobia forces me out of the elevator.^^', back()); end if w == 8 then st = ''; if galstuk._wear then st = ' By the way, I have a tie.'; end if me()._brit then return 'I look in the mirror and see the tired but smoothly shaved face. This is me.' .. st; end return 'I look in the mirror and see tired and bearded face. This is me.'..st; end if w == 6 or w == 7 then return 'I\'m nervous... But I should not take nervous decisions.'; end if w == 1 then to = 'entrance'; else to = 'floor'..w; end return cat('I press the button and wait. Claustrophobia almost knocks me down, but I\'m waiting... Ukhh... Trip done at last!^^', walk(to)); end, exit = function() return 'Elevator doors close behind me.'; end, obj = { vobj(1,'1', '{1},'), vobj(2,'2', '{2},'), vobj(3,'3', '{3},'), vobj(4,'4', '{4},'), vobj(5,'5', '{5},'), vobj(6,'stop','{stop}'), vobj(7,'go','и {go}.'), vobj(8,'mirror', 'The elevator back wall is a {mirror}.'), 'pinlift', }, }; floor2 = room { nam = '2nd floor site', pic = 'gfx/floor2.png', dsc = "There are no windows on the second floor. Low ceiling and grey-green walls. It's cold and silent here.", act = function(s, w) if w == 1 then return 'The door seems to be made of lead... I do not see any possibility to get in there. And it\'s for good. There\'s a label under the sign which says: <>.'; end if w == 2 then return 'Yeah, one of these elevators brought me to this damned place...'; end end, obj = { vobj(1, 'door', 'I see a massive {door} with the sign <>'), vobj(2, 'elevators', 'It seems the four elevator slots are watching for me gloomily.'), }, way = { 'lift' }, }; resh = obj { nam = 'bars', dsc = function(s) if not s._unscrew then return 'The hole is protected by the iron-bar {lattice}.'; end if vent._off then return 'In the hole I can distinguish blades of a big airing fan. The {lattice} lies on the floor.'; end return 'The blades of the big airing fan are rotating. The {lattice} lies on the floor.'; end, act = function(s) if s._unscrew then return 'This is what can be done with a blunt knife if you have enough patience and skill!'; end if not stoly._moved then return 'Cannot reach...'; end return 'The lattice is screwed tightly with 12 screws...'; end, used = function(s, w) if w == 'knife' and not s._unscrew and stoly._moved then s._unscrew = true; return 'I climb the table and try to unscrew the screws with a knife. This takes me much time. But at last I make it. The lattice falls down on the floor. I get down from the table.'; end if w ~= 'stol' then return 'No way...'; end end, }; vent = obj { nam = 'airing hole', dsc = 'In the middle of the ceiling there is a big square {hole} for airing.', act = function(s) if not stoly._moved then return 'I cannot reach it...'; end if not resh._unscrew then return 'I step on the table and examine the hole. It is covered by the lattice... Being disappointed I get down.'; end if not s._off then return 'I climb the table and watch the sharp blades of the fan. I\'m afraid it is too dangerous...'; end if not s._trap then return 'I climb the table. Holding the edges of the hole I\'m trying to get in... It\'s dark and wet there. I\'m almost in when I see red eyes and teeth of a big rat... No!!! I fall back on the table and then hit the floor.'; end -- here we go! return walk('toilet'); end, used = function(s, w) if w == 'stol' then return end if not stoly._moved then return 'I can\'t reach the hole...'; end if not resh._unscrew then return 'The hole is covered by the lattice...'; end if not s._off then return 'I can\'t because of the fan blades...'; end if w == 'gun' and not s._trap then gun._loaded = false; return 'I climb the table and point the shotgun to the hole. Both barells shot simultaneously with deep sound. I listen. The hole is silent... I get down. I think it\'s useless...'; end if w == 'trap' then if not trap._salo then return 'I set the trap on the edge of the hole. Waiting. But the rat is not a fool. I take the trap back. I need some bait.'; end inv():del('trap'); vent._trap = true; return 'I climb the table and set the baited trap on the edge of the hole... I need not wait for too long... The clash sound and the last scream of the rat make me know that the work is done!'; end end, obj = { 'resh' } }; stol = obj { nam = 'table', inv = 'I hold the corner of one of the tables. Seems made from oak.', use = function(s, w) if w == 'vent' or w == 'resh' then inv():del('stol'); stoly._moved = true; return 'I strained myself and moved one of the tables to the center of the room.'; end end }; stoly = obj { nam = 'tables', dsc = function(s, w) if not s._moved then return 'Four oak {tables} take their places in the four room corners respectively.'; end return 'Three oak {tables} reside in the room corners. One table is moved to the center.'; end, act = function(s, w) if s._moved then return 'Put one table on another? No - I won\'t make it...'; end inv():add('stol'); return [[Good furniture... But the table in my house is better - I've made it with my own hands. I hold the corner of a table.]]; end }; eroom = room { nam = 'STR department', 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 = [[I am in the small room with beige walls.]], enter = function(s, f) if f == 'cor3' then return [[I opened the door and looked inside. Whew... Empty! I think I may look around...]]; end if f == 'toilet' then return 'Well... I lift the iron lattice from the toilet floor and go into darkness... In some minutes I jump from the airing hole to the table and go to the floor.'; end end, act = function(s, w) if w == 1 then return 'I move the louvers and look into outside darkness. I face my dim reflection in the window. Looking down I see the machine gun towers and the railways.'; end if w == 2 then return 'It is just terminals. The client machines which connect to the institute servers. However, I\'m not interested in them. I have not used a computer for 10 years.'; end end, obj = { vobj(1, 'window', 'A big {window} looks to the east.'), 'stoly', vobj(2, 'terminals', 'On each table there is a {terminal} with a 17-inch display.'), 'vent', 'portrait', }, way = { 'cor3' }, exit = function() inv():del('stol'); end }; key = obj { nam = 'key', dsc = 'Someone has left the {key} in the door lock.', tak = 'I carefully take out the key and put it in my pocket.', inv = 'To my surprise - ordinary door locks are used in the institute along with complex electronic security!', }; room33 = room { nam = 'room', pic = 'gfx/bholes.png', dsc = [[I stand for some seconds near the door. Then I open it and go inside.]], act = function(s, w) if w == 1 then return cat('A grey-haired man in thick glassed turns to me and for watches me for a second. - Who are you? Go outside immediately!!^^',back()); end end, obj = { vobj(1, 'people', [[I see a group of {people} in white technical coats standing at the board in the middle of the room and having a great debate among theirselves.]]), 'portrait', 'key' }; way = { 'cor3' }, exit = [[ I carefully leave the room.]]; }; room3x = room { nam = 'room', enter = function(s, f) if s._num == 2 then return [[I open the door a little and look inside. A square room with two windows. A lot of people are sitting at terminals along the walls. I close the door in a hurry.]], false; end if s._num == 4 then return [[I touch the cold metal handle and open the door carefully... - Simulation in progress!!! - I hear someone's angry voice from inside. I release the handle and the door closes...]], false; end if s._num == 5 then ref(f).way:add('eroom'); return walk('eroom'), false; end if s._num == 6 then return [[I start opening the door, but I begin to hear some strange sound which is becoming louder and louder. - What idiot hasn't closed the door?! - someone inside is very angry. I close the door in a hurry.]], false; end end, }; switch = obj { nam = 'switch', dsc = function(s) local t if vent._off then t = ' in <> state.'; else t = ' in <> state.'; end return 'In the corner near the entrance there\'s a {switch}'..t; end, act = function(s) if vent._off then vent._off = false; return 'Switching ON!' end if not cor3._locked then return [[I turn the switch OFF and walk away. But suddenly one of the doors opens and some old voice screams to the corridor: What the...!!! This is impossible!!! No way to work!!! Turn it on back!!! - I need to return to the switch and to turn it ON.]]; end vent._off = true; return 'Switching OFF!'; end }; cor3 = room { nam = '3rd floor corridor', pic = 'gfx/cor3.png', enter = function(s, f) if f == 'floor3' then return 'I apply the card to a card reader... Red indicator blinks and then becomes green... The way is free!'; end end, dsc = 'The long corridor stretches to the end of the building. Fluorescent lamps bring some dim light from the ceiling. There\'s a green carpet walkway on the floor.', act = function(s, w) if w == 1 then return 'I walk to one of the doors and look in the door porthole... People in white are moving around some weird devices. Just like bees... I think these rooms are labs.'; end if not tonumber(w) then return nil, false end if w == 3 then if s._locked then return 'This room is locked... I hear some not loud but intense sounds. I do not want to open it.'; end return walk('room33'); end if tonumber(w) >=2 and tonumber(w) <=6 then room3x._num = w; return walk('room3x'); end if w == 7 then return 'The window looks to the south side... It\'s dark outside. Nothing to watch but snowflakes bumping the glass...'; end if w == 8 then return 'Visit?'; end end, used = function(s, w, ww) if w == 1 or w == 2 or w == 4 or w == 5 or w == 6 then return 'No way...'; end if w == 3 and ww == 'key' then if s._locked then return 'Already closed...'; end s._locked = true; return 'I insert the key in the key hole and lock the door making two turns. I take out the key and put it back to the pocket.'; end end, obj = { vobj(1, 'white doors', 'On the right side there are white metal {doors} with windows.'), vobj(2, 'gravity', 'On the left side there are several doors with labels: {gravity},'), vobj(4, 'simulation', '{simulation}'), vobj(5, 'STR effects','{STR effects},'), vobj(3, 'black holes', '{black holes},'), vobj(6, 'quasispace', '{quasispace}.'), vobj(7, 'window', 'I see the {window} in the end of the corridor.'), vobj(8, 'toilet', '{Toilets} are near the window.'), 'switch', 'portrait', }, way = {'floor3', 'toilet3', 'toiletw'}, }; mylo = obj { nam = 'soap', inv = function(s) if s._pena then return 'A piece of soap with foam.'; end return 'A piece of soap.'; end, dsc = 'A piece of {soap} lies on the basin.', tak = 'I took the slippy soap... It fell down back to the basin, but I caught it up again and put it in the pocket...'; }; sushka = obj { nam = 'dryer', dsc = 'A hand {dryer} hangs nearby.', act = function(s,w) return 'I bring my hands to the dryer and it starts working... Deja vu...'; end, }; umyvalnik = obj { nam = 'basin', dsc = 'The {basin} is located near the entrance.', act = function(s) if me()._mylo then me()._mylo = false; return 'I wash away soap foam from my face...'; end return 'I drink chlorinated water greedily... Yeah - this water is not the same as in my creek...'; end, used = function(s, w) if w == 'mylo' then mylo._pena = true; return 'I put the soap into warm water...'; end end }; toilet3 = room { nam = 'toilet', pic = 'gfx/toil3.png', dsc = 'I am in a toilet. A standard architecture. No windows. White tile.', act = function(s, w) if w == 2 then return 'All are in use!'; end if w == 3 then return 'People are evenly distributed over the toilet. All closets are occupied. A couple of men are waiting for their turn.'; end end, obj = { 'umyvalnik', 'mylo', 'tzerkalo', 'sushka', vobj(2, 'closets', 'There are 4 {closets} in this toilet.'), vobj(3, 'people', 'Some {people} are present...'), }, way = { 'cor3' }, exit = function() if me()._mylo then return 'With soap on the face? No...', false end objs():del('face'); end }; floor3 = room { nam = '3rd floor site', pic = 'gfx/floor3.png', dsc = [[The site of the third floor is large enough. Beige walls. High ceilings.]], act = function(s, w) if w == 1 then return 'I gaze at the window for a minute... A white desert flowing to the darkness... At this moment I realize what an alien place I am in...'; end if w == 2 then if not s._unlocked then return 'Metal upholstered with leather. The door has a card reader. The door label says: <>'; end return walk('cor3'); end if w == 3 then return 'Strong doors I must admit... Much stronger than the door of my hut... The door has a card reader. The door label says: <>'; end end, used = function(s,w,ww) if ww ~= 'card' then return 'It won\'t help...'; end if w == 2 then s._unlocked = true; s.way:add('cor3'); return walk('cor3'); end if w == 3 then return 'I apply the card to the card reader. I hear an annoying beep - access denied.'; end end, obj = { vobj(1, 'window', 'A wide {window} looks to the west.'), vobj(2, 'brown door', 'There\'s a brown {door} to the right of the window.'), vobj(3, 'white door', 'A white {door} - to the left.'), }, way = { 'lift' }, }; britva = obj { nam = 'razor', dsc = 'A {razor} lies on the basin.', tak = 'I put the razor in pocket hoping no one notices it.', inv = 'A razor, little bit rusty...', }; face = obj { nam = 'face', dsc = 'The mirror reflects my {face}.', act = function(s) local st = ''; if me()._brit then st = ' Well shaved.'; elseif me()._mylo then st = ' With soap foam on it.'; end if galstuk._wear then st = st..' With a tie, by the way.'; end return 'This is a reflection of my face.'..st; end, used = function(s, w) if w == 'mylo' then if me()._brit then return 'I\'ve shaved already...'; end if not mylo._pena then return 'The soap is quite dry...'; end if not have('britva') then return 'I put soap on the face and wash away the dirt... Ooh...'; end me()._mylo = true; return 'I put soap foam on the face...'; end if w == 'britva' then if me()._brit then return 'I\'ve shaved already...'; end if not me()._mylo then return 'I need foam on my face...'; end me()._brit = true; me()._mylo = false; return 'I\'m shaving... Then I wash my face...'; end end }; tzerkalo = obj { nam = 'mirror', dsc = 'A {mirror} is placed where it should be - above the basin.', act = function(s) local st = ''; objs():add('face'); if galstuk._wear then st = ' With a tie, besides...'; end if me()._brit then return 'Sad, but well shaved face.' .. st; end return 'Wild bearded face looks at me from the mirror.' .. st; end, }; toilet = room { nam = 'toilet', pic = 'gfx/toil4.png', dsc = 'Quite large toilet, I should say. White tile. Yellow stains. Humidity and sounds of flowing water. A wooden door leads to the corridor.', enter = function(s, f) if f == 'eroom' then return 'I climb to the airing hole. It\'s dusty and quiet inside. I wander the airing system maze until at last I see the light over my head. A moment later I push the iron lattice in the toilet floor...'; end end, act = function(s, w) if w == 2 then return 'Yeah... I\'m lucky. I guess it\'s a men\'s toilet...'; end if w == 3 then return 'They have strange airing system. But thanks to it I am here!...'; end end, obj = { vobj(2, 'closets', 'There are only 2 {closets} in this toilet.'), 'umyvalnik', 'britva', 'tzerkalo', 'sushka', vobj(3, 'lattice', 'There is an iron {lattice} on the floor.'); }, way = { 'eroom', 'cor4'}, exit = function(s, t) if me()._mylo then return 'With foam on the face? No...', false end objs():del('face'); if t ~= 'eroom' then return 'I come outside the toilet carefully.'; end end }; toiletw = room { nam = 'women closet', enter = function(s, w) return 'Whew... I was about making a mistake...', false; end }; function room4x_hear() local ph = { [1] = '...According to the uncertainty principle it is impossible to know both the position and the momentum of a quantum particle...', [2] = '...According to the theory of quantum mechanics, measurement causes an instantaneous collapse of the wave function describing the quantum system into an eigenstate of the observable state that was measured...', [3] = '...The reduction of the wave packet is the phenomenon in which a wave function appears to reduce to a single one of those states after interaction with an observer...', [4] = '...The theory predicts that both values cannot be known for a particle, and yet the EPR experiment shows that they can...', [5] = '...The principle of locality states that physical processes occurring at one place should have no immediate effect on the elements of reality at another location...'; [6] = '...They claim that given a specific experiment, in which the outcome of a measurement is known before the measurement takes place, there must exist something in the real world, an "element of reality", which determines the measurement outcome...', [7] = '...The many-worlds interpretation is a postulate of quantum mechanics that asserts the objective reality of the universal wavefunction, but denies the actuality of wavefunction collapse, which implies that all possible alternative histories and futures are real—each representing an actual "world" (or "universe")...', [8] = '...Everett\'s original work contains one key idea: the equations of physics that model the time evolution of systems without embedded observers are sufficient for modelling systems which do contain observers; in particular there is no observation-triggered wave function collapse which the Copenhagen interpretation proposes...', [9] = '...The particles are thus said to be entangled. This can be viewed as a quantum superposition of two states, which we call state I and state II...', [10] = '...Alice now measures the spin along the z-axis. She can obtain one of two possible outcomes: +z or -z. Suppose she gets +z. According to quantum mechanics, the quantum state of the system collapses into state I. The quantum state determines the probable outcomes of any measurement performed on the system. In this case, if Bob subsequently measures spin along the z-axis, there is 100% probability that he will obtain -z. Similarly, if Alice gets -z, Bob will get +z...', }; return ph[rnd(10)]; end room4x = room { nam = 'room', enter = function(s, f) if s._num == 1 then return 'I carefully touch the handle and try to open the door. Closed...' , false; elseif s._num == 2 then return 'I come close to the door and listen... - '..room4x_hear().. ' — Ooh... I\'d better keep going...', false; elseif s._num == 3 then return 'I come close to the door and listen... - I hear someone argue fiercly... - I\'d better go...', false; elseif s._num == 4 then return 'I open the door and come inside. 12 pairs of eyes of guys sitting at desks look at me attentively. Another eye pair belongs to a man standing at a board. - Sorry, I must have missed the door... - this is all I can say in such situation. I quickly get outside...', false; elseif s._num == 5 then return 'Closed...', false; end end, }; galstuk = obj { nam = function(s) if s._gal then return 'tie'; end return 'rag'; end, inv = function(s, w) if not s._gal then s._gal = true; return 'I examine the rag and I figure out that it used to be a tie some time ago.' end if s._hot then if not s._wear then s._wear = true; return 'I put the tie on with dignity...'; end return 'I wear the tie...'; end if s._mylo then return 'It is all in soap!'; end if not s._water then return 'It is dirty! I won\'t put it on!'; end if not s._hot then return 'It is wet! I won\'t wear it!'; end end, used = function(s, w) if s._wear then return 'I wear the tie...'; end if w == 'mylo' then if not mylo._pena then return 'The soap is dry...'; end s._mylo = true; if not s._gal then s._gal = true; return 'While putting soap to the rag, I understand that this rag use to be a tie once.'; end return 'I put some soap on the tie...'; end end, use = function(s, w) if s._wear and w ~= 'hand' then return 'I wear the tie...', false; end if w == 'umyvalnik' then if not s._mylo then return 'Using just water? I doubt it washes chalk away...'; end s._water = true; s._mylo = false; return 'I washed the tie in warm water...'; end if w == 'sushka' then if not s._water then return 'Why should I dry this?'; end s._hot = true; s._water = false; return 'In 5 minutes I dried the tie well...'; end end }; room46 = room { nam = 'lecture room 6', pic = 'gfx/room4.png', enter = 'I open the door and come inside... The room is empty...', dsc = 'I am inside the lecture room... Several tables are placed in two rows towards the board.', act = function(s, w) if w == 1 then if not have('galstuk') then inv():add('galstuk'); return 'I see a rag on the board. I take the rag.'; end return 'Hmm... I do not understand a thing in this stuff...'; end if w == 2 then return 'I see how spotlights are searching the snowy field down there...'; end if w == 3 then return 'I sit by the keyboard, but I recall that I\'m done with the past... I am not a hacker anymore - I am a forester.'; end end, obj = { vobj(3,'terminal', 'Every table has a {terminal} placed on it.'); vobj(1,'board', 'Some weird formulas are written on the lecture {board}...'), vobj(2,'window', 'The {window} looks to the east.'), 'portrait', }, way = { 'cor4' }, }; facectrl = dlg { nam = 'face control', pic = 'gfx/guard4.png', dsc = 'I see the unpleasant and unfriendly face of the fat security guy.', obj = { [1] = phr('I\'ve come to listen to the lecture of Belin...', '— I don\'t know who you are, — the guard grins — but I was told to let only decent people in here.', [[pon(2);]]), [2] = _phr('I have the invitation!', '— I do not damn care! Look at yourself! Used a mirror recently?! You\'ve come to listen to Belin himself! Be-lin! The right hand of ... - the guard paused for a second in respect - So... Get out of here!', [[pon(3,4)]]), [3] = _phr('I\'m gonna kick you fat face!', '— Well, that\'s enough... - Powerful hands push me out to the corridor... I feel lucky to stay in one piece...', [[poff(4)]]), [4] = _phr('You boar! I\'ve told you I have the invitation!', '— Whaaat? - The guard\'s eyes are going red... The powerful kick sendsme to the corridor... It could be worse...', [[poff(3)]]), [5] = _phr('I want to listen to the lecture of Belin...', '— First — Doctor Belin, and second — no way if no tie...', [[pon(2)]]), [6] = _phr('I want to listen to the lecture of Dr. Belin very much!!!', 'The guard examines me with his suspicious eyes and says unwillingly: Your invitation...', [[pon(7)]]), [7] = _phr('Here... you b... please...', 'Ok... Come in, hurry... The lecture has already begun...', [[inv():del('invite'); return walk('hall42')]]); }, exit = function(s,w) s:pon(1); end }; hall42 = room { nam = 'Hall 2', pic = 'gfx/hall2.png', dsc = 'A lot of people. Silent. I guess the lecture is going on.', obj = { vobj(1, 'Belin', 'A man stands at the board - it\'s {Belin}! The man who has stolen my cat.'), vobj(2, 'seats', 'I see some free {seats} at the third row.'), vobj(3, 'window', 'Three wide {windows} look to the west.'), vobj(4, 'lamps', 'The hall is illuminated by fluorescent {lamps}.'), }, act = function(s, w) if w == 1 then return 'Now he is without a coat and a hat, and I can see him in details... Quite fat but tall... A tricky smile but opened face... He runs the lecture. I\'ll wait till he finishes and try to have a talk with him...'; end if w == 2 then return walk('lection'); end if w == 3 then return 'It\'s dark outside... Only white snowflakes reveal theirselves in the fluorescent light from time to time.'; end if w == 4 then return 'Six lamps... I hate this blinking light...'; end end, exit = function(s, t) if t == 'cor4' then return 'I do not want to lose Belin again...', false; end end, enter = function(s, f) if f == 'facectrl' then return 'I enter the lecture hall...'; end if not galstuk._wear then facectrl:pon(5); facectrl:poff(1); end if not me()._brit or not galstuk._wear then return cat( 'I try to enter the hall, but a man in a uniform stops me. I read <> on his label. He holds a shotgun.^^', walk('facectrl')), false; end facectrl:poff(1, 5); facectrl:pon(6); return walk('facectrl'), false; end, way = { 'cor4' }, }; hall41 = room { nam = 'Hall 1', dsc = [[I enter the empty hall. It seems to be one of lecture halls. Many rows of seats get higher and higher one after another till the ceiling.]], pic = 'gfx/hall1.png', act = function(s, w) if w == 1 then return 'Watching the night darkness I remember Barsik with melancholy...'; end if w == 2 then return 'We had just like these in our institute when I... Nevermind...'; end if w == 3 then return 'Everything I could remember - I\'ve forgotten.'; end end, obj = { vobj(1, 'windows', 'Three big {windows} look to the west side.'), vobj(2, 'table', 'A long {table} takes place near the lecture board.'), vobj(3, 'board', 'Some formulas of a previous lecture remain on the {board}.'), 'portrait', }, way = { 'cor4', }, }; cor4 = room { nam = '4th floor corridor', pic = 'gfx/cor4.png', dsc = 'I am in the corridor. Very high ceilings. I see toilets in the end of the corridor. There\'s a green carpet walkway on the floor.', act = function(s, w) if not tonumber(w) then return; end if w == 11 then return 'Some of them are going to the hall 2.'; end if w == 1 then return 'I am melancholically looking in the night darkness... I realize how much I am tired... But I must keep going...'; end if w == 12 then return 'This door like many others is provided with a smart-card reader. The red indicator is on.'; end if tonumber(w) >=5 and tonumber(w) <=9 then room4x._num = w - 4; return walk('room4x'); end if w == 10 then ways():add('room46'); return walk('room46'); end if w == 2 then ways():add('hall41'); return walk('hall41'); end if w == 3 then ways():add('hall42'); return walk('hall42'); end end, used = function(s, w, ww) if w == 12 and ww == 'card' then return 'I apply the card to the card reader... Beep... Access denied...'; end end, obj = { vobj(1, 'window', 'A {window} looks to the south.'), vobj(2, 'hall 1','On the west side I see two wide doorways: {hall 1},'), vobj(3, 'hall 2', '{hall 2}.'), vobj(5, 'lecture room 1', 'On the east side there are less wide doors. The door labels: {lecture room 1},'), vobj(6, 'lecture room 2', '{lecture room 2},'), vobj(7, 'lecture room 3', '{lecture room 3},'), vobj(8, 'lecture room 4', '{lecture room 4},'), vobj(9, 'lecture room 5', '{lecture room 5},'), vobj(10, 'lecture room 6', '{lecture room 6}.'), vobj(11, 'people', 'From time to time {people} appear in the corridor.'), vobj(12, 'front door', 'The front {door} is located at the north end of the corridor.'), 'portrait', }, way = { 'toilet', 'toiletw', } }; floor4 = room { nam = '4th floor site', pic = 'gfx/floor4.png', dsc = 'The fourth floor has high ceilings.', act = function(s, w) if w == 1 then return 'Darkness... Not a single light... I can\'t even see the stars. Dim and heavy fluorescent light prevents me to see them...'; end if w == 2 then return 'I hate elevators...'; end if w == 3 or w == 4 then return 'An ordinary door. One of many in this building. An electronic lock. I can\'t get in without a card.'; end end, used = function(s, w, ww) if ww == 'card' then if w == 3 or w == 4 then return [[I apply the card to a card reader... Beep. Access denied...]]; end end end, obj = { vobj(1, 'window','A wide {window} looks to the west.'), vobj(2, 'elevators', 'The site with four {elevators} is dimly lit.'), vobj(3, 'south door', 'Two doors lead to the north and south corridors. The south {door} label: <>'), vobj(4, 'north door', 'The north {door} label: <>'), }, way = { 'lift' }, }; floor5 = room { nam = '5th floor site', pic = 'gfx/floor5.png', dsc = [[The ceilings on the fifth floor are very high.]], act = function(s, w) if w == 1 then return 'My legs are drowning in red velvet... I should be careful not to leave my footprints here...'; end if w == 2 then return 'Yeah, made from crystal. Surely not glass.'; end if w == 3 then return 'I approach the window... Interesting. I see that the window looks at quite wide area of the roof, which streches through the front part of the building...'; end if w == 4 or w == 5 then return 'I can\'t examine the doors because of the guard... My ID card is not valid here...'; end if w == 6 then return 'Though he does not pay any attention to me, still it is better not to bother him...'; end end, used = function(s, w) if not tonumber(w) then return end if w == 6 then return 'It\'s better not to bother him...'; end if w >=1 and w <=5 then return 'I won\'t do it while the guard is here,'; end end, obj = { vobj(1, 'carpet', 'The floor is covered by the red {carpet}.'), vobj(2, 'chandelier', 'A crystal {chandelier} hangs over my head.'), vobj(3, 'window', 'A wide {window} looks to the west.'), vobj(4, 'information', 'I see two doors leading to the south and north corridors. The south {door} label: <>.'), vobj(5, 'red door', 'The north {door} does not have any labels. This is a massive door upholstered with red leather.'), vobj(6, 'guard', 'The passage to the doors are blocked by a checkpoint with a {guard}.'); }, way = { 'lift' }, };