mirror of https://github.com/goraph/17rooms
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1873 lines
76 KiB
1873 lines
76 KiB
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; |
|
before_Walk = function(s, w) |
|
if (w^'@e_to' and s.state == 0) then |
|
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; |
|
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 |
|
_'room16_AI'.daemon_stage = 9 |
|
else |
|
p('Выхода нет!') |
|
end; |
|
return true; |
|
end; |
|
return false; |
|
end; |
|
before_Exit = function(s) |
|
if (s.state == 0) or (_'room16_wardrobe'.state >= 4) then |
|
return false; |
|
else |
|
mp:xaction('Walk','@out_to') |
|
end; |
|
end; |
|
after_Drop = function(s, w) |
|
if(_'room16_wardrobe'.state < 4) then |
|
move(w, 'room16_parquet') |
|
else |
|
move(w, 'room16_wardrobe') |
|
end; |
|
return false |
|
end; |
|
["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' }; |
|
-- 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 ("Книга лежит на пюпитре. Она открыта. На развороте нарисован шкаф: одна половина на левой странице, одна половина на правой.") |
|
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() |
|
p ('Что-что?') |
|
end; |
|
before_Cut = function(s, w) |
|
mp:xaction('PutOn', s, w) |
|
end; |
|
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() |
|
p ('Что-что?') |
|
end; |
|
before_Cut = function(s, w) |
|
mp:xaction('PutOn', s, w) |
|
end; |
|
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 = { |
|
"Одним махом тётя Агата прыгает на тебя, сбивая с ног."; |
|
"Она вонзает свои когти тебе в живот, а клыками впивается в шею."; |
|
"Ты даже не успеваешь пожалеть о том, что приехала в дом к своей тёте."; |
|
}; |
|
next_to = 'room16_happyend'; |
|
} |
|
|
|
cutscene { |
|
nam = 'room16_cutsceneC'; |
|
text = { |
|
"Ты подбегаешь к тёте и пытаешься сбить её с пюпитра, но она оказывается ловчее, и одним махом прыгает на тебя, сбивая с ног."; |
|
"Она вонзает свои когти тебе в живот, а клыками впивается в шею."; |
|
"Ты даже не успеваешь пожалеть о том, что приехала в дом к своей тёте."; |
|
}; |
|
next_to = 'room16_happyend'; |
|
} |
|
|
|
cutscene { |
|
nam = 'room16_cutsceneD'; |
|
text = { |
|
"Как сумасшедшая, ты бежишь на тётю с твёрдым намерением её зарезать."; |
|
"Увы, она не дура, и одним махом прыгает на тебя, сбивая с ног."; |
|
"Она вонзает свои когти тебе в живот, а клыками впивается в шею."; |
|
"Ты даже не успеваешь пожалеть о том, что приехала в дом к своей тёте."; |
|
}; |
|
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; |
|
["before_Take,Remove,Enter,PutOn,Insert"] = function(s,w) |
|
p 'Ты серьёзно?' |
|
end; |
|
obj = { |
|
obj { |
|
-"глаза,глаз*"; |
|
description = [[Глаза цвета моря!]]; |
|
}; |
|
obj { |
|
-"нос"; |
|
description = [[Прелестный носик!]]; |
|
}; |
|
obj { |
|
-"когти,коготь*"; |
|
description = [[Когти тётушки длинные и кривые, потому что их не стригли уже много лет.]]; |
|
}; |
|
obj { |
|
-"зубы,зуб*"; |
|
description = [[Зубов у тётушки много, но они все жёлтые. Потому что она их не чистила уже очень давно.]]; |
|
}; |
|
obj { |
|
-"уши,ухо*"; |
|
description = [[Почему у неё такие большие уши?]]; |
|
}; |
|
obj { |
|
-"лохмотья*"; |
|
description = [[Когда-то это было что-то приличное, но теперь...]]; |
|
}; |
|
} |
|
}:attr 'animate' |
|
|
|
obj { |
|
-"стены"; |
|
nam = 'room16_walls'; |
|
state = 0; |
|
description = function(s) |
|
if _'room16_mystical'.state == 0 then |
|
return 'Стены как стены.'; |
|
else |
|
return 'Стены как стены. Нельзя сказать, что какая-то стена выделяется относительно остальных. Или можно?'; |
|
end |
|
end; |
|
}: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; |
|
}
|
|
|