367 lines
12 KiB
Lua
367 lines
12 KiB
Lua
|
--$Name: Сон$
|
|||
|
--$Version: 0.1$
|
|||
|
--$Author: Андрей Лобанов$
|
|||
|
|
|||
|
instead_version '1.9.1'
|
|||
|
require "lib"
|
|||
|
require "para"
|
|||
|
require "dash"
|
|||
|
require "quotes"
|
|||
|
require "hideinv"
|
|||
|
require "nouse"
|
|||
|
|
|||
|
main=room{
|
|||
|
nam='...',
|
|||
|
title = {"С", "О", "Н" },
|
|||
|
num = 12,
|
|||
|
enter = music_("influensa",0),
|
|||
|
dsc='Я прожил достойную жизнь. Построил свой дом, вырастил детей... Теперь они уважаемые люди. С соседями я в хороших отношениях. Мне нечего стыдиться за всю мою долгую жизнь.^^Но в последнее время странные события начали происходить вокруг меня. Сперва я всё списывал на причудливые видения старика, но сейчас мне страшно. И никто вокруг не замечает происходящего.',
|
|||
|
act=function()
|
|||
|
walk(home)
|
|||
|
end,
|
|||
|
obj={vobj('next','{Продолжить}')},
|
|||
|
}
|
|||
|
|
|||
|
home=room{
|
|||
|
nam='Мой дом',
|
|||
|
pxa = {
|
|||
|
{ "window4", 20 },
|
|||
|
{ "table6", 240 },
|
|||
|
{ "chair1", 440 },
|
|||
|
{ "toolbox", 10 }
|
|||
|
},
|
|||
|
dsc='Я нахожусь у себя дома.',
|
|||
|
obj={'window','mtable', 'box'},
|
|||
|
way={'yard'},
|
|||
|
}
|
|||
|
|
|||
|
window=obj{
|
|||
|
nam='Окно',
|
|||
|
dsc='Во двор выходит большое {окно}.',
|
|||
|
act='На улице хорошая погода.',
|
|||
|
}
|
|||
|
|
|||
|
mtable=obj{
|
|||
|
nam='Стол',
|
|||
|
dsc='Возле окна стоит {стол}.',
|
|||
|
act='Грубо сработанный, но добротный стол, который я сделал сам.',
|
|||
|
}
|
|||
|
|
|||
|
box=obj{
|
|||
|
nam='Ящик',
|
|||
|
dsc='В углу стоит {ящик} с инструментами.',
|
|||
|
act=function(s)
|
|||
|
if not s._need then
|
|||
|
return 'Мне сейчас не нужны инструменты.'
|
|||
|
else
|
|||
|
if not have(axe) then
|
|||
|
take(axe)
|
|||
|
return 'Я взял топор.'
|
|||
|
else
|
|||
|
return 'Мне больше ничего не нужно из инструментов.'
|
|||
|
end
|
|||
|
end
|
|||
|
end,
|
|||
|
}
|
|||
|
|
|||
|
axe=obj{
|
|||
|
_i=0,
|
|||
|
_cuts=0,
|
|||
|
nam='Топор',
|
|||
|
inv='Хороший острый топор.',
|
|||
|
use=function(s,w)
|
|||
|
if w==fence then
|
|||
|
return 'Этот забор я строил сам. Не буду его ломать.'
|
|||
|
elseif w== people then
|
|||
|
return 'Не буду я учинять бесчинства и убивать своих соседей и друзей.'
|
|||
|
elseif w==tree then
|
|||
|
ways(square):disable_all()
|
|||
|
if not exist(branch) then
|
|||
|
put(branch, tree)
|
|||
|
elseif branch._i<4 then
|
|||
|
branch._i=branch._i+1
|
|||
|
if branch._i==4 then
|
|||
|
walk(death)
|
|||
|
end
|
|||
|
end
|
|||
|
s._i=s._i+1
|
|||
|
if s._i==10 then
|
|||
|
objs(tree):del(branch)
|
|||
|
walk(after)
|
|||
|
end
|
|||
|
return 'Я замахнулся и как следует ударил по дереву.'
|
|||
|
elseif w==branch then
|
|||
|
if branch._i<3 then
|
|||
|
return 'Слишком высоко -- мне никак не дотянуться до неё.'
|
|||
|
else
|
|||
|
branch._i=0
|
|||
|
s._cuts=s._cuts+1;
|
|||
|
return 'Ловко увернувшись, я одним сильным ударом отрубил ветку.'
|
|||
|
end
|
|||
|
end
|
|||
|
end,
|
|||
|
nouse='Не стоит размахивать топором налево и направо.',
|
|||
|
}
|
|||
|
|
|||
|
yard=room{
|
|||
|
nam='Двор',
|
|||
|
pxa = {
|
|||
|
{ if_("exist(neighbor)","yard2","yard"), 0 }
|
|||
|
},
|
|||
|
dsc='Я стою во дворе своего дома.',
|
|||
|
obj={'fence'},
|
|||
|
way={'home'},
|
|||
|
}
|
|||
|
|
|||
|
fence=obj{
|
|||
|
nam='Забор',
|
|||
|
dsc='Двор обнесён невысоким {забором}.',
|
|||
|
act=function()
|
|||
|
if not exist(neighbor) and not box._need then
|
|||
|
place(neighbor)
|
|||
|
return 'За зобором я увидел соседа.'
|
|||
|
else
|
|||
|
return 'Этот забор я сам построил.'
|
|||
|
end
|
|||
|
end,
|
|||
|
}
|
|||
|
|
|||
|
neighbor=obj{
|
|||
|
nam='Сосед',
|
|||
|
dsc='За забором своими делами занимается {сосед}.',
|
|||
|
act=function(s)
|
|||
|
if not s._dlg then
|
|||
|
walk(neighor_dlg)
|
|||
|
else
|
|||
|
return 'Сосед занимается своими делами.'
|
|||
|
end
|
|||
|
end,
|
|||
|
}
|
|||
|
|
|||
|
neighor_dlg=dlg{
|
|||
|
hideinv=true,
|
|||
|
pxa = {
|
|||
|
{ "yard2", 0 }
|
|||
|
},
|
|||
|
nam='Разговор с соседом',
|
|||
|
enter='Как только я обратил на соседа внимение, как он повернулся ко мне и сказал:^^-- Привет. Видал что на площади делается?',
|
|||
|
phr={
|
|||
|
{1,true,'Нет','-- Выросло там за ночь большое дерево чудное. Аккурат там где молодёжь в лапту играет. Ни клён ни берёза. Никогда таких деревьев не видел.',[[pon(2)]]},
|
|||
|
{2,false,'Чудно. Надо посмотреть.','-- Ага. Все сейчас там и столпились.',[[neighbor._dlg=true;ways(yard):add(square);back()]]},
|
|||
|
},
|
|||
|
}
|
|||
|
|
|||
|
square=room{
|
|||
|
nam='Площадь',
|
|||
|
pxa = {
|
|||
|
{ if_("axe._cuts==0", "bigtree",
|
|||
|
if_("axe._cuts==1", "bigtree_nb1",
|
|||
|
if_("axe._cuts>1", "bigtree_nb2")
|
|||
|
)
|
|||
|
)
|
|||
|
,0 }
|
|||
|
},
|
|||
|
dsc='Я нахожусь на площади.',
|
|||
|
obj={'tree','people'},
|
|||
|
way={'yard'},
|
|||
|
}
|
|||
|
|
|||
|
tree=obj{
|
|||
|
nam='Дерево',
|
|||
|
dsc=function()
|
|||
|
if here()==square then
|
|||
|
return 'Прямо посреди площади стоит большущее {дерево}.'
|
|||
|
else
|
|||
|
return 'Посреди площади лежит срубленное мной {дерево}.'
|
|||
|
end
|
|||
|
end,
|
|||
|
act=function()
|
|||
|
if here()==square then
|
|||
|
return 'Никогда ничего подобного я не видел.'
|
|||
|
else
|
|||
|
objs(after):del(tree)
|
|||
|
objs(after):add(hole)
|
|||
|
return 'Едва я взглянул на дерево, как оно начало менять свою форму и обернулось гигантским червём, который запросто мог бы проглотить меня.^^Червь набросился на меня столь стремительно, что я едва успел увернуться. Он вгрызся в землю и исчез, оставив после себя широкий тоннель, уходящий вглубь.'
|
|||
|
end
|
|||
|
end,
|
|||
|
}
|
|||
|
|
|||
|
branch=obj{
|
|||
|
_i=0,
|
|||
|
nam='Ветка',
|
|||
|
dsc=function(s)
|
|||
|
if s._i==0 then
|
|||
|
return 'Одна из {веток} начала двигаться ко мне.'
|
|||
|
elseif s._i==1 then
|
|||
|
return 'Одна из {веток} приближается ко мне.'
|
|||
|
elseif s._i == 2 then
|
|||
|
return '{Ветка} скоро дотянется до меня.'
|
|||
|
elseif s._i==3 then
|
|||
|
return '{Ветка} уже почти дотянулась до меня.'
|
|||
|
end
|
|||
|
end,
|
|||
|
act='Нельзя допустить чтобы она успела коснуться меня.',
|
|||
|
}
|
|||
|
|
|||
|
people=obj{
|
|||
|
nam='Люди',
|
|||
|
dsc='Вокруг дерева столпились {жители} нашей деревни.',
|
|||
|
act=function(s)
|
|||
|
if here()==square then
|
|||
|
if not have(axe) and event._n==3 then
|
|||
|
return 'Стоят и смотрят на это жуткое дерево как ни в чём не бывало.'
|
|||
|
else
|
|||
|
if not have(axe) then
|
|||
|
walk(event)
|
|||
|
else
|
|||
|
return 'Пока меня не было, исчезло очень много народу, а остальные стоят -- не шелохнутся. И все смотрят на это страшное дерево.'
|
|||
|
end
|
|||
|
end
|
|||
|
else
|
|||
|
return 'Немногие оставшиеся жители стоят и смотрят туда, где только что стояло дерево. Они даже не моргают.'
|
|||
|
end
|
|||
|
end,
|
|||
|
}
|
|||
|
|
|||
|
after=room{
|
|||
|
nam='Площадь',
|
|||
|
pxa = {
|
|||
|
{ if_("not exist(hole)","bigtree2","tunnel"), 0 }
|
|||
|
},
|
|||
|
dsc=function(s)
|
|||
|
if not s._seen then
|
|||
|
s._seen=true
|
|||
|
return 'Наконец, я срубил дерево.'
|
|||
|
else
|
|||
|
return 'Я нахожусь на площади.'
|
|||
|
end
|
|||
|
end,
|
|||
|
obj={'tree','people'},
|
|||
|
}
|
|||
|
|
|||
|
hole=obj{
|
|||
|
nam='Тоннель',
|
|||
|
dsc='Посреди площади находится большая {дыра}, оставленная червём..',
|
|||
|
act=function(s)
|
|||
|
if not s._seen then
|
|||
|
s._seen=true
|
|||
|
if not path(vroom('В туннель','tunnel')) then
|
|||
|
ways():add(vroom('В туннель','tunnel'))
|
|||
|
end
|
|||
|
end
|
|||
|
return 'Абсалютно прямой туннель, в конце которого что-то ослепительно сияет.'
|
|||
|
end,
|
|||
|
}
|
|||
|
|
|||
|
event=room{
|
|||
|
hideinv=true,
|
|||
|
forcedsc=true,
|
|||
|
_n=0,
|
|||
|
nam='Площадь',
|
|||
|
pxa = {
|
|||
|
{"bigtree", 0}
|
|||
|
},
|
|||
|
dsc=function(s)
|
|||
|
v='Вдруг одна ветка шевельнулась.'
|
|||
|
music_("death",0)();
|
|||
|
if s._n>=1 then
|
|||
|
v=v..'^^Неторопливым движением она склонилась к молоденькой девушке, что живёт недалеко от меня.'
|
|||
|
end
|
|||
|
if s._n>1 then
|
|||
|
v=v..'^^Ветка всё ближе и ближе пожбирается к девушке. Похоже, никто кроме меня не замечает этого.'
|
|||
|
end
|
|||
|
if s._n>2 then
|
|||
|
v=v..'^^Вот ветка коснулась девушки и она пропала. Просто исчезла, как будто и не было её никогда. И никто не заметил этого!'
|
|||
|
end
|
|||
|
return v
|
|||
|
end,
|
|||
|
act=function(s)
|
|||
|
if s._n==0 then
|
|||
|
s._n=1
|
|||
|
return true
|
|||
|
elseif s._n==1 then
|
|||
|
s._n=2
|
|||
|
return true
|
|||
|
elseif s._n==2 then
|
|||
|
s._n=3
|
|||
|
return true
|
|||
|
else
|
|||
|
box._need=true
|
|||
|
objs(yard):del(neighbor)
|
|||
|
walk(square)
|
|||
|
end
|
|||
|
end,
|
|||
|
obj={vobj('next','{>>>>}')},
|
|||
|
}
|
|||
|
|
|||
|
tunnel=room{
|
|||
|
nam='Туннель',
|
|||
|
dsc='Я нахожусь в туннеле.',
|
|||
|
way={'after',vroom('К свету','nearlight')}
|
|||
|
}
|
|||
|
|
|||
|
nearlight=room{
|
|||
|
nam='Туннель',
|
|||
|
dsc='Я всё шёл и шёл. Выход уже давно пропал вдали, а свет всё не приближался. В конце концов я понял что не могу идти обратно -- что-то толкает меня вглубь тоннеля и не пускает обратно.',
|
|||
|
enter=function()
|
|||
|
inv():del(axe)
|
|||
|
end,
|
|||
|
way={vroom('К свету','nearlight2')},
|
|||
|
}
|
|||
|
|
|||
|
nearlight2=room{
|
|||
|
nam='Тоннель',
|
|||
|
dsc='Яркий свет заливает всё вокруг. Я уже не вижу стен туннеля, не вижу своих рук и ног -- есть только красивый и тёплый свет, заполняющий собой весь мир.',
|
|||
|
act=function()
|
|||
|
walk(dos)
|
|||
|
end,
|
|||
|
obj={vobj('next','{Далее}')},
|
|||
|
}
|
|||
|
|
|||
|
dos=room{
|
|||
|
nam='Операционная система',
|
|||
|
dsc=function(s)
|
|||
|
if not s._seen then
|
|||
|
s._seen=true
|
|||
|
return 'Всё исчезло. Остались только темнота и холод. Некоторое время ничего не происходило, а потом я услышал приятный голос операционной системы:^^-- Ваш сон закончен. Спасибо что использовали программное обеспечение "Dream Software".^^Ваши сны -- наша забота.'
|
|||
|
else
|
|||
|
return 'Я нахожусь в криокапсуле. Крышка капсулы не открывается.'
|
|||
|
end
|
|||
|
end,
|
|||
|
act=function(s)
|
|||
|
if not exist(button) then
|
|||
|
put(button)
|
|||
|
objs():del('next')
|
|||
|
return 'Я осмотрелся повнимательней. Меня всё ещё мутит и я не очень понимаю где и кто я.'
|
|||
|
end
|
|||
|
end,
|
|||
|
obj={vobj('next','{Далее}')},
|
|||
|
}
|
|||
|
|
|||
|
button=obj{
|
|||
|
nam='Кнопка',
|
|||
|
dsc='Я вижу {кнопку} аварийного открытия капсулы.',
|
|||
|
act=function()
|
|||
|
walk(theend)
|
|||
|
end,
|
|||
|
}
|
|||
|
|
|||
|
theend=room{
|
|||
|
nam='Конец',
|
|||
|
enter = function() mute_()(); complete_("dream")() end,
|
|||
|
dsc='Крышка отъехала в сторону. Трясясь от холода, я вышел в отсек K013...',
|
|||
|
act = gamefile_("nightmare.lua"),
|
|||
|
obj = { vobj("next", txtc("{Продолжение...}")) }
|
|||
|
}
|
|||
|
|
|||
|
light=obj{
|
|||
|
nam='Свет',
|
|||
|
dsc='Вдалеке виден {свет}.',
|
|||
|
act='Я не знаю почему, но меня тянет к нему.',
|
|||
|
}
|
|||
|
|
|||
|
death=room{
|
|||
|
nam='Конец',
|
|||
|
dsc='Ветка всё таки коснулась меня.^^Время замерло, свет начал медленно угасать...',
|
|||
|
}
|