17rooms/room16.lua

1874 lines
76 KiB
Lua
Raw Normal View History

2021-05-04 14:35:02 +03:00
room {
nam = "room16_mystical";
title = "Таинственная комната";
firsttime = 1;
state = 0;
dsc = function(s)
if s.state == 0 then
if s.firsttime == 1 then
p ("Комната выглядит таинственно: в углу стоит большой шкаф, в другом углу стоит пюпитр, в третьем углу находится небольшой постамент, а четвёртый угол вообще пустой! Из щели под потолком сочится тусклый свет, придающий комнате ещё больше таинственности.");
s.firsttime = 0;
else
p ("По углам стоят большой шкаф, пюпитр и постамент, а под потолком узкая щель, таинственный свет плавно ниспадает на паркет, постеленный на полу.");
end;
mp:content(_'room16_parquet')
if(_'room16_wardrobe':has "open") then mp:content(_'room16_wardrobe') end;
else
p ("Распахнутый шкаф стоит у стены напротив пюпитра. У ещё одной стены нервно прячется постамент, а у четвёртой стены стоишь ты.");
if(_'room16_wall'.state == 2) then p('В стене виднеется небольшая дыра.'); end;
if(_'room16_wall'.state == 3) then p('В стене просто огромная дыра!'); end;
mp:content(_'room16_parquet')
end;
end;
description = function(s)
if s.state == 0 then
if s.firsttime == 1 then
p ("Комната выглядит таинственно: в углу стоит большой шкаф, в другом углу стоит пюпитр, в третьем углу находится небольшой постамент, а четвёртый угол вообще пустой! Из щели под потолком сочится тусклый свет, придающий комнате ещё больше таинственности.");
s.firsttime = 0;
else
p ("По углам стоят большой шкаф, пюпитр и постамент, а под потолком узкая щель, таинственный свет плавно ниспадает на паркет, постеленный на полу.");
end;
mp:content(_'room16_parquet')
if(_'room16_wardrobe':has "open") then mp:content(_'room16_wardrobe') end;
else
p ("Распахнутый шкаф стоит у стены напротив пюпитра, на котором сидит тётушка Агата и точит когти. У ещё одной стены нервно прячется постамент, а у четвёртой стены стоишь ты.");
if(_'room16_wall'.state == 2) then p('В стене виднеется небольшая дыра.'); end;
if(_'room16_wall'.state == 3) then p('В стене просто огромная дыра!'); end;
end;
end;
e_to = 'room14_secondfloor';
before_Listen = function()
if(_'room16_wardrobe'.state >= 4) then
p "Тишина."
else
p "Что-то подозрительно поскрипывает в шкафу.";
end;
end;
before_Smell = function()
if(_'room16_wardrobe'.state >= 4) then
p "Пахнет вечностью."
else
p "Из шкафа идёт еле уловимый запах чего-то необычайного.";
end;
end;
2021-10-07 21:03:01 +03:00
before_Walk = function(s, w)
if (w^'@e_to' and s.state == 0) then
2021-05-04 14:35:02 +03:00
if(_'room16_wardrobe'.state == 1) then _'room16_wardrobe'.state = 0 end;
_'room16_wardrobe':attr '~open'
remove(_'room16_o',pl)
remove(_'room16_x',pl)
DaemonStop 'room16_AI'
return false;
2021-10-07 21:03:01 +03:00
elseif (s.state == 1 and (w^'@e_to' or w^'@out_to')) then
if (_'room16_wardrobe'.state >= 4) then
return false
end;
if w^'@out_to' and (_'room16_wall'.state == 3) then
2021-05-04 14:35:02 +03:00
_'room16_AI'.daemon_stage = 9
else
p('Выхода нет!')
end;
2021-10-07 21:03:01 +03:00
return true;
2021-05-04 14:35:02 +03:00
end;
2021-10-07 21:03:01 +03:00
return false;
2021-05-04 14:35:02 +03:00
end;
2021-10-07 21:03:01 +03:00
before_Exit = function(s)
if (s.state == 0) or (_'room16_wardrobe'.state >= 4) then
return false;
2021-10-07 21:03:01 +03:00
else
mp:xaction('Walk','@out_to')
end;
end;
2021-05-04 14:35:02 +03:00
after_Drop = function(s, w)
if(_'room16_wardrobe'.state < 4) then
move(w, 'room16_parquet')
else
move(w, 'room16_wardrobe')
end;
return false
end;
2021-09-20 21:38:41 +03:00
["before_PutOn,Insert"] = function(s, w, i)
if i == _'room16_witch' then
-- "положить в/на тетю что-то" вызывает "резать тетю чем-то"
mp:xaction('Cut', i, w)
else
return false
end
end;
obj = { 'room16_wardrobe','room16_parquet','room16_bookstand','room16_pedestal','room16_slit','room16_walls' };
2021-05-04 14:35:02 +03:00
-- obj = { 'statuetka','book','dagger','room16_wardrobe','room16_parquet','room16_bookstand','room16_pedestal','room16_slit' };
--obj = { 'room16_wardrobe','room16_parquet','room16_bookstand','room16_pedestal','room16_slit' };
}
obj {
-"статуэтка, стержень";
nam = "statuetka";
description = "Статуэтка в виде цилиндрического стержня, вокруг которого обвивается змея.";
score=false;
after_Take = function(s)
if not s.score then
mp.score=mp.score+1;
end;
_'statuetka'.score=true;
return false;
end;
}
obj {
-"таинственный кинжал, кинжал, рукоять";
nam = "dagger";
description = "Таинственный кинжал, на рукояти которого изображены глаза и язык змеи.";
}
obj {
-"толстая книга,книга, обложка";
nam = "book";
state = 0;
description = function(s)
if (_'room16_bookstand'.state == 0) then
p ("Толстая старая книга. Страницы как будто бы склеены: её невозможно открыть.")
end;
if (_'room16_bookstand'.state == 1) then
if(_'room16_bookstand'.stateA == 0) then
p ("Книга лежит на пюпитре. На её обложке изображена змея, обвивающая кинжал.")
end;
if(_'room16_bookstand'.stateA == 1) then
p ("Книга лежит на пюпитре. Она открыта. На развороте нарисован шкаф: одна половина на левой странице, одна половина на правой.")
2021-05-04 14:35:02 +03:00
s.state = 1;
end;
if(_'room16_bookstand'.stateA == 2) then
p ("Книга лежит на пюпитре. Она разрезана пополам между створок нарисованного шкафа.")
end;
end;
end;
before_Cut = function(s, w)
if w == _'dagger' then
if(_'room16_bookstand'.stateA == 1) then
if(_'book'.state == 1) then
p ("Ты вставляешь кинжал между створок нарисованного шкафа и режешь книгу пополам. Со стороны шкафа слышится треск.")
_'room16_bookstand'.stateA = 2;
mp.score=mp.score+1;
else
p ("Надо бы внимательно осмотреть книгу прежде, чем её испортить.")
end;
else
if(_'room16_bookstand'.stateA == 2) then
p ("Книга уже разрезана.")
else
p("Обложка книги слишком толстая: кинжал даже не может её поцарапать. Расковырять склеенные страницы книги тоже не удаётся.")
end;
end;
else
if w then
p ("Книга прочная, как дерево!")
else
p ("Не совсем понятно, чем.")
end;
end;
end;
score=false;
after_Take = function(s)
if not s.score then
mp.score=mp.score+1;
end;
_'book'.score=true;
return false;
end;
}
obj {
-"крестик, крест";
nam = "room16_x";
title = "Крестик";
before_Exam = function(s)
if(_'room16_a1'.state == 1 or _'room16_a2'.state == 1 or _'room16_a3'.state == 1 or _'room16_b1'.state == 1 or _'room16_b2'.state == 1 or _'room16_b3'.state == 1 or _'room16_c1'.state == 1 or _'room16_c2'.state == 1 or _'room16_c3'.state == 1) then
p 'Крестик как крестик.'
else
p 'Здесь нет крестиков.'
end;
end;
before_Insert = function(s, w)
if (w == _'room16_a1' or w == _'room16_a2' or w == _'room16_a3' or w == _'room16_b1' or w == _'room16_b2' or w == _'room16_b3' or w == _'room16_c1' or w == _'room16_c2' or w == _'room16_c3') then
if(_'room16_wardrobe'.state >= 4) then
if(_'room16_wardrobe'.turn == 0) then
return false;
else
p 'Сейчас не твой ход!'
end;
else
p('Ты играешь ноликами!')
end;
else
p("Что??")
end;
end;
before_Drop = function()
p ('Надо бросать пить, а не крестики бросать.')
end;
["before_Take,Remove,Enter"] = function()
2021-05-04 14:35:02 +03:00
p ('Что-что?')
end;
before_Cut = function(s, w)
mp:xaction('PutOn', s, w)
end;
2021-05-04 14:35:02 +03:00
before_PutOn = function(s, w)
if (w == _'room16_a1' or w == _'room16_a2' or w == _'room16_a3' or w == _'room16_b1' or w == _'room16_b2' or w == _'room16_b3' or w == _'room16_c1' or w == _'room16_c2' or w == _'room16_c3') then
if(_'room16_wardrobe'.state >= 4) then
if(_'room16_wardrobe'.turn == 0) then
return false;
else
p 'Сейчас не твой ход!'
end;
else
p('Ты играешь ноликами!')
end;
else
p("Что??")
end;
end;
}:attr 'concealed'
obj {
-"нолик, ноль";
nam = "room16_o";
title = "Нолик";
before_Exam = function(s)
if(_'room16_a1'.state == 2 or _'room16_a2'.state == 2 or _'room16_a3'.state == 2 or _'room16_b1'.state == 2 or _'room16_b2'.state == 2 or _'room16_b3'.state == 2 or _'room16_c1'.state == 2 or _'room16_c2'.state == 2 or _'room16_c3'.state == 2) then
p 'Нолик как нолик.'
else
p 'Здесь нет ноликов.'
end;
end;
before_Insert = function(s, w)
if (w == _'room16_a1' or w == _'room16_a2' or w == _'room16_a3' or w == _'room16_b1' or w == _'room16_b2' or w == _'room16_b3' or w == _'room16_c1' or w == _'room16_c2' or w == _'room16_c3') then
if(_'room16_wardrobe'.state < 4) then
return false;
else
p('Теперь ты играешь крестиками!')
end;
else
p("Что??")
end;
end;
before_Drop = function()
p ('Надо бросать пить, а не нолики бросать.')
end;
["before_Take,Remove,Enter"] = function()
2021-05-04 14:35:02 +03:00
p ('Что-что?')
end;
before_Cut = function(s, w)
mp:xaction('PutOn', s, w)
end;
2021-05-04 14:35:02 +03:00
before_PutOn = function(s, w)
if (w == _'room16_a1' or w == _'room16_a2' or w == _'room16_a3' or w == _'room16_b1' or w == _'room16_b2' or w == _'room16_b3' or w == _'room16_c1' or w == _'room16_c2' or w == _'room16_c3') then
if(_'room16_wardrobe'.state < 4) then
return false;
else
p('Теперь ты играешь крестиками!')
end;
else
p("Что??")
end;
end;
}:attr 'concealed'
obj {
-"паркет, пол";
nam = "room16_parquet";
title = "Паркет";
state = 0;
description = function(s)
if s.state == 0 then
p ("Паркет на полу выглядит мрачно и таинственно. Одна занятная деталь: на фоне остальной старой мебели он выглядит новым и даже глянцеватым.")
mp:content(s)
end;
end;
}:attr 'scenery, static, supporter'
obj {
--"шкаф, дверцы";
nam = "room16_wardrobe";
word = function(s)
if(s.state == 1 or s.state == 3) then
return -"шкаф, дверцы, строки, столбцы, таблиц*"
else
return -"шкаф, дверцы"
end;
end;
title = "Шкаф";
state = 0;
turn = 0;
firsttime = 0;
firsto = 0;
description = function(s)
if s.state == 0 then
if(_'room16_bookstand'.stateA == 2) then
p ("Большой и старый шкаф. Его дверцы неплотно закрыты.")
else
p ("Большой и старый шкаф. Его дверцы плотно закрыты.")
end;
end;
if s.state == 1 then
_'room16_AI':describe()
end;
if s.state == 2 then
p ("Большой и старый шкаф. Его дверцы неплотно закрыты.")
end;
if s.state == 3 then
p ("Большой и старый шкаф, в котором пряталась тётушка Агата. Его дверцы распахнуты.")
end;
if s.state >= 4 then
p 'Откуда-то в шкаф проникает свет. На стенке шкафа расчерчена таблица 3 на 3.'
_'room16_AI':describe()
end;
end;
before_Open = function(s)
if(_'room16_mystical'.state == 0) then
if(s.state == 1) then
p('Шкаф уже открыт.')
_'room16_AI':describe()
else
if(s.state == 2) then
walk 'room16_cutscene'
else
if(_'room16_bookstand'.stateA == 2) then
put(_'room16_o',pl)
put(_'room16_x',pl)
s.state = 1
s.turn = 0
s:attr 'open'
if(s.firsttime == 0) then
if(_'room16_AI'.game == 0) then
p ('Ты открываешь дверцы шкафа и видишь, что он пуст. На задней стенке шкафа расчерчена таинственная таблица 3 на 3, её строки подписаны буквами "А", "Б" и "В", а столбцы пронумерованы "1", "2" и "3". На центральном поле стоит крестик: кто-то выцарапал его прямо на стенке шкафа. "Похоже на игру," -- думаешь ты -- "Можно куда-нибудь поставить нолик."')
else
p ('Ты открываешь дверцы шкафа и видишь, что он пуст. Тем не менее, тебе кажется, что в нём кто-то есть, просто почему-то его (или её) пока не видно. Таинственно всё это. Кстати, на стенке шкафа всё ещё расчерчена таблица, и снова в ней только один крестик на поле Б2.')
end;
s.firsttime = 1
_'room16_b2'.state = 1
else
p ("Ты открываешь дверцы шкафа.")
_'room16_AI':describe()
end;
else
p ("На дверцах шкафа нет ручек, поэтому ты пытаешься просунуть пальцы в щель между дверок, но ничего не получается: дверцы наглухо закрыты.");
end;
end;
end;
else
if(s.state == 3) then
p('Шкаф уже открыт.')
_'room16_AI':describe()
else
p('Ты пытаешься открыть дверцы шкафа, но они как будто куда-то пропали! Похоже, ты в ловушке.')
end;
end;
end;
before_Close = function(s)
if(s.state ~= 3) then
if(_'room16_wardrobe'.turn == 1) then _'room16_AI':calculate() end;
s.state = 0
return false
else
p('Не стоит тратить на это время!')
end;
end;
after_Enter = function(s)
p('Как только ты прячешься в шкаф, его двери сами собой захлопываются.')
_'room16_AI'.daemon_stage = 10;
_'room16_wardrobe':attr '~open'
_'room16_wardrobe':attr '~openable'
_'room16_wardrobe':attr 'light'
_'room16_wardrobe'.state = 4
_'room16_AI'.state = 0
_'room16_AI'.win = 0
_'room16_wardrobe'.turn = 0
_'room16_a1'.state = 0
_'room16_a2'.state = 0
_'room16_a3'.state = 0
_'room16_b1'.state = 0
_'room16_b2'.state = 0
_'room16_b3'.state = 0
_'room16_c1'.state = 0
_'room16_c2'.state = 0
_'room16_c3'.state = 0
move(_'room16_a1',_'room16_wardrobe')
move(_'room16_a2',_'room16_wardrobe')
move(_'room16_a3',_'room16_wardrobe')
move(_'room16_b1',_'room16_wardrobe')
move(_'room16_b2',_'room16_wardrobe')
move(_'room16_b3',_'room16_wardrobe')
move(_'room16_c1',_'room16_wardrobe')
move(_'room16_c2',_'room16_wardrobe')
move(_'room16_c3',_'room16_wardrobe')
move(_'room16_x',pl)
move(_'room16_o',pl)
move(pl,'room16_wardrobe')
end;
inside_dsc = function(s)
p 'Ты в шкафу.'
_'room16_AI':describe()
end;
before_Exit = function(s)
p('Ты пытаешься открыть дверцы шкафа, но они как будто куда-то пропали! Похоже, ты в ловушке.')
end;
obj = { 'room16_a1','room16_a2','room16_a3','room16_b1','room16_b2','room16_b3','room16_c1','room16_c2','room16_c3' };
}:attr 'scenery, static, closed, openable, container'
obj {
-"постамент";
nam = "room16_pedestal";
title = "Постамент";
state = 0;
stateA = 0;
description = function(s)
if s.state == 0 then
p ("Это загадочный постамент. Он выглядит совершенно бесполезным, но придаёт комнате таинственности.")
mp:content(s)
end;
if s.state == 1 then
if s.stateA == 0 then
p ("Ты замечаешь, что на постаменте появился паз цилиндрической формы, в глубине которого нарисована змея, обвивающая кинжал.")
s.stateA = 1
else
p ("Это загадочный постамент. В нём виден паз цилиндрической формы, в глубине которого нарисована змея, обвивающая кинжал.")
end;
mp:content(s)
end;
if s.state == 2 then
p ("Это загадочный постамент. В пазу намертво сидит статуэтка в виде змеи, обвивающей кинжал.")
mp:content(s)
end;
end;
before_Receive = function(s, w)
if s.state == 1 then
if w == _'statuetka' then
p ("Ты ставишь статуэтку в паз на постаменте, и она намертво входит внутрь. Слышится загадочный треск со стороны пюпитра.")
move(w, s)
s.state = 2
_'room16_bookstand'.stateA = 1
_'statuetka':attr 'scenery'
mp.score=mp.score+1;
else
p ("Ты кладешь ", w:noun'вн', " на постамент, но таинственная сила отталкивает ", w:noun'вн', " обратно.")
end;
else
p ("Таинственная сила отталкивает ", w:noun'вн', " обратно.")
end;
end;
}:attr 'scenery, static, supporter'
obj {
-"пюпитр";
nam = "room16_bookstand";
title = "Пюпитр";
state = 0;
stateA = 0;
description = function(s)
if(_'room16_mystical'.state == 0) then
if s.state == 0 then
p ("Это пюпитр, он выглядит загадочно.")
mp:content(s)
end;
if s.state == 1 then
if s.stateA == 0 then
p ("Это пюпитр, нём лежит книга. На обложке книги изображена змея, обвивающая кинжал.")
end;
if s.stateA == 1 then
p ("Это пюпитр, на нём лежит книга. Ты замечаешь, что она сама собой открылась.")
end;
if s.stateA == 2 then
p ("Это пюпитр, на нём лежит разрезанная пополам книга.")
end;
mp:content(s)
end;
else
p('На пюпитре лежит книга, а ещё там сидит тётушка Агата и точит когти.')
end;
end;
before_Receive = function(s, w)
if(_'room16_mystical'.state == 0) then
if s.state == 0 then
if w == _'book' then
p ("Когда книга оказывается близко к поверхности пюпитра, неведомая сила вырывает её из твоих рук и присасывает к пюпитру. Кажется, книгу больше не получится взять. Пока ты обо всём этом думаешь, на обложке книги вырисовывается символ змеи, обвивающей кинжал. А ещё слышится какой-то скрип со стороны постамента.")
move(w, s)
s.state = 1
_'room16_pedestal'.state = 1
_'book':attr 'scenery'
mp.score=mp.score+1;
else
p ("Ты кладешь ", w:noun'вн', " на пюпитр, но таинственная сила отталкивает ", w:noun'вн', " обратно.")
end;
else
p ("На пюпитре уже лежит книга.")
end;
else
p('Не стоит приближаться к нему, пока там сидит тётушка!')
end;
end;
}:attr 'scenery, static, supporter'
obj {
-"щель";
nam = "room16_slit";
title = "Щель";
state = 0;
description = function(s)
if s.state == 0 then
p ("Узкая щель под потолком, сквозь которую проникает тусклый таинственный свет.")
end;
end;
}:attr 'scenery, static'
obj {
-"поле А1, А1, поле а1, а1";
nam = "room16_a1";
title = "Поле А1";
state = 0;
description = function(s)
if s.state == 0 then
if(_'room16_wardrobe'.state >= 4) then
p ("Поле А1 не заполнено. Сюда можно поставить крестик.")
else
p ("Поле А1 не заполнено. Сюда можно поставить нолик.")
end;
end;
if s.state == 1 then
p ("На поле А1 стоит крестик.")
end;
if s.state == 2 then
p ("На поле А1 стоит нолик.")
end;
end;
before_Receive = function(s, w)
if (w == _'room16_o') then
if (_'room16_wardrobe'.turn == 0) then
if (s.state == 0) then
if (pl:have(_'dagger')) then
p ('Остриём кинжала ты выцарапываешь нолик на поле А1.')
s.state = 2
_'room16_wardrobe'.turn = 1
_'room16_AI'.state = _'room16_AI'.state + 1
_'room16_AI':continue()
else
p ('Чтобы поставить нолик, нужен кинжал.')
end;
else
p ('Это поле уже заполнено. Нельзя же играть не по правилам!')
end;
else
p ('Ты уже поставила один нолик в этом ходу. Нельзя же играть не по правилам!')
end;
else
if (w == _'room16_x' and _'room16_wardrobe'.state >= 4) then
if (_'room16_wardrobe'.turn == 0) then
if (s.state == 0) then
if (pl:have(_'dagger')) then
p ('Остриём кинжала ты выцарапываешь крестик на поле А1.')
s.state = 1
_'room16_wardrobe'.turn = 1
_'room16_AI'.state = _'room16_AI'.state + 1
else
p ('Чтобы поставить крестик, нужен кинжал.')
end;
else
p ('Это поле уже заполнено. Нельзя же играть не по правилам!')
end;
end;
else
p ('Что??')
end;
end;
end;
}:attr 'scenery, static, supporter'
obj {
-"поле А2, А2, поле а2, а2";
nam = "room16_a2";
title = "Поле А2";
state = 0;
description = function(s)
if s.state == 0 then
p ("Поле А2 не заполнено. Сюда можно поставить нолик.")
end;
if s.state == 1 then
p ("На поле А2 стоит крестик.")
end;
if s.state == 2 then
p ("На поле А2 стоит нолик.")
end;
end;
before_Receive = function(s, w)
if (w == _'room16_o') then
if (_'room16_wardrobe'.turn == 0) then
if (s.state == 0) then
if (pl:have(_'dagger')) then
p ('Остриём кинжала ты выцарапываешь нолик на поле А2.')
s.state = 2
_'room16_wardrobe'.turn = 1
_'room16_AI'.state = _'room16_AI'.state + 1
_'room16_AI':continue()
else
p ('Чтобы поставить нолик, нужен кинжал.')
end;
else
p ('Это поле уже заполнено. Нельзя же играть не по правилам!')
end;
else
p ('Ты уже поставила один нолик в этом ходу. Нельзя же играть не по правилам!')
end;
else
if (w == _'room16_x' and _'room16_wardrobe'.state >= 4) then
if (_'room16_wardrobe'.turn == 0) then
if (s.state == 0) then
if (pl:have(_'dagger')) then
p ('Остриём кинжала ты выцарапываешь крестик на поле А2.')
s.state = 1
_'room16_wardrobe'.turn = 1
_'room16_AI'.state = _'room16_AI'.state + 1
else
p ('Чтобы поставить крестик, нужен кинжал.')
end;
else
p ('Это поле уже заполнено. Нельзя же играть не по правилам!')
end;
end;
else
p ('Что??')
end;
end;
end;
}:attr 'scenery, static, supporter'
obj {
-"поле А3, А3, поле а3, а3";
nam = "room16_a3";
title = "Поле А3";
state = 0;
description = function(s)
if s.state == 0 then
p ("Поле А3 не заполнено. Сюда можно поставить нолик.")
end;
if s.state == 1 then
p ("На поле А3 стоит крестик.")
end;
if s.state == 2 then
p ("На поле А3 стоит нолик.")
end;
end;
before_Receive = function(s, w)
if (w == _'room16_o') then
if (_'room16_wardrobe'.turn == 0) then
if (s.state == 0) then
if (pl:have(_'dagger')) then
p ('Остриём кинжала ты выцарапываешь нолик на поле А3.')
s.state = 2
_'room16_wardrobe'.turn = 1
_'room16_AI'.state = _'room16_AI'.state + 1
_'room16_AI':continue()
else
p ('Чтобы поставить нолик, нужен кинжал.')
end;
else
p ('Это поле уже заполнено. Нельзя же играть не по правилам!')
end;
else
p ('Ты уже поставила один нолик в этом ходу. Нельзя же играть не по правилам!')
end;
else
if (w == _'room16_x' and _'room16_wardrobe'.state >= 4) then
if (_'room16_wardrobe'.turn == 0) then
if (s.state == 0) then
if (pl:have(_'dagger')) then
p ('Остриём кинжала ты выцарапываешь крестик на поле А3.')
s.state = 1
_'room16_wardrobe'.turn = 1
_'room16_AI'.state = _'room16_AI'.state + 1
else
p ('Чтобы поставить крестик, нужен кинжал.')
end;
else
p ('Это поле уже заполнено. Нельзя же играть не по правилам!')
end;
end;
else
p ('Что??')
end;
end;
end;
}:attr 'scenery, static, supporter'
obj {
-"поле Б1, Б1, поле б1, б1";
nam = "room16_b1";
title = "Поле Б1";
state = 0;
description = function(s)
if s.state == 0 then
p ("Поле Б1 не заполнено. Сюда можно поставить нолик.")
end;
if s.state == 1 then
p ("На поле Б1 стоит крестик.")
end;
if s.state == 2 then
p ("На поле Б1 стоит нолик.")
end;
end;
before_Receive = function(s, w)
if (w == _'room16_o') then
if (_'room16_wardrobe'.turn == 0) then
if (s.state == 0) then
if (pl:have(_'dagger')) then
p ('Остриём кинжала ты выцарапываешь нолик на поле Б1.')
s.state = 2
_'room16_wardrobe'.turn = 1
_'room16_AI'.state = _'room16_AI'.state + 1
_'room16_AI':continue()
else
p ('Чтобы поставить нолик, нужен кинжал.')
end;
else
p ('Это поле уже заполнено. Нельзя же играть не по правилам!')
end;
else
p ('Ты уже поставила один нолик в этом ходу. Нельзя же играть не по правилам!')
end;
else
if (w == _'room16_x' and _'room16_wardrobe'.state >= 4) then
if (_'room16_wardrobe'.turn == 0) then
if (s.state == 0) then
if (pl:have(_'dagger')) then
p ('Остриём кинжала ты выцарапываешь крестик на поле Б1.')
s.state = 1
_'room16_wardrobe'.turn = 1
_'room16_AI'.state = _'room16_AI'.state + 1
else
p ('Чтобы поставить крестик, нужен кинжал.')
end;
else
p ('Это поле уже заполнено. Нельзя же играть не по правилам!')
end;
end;
else
p ('Что??')
end;
end;
end;
}:attr 'scenery, static, supporter'
obj {
-"поле Б2, Б2, поле б2, б2";
nam = "room16_b2";
title = "Поле Б2";
state = 0;
description = function(s)
if s.state == 0 then
p ("Поле Б2 не заполнено. Сюда можно поставить нолик.")
end;
if s.state == 1 then
p ("На поле Б2 стоит крестик.")
end;
if s.state == 2 then
p ("На поле Б2 стоит нолик.")
end;
end;
before_Receive = function(s, w)
if (w == _'room16_o') then
if (_'room16_wardrobe'.turn == 0) then
if (s.state == 0) then
if (pl:have(_'dagger')) then
p ('Остриём кинжала ты выцарапываешь нолик на поле Б2.')
s.state = 2
_'room16_wardrobe'.turn = 1
_'room16_AI'.state = _'room16_AI'.state + 1
_'room16_AI':continue()
else
p ('Чтобы поставить нолик, нужен кинжал.')
end;
else
p ('Это поле уже заполнено. Нельзя же играть не по правилам!')
end;
else
p ('Ты уже поставила один нолик в этом ходу. Нельзя же играть не по правилам!')
end;
else
if (w == _'room16_x' and _'room16_wardrobe'.state >= 4) then
if (_'room16_wardrobe'.turn == 0) then
if (s.state == 0) then
if (pl:have(_'dagger')) then
p ('Остриём кинжала ты выцарапываешь крестик на поле Б2.')
s.state = 1
_'room16_wardrobe'.turn = 1
_'room16_AI'.state = _'room16_AI'.state + 1
else
p ('Чтобы поставить крестик, нужен кинжал.')
end;
else
p ('Это поле уже заполнено. Нельзя же играть не по правилам!')
end;
end;
else
p ('Что??')
end;
end;
end;
}:attr 'scenery, static, supporter'
obj {
-"поле Б3, Б3, поле б3, б3";
nam = "room16_b3";
title = "Поле Б3";
state = 0;
description = function(s)
if s.state == 0 then
p ("Поле Б3 не заполнено. Сюда можно поставить нолик.")
end;
if s.state == 1 then
p ("На поле Б3 стоит крестик.")
end;
if s.state == 2 then
p ("На поле Б3 стоит нолик.")
end;
end;
before_Receive = function(s, w)
if (w == _'room16_o') then
if (_'room16_wardrobe'.turn == 0) then
if (s.state == 0) then
if (pl:have(_'dagger')) then
p ('Остриём кинжала ты выцарапываешь нолик на поле Б3.')
s.state = 2
_'room16_wardrobe'.turn = 1
_'room16_AI'.state = _'room16_AI'.state + 1
_'room16_AI':continue()
else
p ('Чтобы поставить нолик, нужен кинжал.')
end;
else
p ('Это поле уже заполнено. Нельзя же играть не по правилам!')
end;
else
p ('Ты уже поставила один нолик в этом ходу. Нельзя же играть не по правилам!')
end;
else
if (w == _'room16_x' and _'room16_wardrobe'.state >= 4) then
if (_'room16_wardrobe'.turn == 0) then
if (s.state == 0) then
if (pl:have(_'dagger')) then
p ('Остриём кинжала ты выцарапываешь крестик на поле Б3.')
s.state = 1
_'room16_wardrobe'.turn = 1
_'room16_AI'.state = _'room16_AI'.state + 1
else
p ('Чтобы поставить крестик, нужен кинжал.')
end;
else
p ('Это поле уже заполнено. Нельзя же играть не по правилам!')
end;
end;
else
p ('Что??')
end;
end;
end;
}:attr 'scenery, static, supporter'
obj {
-"поле В1, В1, поле в1, в1";
nam = "room16_c1";
title = "Поле В1";
state = 0;
description = function(s)
if s.state == 0 then
p ("Поле В1 не заполнено. Сюда можно поставить нолик.")
end;
if s.state == 1 then
p ("На поле В1 стоит крестик.")
end;
if s.state == 2 then
p ("На поле В1 стоит нолик.")
end;
end;
before_Receive = function(s, w)
if (w == _'room16_o') then
if (_'room16_wardrobe'.turn == 0) then
if (s.state == 0) then
if (pl:have(_'dagger')) then
p ('Остриём кинжала ты выцарапываешь нолик на поле В1.')
s.state = 2
_'room16_wardrobe'.turn = 1
_'room16_AI'.state = _'room16_AI'.state + 1
_'room16_AI':continue()
else
p ('Чтобы поставить нолик, нужен кинжал.')
end;
else
p ('Это поле уже заполнено. Нельзя же играть не по правилам!')
end;
else
p ('Ты уже поставила один нолик в этом ходу. Нельзя же играть не по правилам!')
end;
else
if (w == _'room16_x' and _'room16_wardrobe'.state >= 4) then
if (_'room16_wardrobe'.turn == 0) then
if (s.state == 0) then
if (pl:have(_'dagger')) then
p ('Остриём кинжала ты выцарапываешь крестик на поле В1.')
s.state = 1
_'room16_wardrobe'.turn = 1
_'room16_AI'.state = _'room16_AI'.state + 1
else
p ('Чтобы поставить крестик, нужен кинжал.')
end;
else
p ('Это поле уже заполнено. Нельзя же играть не по правилам!')
end;
end;
else
p ('Что??')
end;
end;
end;
}:attr 'scenery, static, supporter'
obj {
-"поле В2, В2, поле в2, в2";
nam = "room16_c2";
title = "Поле В2";
state = 0;
description = function(s)
if s.state == 0 then
p ("Поле В2 не заполнено. Сюда можно поставить нолик.")
end;
if s.state == 1 then
p ("На поле В2 стоит крестик.")
end;
if s.state == 2 then
p ("На поле В2 стоит нолик.")
end;
end;
before_Receive = function(s, w)
if (w == _'room16_o') then
if (_'room16_wardrobe'.turn == 0) then
if (s.state == 0) then
if (pl:have(_'dagger')) then
p ('Остриём кинжала ты выцарапываешь нолик на поле В2.')
s.state = 2
_'room16_wardrobe'.turn = 1
_'room16_AI'.state = _'room16_AI'.state + 1
_'room16_AI':continue()
else
p ('Чтобы поставить нолик, нужен кинжал.')
end;
else
p ('Это поле уже заполнено. Нельзя же играть не по правилам!')
end;
else
p ('Ты уже поставила один нолик в этом ходу. Нельзя же играть не по правилам!')
end;
else
if (w == _'room16_x' and _'room16_wardrobe'.state >= 4) then
if (_'room16_wardrobe'.turn == 0) then
if (s.state == 0) then
if (pl:have(_'dagger')) then
p ('Остриём кинжала ты выцарапываешь крестик на поле В2.')
s.state = 1
_'room16_wardrobe'.turn = 1
_'room16_AI'.state = _'room16_AI'.state + 1
else
p ('Чтобы поставить крестик, нужен кинжал.')
end;
else
p ('Это поле уже заполнено. Нельзя же играть не по правилам!')
end;
end;
else
p ('Что??')
end;
end;
end;
}:attr 'scenery, static, supporter'
obj {
-"поле В3, В3, поле в3, в3";
nam = "room16_c3";
title = "Поле В3";
state = 0;
description = function(s)
if s.state == 0 then
p ("Поле В3 не заполнено. Сюда можно поставить нолик.")
end;
if s.state == 1 then
p ("На поле В3 стоит крестик.")
end;
if s.state == 2 then
p ("На поле В3 стоит нолик.")
end;
end;
before_Receive = function(s, w)
if (w == _'room16_o') then
if (_'room16_wardrobe'.turn == 0) then
if (s.state == 0) then
if (pl:have(_'dagger')) then
p ('Остриём кинжала ты выцарапываешь нолик на поле В3.')
s.state = 2
_'room16_wardrobe'.turn = 1
_'room16_AI'.state = _'room16_AI'.state + 1
_'room16_AI':continue()
else
p ('Чтобы поставить нолик, нужен кинжал.')
end;
else
p ('Это поле уже заполнено. Нельзя же играть не по правилам!')
end;
else
p ('Ты уже поставила один нолик в этом ходу. Нельзя же играть не по правилам!')
end;
else
if (w == _'room16_x' and _'room16_wardrobe'.state >= 4) then
if (_'room16_wardrobe'.turn == 0) then
if (s.state == 0) then
if (pl:have(_'dagger')) then
p ('Остриём кинжала ты выцарапываешь крестик на поле В3.')
s.state = 1
_'room16_wardrobe'.turn = 1
_'room16_AI'.state = _'room16_AI'.state + 1
else
p ('Чтобы поставить крестик, нужен кинжал.')
end;
else
p ('Это поле уже заполнено. Нельзя же играть не по правилам!')
end;
end;
else
p ('Что??')
end;
end;
end;
}:attr 'scenery, static, supporter'
obj {
-"ИИ комнаты 16";
nam = "room16_AI";
title = "ИИ комнаты 16";
state = 0;
game = 0;
win = 0;
daemon_stage = 0;
describe = function()
if(_'room16_a1'.state == 1) then
p('На поле А1 стоит крестик.')
end;
if(_'room16_a1'.state == 2) then
p('На поле А1 стоит нолик.')
end;
if(_'room16_a2'.state == 1) then
p('На поле А2 стоит крестик.')
end;
if(_'room16_a2'.state == 2) then
p('На поле А2 стоит нолик.')
end;
if(_'room16_a3'.state == 1) then
p('На поле А3 стоит крестик.')
end;
if(_'room16_a3'.state == 2) then
p('На поле А3 стоит нолик.')
end;
if(_'room16_b1'.state == 1) then
p('На поле Б1 стоит крестик.')
end;
if(_'room16_b1'.state == 2) then
p('На поле Б1 стоит нолик.')
end;
if(_'room16_b2'.state == 1) then
p('На поле Б2 стоит крестик.')
end;
if(_'room16_b2'.state == 2) then
p('На поле Б2 стоит нолик.')
end;
if(_'room16_b3'.state == 1) then
p('На поле Б3 стоит крестик.')
end;
if(_'room16_b3'.state == 2) then
p('На поле Б3 стоит нолик.')
end;
if(_'room16_c1'.state == 1) then
p('На поле В1 стоит крестик.')
end;
if(_'room16_c1'.state == 2) then
p('На поле В1 стоит нолик.')
end;
if(_'room16_c2'.state == 1) then
p('На поле В2 стоит крестик.')
end;
if(_'room16_c2'.state == 2) then
p('На поле В2 стоит нолик.')
end;
if(_'room16_c3'.state == 1) then
p('На поле В3 стоит крестик.')
end;
if(_'room16_c3'.state == 2) then
p('На поле В3 стоит нолик.')
end;
if(_'room16_a1'.state == 1 and _'room16_a2'.state == 1 and _'room16_a3'.state == 1) then _'room16_AI'.win = 1; end;
if(_'room16_a1'.state == 1 and _'room16_b1'.state == 1 and _'room16_c1'.state == 1) then _'room16_AI'.win = 1; end;
if(_'room16_a3'.state == 1 and _'room16_b3'.state == 1 and _'room16_c3'.state == 1) then _'room16_AI'.win = 1; end;
if(_'room16_c1'.state == 1 and _'room16_c2'.state == 1 and _'room16_c3'.state == 1) then _'room16_AI'.win = 1; end;
if(_'room16_b1'.state == 1 and _'room16_b2'.state == 1 and _'room16_b3'.state == 1) then _'room16_AI'.win = 1; end;
if(_'room16_a2'.state == 1 and _'room16_b2'.state == 1 and _'room16_c2'.state == 1) then _'room16_AI'.win = 1; end;
if(_'room16_a1'.state == 1 and _'room16_b2'.state == 1 and _'room16_c3'.state == 1) then _'room16_AI'.win = 1; end;
if(_'room16_a3'.state == 1 and _'room16_b2'.state == 1 and _'room16_c1'.state == 1) then _'room16_AI'.win = 1; end;
if(_'room16_a1'.state == 2 and _'room16_a2'.state == 2 and _'room16_a3'.state == 2) then _'room16_AI'.win = 2; end;
if(_'room16_a1'.state == 2 and _'room16_b1'.state == 2 and _'room16_c1'.state == 2) then _'room16_AI'.win = 2; end;
if(_'room16_a3'.state == 2 and _'room16_b3'.state == 2 and _'room16_c3'.state == 2) then _'room16_AI'.win = 2; end;
if(_'room16_c1'.state == 2 and _'room16_c2'.state == 2 and _'room16_c3'.state == 2) then _'room16_AI'.win = 2; end;
if(_'room16_b1'.state == 2 and _'room16_b2'.state == 2 and _'room16_b3'.state == 2) then _'room16_AI'.win = 2; end;
if(_'room16_a2'.state == 2 and _'room16_b2'.state == 2 and _'room16_c2'.state == 2) then _'room16_AI'.win = 2; end;
if(_'room16_a1'.state == 2 and _'room16_b2'.state == 2 and _'room16_c3'.state == 2) then _'room16_AI'.win = 2; end;
if(_'room16_a3'.state == 2 and _'room16_b2'.state == 2 and _'room16_c1'.state == 2) then _'room16_AI'.win = 2; end;
if(_'room16_wardrobe'.state < 4) then
if(_'room16_AI'.win == 1) then
p('Три крестика соединены линией: кажется, ты проиграла. Вдруг таинственная сила отбрасывает тебя от шкафа, а его дверцы захлопываются.')
_'room16_wardrobe'.state = 0;
_'room16_AI'.state = 0;
_'room16_wardrobe':attr '~open';
_'room16_a1'.state = 0;
_'room16_a2'.state = 0;
_'room16_a3'.state = 0;
_'room16_b1'.state = 0;
_'room16_b2'.state = 1;
_'room16_b3'.state = 0;
_'room16_c1'.state = 0;
_'room16_c2'.state = 0;
_'room16_c3'.state = 0;
_'room16_AI'.win = 0;
end;
--if(_'room16_a1'.state ~= 0 and _'room16_a2'.state ~= 0 and _'room16_a3'.state ~= 0 and _'room16_b1'.state ~= 0 and _'room16_b2'.state ~= 0 and _'room16_b3'.state ~= 0 and _'room16_c1'.state ~= 0 and _'room16_c2'.state ~= 0 and _'room16_c3'.state ~= 0) then
if(_'room16_AI'.state == 4) then
p('Все поля исцарапаны, но никто не победил. Вдруг шкаф начинает трястись, и таинственная сила отбрасывает тебя в другой конец комнаты. Шкаф захлопывается.')
if(_'room16_AI'.game == 0) then _'room16_wardrobe'.firsttime = 0; end;
_'room16_AI'.game = 1;
_'room16_wardrobe'.state = 0;
_'room16_AI'.state = 0;
_'room16_wardrobe':attr '~open';
_'room16_a1'.state = 0;
_'room16_a2'.state = 0;
_'room16_a3'.state = 0;
_'room16_b1'.state = 0;
_'room16_b2'.state = 1;
_'room16_b3'.state = 0;
_'room16_c1'.state = 0;
_'room16_c2'.state = 0;
_'room16_c3'.state = 0;
end;
else
if(_'room16_AI'.win == 1) then
p('Три крестика соединены линией: ты выиграла. Не совсем, правда, понятно, у кого. Стоит тебе об этом подумать, как все крестики и нолики исчезают, оставляя таблицу пустой.')
_'room16_AI'.state = 0;
_'room16_a1'.state = 0;
_'room16_a2'.state = 0;
_'room16_a3'.state = 0;
_'room16_b1'.state = 0;
_'room16_b2'.state = 0;
_'room16_b3'.state = 0;
_'room16_c1'.state = 0;
_'room16_c2'.state = 0;
_'room16_c3'.state = 0;
_'room16_wardrobe'.turn = 0;
_'room16_AI'.win = 0;
end;
if(_'room16_AI'.win == 2) then
p('Три нолика соединены линией: кто бы ни был твоим воображаемым противником, ты проиграла. Стоит тебе об этом подумать, как все крестики и нолики исчезают, оставляя таблицу пустой.')
_'room16_AI'.state = 0;
_'room16_a1'.state = 0;
_'room16_a2'.state = 0;
_'room16_a3'.state = 0;
_'room16_b1'.state = 0;
_'room16_b2'.state = 0;
_'room16_b3'.state = 0;
_'room16_c1'.state = 0;
_'room16_c2'.state = 0;
_'room16_c3'.state = 0;
_'room16_wardrobe'.turn = 0;
_'room16_AI'.win = 0;
end;
if(_'room16_a1'.state ~= 0 and _'room16_a2'.state ~= 0 and _'room16_a3'.state ~= 0 and _'room16_b1'.state ~= 0 and _'room16_b2'.state ~= 0 and _'room16_b3'.state ~= 0 and _'room16_c1'.state ~= 0 and _'room16_c2'.state ~= 0 and _'room16_c3'.state ~= 0) then
p('Все поля заполнены, но никто не победил. Кто бы ни был твоим воображаемым противником, у вас ничья. Стоит тебе об этом подумать, как все крестики и нолики исчезают, оставляя таблицу пустой.')
_'room16_AI'.state = 0;
_'room16_a1'.state = 0;
_'room16_a2'.state = 0;
_'room16_a3'.state = 0;
_'room16_b1'.state = 0;
_'room16_b2'.state = 0;
_'room16_b3'.state = 0;
_'room16_c1'.state = 0;
_'room16_c2'.state = 0;
_'room16_c3'.state = 0;
_'room16_wardrobe'.turn = 0;
_'room16_AI'.win = 0;
end;
end;
end;
checkwin = function()
if(_'room16_a1'.state == 1 and _'room16_a2'.state == 1 and _'room16_a3'.state == 1) then _'room16_AI'.win = 1; end;
if(_'room16_a1'.state == 1 and _'room16_b1'.state == 1 and _'room16_c1'.state == 1) then _'room16_AI'.win = 1; end;
if(_'room16_a3'.state == 1 and _'room16_b3'.state == 1 and _'room16_c3'.state == 1) then _'room16_AI'.win = 1; end;
if(_'room16_c1'.state == 1 and _'room16_c2'.state == 1 and _'room16_c3'.state == 1) then _'room16_AI'.win = 1; end;
if(_'room16_b1'.state == 1 and _'room16_b2'.state == 1 and _'room16_b3'.state == 1) then _'room16_AI'.win = 1; end;
if(_'room16_a2'.state == 1 and _'room16_b2'.state == 1 and _'room16_c2'.state == 1) then _'room16_AI'.win = 1; end;
if(_'room16_a1'.state == 1 and _'room16_b2'.state == 1 and _'room16_c3'.state == 1) then _'room16_AI'.win = 1; end;
if(_'room16_a3'.state == 1 and _'room16_b2'.state == 1 and _'room16_c1'.state == 1) then _'room16_AI'.win = 1; end;
if(_'room16_a1'.state == 2 and _'room16_a2'.state == 2 and _'room16_a3'.state == 2) then _'room16_AI'.win = 2; end;
if(_'room16_a1'.state == 2 and _'room16_b1'.state == 2 and _'room16_c1'.state == 2) then _'room16_AI'.win = 2; end;
if(_'room16_a3'.state == 2 and _'room16_b3'.state == 2 and _'room16_c3'.state == 2) then _'room16_AI'.win = 2; end;
if(_'room16_c1'.state == 2 and _'room16_c2'.state == 2 and _'room16_c3'.state == 2) then _'room16_AI'.win = 2; end;
if(_'room16_b1'.state == 2 and _'room16_b2'.state == 2 and _'room16_b3'.state == 2) then _'room16_AI'.win = 2; end;
if(_'room16_a2'.state == 2 and _'room16_b2'.state == 2 and _'room16_c2'.state == 2) then _'room16_AI'.win = 2; end;
if(_'room16_a1'.state == 2 and _'room16_b2'.state == 2 and _'room16_c3'.state == 2) then _'room16_AI'.win = 2; end;
if(_'room16_a3'.state == 2 and _'room16_b2'.state == 2 and _'room16_c1'.state == 2) then _'room16_AI'.win = 2; end;
if(_'room16_wardrobe'.state < 4) then
if(_'room16_AI'.win == 1) then
p('Три крестика соединены линией: кажется, ты проиграла. Вдруг таинственная сила отбрасывает тебя от шкафа, а его дверцы захлопываются.')
_'room16_wardrobe'.state = 0;
_'room16_AI'.state = 0;
_'room16_wardrobe':attr '~open';
_'room16_a1'.state = 0;
_'room16_a2'.state = 0;
_'room16_a3'.state = 0;
_'room16_b1'.state = 0;
_'room16_b2'.state = 1;
_'room16_b3'.state = 0;
_'room16_c1'.state = 0;
_'room16_c2'.state = 0;
_'room16_c3'.state = 0;
_'room16_AI'.win = 0;
end;
--if(_'room16_a1'.state ~= 0 and _'room16_a2'.state ~= 0 and _'room16_a3'.state ~= 0 and _'room16_b1'.state ~= 0 and _'room16_b2'.state ~= 0 and _'room16_b3'.state ~= 0 and _'room16_c1'.state ~= 0 and _'room16_c2'.state ~= 0 and _'room16_c3'.state ~= 0) then
if(_'room16_AI'.state == 4) then
p('Все поля исцарапаны, но никто не победил. Вдруг шкаф начинает трястись, и таинственная сила отбрасывает тебя в другой конец комнаты. Шкаф захлопывается.')
if(_'room16_AI'.game == 0) then _'room16_wardrobe'.firsttime = 0; end;
_'room16_AI'.game = 1;
_'room16_wardrobe'.state = 0;
_'room16_AI'.state = 0;
_'room16_wardrobe':attr '~open';
_'room16_a1'.state = 0;
_'room16_a2'.state = 0;
_'room16_a3'.state = 0;
_'room16_b1'.state = 0;
_'room16_b2'.state = 1;
_'room16_b3'.state = 0;
_'room16_c1'.state = 0;
_'room16_c2'.state = 0;
_'room16_c3'.state = 0;
end;
else
if(_'room16_AI'.win == 1) then
p('Три крестика соединены линией: ты выиграла. Не совсем, правда, понятно, у кого. Стоит тебе об этом подумать, как все крестики и нолики исчезают, оставляя таблицу пустой.')
_'room16_AI'.state = 0;
_'room16_a1'.state = 0;
_'room16_a2'.state = 0;
_'room16_a3'.state = 0;
_'room16_b1'.state = 0;
_'room16_b2'.state = 0;
_'room16_b3'.state = 0;
_'room16_c1'.state = 0;
_'room16_c2'.state = 0;
_'room16_c3'.state = 0;
_'room16_wardrobe'.turn = 0;
_'room16_AI'.win = 0;
end;
if(_'room16_AI'.win == 2) then
p('Три нолика соединены линией: кто бы ни был твоим воображаемым противником, ты проиграла. Стоит тебе об этом подумать, как все крестики и нолики исчезают, оставляя таблицу пустой.')
_'room16_AI'.state = 0;
_'room16_a1'.state = 0;
_'room16_a2'.state = 0;
_'room16_a3'.state = 0;
_'room16_b1'.state = 0;
_'room16_b2'.state = 0;
_'room16_b3'.state = 0;
_'room16_c1'.state = 0;
_'room16_c2'.state = 0;
_'room16_c3'.state = 0;
_'room16_wardrobe'.turn = 0;
_'room16_AI'.win = 0;
end;
if(_'room16_a1'.state ~= 0 and _'room16_a2'.state ~= 0 and _'room16_a3'.state ~= 0 and _'room16_b1'.state ~= 0 and _'room16_b2'.state ~= 0 and _'room16_b3'.state ~= 0 and _'room16_c1'.state ~= 0 and _'room16_c2'.state ~= 0 and _'room16_c3'.state ~= 0) then
p('Все поля заполнены, но никто не победил. Кто бы ни был твоим воображаемым противником, у вас ничья. Стоит тебе об этом подумать, как все крестики и нолики исчезают, оставляя таблицу пустой.')
_'room16_AI'.state = 0;
_'room16_a1'.state = 0;
_'room16_a2'.state = 0;
_'room16_a3'.state = 0;
_'room16_b1'.state = 0;
_'room16_b2'.state = 0;
_'room16_b3'.state = 0;
_'room16_c1'.state = 0;
_'room16_c2'.state = 0;
_'room16_c3'.state = 0;
_'room16_wardrobe'.turn = 0;
_'room16_AI'.win = 0;
end;
end;
end;
continue = function()
if(_'room16_a1'.state == 2 and _'room16_a2'.state == 2 and _'room16_a3'.state == 2) then _'room16_AI'.win = 2; end;
if(_'room16_a1'.state == 2 and _'room16_b1'.state == 2 and _'room16_c1'.state == 2) then _'room16_AI'.win = 2; end;
if(_'room16_a3'.state == 2 and _'room16_b3'.state == 2 and _'room16_c3'.state == 2) then _'room16_AI'.win = 2; end;
if(_'room16_c1'.state == 2 and _'room16_c2'.state == 2 and _'room16_c3'.state == 2) then _'room16_AI'.win = 2; end;
if(_'room16_AI'.win == 2) then
p ('Ты победно соединяешь три нолика одной кривой линией (так уж получается, когда царапаешь кинжалами шкафы), и вдруг какая-то таинственная сила отталкивает тебя от шкафа с такой силой, что кинжал остаётся в шкафу. Дверцы шкафа захлопываются.')
move(_'dagger',_'room16_wardrobe')
_'room16_AI'.game = 2;
_'room16_wardrobe'.state = 2;
_'room16_AI'.state = 0;
_'room16_wardrobe':attr '~open';
remove(_'room16_o',pl)
remove(_'room16_x',pl)
remove(_'room16_a1',_'room16_wardrobe')
remove(_'room16_a2',_'room16_wardrobe')
remove(_'room16_a3',_'room16_wardrobe')
remove(_'room16_b1',_'room16_wardrobe')
remove(_'room16_b2',_'room16_wardrobe')
remove(_'room16_b3',_'room16_wardrobe')
remove(_'room16_c1',_'room16_wardrobe')
remove(_'room16_c2',_'room16_wardrobe')
remove(_'room16_c3',_'room16_wardrobe')
else
if(_'room16_wardrobe'.firsto == 1) then
p('Ты поняла принцип игры и скорее закрываешь шкаф.')
_'room16_wardrobe':before_Close(_'room16_wardrobe')
_'room16_wardrobe':attr '~open'
else
_'room16_wardrobe'.firsto = 1;
end;
end;
end;
calculate = function()
if(_'room16_AI'.state == 1) then
if(_'room16_a1'.state == 2) then _'room16_b3'.state = 1 end;
if(_'room16_a2'.state == 2) then _'room16_b3'.state = 1 end;
if(_'room16_a3'.state == 2) then _'room16_b1'.state = 1 end;
if(_'room16_b1'.state == 2) then _'room16_a2'.state = 1 end;
if(_'room16_b3'.state == 2) then _'room16_a2'.state = 1 end;
if(_'room16_c1'.state == 2) then _'room16_a2'.state = 1 end;
if(_'room16_c2'.state == 2) then _'room16_b3'.state = 1 end;
if(_'room16_c3'.state == 2) then _'room16_a2'.state = 1 end;
end;
if(_'room16_AI'.state == 2) then
if(_'room16_b3'.state == 1) then
if(_'room16_b1'.state == 2) then
if(_'room16_a1'.state == 2) then _'room16_c1'.state = 1 end;
if(_'room16_a2'.state == 2) then _'room16_a3'.state = 1 end;
if(_'room16_c2'.state == 2) then _'room16_a3'.state = 1 end;
else
_'room16_b1'.state = 1
end;
end;
if(_'room16_a2'.state == 1) then
if(_'room16_c2'.state == 2) then
if(_'room16_b1'.state == 2) then _'room16_a3'.state = 1 end;
if(_'room16_b3'.state == 2) then _'room16_a3'.state = 1 end;
if(_'room16_c1'.state == 2) then _'room16_c3'.state = 1 end;
if(_'room16_c3'.state == 2) then _'room16_c1'.state = 1 end;
else
_'room16_c2'.state = 1
end;
end;
if(_'room16_b1'.state == 1) then
if(_'room16_b3'.state == 2) then
_'room16_c3'.state = 1
else
_'room16_b3'.state = 1
end;
end;
end;
if(_'room16_AI'.state == 3) then
if(_'room16_a3'.state == 1) then
if(_'room16_a2'.state == 1) then
if(_'room16_a1'.state == 2) then
_'room16_c1'.state = 1
else
_'room16_a1'.state = 1
end;
end;
if(_'room16_b3'.state == 1) then
if(_'room16_c1'.state == 2) then
_'room16_c3'.state = 1
else
_'room16_c1'.state = 1
end;
end;
end;
if(_'room16_c3'.state == 1) then
if(_'room16_a1'.state == 2) then
if(_'room16_a2'.state == 1) then
if(_'room16_AI'.game == 0) then
_'room16_b1'.state = 1
else
_'room16_a3'.state = 1
end;
end;
if(_'room16_b1'.state == 1) then
if(_'room16_AI'.game == 0) then
_'room16_a2'.state = 1
else
_'room16_c1'.state = 1
end;
end;
else
_'room16_a1'.state = 1
end;
end;
if(_'room16_c1'.state == 1) then
if(_'room16_a3'.state == 2) then
if(_'room16_a2'.state == 1) then
if(_'room16_AI'.game == 0) then
_'room16_b3'.state = 1
else
_'room16_a1'.state = 1
end;
end;
if(_'room16_b3'.state == 1) then
if(_'room16_AI'.game == 0) then
_'room16_a2'.state = 1
else
_'room16_c3'.state = 1
end;
end;
else
_'room16_a3'.state = 1
end;
end;
end;
if(_'room16_AI'.state == 4) then
if(_'room16_a1'.state == 0) then _'room16_a1'.state = 1 end;
if(_'room16_a2'.state == 0) then _'room16_a2'.state = 1 end;
if(_'room16_a3'.state == 0) then _'room16_a3'.state = 1 end;
if(_'room16_b1'.state == 0) then _'room16_b1'.state = 1 end;
if(_'room16_b3'.state == 0) then _'room16_b3'.state = 1 end;
if(_'room16_c1'.state == 0) then _'room16_c1'.state = 1 end;
if(_'room16_c2'.state == 0) then _'room16_c2'.state = 1 end;
if(_'room16_c3'.state == 0) then _'room16_c3'.state = 1 end;
end;
end;
finish = function()
_'room16_mystical'.state = 1
_'room16_wardrobe'.state = 3
_'room16_wardrobe':attr 'open'
_'room16_wardrobe':attr 'enterable'
move(_'room16_witch',_'room16_mystical')
move(_'room16_wall',_'room16_mystical')
DaemonStart 'room16_AI'
end;
aiturn = function()
_'room16_AI':checkwin()
if(_'room16_wardrobe'.turn == 1) then
_'room16_wardrobe'.turn = 0
if(_'room16_b2'.state == 0) then
p 'Ты замечешь, что на поле Б2 появляется нацарапанный нолик.'
_'room16_b2'.state = 2;
else
if(_'room16_a3'.state == 0) then
p 'Ты замечешь, что на поле A3 появляется нацарапанный нолик.'
_'room16_a3'.state = 2;
else
if(_'room16_c3'.state == 0) then
p 'Ты замечешь, что на поле В3 появляется нацарапанный нолик.'
_'room16_c3'.state = 2;
else
if(_'room16_c1'.state == 0) then
p 'Ты замечешь, что на поле В2 появляется нацарапанный нолик.'
_'room16_c1'.state = 2;
else
if(_'room16_a1'.state == 0) then
p 'Ты замечешь, что на поле А1 появляется нацарапанный нолик.'
_'room16_a1'.state = 2;
else
if(_'room16_b3'.state == 0) then
p 'Ты замечешь, что на поле Б3 появляется нацарапанный нолик.'
_'room16_b3'.state = 2;
else
if(_'room16_c2'.state == 0) then
p 'Ты замечешь, что на поле В2 появляется нацарапанный нолик.'
_'room16_c2'.state = 2;
else
if(_'room16_b1'.state == 0) then
p 'Ты замечешь, что на поле Б1 появляется нацарапанный нолик.'
_'room16_b1'.state = 2;
else
if(_'room16_a2'.state == 0) then
p 'Ты замечешь, что на поле А2 появляется нацарапанный нолик.'
_'room16_a2'.state = 2;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
_'room16_AI':checkwin()
end;
daemon = function(s)
if(_'room16_AI'.daemon_stage == 0) then
p (' -- Я вот думаю, на лоскутки тебя порезать или на кусочки разорвать. А, прислужница госмашины?')
end;
if(_'room16_AI'.daemon_stage == 1) then
p (' -- Сейчас, наточу когти, разберусь с тобой. Ты пока подумай, жизнь вспомни.')
end;
if(_'room16_AI'.daemon_stage == 2) then
p (' -- Тут, конечно, нужны кусачки.')
end;
if(_'room16_AI'.daemon_stage == 3) then
p (' -- Заусенец проклятый! Вот и ты, Настенька, как заусенец у меня в пальце сейчас: и жалко, и противно!')
end;
if(_'room16_AI'.daemon_stage == 4) then
p (' -- Ну ладно, готово.')
end;
if(_'room16_AI'.daemon_stage == 5) then
DaemonStop 'room16_AI';
walk 'room16_cutsceneB'
end;
if(_'room16_AI'.daemon_stage == 6) then
DaemonStop 'room16_AI';
walk 'room16_cutsceneC'
end;
if(_'room16_AI'.daemon_stage == 7) then
DaemonStop 'room16_AI';
walk 'room16_cutsceneD'
end;
if(_'room16_AI'.daemon_stage == 8) then
DaemonStop 'room16_AI';
walk 'room16_cutsceneE'
end;
if(_'room16_AI'.daemon_stage == 9) then
DaemonStop 'room16_AI';
walk 'room16_cutsceneF'
end;
if(_'room16_AI'.daemon_stage == 10) then
p (' -- Ха-ха-ха! Глупышка, ты попалась в ловушку! Теперь ты навеки будешь заточена в этом шкафу.')
end;
if(_'room16_AI'.daemon_stage == 11) then
p (' -- Там даже не ловит мобильник, детка!')
end;
if(_'room16_AI'.daemon_stage == 12) then
p (' -- Кстати, я заколдовала шкаф так, что в нём нельзя ни повеситься, ни зарезаться, вообще никак нельзя самоубиться! Ты даже со скуки умереть на сможешь!')
end;
if(_'room16_AI'.daemon_stage == 13) then
p (' -- А что: считай, я подарила тебе бессмертие.')
end;
if(_'room16_AI'.daemon_stage == 14) then
p (' -- Помолись там, что ли. А нет, забыла. Это тоже нельзя.')
end;
if(_'room16_AI'.daemon_stage == 15) then
p (' -- Ладно-ладно. Мне пора принять ванну. Пока-пока, племяшка!')
end;
if(_'room16_AI'.daemon_stage == 16) then
p ('Какое-то время ты слышишь звуки шагов, а потом они стихают. Похоже, ты здесь надолго.')
end;
if(_'room16_AI'.daemon_stage == 17) then
p ('Кто-то мог бы сказать, что ты нашла концовку №4/4. Но ты, конечно, можешь с этим не согласиться и играть дальше.')
end;
if(_'room16_AI'.daemon_stage == 20) then
--DaemonStop 'room16_AI'
end;
if(_'room16_AI'.daemon_stage > 20) then
_'room16_AI':aiturn()
end;
_'room16_AI'.daemon_stage = _'room16_AI'.daemon_stage + 1
end;
}:attr 'scenery, static'
cutscene {
nam = 'room16_cutscene';
text = {
"Ты открываешь шкаф -- а там вместо крестиков-ноликов сидит какая-то старуха.";
"Она поднимает на тебя глаза и пытается эффектно сдуть немытую прядь волос себе на лоб.";
"Не выходит: прилипло.";
" -- Не думала, что вы прознаете про мои тайные симпатии к крестикам-ноликам, буржуи недобитые! -- бормочет старуха.";
"Она медленно поднимается на кривые ноги, как в фильмах ужасов.";
" -- Я понаставила замков, вырубила вайфай, утопила телефон, провела оккультные ритуалы, исчезла в шкафу -- а государственная машина всё равно меня выцарапала, подумать только.";
"Старуха со скрипом распрямляет засохшую спину, и ты узнаёшь в её физиономии лицо тетушки Агаты, только какое-то немытое.";
};
next_to = 'room16_dialogue'
}
dlg {
nam = 'room16_dialogue';
phr = {
[[-- Настюха, ты что ли? -- прозревает тётя Агата.]];
{
'Ну конечно!',
function() walk 'room16_dialogueA'; end;
},
{
'Что с тобой, тётушка?',
function() walk 'room16_dialogueB'; end;
},
};
}
dlg {
nam = 'room16_dialogueA';
phr = {
[[-- Значит, приставы завербовали и тебя. Но знаешь, что я тебе скажу?]],
{
'Какие ещё приставы?',
function() p [[-- Не перебивай старших! Да, я не платила за коммуналку уже десять лет, и да, я принимала ванну два раза в день, и да, я майнила биткоины, ну и что!]]; walk 'room16_cutsceneA'; end;
},
{
'Меня никто не вербовал!',
function() p [[-- Не перебивай старших! Да, я не платила за коммуналку уже десять лет, и да, я принимала ванну два раза в день, и да, я майнила биткоины, ну и что!]]; walk 'room16_cutsceneA'; end;
},
};
}
dlg {
nam = 'room16_dialogueB';
phr = {
[[-- Значит, приставы завербовали и тебя. Но знаешь, что я тебе скажу?]],
{
'Какие ещё приставы?',
function() p [[-- Не перебивай старших! Да, я не платила за коммуналку уже десять лет, и да, я принимала ванну два раза в день, и да, я майнила биткоины, ну и что!]]; walk 'room16_cutsceneA'; end;
},
{
'Меня никто не вербовал!',
function() p [[-- Не перебивай старших! Да, я не платила за коммуналку уже десять лет, и да, я принимала ванну два раза в день, и да, я майнила биткоины, ну и что!]]; walk 'room16_cutsceneA'; end;
},
{
'Тётушка Агата! Это Настя, ты что?',
function() p [[-- Не перебивай старших! Да, я не платила за коммуналку уже десять лет, и да, я принимала ванну два раза в день, и да, я майнила биткоины, ну и что!]]; walk 'room16_cutsceneA'; end;
},
};
}
cutscene {
nam = 'room16_cutsceneA';
text = {
"В глазах тётушки нет ничего, кроме слепой ярости по отношению к судебным приставам, и эта ярость направлена на тебя.";
" -- Никто не должен был найти меня, девчонка! -- она выковыривается из шкафа, растопырив длинные когти.";
" -- Абракадабра! Фу ты, пх'нглуи, мглв'нафх, алохомора, пламя Удуна, мать его! -- она кричит что-то невразумительное, и выход из комнаты исчезает.";
"Тётка выпрыгивает из шкафа и, как птица, приземляется на пюпитр.";
"Надо что-то делать. У тебя мало времени.";
};
next_to = function() _'room16_AI':finish(); mp.score=mp.score+1; walk 'room16_mystical'; end;
}
cutscene {
nam = 'room16_cutsceneB';
text = {
"Одним махом тётя Агата прыгает на тебя, сбивая с ног.";
"Она вонзает свои когти тебе в живот, а клыками впивается в шею.";
"Ты даже не успеваешь пожалеть о том, что приехала в дом к своей тёте.";
2021-05-04 14:35:02 +03:00
};
next_to = 'room16_happyend';
}
cutscene {
nam = 'room16_cutsceneC';
text = {
"Ты подбегаешь к тёте и пытаешься сбить её с пюпитра, но она оказывается ловчее, и одним махом прыгает на тебя, сбивая с ног.";
"Она вонзает свои когти тебе в живот, а клыками впивается в шею.";
"Ты даже не успеваешь пожалеть о том, что приехала в дом к своей тёте.";
2021-05-04 14:35:02 +03:00
};
next_to = 'room16_happyend';
}
cutscene {
nam = 'room16_cutsceneD';
text = {
"Как сумасшедшая, ты бежишь на тётю с твёрдым намерением её зарезать.";
2021-05-04 14:35:02 +03:00
"Увы, она не дура, и одним махом прыгает на тебя, сбивая с ног.";
"Она вонзает свои когти тебе в живот, а клыками впивается в шею.";
"Ты даже не успеваешь пожалеть о том, что приехала в дом к своей тёте.";
2021-05-04 14:35:02 +03:00
};
next_to = 'room16_happyend';
}
cutscene {
nam = 'room16_cutsceneE';
text = {
"Ты берёшь кинжал за лезвие, как это делают циркачи.";
"Тётя всё ковыряет свои когти и даже не замечает, как ты прицеливаешься.";
"Один бросок -- и кинжал по самую рукоять уходит куда-то в тёткины лохмотья, а она падает на паркетный пол замертво.";
" -- Какой-то нелепый конец, -- думаешь ты вслух.";
"Теперь придётся выбираться из комнаты, у которой нет двери.";
"Твой взгляд падает на щель под потолком.";
"Закатный луч падает на тебя в ответ.";
};
next_to = 'room16_badend';
}
cutscene {
nam = 'room16_cutsceneF';
text = {
"Ты выходишь из комнаты, войдя в четвёртую стену, которую сама же и разрушила.";
"Тётя Агата осталась в своём особняке, приходить в себя.";
"Может быть, она даже продаст пару биткоинов и заплатит за коммунальные услуги.";
"А может, она спрячется ещё лучше, расставит ловушки и будет дожидаться судебных приставов при оружии.";
"Тебе понравилась игра?";
"Нет, не надо отвечать мне. Напиши на форуме ifiction.ru или на дискорд-сервере ifrus.";
"Ну всё, пока.";
};
next_to = 'room16_theend';
}
obj {
-"тётушка,тётушка,тётка,тётя,Агата,тётушка Агата*";
nam = 'room16_witch';
dsc = 'Тётушка сидит на пюпитре и точит когти.';
description = 'Тётушка Агата одета в какие-то лохмотья. Она точит когти, скалит зубы, хлюпает носом, сверкает глазами и время от времени шевелит ушами.';
before_ThrownAt = function(s,w)
if(w == _'dagger') then
_'room16_AI'.daemon_stage = 8
else
p 'Ты серьёзно?'
end;
end;
before_Attack = function(s)
if(pl:have(_'dagger')) then
_'room16_AI'.daemon_stage = 7
else
_'room16_AI'.daemon_stage = 6
end;
end;
before_Push = function(s)
_'room16_AI'.daemon_stage = 6
end;
before_Cut = function(s,w)
if(w == _'dagger') then
_'room16_AI'.daemon_stage = 7
else
p 'Ты серьёзно?'
end;
end;
before_Tear = function(s)
if(pl:have(_'dagger')) then
_'room16_AI'.daemon_stage = 7
else
_'room16_AI'.daemon_stage = 6
end;
end;
before_Talk = function(s)
p('Разговаривать с тётей, когда она в таком состоянии, бессмысленно.')
end;
before_Tell = function(s)
p('Разговаривать с тётей, когда она в таком состоянии, бессмысленно.')
end;
before_Ask = function(s)
p('Разговаривать с тётей, когда она в таком состоянии, бессмысленно.')
end;
before_AskFor = function(s)
p('Разговаривать с тётей, когда она в таком состоянии, бессмысленно.')
end;
before_AskTo = function(s)
p('Разговаривать с тётей, когда она в таком состоянии, бессмысленно.')
end;
before_Answer = function(s)
p('Разговаривать с тётей, когда она в таком состоянии, бессмысленно.')
end;
2021-10-04 21:30:29 +03:00
["before_Take,Remove,Enter,PutOn,Insert"] = function(s,w)
2021-09-20 21:38:41 +03:00
p 'Ты серьёзно?'
end;
2021-05-04 14:35:02 +03:00
obj = {
obj {
-"глаза,глаз*";
description = [[Глаза цвета моря!]];
};
obj {
-"нос";
description = [[Прелестный носик!]];
};
obj {
-"когти,коготь*";
description = [[Когти тётушки длинные и кривые, потому что их не стригли уже много лет.]];
};
obj {
-"зубы,зуб*";
description = [[Зубов у тётушки много, но они все жёлтые. Потому что она их не чистила уже очень давно.]];
};
obj {
-"уши,ухо*";
description = [[Почему у неё такие большие уши?]];
};
obj {
-"лохмотья*";
description = [[Когда-то это было что-то приличное, но теперь...]];
};
}
2021-05-06 10:49:49 +03:00
}:attr 'animate'
2021-05-04 14:35:02 +03:00
obj {
-"стены";
nam = 'room16_walls';
state = 0;
2021-09-20 21:38:41 +03:00
description = function(s)
if _'room16_mystical'.state == 0 then
return 'Стены как стены.';
else
return 'Стены как стены. Нельзя сказать, что какая-то стена выделяется относительно остальных. Или можно?';
end
end;
2021-05-04 14:35:02 +03:00
}:attr 'static, scenery'
obj {
-"четвёртая стена";
nam = 'room16_wall';
state = 0;
description = 'Ты стоишь как раз рядом с ней.';
before_Attack = function(s)
if(pl:have(_'dagger')) then
if(s.state == 3) then
p 'Тебе незачем тратить время: просто входи в стену!'
end;
if(s.state == 2) then
p 'Ты расковыриваешь огромную дыру: четвёртая стена разрушена!'
s:attr 'enterable'
s:attr 'open'
mp.score=mp.score+1;
s.state = 3
end;
if(s.state == 1) then
p 'Ты продолжаешь рушить стену, и в ней уже образовалась дырка размером с твою голову. Ты могла бы попробовать сбежать, но всё, кроме головы, будет торчать на виду у тёти Агаты.'
mp.score=mp.score+1;
s.state = 2
end;
if(s.state == 0) then
p 'Ты нервно ковыряешь стену кинжалом, пока тётка точит когти и не смотрит на тебя. Постепенно, стена начинает рушиться.'
mp.score=mp.score+1;
s.state = 1
end;
else
p 'Рушить четвёртую стену голыми руками не получится.'
end;
end;
before_Enter = function(s)
if(s.state == 3) then
_'room16_AI'.daemon_stage = 9
else
p 'Сначала надо разрушить четвёртую стену!'
end;
end;
}:attr 'static, scenery'
room {
-"конец";
nam = 'room16_happyend';
title = "Конец";
dsc = 'Вот и сказочке конец. Ты же сохранила игру, Настенька? (Концовка №3/4)';
noparser = true;
}
room {
-"конец";
nam = 'room16_badend';
title = "Конец";
dsc = 'Вот и сказочке конец. Может, надо было обойтись без крови? Ты же сохранила игру, Настенька? (Концовка №2/4)';
noparser = true;
}
room {
-"конец";
nam = 'room16_theend';
title = "Конец";
dsc = 'Вот и сказочке конец, а кто слушал -- молодец! (Концовка №1/4)';
noparser = true;
2021-05-06 10:49:49 +03:00
}