insteadose-3/dream.lua

367 lines
12 KiB
Lua
Raw Normal View History

2018-08-09 12:26:42 +03:00
--$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='Ветка всё таки коснулась меня.^^Время замерло, свет начал медленно угасать...',
}