diff --git a/.hgignore b/.hgignore --- a/.hgignore +++ b/.hgignore @@ -0,0 +1,2 @@ +syntax: glob +build/** diff --git a/atlantis.lua b/atlantis.lua --- a/atlantis.lua +++ b/atlantis.lua @@ -10,9 +10,10 @@ global { atl_iyh_state = 0; atl_iyh_learr_spoken = false; + atl_iyh_aikerjarr_spoken = false; atl_iyh_ryveerr_spoken = false; atl_iyh2_ryveerr_spoken = false; - atl_iyh2_aikeryarr_spoken = false; + atl_iyh2_aikerjarr_spoken = false; atl_iyh_shockfish_dead = false; atl_iyh_shockfish_left = false; atl_iyh_shockfish_away = 0; @@ -28,13 +29,13 @@ global { atl_lfc_suspect = nil; atl_lfc_leroy_spoken = 0; atl_lfc_goldman_spoken = 0; - atl_lfc_goldman_known = false; atl_lfc_goldman_exposed = false; atl_lfc_saboteur_known = false; - atl_lfc_sab_active = false; - atl_lfc_sab_alive = false; + atl_lfc_court_allowed = false; + atl_lfc_leroy_goldman = false; atl_fta_state = 0; + atl_fta_darkstar_debrief = false; atl_rep_moreau = 0; atl_rep_darkstar = 0; @@ -42,6 +43,9 @@ global { atl_rep_wright = 0; atl_rep_iraa = 0; atl_rep_dyp = 0; + + atl_ctt_iraa_refusal = false; + atl_star_map_copied = false; }; atl_illuminators = obj { @@ -106,11 +110,11 @@ atl_aqua_corridor_b = room { atl_entry = lcutscene("atl_entry", "Левиафан, рубка", function(s) if (ArrayUtils.indexOf(pl.party, "wright") ~= 0) then - return [[Несколько недель Левиафан полным ходом несется по направлению к танственной точке, отмеченной на карте. Путешествие происходит спокойно -- могучие машины субмарины уверенно двигают ее вперед. Хотя субмарина явно требует большего экипажа, вы неплохо справляетесь вдвое и добираетесь до места назначения. Здесь, на океанском дне вы видите несколько больших металлических и стеклянных куполов, освещенных электрическими огнями. Приблизившись, вы быстро находите путь в одно из строений. Как только Левиафан проникает внутрь, массивные ворота закрываются, оставляя вас взаперти. ]]; + return [[Несколько недель Левиафан полным ходом несется по направлению к таинственной точке, отмеченной на карте. Путешествие происходит спокойно -- могучие машины субмарины уверенно двигают ее вперед. И хотя подводная лодка явно требует большего экипажа, чем вы с Райтом, вдвоем вы неплохо справляетесь. Добравшись до места назначения, вы обнаруживаете несколько больших металлических и стеклянных куполов, раскинувшихся на океанском дне и освещенных электрическими огнями. Приблизившись, вы находите путь в одно из строений. Как только Левиафан проникает внутрь, массивные ворота закрываются, отрезая вас от внешнего мира. ]]; else - return [[Несколько недель Левиафан полным ходом несется по направлению к танственной точке, отмеченной на карте. Путешествие происходит спокойно -- могучие машины субмарины уверенно двигают ее вперед. Управлять субмариной в одиночку нелегкая работа. Вы почти не спите, опасаясь оставлять движение корабль без внимания. К счатью, вы без проблем добираетесь до места назначения. Здесь, на океанском дне вы видите несколько больших металлических и стеклянных куполов, освещенных электрическими огнями. Приблизившись, вы быстро находите путь в одно из строений. Как только Левиафан проникает внутрь, массивные ворота закрываются, оставляя вас взаперти. ]]; + return [[Несколько недель Левиафан полным ходом несется по направлению к таинственной точке, отмеченной на карте. Путешествие происходит спокойно -- могучие машины субмарины уверенно двигают ее вперед. Управлять огромным кораблем в одиночку непросто. Вы почти не спите, опасаясь оставлять движение судна без внимания. Однако, вы без проблем добираетесь до места назначения. Здесь, на океанском дне вы видите несколько больших металлических и стеклянных куполов, освещенных электрическими огнями. Приблизившись, вы быстро находите путь в одно из строений. Как только Левиафан проникает внутрь, массивные ворота закрываются, отрезая вас от внешнего мира. ]]; end; -end, "Вы прибыли на Атлантиду", leviathan_wheelhouse); +end, "Вы прибыли на Атлантиду. ", leviathan_wheelhouse); atl_aqua_leviathan_dock = room { var { @@ -118,6 +122,10 @@ atl_aqua_leviathan_dock = room { }; nam = "Атлантида, Аква, гостевой док A"; enter = function(s) + char_learr:accompany(false); + char_radcliffe:accompany(false); + char_anna:accompany(false); + char_wright:accompany(false); if (not s.visited) then s.visited = true; walk(atlantis_intro_dock); @@ -126,14 +134,19 @@ atl_aqua_leviathan_dock = room { atl_iyh_state = 9; if (atl_iof_learr_dead) then walk('iyh_outro_aikerjarr'); - else - walk('iyh_outro_learr'); + elseif atl_iyh_shockfish_dead then + walk('iyh_outro_learr_shockfish_dead'); + elseif atl_iyh_entrance_destroyed then + walk('iyh_outro_learr_temple_destroyed'); + else + walk('iyh_outro_learr'); end; end; end; dsc = [[Просторное помещение, предназнавенное для размещения субмарин, прибывающих на станцию. В настоящий момент в этом доке расположен Левиафан. Под потолком, на высоте примерно в пять метров укреплены балки, по которым могут перемещаться крюки подъемных кранов. Снизу, под водой, огромный люк закрывает доступ внутрь дока. Несколько легких подвижных мостиков находятся на поверхности воды. ]]; view = [[Левиафан находится в просторном доке. Под потолком на высоте пяти метров укреплены балки, по которым могут перемещаться крюки подъемных кранов. Внизу расположен закрытый люк, закрывающий вам путь наружу. ]]; way = { + kh_vroom("В Левиафан", "leviathan_airlock"); kh_vroom("В коридор B", "atl_aqua_corridor_b"); }; }; @@ -177,33 +190,68 @@ atl_aqua_corridor_a = room { }; atl_aqua_main_corridor = room { - nam = "Атлантида, Аква, центральный коридор"; - dsc = [[Широкий коридор, заполненный ярким светом электрических ламп. В одном конце коридора расположена шлюзовая дверь, ведущая, в секцию _"Доминус"_. По бокам коридора находятся еще несколько дверей, ведущих в другие помещения секции -- по большей части это склады. Еще две двери ведут в коридоры A и B. ]]; - way = { - kh_vroom("На склад A", function() - pr("Люк наглухо задраен. Вы не сможете его открыть. "); - return false; - end); - kh_vroom("На склад B", function() - pr("Люк наглухо задраен. Вы не сможете его открыть. "); - return false; - end); - kh_vroom("На склад C", function() - pr("Люк наглухо задраен. Вы не сможете его открыть. "); - return false; - end); - kh_vroom("На склад D", function() - pr("Люк наглухо задраен. Вы не сможете его открыть. "); - return false; - end); - kh_vroom("В коридор A", "atl_aqua_corridor_a"); - kh_vroom("В коридор B", "atl_aqua_corridor_b"); - kh_vroom("В секцию \"Доминус\"", "atl_intersection_aqua_dom"); - }; - obj = { - "atl_illuminators", - "atl_nih_tubes_aqua" - }; + nam = "Атлантида, Аква, центральный коридор"; + dsc = [[Широкий коридор, заполненный ярким светом электрических ламп. В одном конце коридора расположена шлюзовая дверь, ведущая, в секцию _"Доминус"_. По бокам коридора находятся еще несколько дверей, ведущих в другие помещения секции -- по большей части это склады. Еще две двери ведут в коридоры A и B. ]]; + way = { + kh_vroom("На склад A", function() + pr("Люк наглухо задраен. Вы не сможете его открыть. "); + return false; + end); + kh_vroom("На склад B", function() + if atl_nih_state == 1 or atl_nih_state == 2 then + return "atl_aqua_warehouse_b"; + else + pr("Люк наглухо задраен. Вы не сможете его открыть. "); + return false; + end; + end); + kh_vroom("На склад C", function() + pr("Люк наглухо задраен. Вы не сможете его открыть. "); + return false; + end); + kh_vroom("На склад D", function() + pr("Люк наглухо задраен. Вы не сможете его открыть. "); + return false; + end); + kh_vroom("В коридор A", "atl_aqua_corridor_a"); + kh_vroom("В коридор B", "atl_aqua_corridor_b"); + kh_vroom("В секцию \"Доминус\"", "atl_intersection_aqua_dom"); + }; + obj = { + "atl_illuminators", + "atl_nih_tubes_aqua" + }; +}; + +atl_aqua_warehouse_b = darkroom { + var { + has_light = false; + }; + nam = "Атлантида, Аква, склад B"; + dsc_dark = [[Большое помещение без окон погружено в кромешный мрак. В темноте вы с трудом различаете очертания предметов. ]]; + dsc_halflit = [[Слабый свет лампы позволяет вам с трудом ориентироваться в помещении,заставленном различными ящиками. ]]; + dsc_lit = [[Большое помещение без окон освещено яркими лектрическим лампами. По всему помещению аккуратно расставлено множество ящиков с различными материалами, необходимыми для поддержания жизнедеятельности станции. ]]; + way = { + kh_vroom("В коридор", "atl_aqua_main_corridor", nil, 2); + }; + obj = { + "atl_aqua_warehouse_b_lightswitch"; + "atl_nih_tube_container2"; + }; +}; + +atl_aqua_warehouse_b_lightswitch = obj { + nam = "atl_aqua_warehouse_b_lightswitch"; + dsc = [[Рядом со входом расположен {выключатель}. ]]; + seen_level = 2; + act = function(s) + atl_aqua_warehouse_b.has_light = not atl_aqua_warehouse_b.has_light; + if atl_aqua_warehouse_b.has_light then + return [[Вы щелкаете выключателем и яркий свет электрических ламп заливает помещение. ]]; + else + return [[Вы щелкаете выключателем и лампы гаснут, погружая помещение в кромешную тьму. ]]; + end; + end; }; atl_intersection = inherit(room, function(v) @@ -235,6 +283,8 @@ atl_intersection = inherit(room, functio table.insert(v.obj, "atl_illuminator"); table.insert(v.obj, "atl_intersect_phone"); table.insert(v.obj, "atl_intersect_suit"); + + return v; end); atl_intersection_aqua_dom = atl_intersection { @@ -279,12 +329,21 @@ atl_dom_main_c = room { nam = "Атлантида, Доминус, центральный зал, центр"; dsc = [[Огромный круглый зал освещенный электрическими лампами, установленными на многочисленных колоннах. Стеклянный купол над головой ограждает вас от многотонной громады океанских вод. Над куполом расположен огромный металлический диск секции Игнис, расположенной над центральным залом Доминуса. Вы находитесь в центральной части зала, рядом с лифтом, ведущим в Игнис. ]]; way = { - kh_vroom("В лифт", "atl_dom_lift"); - kh_vroom("На север", "atl_dom_main_near_aqua"); - kh_vroom("На северо-восток", "atl_dom_main_near_adm"); - kh_vroom("На юго-восток", "atl_dom_main_se"); - kh_vroom("На юго-запад", "atl_dom_main_sw"); - kh_vroom("На северо-запад", "atl_dom_main_near_a"); + kh_vroom("В лифт", function(s) + if atl_iof_completed then + pr("Лифт не работает. "); + return false; + else + return "atl_dom_lift"; + end; + end); + kh_vroom("К секции Аква", "atl_dom_main_near_aqua"); + kh_vroom("К кабинету администратора", "atl_dom_main_near_adm"); + kh_vroom("К секции Арктос", "atl_dom_main_near_arctos"); + kh_vroom("К секции Терра", "atl_dom_main_near_terra"); + kh_vroom("К секции Окулус", "atl_dom_main_near_oculus"); + kh_vroom("К секции Луна", "atl_dom_main_near_luna"); + kh_vroom("К коридору А", "atl_dom_main_near_a"); }; obj = { @@ -292,30 +351,6 @@ atl_dom_main_c = room { }; }; -atl_dom_main_sw = room { - nam = "Атлантида, Доминус, центральный зал, юго-запад"; - dsc = [[Огромный круглый зал освещенный электрическими лампами, установленными на многочисленных колоннах. Стеклянный купол над головой ограждает вас от многотонной громады океанских вод. Над куполом расположен огромный металлический диск секции Игнис, расположенной над центральным залом Доминуса. Вы находитесь в юго-западной части секции. ]]; - way = { - kh_vroom("К секции Окулус", "atl_dom_main_near_oculus"); - kh_vroom("К секции Луна", "atl_dom_main_near_luna"); - kh_vroom("По часовой стрелке", "atl_dom_main_near_a"); - kh_vroom("Против часовой стрелки", "atl_dom_main_se"); - kh_vroom("К центру зала", "atl_dom_main_c"); - }; -}; - -atl_dom_main_se = room { - nam = "Атлантида, Доминус, центральный зал, юго-восток"; - dsc = [[Огромный круглый зал освещенный электрическими лампами, установленными на многочисленных колоннах. Стеклянный купол над головой ограждает вас от многотонной громады океанских вод. Над куполом расположен огромный металлический диск секции Игнис, расположенной над центральным залом Доминуса.Вы находитесь в юго-восточной части секции. ]]; - way = { - kh_vroom("К секции Арктос", "atl_dom_main_near_arctos"); - kh_vroom("К секции Терра", "atl_dom_main_near_terra"); - kh_vroom("По часовой стрелке", "atl_dom_main_sw"); - kh_vroom("Против часовой стрелки", "atl_dom_main_near_adm"); - kh_vroom("К центру зала", "atl_dom_main_c"); - }; -}; - atl_dom_main_near_adm = room { nam = "Атлантида, Доминус, центральный зал, у входа в кабинет администратора"; dsc = [[Огромный круглый зал освещенный электрическими лампами, установленными на многочисленных колоннах. Стеклянный купол над головой ограждает вас от многотонной громады океанских вод. Над куполом расположен огромный металлический диск секции Игнис, расположенной над центральным залом Доминуса. Рядом с вами находится шлюз, ведущий в кабинет администратора. ]]; @@ -333,10 +368,12 @@ atl_dom_main_near_adm = room { atl_dom_main_near_luna = room { nam = "Атлантида, Доминус, центральный зал, у входа в секцию Луна"; - dsc = [[Огромный круглый зал освещенный электрическими лампами, установленными на многочисленных колоннах. Стеклянный купол над головой ограждает вас от многотонной громады океанских вод. Над куполом расположен огромный металлический диск секции Игнис, расположенной над центральным залом Доминуса.Рядом с вами находится шлюз, ведущий в секцию "Луна". ]]; + dsc = [[Огромный круглый зал освещенный электрическими лампами, установленными на многочисленных колоннах. Стеклянный купол над головой ограждает вас от многотонной громады океанских вод. Над куполом расположен огромный металлический диск секции Игнис, расположенной над центральным залом Доминуса. Рядом с вами находится шлюз, ведущий в секцию "Луна". ]]; way = { kh_vroom("В секцию \"Луна\"", "atl_intersection_luna_dom"); - kh_vroom("Отойти от шлюза", "atl_dom_main_sw"); + kh_vroom("По часовой стрелке", "atl_dom_main_near_a"); + kh_vroom("Против часовой стрелки", "atl_dom_main_near_oculus"); + kh_vroom("К центру зала", "atl_dom_main_c"); }; obj = { "atl_nih_panel_near_luna" @@ -348,7 +385,9 @@ atl_dom_main_near_oculus = room { dsc = [[Огромный круглый зал освещенный электрическими лампами, установленными на многочисленных колоннах. Стеклянный купол над головой ограждает вас от многотонной громады океанских вод. Над куполом расположен огромный металлический диск секции Игнис, расположенной над центральным залом Доминуса. Рядом с вами находится шлюз, ведущий в секцию "Окулус". ]]; way = { kh_vroom("В секцию \"Окулус\"", "atl_intersection_oculus_dom"); - kh_vroom("Отойти от шлюза", "atl_dom_main_sw"); + kh_vroom("По часовой стрелке", "atl_dom_main_near_luna"); + kh_vroom("Против часовой стрелки", "atl_dom_main_near_terra"); + kh_vroom("К центру зала", "atl_dom_main_c"); }; obj = { "atl_nih_boxes_near_oculus" @@ -360,7 +399,9 @@ atl_dom_main_near_terra = room { dsc = [[Огромный круглый зал освещенный электрическими лампами, установленными на многочисленных колоннах. Стеклянный купол над головой ограждает вас от многотонной громады океанских вод. Над куполом расположен огромный металлический диск секции Игнис, расположенной над центральным залом Доминуса. Рядом с вами находится шлюз, ведущий в секцию "Терра". ]]; way = { kh_vroom("В секцию \"Терра\"", "atl_intersection_terra_dom"); - kh_vroom("Отойти от шлюза", "atl_dom_main_se"); + kh_vroom("По часовой стрелке", "atl_dom_main_near_oculus"); + kh_vroom("Против часовой стрелки", "atl_dom_main_near_arctos"); + kh_vroom("К центру зала", "atl_dom_main_c"); }; obj = { "atl_nih_boxes_near_terra" @@ -372,7 +413,9 @@ atl_dom_main_near_arctos = room { dsc = [[Огромный круглый зал освещенный электрическими лампами, установленными на многочисленных колоннах. Стеклянный купол над головой ограждает вас от многотонной громады океанских вод. Над куполом расположен огромный металлический диск секции Игнис, расположенной над центральным залом Доминуса. Рядом с вами находится шлюз, ведущий в секцию "Арктос". ]]; way = { kh_vroom("В секцию \"Арктос\"", "atl_intersection_arctos_dom"); - kh_vroom("Отойти от шлюза", "atl_dom_main_se"); + kh_vroom("По часовой стрелке", "atl_dom_main_near_terra"); + kh_vroom("Против часовой стрелки", "atl_dom_main_near_adm"); + kh_vroom("К центру зала", "atl_dom_main_c"); }; obj = { "atl_nih_tubes_near_arctos" @@ -495,7 +538,14 @@ atl_arctos_main_corridor = room { nam = "Атлантида, Арктос, главный коридор"; dsc = [[Узкий длинный коридор c дверьми, ведущими в комнаты персонала, по сторонам. Яркий свет электрических ламп заполняет помещение. ]]; way = { - kh_vroom("В комнату Голдмана", "atl_arctos_goldmans_room"); + kh_vroom("В комнату Голдмана", function(s) + if goldman_state == 0 then + return "atl_arctos_goldmans_room"; + else + p([[Заперто. ]]); + return false; + end; + end); kh_vroom("В комнату Джонса", "atl_arctos_jones_room"); kh_vroom("В общую комнату", "atl_arctos_common_room"); kh_vroom("В секцию \"Доминус\"", "atl_intersection_arctos_dom"); @@ -509,6 +559,9 @@ atl_arctos_main_corridor = room { atl_arctos_goldmans_room = room { nam = "Атлантида, Арктос, комната"; dsc = [[Небольшая комната, рассчитанная на двух постояльцев. ]]; + way = { + kh_vroom("В главный коридор", "atl_arctos_main_corridor"); + }; obj = { "char_goldman" }; @@ -517,6 +570,9 @@ atl_arctos_goldmans_room = room { atl_arctos_jones_room = room { nam = "Атлантида, Арктос, комната"; dsc = [[Небольшая комната, рассчитанная на двух постояльцев. ]]; + way = { + kh_vroom("В главный коридор", "atl_arctos_main_corridor"); + }; obj = { "char_jones" }; @@ -559,26 +615,27 @@ atl_intersection_terra_dom = room { }; atl_terra_main_corridor = room { - nam = "Атлантида, Терра, главный коридор"; - dsc = [[Широкий просторный коридор, по обе стороны которого расположены двери, ведущие в мастерские. Вдоль стен стоят множество ящиков. В конце коридора находится дверь, ведущая в одну из технических секций станции. ]]; - way = { - kh_vroom("В мастерскую A", "atl_terra_workshop_a"); - kh_vroom("В мастерскую B", "atl_terra_workshop_b"); - kh_vroom("В мастерскую C", "atl_terra_workshop_c"); - kh_vroom("В мастерскую D", "atl_terra_workshop_d"); - kh_vroom("В секцию Солис", function() - if (atl_fta_state == 1) then - return "atl_fta_is_terra_solis"; - else - pr("Люк наглухо задраен. Вы не сможете его открыть. "); - return false; - end; - end); - kh_vroom("В секцию Доминус", "atl_intersection_terra_dom"); - }; - obj = { - "atl_nih_boxes_terra" - }; + nam = "Атлантида, Терра, главный коридор"; + dsc = [[Широкий просторный коридор, по обе стороны которого расположены двери, ведущие в мастерские. Вдоль стен стоят множество ящиков. В конце коридора находится дверь, ведущая в одну из технических секций станции. ]]; + way = { + kh_vroom("В мастерскую A", "atl_terra_workshop_a"); + kh_vroom("В мастерскую B", "atl_terra_workshop_b"); + kh_vroom("В мастерскую C", "atl_terra_workshop_c"); + kh_vroom("В мастерскую D", "atl_terra_workshop_d"); + kh_vroom("В секцию Солис", function() + if (atl_fta_state == 1) then + return "atl_fta_is_terra_solis"; + else + pr("Люк наглухо задраен. Вы не сможете его открыть. "); + return false; + end; + end); +kh_vroom("В секцию Доминус", "atl_intersection_terra_dom"); + }; + obj = { + "atl_nih_tube_container"; + "atl_nih_boxes_terra"; + }; }; atl_terra_workshop_a = room { @@ -588,6 +645,7 @@ atl_terra_workshop_a = room { kh_vroom("В коридор", "atl_terra_main_corridor"); }; obj = { + item_electric_lamp:disable(), "char_michael_wright" }; }; @@ -620,6 +678,9 @@ atl_terra_workshop_d = room { way = { kh_vroom("В коридор", "atl_terra_main_corridor"); }; + obj = { + "item_dynamo"; + }; }; atl_intersection_oculus_dom = room { @@ -767,7 +828,7 @@ char_darkstar = npc { }; nam = "Винсент Даркстар"; dsc = function(s) - if (char_darkstar_dlg == 0) then + if (char_darkstar_dlg.state == 0) then return [[В одном из кресел сидит средних лет {мужчина} с короткими черными волосами. Он одет в строгий деловой костюм черного цвета. Лицо его гладко выбрито. Холодный взгляд его черных глаз устремлен на вас. Сложив руки на столе, он ждет ваших дальнейших действий. ]]; else return [[В одном из кресел сидит {Винсент Даркстар}. Холодный взгляд его черных глаз устремлен на вас. Сложив руки на столе, он ждет ваших дальнейших действий. ]]; @@ -861,17 +922,25 @@ char_learr_atlantis = npc { }; nam = "Леарр"; dsc = function(s) - if (stead.deref(here()) == "atl_oculus_library") then + if stead.deref(here()) == "atl_oculus_library" then return [[{Леарр} сидит за одним из столов, листая какую-то книгу. ]]; + elseif stead.deref(here()) == "atl_oculus_library" then + return [[{Леарр} спокойно стоит рядом с Екатериной Светловой. ]]; else - if (where(char_jack_wright_atlantis) == atl_ignis_hall_a) then + if (stead.deref(where(char_jack_wright_atlantis)) == atl_ignis_hall_a) then return [[{Леарр} стоит перед иллюминатором и что-то рассказывает ]]; else return [[{Леарр} стоит перед иллюминатором и смотрит вдаль. ]]; end; end; end; - dlg = "char_learr_atlantis_dlg"; + dlg = function(s) + if stead.deref(where(s)) == atl_oculus_lab_a then + return "char_svetlova_dlg"; + else + return "char_learr_atlantis_dlg"; + end; + end; }; char_aikerjarr = npc { @@ -1042,62 +1111,109 @@ char_jones = npc { dlg = "char_jones_dlg"; }; -atl_nih_tubes_gen = function(nam, dsc) - return obj { - var { - broken = false; - fixed = false; - }; - nam = nam; - dsc = dsc; - act = function(s) - if (s.fixed) then - return "Поврежденные трубы замотаны изолентой"; - elseif (s.broken) then - return "Трубы повреждены и воздух со слабым шипением вырывается из них"; - else - return "Трубы в порядке"; - end; - end; - use = function(s, o) - if (o == item_ducttape and s.broken and not s.fixed) then - s.fixed = true; - atl_nih_state = 2; - return [[ - Вы заматываете разрыв изолентой. На какое-то время такое решение сгодится. - ]]; - end; - end; - }; +atl_item_tube_spec = obj { + nam = "atl_item_tube_spec"; + disp = "Документация по воздуховодам Атлантиды"; + inv = [[Внушительной толщины книжка описывает все особенности и случаи применения различных труб в качестве воздуховодов на станции. Пролистав ее, вы узнаете, что всего существует четыре типа соединения, маркируемые соответственно: RT, KT, NF и TQ. Полная маркировка трубы состоит из типа, длины, указываемой в дециметрах и диаметра, указываемого в миллиметрах. Например RT-17-7 означает трубку RT с длиной 17 дециметров и диаметром 7 миллиметров. Согласно документации, трубы каждого типа можно соединять только с трубами такого же типа, однако на последней странице вы замечаете карандашные пометки: ^При необходимости, можно заменять трубы одного типа на другой с учетом следующих правил: ^KT -> RT -- Диаметр на 1 меньше. ^NF -> KT -- Диаметр на 1 больше. ^TQ -> NF -- Диаметр на 2 больше. ^Другие замены недопустимы и могут вызвать поломки. ]]; +}; + +atl_nih_tubes_gen = function(nam, dsc, tube_type, tube_len, tube_d) + return obj { + var { + broken = false; + fixed = false; + }; + tube_type = tube_type; + tube_len = tube_len; + tube_d = tube_d; + nam = nam; + dsc = dsc; + act = function(s) + if (s.fixed) then + return "Трубы в порядке. "; + elseif (s.broken) then + return "Трубы повреждены и воздух со слабым шипением вырывается из них. На трубе имеется маркировка: " .. tube_type .. "-" .. tube_len .. "-" .. tube_d; + else + return "Трубы в порядке. "; + end; + end; + used = function(s, o) + if s.broken and not s.fixed and o.is_tube and o.l == s.tube_len then + print(s.tube_type, s.tube_d, o.t, o.d); + local f = false; + if o.t == s.tube_type and o.d == s.tube_d then + remove(o, pl); + s.fixed = true; + for i = 1, #nih_tubes_array do + f = f or (nih_tubes_array[i].broken and not nih_tubes_array[i].fixed); + end; + if f then + atl_nih_state = 2; + end; + return "Вы заменяете поврежденный фрагмент трубы. "; + elseif s.tube_type == "KT" and o.t == "RT" and o.d + 1 == s.tube_d then + remove(o, pl); + s.fixed = true; + for i = 1, #nih_tubes_array do + f = f or (nih_tubes_array[i].broken and not nih_tubes_array[i].fixed); + end; + if f then + atl_nih_state = 2; + end; + return "Вы заменяете поврежденный фрагмент трубы. "; + elseif s.tube_type == "NF" and o.t == "KT" and o.d - 1 == s.tube_d then + remove(o, pl); + s.fixed = true; + for i = 1, #nih_tubes_array do + f = f or (nih_tubes_array[i].broken and not nih_tubes_array[i].fixed); + end; + if f then + atl_nih_state = 2; + end; + return "Вы заменяете поврежденный фрагмент трубы. "; + elseif s.tube_type == "TQ" and o.t == "NF" and o.d - 2 == s.tube_d then + remove(o, pl); + s.fixed = true; + for i = 1, #nih_tubes_array do + f = f or (nih_tubes_array[i].broken and not nih_tubes_array[i].fixed); + end; + if f then + atl_nih_state = 2; + end; + return "Вы заменяете поврежденный фрагмент трубы. "; + end; + end; + end; + }; end; -atl_nih_tubes_near_aqua = atl_nih_tubes_gen("atl_nih_tubes_near_aqua", [[Рядом со шлюзом из стены выходят несколько {труб}, по которым подается воздух. ]]); +atl_nih_tubes_near_aqua = atl_nih_tubes_gen("atl_nih_tubes_near_aqua", [[Рядом со шлюзом из стены выходят несколько {труб}, по которым подается воздух. ]], "RT", 12, 8); -atl_nih_tubes_near_a = atl_nih_tubes_gen("atl_nih_tubes_near_a", [[За снятой декоративной панелью находятся несколько {труб}, по которым подается воздух. ]]); +atl_nih_tubes_near_a = atl_nih_tubes_gen("atl_nih_tubes_near_a", [[За снятой декоративной панелью находятся несколько {труб}, по которым подается воздух. ]], "RT", 11, 9); -atl_nih_tubes_near_admin = atl_nih_tubes_gen("atl_nih_tubes_near_admin", [[За снятой декоративной панелью находятся несколько {труб}, по которым подается воздух. ]]); +atl_nih_tubes_near_admin = atl_nih_tubes_gen("atl_nih_tubes_near_admin", [[За снятой декоративной панелью находятся несколько {труб}, по которым подается воздух. ]], "RT", 15, 7); -atl_nih_tubes_near_luna = atl_nih_tubes_gen("atl_nih_tubes_near_luna", [[За снятой декоративной панелью находятся несколько {труб}, по которым подается воздух. ]]); +atl_nih_tubes_near_luna = atl_nih_tubes_gen("atl_nih_tubes_near_luna", [[За снятой декоративной панелью находятся несколько {труб}, по которым подается воздух. ]], "KT", 12, 6); -atl_nih_tubes_near_oculus = atl_nih_tubes_gen("atl_nih_tubes_near_oculus", [[Вдоль стены протянуто несколько {труб}, по которым подается воздух. ]]); +atl_nih_tubes_near_oculus = atl_nih_tubes_gen("atl_nih_tubes_near_oculus", [[Вдоль стены протянуто несколько {труб}, по которым подается воздух. ]], "NF", 13, 7); -atl_nih_tubes_near_terra = atl_nih_tubes_gen("atl_nih_tubes_near_oculus", [[Вдоль стены протянуто несколько {труб}, по которым подается воздух. ]]); +atl_nih_tubes_near_terra = atl_nih_tubes_gen("atl_nih_tubes_near_terra", [[Вдоль стены протянуто несколько {труб}, по которым подается воздух. ]], "NF", 15, 9); -atl_nih_tubes_near_arctos = atl_nih_tubes_gen("atl_nih_tubes_near_arctos", [[За снятой декоративной панелью находятся несколько {труб}, по которым подается воздух. ]]); +atl_nih_tubes_near_arctos = atl_nih_tubes_gen("atl_nih_tubes_near_arctos", [[За снятой декоративной панелью находятся несколько {труб}, по которым подается воздух. ]], "KT", 13, 7); -atl_nih_tubes_oculus = atl_nih_tubes_gen("atl_nih_tubes_oculus", [[За снятой декоративной панелью находятся несколько {труб}, по которым подается воздух. ]]); +atl_nih_tubes_oculus = atl_nih_tubes_gen("atl_nih_tubes_oculus", [[За снятой декоративной панелью находятся несколько {труб}, по которым подается воздух. ]], "NF", 9, 8); -atl_nih_tubes_terra = atl_nih_tubes_gen("atl_nih_tubes_terra", [[За снятой декоративной панелью находятся несколько {труб}, по которым подается воздух. ]]); +atl_nih_tubes_terra = atl_nih_tubes_gen("atl_nih_tubes_terra", [[За снятой декоративной панелью находятся несколько {труб}, по которым подается воздух. ]], "NF", 12, 6); -atl_nih_tubes_luna = atl_nih_tubes_gen("atl_nih_tubes_luna", [[Под потолком протянуто несколько {труб}, по которым подается воздух. ]]); +atl_nih_tubes_luna = atl_nih_tubes_gen("atl_nih_tubes_luna", [[Под потолком протянуто несколько {труб}, по которым подается воздух. ]], "KT", 11, 5); -atl_nih_tubes_arctos = atl_nih_tubes_gen("atl_nih_tubes_arctos", [[Под потолком протянуто несколько {труб}, по которым подается воздух. ]]); +atl_nih_tubes_arctos = atl_nih_tubes_gen("atl_nih_tubes_arctos", [[Под потолком протянуто несколько {труб}, по которым подается воздух. ]], "KT", 11, 7); -atl_nih_tubes_aqua = atl_nih_tubes_gen("atl_nih_tubes_aqua", [[Под потолком протянуто несколько {труб}, по которым подается воздух. ]]); +atl_nih_tubes_aqua = atl_nih_tubes_gen("atl_nih_tubes_aqua", [[Под потолком протянуто несколько {труб}, по которым подается воздух. ]], "TQ", 11, 7); -atl_nih_tubes_aqua_a = atl_nih_tubes_gen("atl_nih_tubes_aqua_a", [[Под потолком протянуто несколько {труб}, по которым подается воздух. ]]); +atl_nih_tubes_aqua_a = atl_nih_tubes_gen("atl_nih_tubes_aqua_a", [[Под потолком протянуто несколько {труб}, по которым подается воздух. ]], "TQ", 14, 4); -atl_nih_tubes_aqua_b = atl_nih_tubes_gen("atl_nih_tubes_aqua_b", [[Под потолком протянуто несколько {труб}, по которым подается воздух. ]]); +atl_nih_tubes_aqua_b = atl_nih_tubes_gen("atl_nih_tubes_aqua_b", [[Под потолком протянуто несколько {труб}, по которым подается воздух. ]], "TQ", 10, 5); atl_nih_panel_near_a = obscured_obj("atl_nih_panel_near_a", [[Рядом со шлюзом установлена {защитная панель}, за которой скрываются трубы для подачи воздуха. ]], [[Вы снимаете панель, открывая доступ к трубам. ]], "atl_nih_tubes_near_a", true); @@ -1114,6 +1230,112 @@ atl_nih_boxes_near_terra = obscured_obj("atl_nih_boxes_near_terra", [[За грудой {ящиков}, вы замечаете несколько труб подачи воздуха. ]], [[Вы сдвигаете несколько ящиков, открывая себе доступ к трубам. ]], "atl_nih_tubes_near_terra", false, [[У стены расположена груда ящиков. ]], [[Вам незачем что-то еще здесь делать. ]]); atl_nih_boxes_terra = obscured_obj("atl_nih_boxes_terra", [[За грудой {ящиков}, вы замечаете несколько труб подачи воздуха. ]], [[Вы сдвигаете несколько ящиков, открывая себе доступ к трубам. ]], "atl_nih_tubes_terra", false, [[У стены расположена груда ящиков. ]], [[Вам незачем что-то еще здесь делать. ]]); +atl_nih_tube_container = obj { + nam = "atl_nih_tube_container"; + dsc = [[Крышка одного из {ящиков} снята и вы видите внутри несколько труб. ]]; + act = function (s) + walkin("atl_nih_tube_container_inv"); + end; +}; + +atl_nih_tube_container2 = obj { + nam = "atl_nih_tube_container2"; + dsc = [[У одной из стен аккуратно сложены несколько {труб}. ]]; + act = function (s) + walkin("atl_nih_tube_container2_inv"); + end; +}; + +tube = function(table) + table.is_tube = true; + table.dsc = "{" .. table.t .. "-" .. table.l .. "-" .. table.d .. "}^"; + table.inv = "Труба маркированная " .. table.t .. "-" .. table.l .. "-" .. table.d ; + table.disp = "Труба " .. table.t .. "-" .. table.l .. "-" .. table.d ; + table.tak = "Вы забираете трубу. "; + return obj(table); +end; + +tube_rt_12_8 = tube { nam = "tube_rt_12_8"; t = "RT"; l = 12; d = 8; }; +tube_rt_11_9 = tube { nam = "tube_rt_11_9"; t = "RT"; l = 11; d = 9; }; +tube_rt_15_7 = tube { nam = "tube_rt_15_7"; t = "RT"; l = 15; d = 7; }; +tube_rt_12_5 = tube { nam = "tube_rt_12_5"; t = "RT"; l = 12; d = 5; }; +tube_rt_13_6 = tube { nam = "tube_rt_13_6"; t = "RT"; l = 13; d = 6; }; +tube_rt_11_4 = tube { nam = "tube_rt_11_4"; t = "RT"; l = 11; d = 4; }; +tube_rt_11_6 = tube { nam = "tube_rt_11_6"; t = "RT"; l = 11; d = 6; }; +tube_kt_13_8 = tube { nam = "tube_kt_13_8"; t = "KT"; l = 13; d = 8; }; +tube_kt_15_10 = tube { nam = "tube_kt_15_10"; t = "KT"; l = 15; d = 10; }; +tube_kt_9_9 = tube { nam = "tube_kt_9_9"; t = "KT"; l = 9; d = 9; }; +tube_kt_12_7 = tube { nam = "tube_kt_12_7"; t = "KT"; l = 12; d = 7; }; +tube_nf_16_7 = tube { nam = "tube_nf_16_7"; t = "NF"; l = 16; d = 7; }; +tube_nf_11_7 = tube { nam = "tube_nf_11_7"; t = "NF"; l = 11; d = 7; }; +tube_nf_12_9 = tube { nam = "tube_nf_12_9"; t = "NF"; l = 12; d = 9; }; +tube_nf_15_7 = tube { nam = "tube_nf_15_7"; t = "NF"; l = 15; d = 7; }; +tube_rt_12_6 = tube { nam = "tube_rt_12_6"; t = "RT"; l = 12; d = 6; }; +tubes_terra = { + tube_rt_12_8; + tube_rt_11_9; + tube_rt_15_7; + tube_rt_12_5; + tube_rt_13_6; + tube_rt_11_4; + tube_rt_11_6; + tube_kt_13_8; + tube_kt_15_10; + tube_kt_9_9; + tube_kt_12_7; + tube_nf_16_7; + tube_nf_11_7; + tube_nf_12_9; + tube_nf_15_7; + tube_rt_12_6; +}; + +atl_nih_tube_container_inv = room { + nam = "atl_nih_tube_container_inv"; + disp = "Атлантида, Терра, главный коридор"; + dsc = [[В ящике сложены трубы различных диаметров и размеров. Все трубы промаркированы:]]; + way = { + kh_vroom("Отойти от ящика", "atl_terra_main_corridor"); + }; + obj = { + + }; +}; + +tube_nf_14_6 = tube { nam = "tube_nf_14_6"; t = "NF"; l = 14; d = 6; }; +tube_nf_10_7 = tube { nam = "tube_nf_10_7"; t = "NF"; l = 10; d = 7; }; +tube_nf_11_9 = tube { nam = "tube_nf_11_9"; t = "NF"; l = 11; d = 9; }; +tube_nf_14_7 = tube { nam = "tube_nf_14_7"; t = "NF"; l = 14; d = 7; }; +tube_tq_14_6 = tube { nam = "tube_tq_14_6"; t = "TQ"; l = 14; d = 6; }; +tube_tq_17_5 = tube { nam = "tube_tq_17_5"; t = "TQ"; l = 17; d = 5; }; +tube_rt_12_7 = tube { nam = "tube_rt_12_7"; t = "RT"; l = 12; d = 7; }; +tube_kt_13_9 = tube { nam = "tube_kt_13_9"; t = "KT"; l = 13; d = 9; }; + +tubes_aqua = { + tube_nf_14_6; + tube_nf_10_7; + tube_nf_11_9; + tube_nf_14_7; + tube_tq_14_6; + tube_tq_17_5; + tube_rt_12_7; + tube_kt_13_9; +}; + +atl_nih_tube_container2_inv = room { + nam = "atl_nih_tube_container2_inv"; + disp = "Атлантида, Аква, склад B"; + dsc = [[У стены сложены трубы различных диаметров и размеров. Все трубы промаркированы:]]; + way = { + kh_vroom("Отойти от ящика", "atl_aqua_warehouse_b"); + }; + obj = { + + }; +}; + +atl_nih_tube_container:disable(); +atl_nih_tube_container2:disable(); atl_nih_tubes_near_aqua:disable(); atl_nih_panel_near_a:disable(); atl_nih_panel_near_admin:disable(); @@ -1129,45 +1351,125 @@ atl_nih_tubes_aqua:disable(); atl_nih_tubes_aqua_a:disable(); atl_nih_tubes_aqua_b:disable(); +nih_tubes_array = { + atl_nih_tubes_near_aqua, + atl_nih_panel_near_a, + atl_nih_panel_near_admin, + atl_nih_panel_near_luna, + atl_nih_boxes_near_oculus, + atl_nih_boxes_near_terra, + atl_nih_tubes_near_arctos, + atl_nih_panel_oculus, + atl_nih_boxes_terra, + atl_nih_tubes_luna, + atl_nih_tubes_arctos, + atl_nih_tubes_aqua, + atl_nih_tubes_aqua_a, + atl_nih_tubes_aqua_b, +}; + +nih_array = { + atl_nih_tubes_near_aqua; + atl_nih_tubes_near_a; + atl_nih_tubes_near_admin; + atl_nih_tubes_near_luna; + atl_nih_tubes_near_oculus; + atl_nih_tubes_near_terra; + atl_nih_tubes_near_arctos; + atl_nih_tubes_oculus; + atl_nih_tubes_terra; + atl_nih_tubes_luna; + atl_nih_tubes_arctos; + atl_nih_tubes_aqua; + atl_nih_tubes_aqua_a; + atl_nih_tubes_aqua_b; + atl_nih_panel_near_a; + atl_nih_panel_near_admin; + atl_nih_panel_near_luna; + atl_nih_panel_oculus; + atl_nih_boxes_near_oculus; + atl_nih_boxes_near_terra; + atl_nih_boxes_terra; + atl_nih_tube_container; + atl_nih_tube_container2; +}; + +nih_array2 = { + atl_nih_tubes_near_aqua, + atl_nih_panel_near_a, + atl_nih_panel_near_admin, + atl_nih_panel_near_luna, + atl_nih_boxes_near_oculus, + atl_nih_boxes_near_terra, + atl_nih_tubes_near_arctos, + atl_nih_panel_oculus, + atl_nih_boxes_terra, + atl_nih_tubes_luna, + atl_nih_tubes_arctos, + atl_nih_tubes_aqua, + atl_nih_tubes_aqua_a, + atl_nih_tubes_aqua_b, + atl_nih_tube_container, + atl_nih_tube_container2, +}; + +disable_nih = function() + remove(atl_item_tube_spec, pl); + for i = 1, #nih_array do + nih_array[i]:disable(); + end; + + for i = 1, #tubes_terra do + remove(tubes_terra[i], pl); + end; + + for i = 1, #tubes_aqua do + remove(tubes_aqua[i], pl); + end; +end; + +function atlantis_init() + print("init atl"); + for i = 1, #tubes_terra do + put(tubes_terra[i], atl_nih_tube_container_inv); + end; + + for i = 1, #tubes_aqua do + put(tubes_aqua[i], atl_nih_tube_container2_inv); + end; +end; + atl_nih_init = function() - atl_nih_state = 1; - local nih_array = { - atl_nih_tubes_near_aqua, - atl_nih_tubes_near_a, - atl_nih_tubes_near_admin, - atl_nih_tubes_near_luna, - atl_nih_tubes_near_oculus, - atl_nih_tubes_near_terra, - atl_nih_tubes_near_arctos, - atl_nih_tubes_oculus, - atl_nih_tubes_terra, - atl_nih_tubes_luna, - atl_nih_tubes_arctos, - atl_nih_tubes_aqua, - atl_nih_tubes_aqua_a, - atl_nih_tubes_aqua_b - }; - - local nih_array2 = { - atl_nih_tubes_near_aqua, - atl_nih_panel_near_a, - atl_nih_panel_near_admin, - atl_nih_panel_near_luna, - atl_nih_boxes_near_oculus, - atl_nih_boxes_near_terra, - atl_nih_tubes_near_arctos, - atl_nih_panel_oculus, - atl_nih_boxes_terra, - atl_nih_tubes_luna, - atl_nih_tubes_arctos, - atl_nih_tubes_aqua, - atl_nih_tubes_aqua_a, - atl_nih_tubes_aqua_b - }; - - nih_array[rnd(#nih_array)].broken = true; - - for i = 1, #nih_array2 do - nih_array2[i]:enable(); - end; + atl_nih_state = 1; + local nih_array_rt = { + atl_nih_tubes_near_aqua; + atl_nih_tubes_near_a; + atl_nih_tubes_near_admin; + }; + local nih_array_kt = { + atl_nih_tubes_near_luna; + atl_nih_tubes_near_arctos; + atl_nih_tubes_luna; + atl_nih_tubes_arctos; + }; + local nih_array_nf = { + atl_nih_tubes_near_oculus; + atl_nih_tubes_near_terra; + atl_nih_tubes_oculus; + atl_nih_tubes_terra; + }; + local nih_array_tq = { + atl_nih_tubes_aqua; + atl_nih_tubes_aqua_a; + atl_nih_tubes_aqua_b; + }; + + nih_array_rt[rnd(#nih_array_rt)].broken = true; + nih_array_kt[rnd(#nih_array_kt)].broken = true; + nih_array_nf[rnd(#nih_array_nf)].broken = true; + nih_array_tq[rnd(#nih_array_tq)].broken = true; + + for i = 1, #nih_array2 do + nih_array2[i]:enable(); + end; end; \ No newline at end of file diff --git a/atlantis_catching_the_tail.lua b/atlantis_catching_the_tail.lua deleted file mode 100644 --- a/atlantis_catching_the_tail.lua +++ /dev/null @@ -1,1413 +0,0 @@ ---[[ - iraa'pha'anot'rr -]] -ctt_iraa_city = room { - nam = "Центр Ираафаанотра"; - dsc = [[ - Вы находитесь у центра навьярского поселения Ираафаанотр. Поверхность под вами словно сделана из цельного куска камня. Несколько каменных строений возвышаются поблизости. - ]]; - underwater = true; - entered = function(s) - if (ArrayUtils.indexOf(pl.party, 'learr') ~= 0 and not char_learr.follow) then - pr [[ - Леарр входит в шлюз вслед за вами: "Я вместе-с-тобой-пойду". - ]]; - - char_learr:accompany(true); - char_radcliffe:accompany(false); - char_wright:accompany(false); - char_anna:accompany(false); - elseif (ArrayUtils.indexOf(pl.party, 'anna') ~= 0 and not char_anna.follow) then - pr [[ - Анна входит в шлюз вслед за вами: "Я пойду вместе с вами, вам наверняка понадобится помощь". - ]]; - char_learr:accompany(false); - char_radcliffe:accompany(false); - char_wright:accompany(false); - char_anna:accompany(true); - end; - end; - obj = { - "ctt_iraa_obelisk", - "ctt_iraa_chieftain", - "ctt_iraa_guards" - }; -}; - -ctt_iraa_obelisk = obj { - nam = "ctt_iraa_obelisk"; - dsc = [[ - Недалеко от вас стоит {обелиск}, на котором светящимися красками нанесено название города. - ]]; - act = function(s) - if (ctt_iraaphaanotrr_chieftain.state == 1) then - iraaphaanotrr_found = true; - - pr [[ - Каменный обелиск, на который нанесено название города. Внизу вы видите какие-то символы, но вы не понимаете их назначения. - ]]; - if (char_learr.follow) then - pr [[ - По головным плавникам Леарр бегут цветные полосы: "[Схема показывает к-храму-дорогу. Когда мы на-левиафан-вернемся, я покажу как добраться туда]". - ]]; - end; - if (char_anna.follow) then - pr [[ - Анна подходит к вам и внимательно осматривает символы. вы слышите ее голос в динамиках: "Это путь к храму. Когда вернемся на Левиафан, я покажу это место на нашей карте". - ]]; - end; - else - pr [[ - Каменный обелиск, на который нанесено название города. Внизу вы видите какие-то символы, но вы не понимаете их назначения. - ]]; - end; - end; -}; - -ctt_iraa_guards = npc { - nam = "ctt_iraa_guards"; - dsc = [[ - Рядом с вождем стоят двое {стражников}, вооруженных копьями. - ]]; - phr = { - [[ - "Ты с-вождем-говори". - ]], - [[ - "Что ты хочешь?" - ]], - [[ - "Я ничего-знаю. Ты вождя-спроси". - ]] - }; -}; - -ctt_iraa_chieftain = npc { - var { - state = 0; - }; - nam = "ctt_iraa_chieftain"; - dsc = [[ - Перед вами стоит {вождь} Ираафаанотра. - ]]; - dlg = "ctt_iraa_chieftain_dlg"; -}; - -ctt_iraa_chieftain_dlg = dlg { - nam = "Вождь Ираафаанотра"; - entered = function(s) - if (have(item_navjiarr_chart_1)) then - pon("charts"); - else - poff("charts"); - end; - return [[ - Перед вами стоит вождь Ираафаантора - немолодой навьяр. На шее у него коралловое ожерелье. Он внимательно осматривает вас. После чего по его головным плавникам начинают бежать цветные полосы: "[Мы рады-видеть вас. Я знаю, зачем вы пришли]". - ]]; - end; - phr = { - {tag="charts", false, "Мне нужны карты из храма", [[ - Вождь отрицательно качает головой: "[Мы не дадим их вам сейчас]". - ]]}; - {"Вы можете нам помочь?", [[ - Вождь кивает: "[Вы идите в храм. Вы там что ищете найдете. Вы возвращайтесь потом. Я помогу вам еще]". - ]]}; - {tag="temple", false, "Как мы найдем храм?", [[ - Вождь указывает на символы в нижней части обелиска. - ]], code [[ - ctt_iraaphaanotrr_chieftain.state = 1; - ]]}; - {always=true, "Мы пойдем", [[ - Вождь прощается с вами: "[Вы возвращайтесь. Нам есть что обсудить]". - ]], code = [[ - back(); - ]]}; - }; -}; - - -ctt_iraa_near_temple = room { - var { - state = 0; - }; - nam = "Храм Ираафаанотра, вход"; - underwater = true; - dsc = [[ - Храм Ираафаанотра представляет собой обычную пещеру в скале неподалеку от города. Над входом в пещеру вытесан символ, раскрашенный цветами Ираафаанотра. - ]]; - entered = function(s) - if (char_anna.follow and s.state == 0) then - pr [[ - В динамиках скафандра вы слышите голос Анны Рэдклифф: "Этот символ - ни что иное, как карта, указывающая путь к городу. В отличие от самого города, здесь я не вижу указаний ни на одно место, кроме храма и Ираафаанотра". - ]]; - end; - s.state = 1; - end; - way = { - vroom("Войти", "ctt_iraa_temple_entrance"); - vroom("В Левиафан", "leviathan_airlock"); - }; -}; - -ctt_iraa_temple_entrance = darkroom { - nam = "Храм Ираафаанотра, первый этаж"; - dsc_halflit = [[ - Вы находитесь в небольшом темном проходе естественного происхождения. Проход позади вас ведет к выходу. Перед собой вы видите узкий проход, ведущий вглубь пещеры. - ]]; - dsc_dark = [[ - В темноте вы с трудом различаете очертания стен пещеры. - ]]; - entered = function(s) - if (char_anna.follow) then - char_anna.accompany(false); - pr [[ - В динамиках вы слышите голос Анны Рэдклифф: "Глаза навьяров лучше приспособлены к темноте, поэтому они нормально ориентируются в этих помещениях. Будь готов к тому, что с зажженой лампой ты не увидишь всего. Я подожду тебя здесь". - ]]; - end; - - if (char_learr.follow) then - char_learr.accompany(false); - pr [[ - Вы видите цветный полосы, бегущие по плавникам Леарр: "Уильям-ты в-полной-темноте-только-все-увидишь. Свет-здесь-не-друг. Я здесь-тебя-жду". - ]]; - end; - end; - obj = { - "ctt_iraa_l1_hint" - }; - way = { - kh_vroom("Вглубь пещеры", "ctt_iraa_l1_front", 1); - kh_vroom("К выходу", "ctt_iraa_near_temple", 2); - }; -}; - -ctt_iraa_l1_hint = obj { - nam = "ctt_iraa_l1_hint"; - dsc = function(s) - if (pl.has_light) then - return [[ - На полу перед вами лежит большая металлическая {пластина}, покрытая странными узорами. - ]]; - else - return [[ - На полу перед вами лежит большая металлическая {пластина}, покрытая узорами, отражающими свет проникающий от входа. - ]]; - end; - end; - act = function(s) - if (pl.has_light) then - return [[ - Вы рассматриваете пластину со всех сторон, но не можете понять, для чего она здесь. - ]]; - else - return [[ - В темноте вы видите проступающие на пластине контуры коридора: - 00110 - 00010 - 0K111 - K1001 - 0011K - ]]; - end; - end; -}; - -ctt_iraa_l1_front = darkroom { - nam = "Храм Ираафаанотра, первый этаж"; - dsc_halflit = [[ - Вы стоите перед входом в большую комнату. В отличие от коридора в котором вы находитесь, к ее созданию явно причастны разумные существа. - Перед собой вы видите прямоугольное помещение разделенное на двадцать пять квадратов, - ]]; - dsc_dark = [[ - Вы стоите посреди темной пещеры. В темноте вы не видите даже пути назад. - ]]; - way = { - kh_vroom("Вглубь пещеры", "ctt_iraa_l1", 1); - kh_vroom("К выходу", "ctt_iraa_temple_entrance", 1); - }; -}; - -ctt_iraa_l1_map = { - {0, 0, 1, 1, "item_ctt_iraa_key3"}; - {"item_ctt_iraa_key2", 1, 0, 0, 1}; - {0, "item_ctt_iraa_key1", 1, 1, 1}; - {0, 0, 0, 1, 0}; - {0, 0, 1, 1, 0}; -}; - -ctt_iraa_l1 = darkroom { - var { - px = 3; - py = 1; - }; - nam = "Храм Ираафаанотра, первый этаж"; - forcedsc = true; - - entered = function(s) - if (where(item_ctt_iraa_key1) ~= pl) then - item_ctt_iraa_key1:disable(); - end; - if (where(item_ctt_iraa_key2) ~= pl) then - item_ctt_iraa_key2:disable(); - end; - if (where(item_ctt_iraa_key3) ~= pl) then - item_ctt_iraa_key3:disable(); - end; - - if (ctt_iraa_l1_map[s.py][s.px] ~= 1 and ctt_iraa_l1_map[s.py][s.px] ~= 0 and where(ctt_iraa_l1_map[s.py][s.px]) ~= pl) then - print "enable item" - stead.ref(ctt_iraa_l1_map[s.py][s.px]):enable(); - end; - end; - - dsc_halflit = function(s) - - end; - - dsc_dark = [[ - Вы стоите в темном помещении. Ни единого проблеска света. - ]]; - - obj = { - "item_ctt_iraa_key1", - "item_ctt_iraa_key2", - "item_ctt_iraa_key3" - }; - - way = { - kh_vroom("Вперед", function(s) - if (ctt_iraa_l1.px == 4 and ctt_iraa_l1.py == 5) then - return ctt_iraa_l1_end; - end; - - ctt_iraa_l1.py = ctt_iraa_l1.py + 1; - - if (ctt_iraa_l1.py == 5 and ctt_iraa_l1.px ~= 3) then - path("Вперед", ctt_iraa_l1):disable(); - else - path("Вперед", ctt_iraa_l1):enable(); - end; - - if (ctt_iraa_l1_map[ctt_iraa_l1.py][ctt_iraa_l1.px] == 0) then - return "game_over_trap"; - else - return "ctt_iraa_l1"; - end; - end, 1); - kh_vroom("Назад", function(s) - if (px == 3 and py == 1) then - return ctt_iraa_l1_front; - end; - - ctt_iraa_l1.py = ctt_iraa_l1.py - 1; - - if (ctt_iraa_l1.py == 1 and ctt_iraa_l1.px ~= 3) then - path("Назад", ctt_iraa_l1):disable(); - else - path("Назад", ctt_iraa_l1):enable(); - end; - - if (ctt_iraa_l1_map[ctt_iraa_l1.py][ctt_iraa_l1.px] == 0) then - return "game_over_trap"; - else - return "ctt_iraa_l1"; - end; - end, 1); - kh_vroom("Налево", function(s) - ctt_iraa_l1.px = ctt_iraa_l1.px - 1; - - if (ctt_iraa_l1.px == 1) then - path("Налево", ctt_iraa_l1):disable(); - else - path("Налево", ctt_iraa_l1):enable(); - end; - - if (ctt_iraa_l1_map[ctt_iraa_l1.py][ctt_iraa_l1.px] == 0) then - return "game_over_trap"; - else - return "ctt_iraa_l1"; - end; - end, 1); - kh_vroom("Направо", function(s) - ctt_iraa_l1.px = ctt_iraa_l1.px + 1; - - if (ctt_iraa_l1.px == 5) then - path("Направо", ctt_iraa_l1):disable(); - else - path("Направо", ctt_iraa_l1):enable(); - end; - - if (ctt_iraa_l1_map[ctt_iraa_l1.py][ctt_iraa_l1.px] == 0) then - return "game_over_trap"; - else - return "ctt_iraa_l1"; - end; - end, 1); - }; -}; - -item_ctt_iraa_key1 = obj { - nam = "item_ctt_iraa_key1"; - disp = "Красный ключ"; - seen_level = 1; - dsc = [[ - На полу рядом с вами валяется небольшой {ключик}. - ]]; - inv = [[ - Небольшой коралловый ключик красноватого цвета. - ]]; - tak = [[ - Вы забираете ключик себе. - ]]; -}; - -item_ctt_iraa_key2 = obj { - nam = "item_ctt_iraa_key2"; - disp = "Зеленый ключ"; - seen_level = 1; - dsc = [[ - На полу рядом с вами валяется небольшой {ключик}. - ]]; - inv = [[ - Небольшой коралловый ключик зеленоватого цвета. - ]]; - tak = [[ - Вы забираете ключик себе. - ]]; -}; - -item_ctt_iraa_key3 = obj { - nam = "item_ctt_iraa_key3"; - disp = "Синий ключ"; - seen_level = 1; - dsc = [[ - На полу рядом с вами валяется небольшой {ключик}. - ]]; - inv = [[ - Небольшой коралловый ключик синеватого цвета. - ]]; - tak = [[ - Вы забираете ключик себе. - ]]; -}; - -ctt_iraa_l1_end = darkroom { - nam = "Храм Ираафаанотра, первый этаж"; - dsc_halflit = [[ - Вы находитесь в небольшой пещере перед массивной каменной дверью. Позади вас - главный зал первого этажа храма. - ]]; - dsc_dark = [[ - Вы находитесь в темной пещере. - ]]; - way = { - kh_vroom("Подняться", "ctt_iraa_l2", 1):disable(); - kh_vroom("Назад", "ctt_iraa_l1", 1); - }; - - life = function(s) - if (ctt_iraa_keyhole1.key_in == item_ctt_iraa_key3 and - ctt_iraa_keyhole2.key_in == item_ctt_iraa_key1 and - ctt_iraa_keyhole3.key_in == item_ctt_iraa_key2) then - path("Подняться"):enable(); - else - path("Подняться"):disable(); - end; - end; - - obj = { - 'ctt_iraa_keyholes', - 'ctt_iraa_keyhole1', - 'ctt_iraa_keyhole2', - 'ctt_iraa_keyhole3' - }; -}; - -ctt_iraa_keyholes = obj { - nam = "ctt_iraa_keyholes"; - seen_level = 2; - dsc = function(s) - if (pl.has_light) then - return [[ - Перед собой вы видите три замочные скважины, расположенные одна над другой, визуально почти ничем не отличающиеся: - ]]; - else - return [[ - Перед собой вы видите три замочные скважины, расположенные одна над другой: - ]]; - end; - end; -}; - -ctt_iraa_keyhole1 = obj { - var = { - key_in = nil - }; - nam = "ctt_iraa_keyhole1"; - seen_level = 2; - dsc = function(s) - if (s.key_in) then - return [[ - В {верхнюю скважину} вставлен ключ. ^ - ]]; - elseif (pl.has_light) then - return [[ - {Верхняя скважина} пуста. ^ - ]]; - else - return [[ - Из {верхней скважины} исходит слабое синеватое свечение. - ]]; - end; - end; -}; - -ctt_iraa_keyhole2 = obj { - var = { - key_in = nil; - }; - nam = "ctt_iraa_keyhole2"; - seen_level = 2; - dsc = function(s) - if (s.key_in) then - return [[ - В {среднюю скважину} вставлен ключ. ^ - ]]; - elseif (pl.has_light) then - - return [[ - {Средняя скважина} пуста. ^ - ]]; - else - return [[ - Из {средней скважины} исходит слабое красноватое свечение. - ]]; - end; - end; -}; - -ctt_iraa_keyhole3 = obj { - var = { - key_in = nil; - }; - nam = "ctt_iraa_keyhole1"; - seen_level = 2; - dsc = function(s) - if (s.key_in) then - return [[ - В {нижнюю скважину} вставлен ключ. ^ - ]]; - elseif (pl.has_light) then - return [[ - {Нижняя скважина} пуста. ^ - ]]; - else - return [[ - Из {нижней скважины} вы видите слабое зеленоватое свечение. - ]]; - end; - end; - use = function(s, o) - if (s.key_in) then - take(s.key_in); - s.key_in = nil; - return [[ - Вы забираете ключ. - ]]; - else - if (o == item_ctt_iraa_key1 or o == item_ctt_iraa_key2 or o == item_ctt_iraa_key3) then - s.key_in = o; - remove(s.key_in); - return [[ - Вы вставляет ключ в скважину. - ]]; - end; - return [[ - Это сюда не подходит. - ]]; - end; - end; -}; - -ctt_iraa_l2 = darkroom { - nam = "Храм Ираафаанотра, второй этаж"; - dsc_halflit = [[ - Большая круглая пещера. В центре ее вы видите три совершенно одинаковых пьедестала - ]]; - dsc_dark = [[ - В темноте вы ничего не видите. - ]]; - way = { - kh_vroom("Подняться", "ctt_iraa_l3", 1):disable(); - kh_vroom("Спуститься", "ctt_iraa_l1_end", 1); - }; - obj = { - "ctt_iraa_pedestal1"; - "ctt_iraa_pedestal2"; - "ctt_iraa_pedestal3"; - }; -}; - -item_ctt_iraa_spear = obj { - nam = "item_ctt_iraa_spear"; - disp = "Копье"; - inv = [[ - Коралловое копье. - ]]; -}; - -ctt_iraa_pedestal1 = obj { - var { - state = 0; - }; - nam = "ctt_iraa_pedestal1"; - dsc = function(s) - if (s.state == 0) then - return [[ - На {пьедестале слева} установлено коралловое копье. - ]]; - else - return [[ - Пьедестал слева пуст. - ]]; - end; - end; - act = function(s) - if (s.state == 0) then - s.state = 1; - return [[ - Копье рассыпается у вас в руках. - ]]; - else - return [[ - Пьедестал пуст. - ]]; - end; - end; -}; - -ctt_iraa_pedestal2 = obj { - var { - state = 0; - }; - nam = "ctt_iraa_pedestal2"; - dsc = function(s) - if (s.state == 0) then - return [[ - На {центральном пьедестале} установлено коралловое копье. - ]]; - else - return [[ - Центральный пьедестал пуст. - ]]; - end; - end; - act = function(s) - if (s.state == 0) then - s.state = 1; - take(item_ctt_iraa_spear); - path("Подняться"):enable(); - return [[ - Вы забираете копье. Из дальнего конца пещеры вы слышите скрежет и видите, как массивная каменная плита открывает проход на третий этаж. - ]]; - else - return [[ - Пьедестал пуст. - ]]; - end; - end; -}; - -ctt_iraa_pedestal3 = obj { - var { - state = 0; - }; - nam = "ctt_iraa_pedestal1"; - dsc = function(s) - if (s.state == 0) then - return [[ - На {пьедестале справа} установлено коралловое копье. - ]]; - else - return [[ - Пьедестал справапуст. - ]]; - end; - end; - act = function(s) - if (s.state == 0) then - s.state = 1; - return [[ - Копье рассыпается у вас в руках. - ]]; - else - return [[ - Пьедестал пуст. - ]]; - end; - end; -}; - -ctt_iraa_l3 = darkroom { - nam = "Храм Ираафаанотра, третий этаж"; - dsc_halflit = [[ - Вы находитесь в небольшом коридоре. - ]]; - dsc_dark = [[ - В темноте вы ничего не видите, кроме зияющего вдалеке выхода наружу. - ]]; - obj = { - "ctt_iraa_statue1"; - "ctt_iraa_statue2"; - "ctt_iraa_statue3"; - }; - way = { - kh_vroom("Спуститься", "ctt_iraa_l2", 1); - kh_vroom("Подняться", "ctt_iraa_top", 1); - }; -}; - -ctt_iraa_statue1 = obj { - var { - has_spear = false; - }; - nam = "ctt_iraa_statue1"; - seen_level = 1; - dsc = function(s) - if (s.has_spear) then - return [[ - Первая {статуя} держит в руках коралловое копье. - ]]; - else - return [[ - Первая {статуя} стоит с протянутыми руками. - ]]; - end; - end; - act = function(s) - if (s.has_spear) then - take(item_ctt_iraa_spear); - - return [[ - Вы забираете копье. - ]]; - end; - end; - use = function(s, o) - if (o == item_ctt_iraa_spear) then - remove(item_ctt_iraa_spear); - s.has_spear = true; - return [[ - Вы помещаете копье в протянутые руки статуи. Ничего не происходит - ]]; - end; - - return [[ - Это сюда не подойдет. - ]]; - end; -}; - -ctt_iraa_statue2 = obj { - var { - has_spear = false; - }; - nam = "ctt_iraa_statue2"; - seen_level = 1; - dsc = function(s) - if (s.has_spear) then - return [[ - Вторая {статуя} держит в руках коралловое копье. - ]]; - else - return [[ - Вторая {статуя} стоит с протянутыми руками. - ]]; - end; - end; - use = function(s, o) - if (o == item_ctt_iraa_spear) then - remove(item_ctt_iraa_spear); - take(item_navjiarr_chart_iraa); - s.has_spear = true; - return [[ - Вы помещаете копье в протянутые руки статуи. Табличка на постаменте статуи отодвигается в сторону и в открывшейся нише вы находите фрагмент навьярской карты. - ]]; - end; - - return [[ - Это сюда не подойдет. - ]]; - end; -}; - -ctt_iraa_statue3 = obj { - var { - has_spear = false; - }; - nam = "ctt_iraa_statue3"; - seen_level = 1; - dsc = function(s) - if (s.has_spear) then - return [[ - Последняя {статуя} держит в руках коралловое копье. - ]]; - else - return [[ - Последняя {статуя} стоит с протянутыми руками. - ]]; - end; - end; - act = function(s) - if (s.has_spear) then - take(item_ctt_iraa_spear); - - return [[ - Вы забираете копье. - ]]; - end; - end; - use = function(s, o) - if (o == item_ctt_iraa_spear) then - remove(item_ctt_iraa_spear); - s.has_spear = true; - return [[ - Вы помещаете копье в протянутые руки статуи. Ничего не происходит - ]]; - end; - - return [[ - Это сюда не подойдет. - ]]; - end; -}; - -ctt_iraa_top = room { - nam = "Храм Ираафаанотра, вершина скалы"; - dsc = [[ - Вы стоите на вершине скалы, рядом с задним входом в храм Ираафаанотра. Внизу вы видите ожидающий вас Левиафан. Аккуратная лестница, вырезанная в скале позволит вам легко спуститься вниз, к гланому входу. - ]]; - way = { - kh_vroom("Вернуться в храм", "ctt_iraa_l3"); - kh_vroom("Спуститься к главному входу", "ctt_iraa_near_temple"); - }; -}; - ---[[ - Dyp'atre'anot'rr -]] - -ctt_dyp_city = room { - nam = "Дипатреанотр"; - dsc = [[ - Вы находитесь на окраине Дипатреанотра. - ]]; - underwater = true; - way = { - kh_vroom("В Левиафан", "leviathan_airlock"); - }; - entered = function(s) - if ArrayUtils.indexOf(pl.party, 'anna') ~= 0 and not char_anna.follow then - char_learr:accompany(false); - char_radcliffe:accompany(false); - char_wright:accompany(false); - char_anna:accompany(true); - return [[ - Вы не успеваете выйти, как в шлюз входит Анна. Она говорит: "Я пойду с вами. Я знаю навьярский язык и, надеюсь, буду полезна". - ]]; - end; - end; - obj = { - "ctt_dyp_guards", - "ctt_dyp_priest" - }; -}; - -ctt_dyp_guards = npc { - nam = "ctt_dyp_guards"; - dsc = [[ - Четверо {стражников} стоят перед вами. Они запрещают вам входить в город: "[Ты в-город-не-пройдешь]". - ]]; - phr = { - "Ты в-город-не-пройдешь", - "Ты не-входи", - "He'vji'a'rr не-войдет" - }; -}; - -ctt_dyp_priest = npc { - nam = "ctt_dyp_priest"; - dsc = [[ - Рядом со стражниками стоит пожилой {навьяр}. На шее у него ожерелье из кораллов, а в правой руке - посох, на вершине которого укреплен металлический диск. - ]]; - dlg = "ctt_dyp_priest_dlg"; -}; - -ctt_dyp_priest_dlg = dlg { - var { - state = 0; - }; - nam = "Жрец"; - entered = function(s) - if (s.state == 0 and have(item_navjiarr_chart_1)) then - pon("have_map"); - end; - return [[ - Навьяр привествует вас: "[Я рад-видеть вас]". - ]]; - end; - phr = { - {"[Я ищу Лсэрианотр]", [[ - Навьяр выглядит изумленно. Стражники переглядываются, не зная, как быть. Некоторое время он раздумывает, как поступить и наконец отвечает: [Хевьяр туда не идет]. - ]], code [[ psub('lseryanotrr'); ]]}; - {tag="have_map", false, "[Мне нужня эта карты][показать фрагмент карты]", [[ - Навьяр с интересом разглядывает металлическую пластинку. Через некоторое время он сообщает вам: "[У нас есть то, что вы ищете. Это в храме. Хевьяр должен пройти испытание, чтобы попасть в храм]". Он рисует посохом на земле схему пути в храм Дипатреанотра. После чего стирает ее и говорит: "Ты возвращайся, когда пройдешь испытание". - ]], code [[ ctt_dyp_priest_dlg.state = 1; dypatreanotrr_temple_found = true; back(); ]]}; - {always=true, "[Я пойду]", [[ - Навьяр остается не подвижен. - ]], code [[ back(); ]]}; - {tag="lseryanotrr"}; - {"[Почему?]", [[ - [Лсэрианотр - город навьяров. Хевьяр туда не идет]. - ]]}; - {"[Вы знаете, где он находится?]", [[ - [Хевьяр туда не идет. Об этом не говорим больше]. - ]], code [[ pret(); ]]}; - }; -}; - -ctt_dyp_temple_l1_map = { - {"в югозападном углу", "у южной стены", "в юговосточном углу"}, - {"у западной стены", "в центре", "у восточной стены"}, - {"в северозападном углу", "у северной стены", "в северовосточном углу"}, -}; - -ctt_dyp_temple_l1 = room { - var { - was_seen = false; - px = 3; - py = 1; - path = {1}; - cpath = {1,4,7,8,9,6,3,2,5}; - solved = true; - }; - nam = "Храм Дипатреанотра, первый этаж"; - dsc = function(s) - if (s.solved) then - return [[ - Вы находитесь в большом квадратном зале. Пол состоит из девяти нажимных плит, на одной из которых вы и стоите. Все плиты находятся в нажатом состоянии. - ]]; - else - return [[ - Вы находитесь ]].. ctt_dyp_temple_l1_map[s.py][s.px] ..[[ зала. Пол состоит из девяти нажимных плит, на одной из которых вы и стоите. - ]]; - end; - end; - check = function(s) - if (s.solved) then - return; - end; - local pos = s.px * s.py; - local has = false; - for i = 1, #s.path do - if (s.path[i] == pos) then - has = true; - end; - end; - if (not has) then - if (s.cpath[#s.path + 1] == pos) then - table.insert(s.path, pos); - else - s.path = { pos }; - end; - end; - if (#s.path == #s.cpath) then - s.solved = true; - way("На север"):disable(); - way("На юг"):disable(); - way("На восток"):disable(); - way("На запад"):disable(); - way("Выйти из храма"):enable(); - way("Пройти дальше"):enable(); - else - if (s.px == 1) then - way("На запад"):disable(); - else - way("На запад"):enable(); - end; - if (s.px == 3) then - way("На восток"):disable(); - else - way("На восток"):enable(); - end; - - if (s.py == 1) then - way("На юг"):disable(); - else - way("На юг"):enable(); - end; - if (s.py == 3) then - way("На север"):disable(); - else - way("На север"):enable(); - end; - end; - end; - entered = function(s) - s:check(); - if (not s.was_seen) then - s.was_seen = true; - pr [[ - Как только вы входите в храм, дверь за вами закрывается. Вы оказываетесь в запертой комнате. Пол и потолок комнаты покрыты светящимися водорослями, позволяя вам без проблем видеть все находящееся внутри. - ]]; - end; - end; - way = { - kh_vroom("На север", function(s) - ctt_dyp_temple_l1.py = ctt_dyp_temple_l1.py + 1; - ctt_dyp_temple_l1:check(); - return false; - end); - kh_vroom("На восток", function(s) - ctt_dyp_temple_l1.px = ctt_dyp_temple_l1.px - 1; - ctt_dyp_temple_l1:check(); - return false; - end); - kh_vroom("На запад", function(s) - ctt_dyp_temple_l1.px = ctt_dyp_temple_l1.px + 1; - ctt_dyp_temple_l1:check(); - return false; - end); - kh_vroom("На юг", function(s) - ctt_dyp_temple_l1.py = ctt_dyp_temple_l1.py - 1; - ctt_dyp_temple_l1:check(); - return false; - end); - kh_vroom("Выйти из храма", "ctt_dyp_temple_entrance"):disable(); - kh_vroom("Пройти дальше", "ctt_dyp_temple_l2"):disable(); - }; -}; - -ctt_dyp_button_ctr = function(nam, index) - return obj { - nam = nam; - dsc = function(s) - local im = "images/dyp_bg.png"; - for i = 1, #ctt_dyp_temple_l2.buttons[index] do - im = im .. ";images/dyp_" .. tostring(ctt_dyp_temple_l2.buttons[index][i]) .. ".png"; - end; - if (ctt_dyp_temple_l2.pressed_buttons[index]) then - return "{Рычаг с символами " .. img(im) .."} включен.^"; - else - return "{Рычаг с символами " .. img(im) .."} выключен.^"; - end; - end; - act = function(s) - ctt_dyp_temple_l2:check(index); - return [[ - Вы переключаете рычаг и узор на полу комнаты меняется - ]]; - end; - }; -end; - -ctt_dyp_temple_l2 = room { - var { - active_parts = {false, false, false, false, false, false, false, false, false, false, false, false}; - pressed_buttons = {false, false, false, false, false, false, false, false}; - solved = false; - }; - buttons = { - {1, 5, 9, 11, 12}; - {1, 2, 3, 4}; - {4, 8, 10, 11, 12}; - {2, 4, 5, 6}; - {1, 5, 7, 9, 10, 11, 12}; - {2, 6, 9, 10, 12}; - {1, 3, 7, 8}; - {3, 7, 9, 10, 11}; - }; - pic = function(s) - local pic = 'images/dyp_bg.png'; - local cnt = 0; - for i = 1, #s.active_parts do - if (s.active_parts[i]) then - cnt = cnt + 1; - pic = pic .. ";images/dyp_" .. tostring(i) .. ".png"; - end; - end; - if (cnt > 0) then - return pic; - else - return nil; - end; - end; - nam = "Храм Дипатреанотра, второй этаж"; - dsc = [[ - Большой круглый плохо освещенный зал. В центре зала расположено восемь рычагов, рядом с которыми нанесены какие-то символы. - ]]; - obj = { - ctt_dyp_button_ctr("ctt_dyp_b1", 1); - ctt_dyp_button_ctr("ctt_dyp_b2", 2); - ctt_dyp_button_ctr("ctt_dyp_b3", 3); - ctt_dyp_button_ctr("ctt_dyp_b4", 4); - ctt_dyp_button_ctr("ctt_dyp_b5", 5); - ctt_dyp_button_ctr("ctt_dyp_b6", 6); - ctt_dyp_button_ctr("ctt_dyp_b7", 7); - ctt_dyp_button_ctr("ctt_dyp_b8", 8); - }; - way = { - kh_vroom("На первый этаж", "ctt_dyp_temple_l1"):disable(); - kh_vroom("На третий этаж", "ctt_dyp_temple_l3"):disable(); - }; - check = function(s, index) - s.pressed_buttons[index] = not s.pressed_buttons[index]; - - for i = 1, #s.active_parts do - s.active_parts[i] = false; - end; - - for i = 1, #s.pressed_buttons do - if (s.pressed_buttons[i]) then - for j = 1, #s.buttons[i] do - s.active_parts[s.buttons[i][j]] = not s.active_parts[s.buttons[i][j]]; - end; - end; - end; - - s.solved = true; - for i = 1, #s.active_parts do - if (not s.active_parts[i]) then - s.solved = false; - break; - end; - end; - - if (s.solved) then - path("На первый этаж"):enable(); - path("На третий этаж"):enable(); - end; - end; -}; - -ctt_dyp_temple_l3 = room { - nam = "Храм Дипатреанотра, третий этаж"; - dsc = [[ - Небольшая овальная комната, в центре которой расположены три статуи. На стене выгравирована надпись на навьярском языке: "[Каждый получит свое. Воин - оружие. Мудрец - знания. Вождь - власть]". - ]]; - entered = function(s) - if (not ctt_dyp_statue1.looked) then - ctt_dyp_statue_ped1:disable(); - end; - if (not ctt_dyp_statue2.looked) then - ctt_dyp_statue_ped2:disable(); - end; - if (not ctt_dyp_statue3.looked) then - ctt_dyp_statue_ped3:disable(); - end; - if (not ctt_dyp_statue1.set or not ctt_dyp_statue2.set or not ctt_dyp_statue3.set) then - lifeon(s); - end; - end; - left = function(s) - lifeoff(s); - end; - life = function(s) - if (ctt_dyp_statue1.set and ctt_dyp_statue2.set and ctt_dyp_statue3.set) then - return [[ - Двери открываются, позволяя вам пройти дальше. - ]]; - end; - end; - way = { - kh_vroom("На второй этаж", "ctt_dyp_temple_l2"):disable(); - kh_vroom("Вглубь храма", "ctt_dyp_temple_corridor_1"):disable(); - }; - obj = { - 'ctt_dyp_spear', - 'ctt_dyp_statue1', - 'ctt_dyp_statue_ped1', - 'ctt_dyp_statue2', - 'ctt_dyp_statue_ped2', - 'ctt_dyp_statue3', - 'ctt_dyp_statue_ped3' - }; -}; - -ctt_dyp_spear = obj { - nam = "ctt_dyp_spear"; - dsc = [[ - На полу у входа лежит коралловое {копье}. - ]]; - act = function(s) - take(s); - return [[ - Вы поднимаете копье. - ]]; - end; -}; - -ctt_dyp_lightdisk = obj { - nam = "ctt_dyp_lightdisk"; - dsc = [[ - {светодиск}. - ]]; - act = function(s) - take(s); - return [[ - Вы поднимаете светодиск. - ]]; - end; -}; - -ctt_dyp_key = obj { - nam = "ctt_dyp_key"; - dsc = [[ - {ключ}. - ]]; - act = function(s) - take(s); - return [[ - Вы поднимаете ключ. - ]]; - end; -}; - -ctt_dyp_statue1 = obj { - var { - looked = false; - set = false; - }; - nam = "ctt_dyp_statue1"; - dsc = function(s) - if (s.set) then - return [[ - {Первая статуя} изображает навьяра, задумчиво смотрящего перед собой. В левой руке статуи лежит фигурка ската. - ]]; - else - return [[ - {Первая статуя} изображает навьяра, задумчиво смотрящего перед собой. Левая рука статуи вытянута, словно в ожидании чего-то. - ]]; - end; - end; - act = function(s) - if (not s.looked) then - s.looked = true; - ctt_dyp_statue_ped1:enable(); - return [[ - Вы замечаете выемку в пьедестале под статуей. - ]]; - else - return [[ - Вы не замечаете ничего интересного. - ]]; - end; - end; - use = function(s, o) - if (o == ctt_dyp_ray) then - remove(ctt_dyp_ray); - s.set = true; - return [[ - Вы помещаете фигурку ската в руку статуи. - ]]; - end; - end; -}; - -ctt_dyp_statue2 = obj { - var { - looked = false; - set = false; - }; - nam = "ctt_dyp_statue2"; - dsc = function(s) - if (s.set) then - return [[ - {Вторая статуя} изображает навьяра в боевой стойке. В правой руке статуи лежит фигурка акулы. - ]]; - else - return [[ - {Вторая статуя} изображает навьяра в боевой стойке. Правая рука статуи вытянута, словно в ожидании чего-то. - ]]; - end; - end; - act = function(s) - if (not s.looked) then - s.looked = true; - ctt_dyp_statue_ped2:enable(); - return [[ - Вы замечаете выемку в пьедестале под статуей. - ]]; - else - return [[ - Вы не замечаете ничего интересного. - ]]; - end; - end; - use = function(s, o) - if (o == ctt_dyp_shark) then - remove(ctt_dyp_shark); - s.set = true; - return [[ - Вы помещаете фигурку акулы в руку статуи. - ]]; - end; - end; -}; - -ctt_dyp_statue3 = obj { - var { - looked = false; - set = false; - }; - nam = "ctt_dyp_statue3"; - dsc = function(s) - if (s.set) then - return [[ - {Третья статуя} изображает навьяра, гордо смотрящего вперед. В правой руке статуи лежит фигурка навьяра. - ]]; - else - return [[ - {Третья статуя} изображает навьяра, гордо смотрящего вперед. Правая рука статуи вытянута, словно в ожидании чего-то. - ]]; - end; - end; - act = function(s) - if (not s.looked) then - s.looked = true; - ctt_dyp_statue_ped3:enable(); - return [[ - Вы замечаете выемку в пьедестале под статуей. - ]]; - else - return [[ - Вы не замечаете ничего интересного. - ]]; - end; - end; - use = function(s, o) - if (o == ctt_dyp_navjiarr) then - remove(ctt_dyp_navjiarr); - s.set = true; - return [[ - Вы помещаете фигурку навьяра в руку статуи. - ]]; - end; - end; -}; - -ctt_dyp_statue_ped1 = obj { - nam = "ctt_dyp_statue_ped1"; - dsc = [[ - В пьедестале первой статуи вы замечаете {выемку}. - ]]; - act = [[ - На пьедестале выгравировано копье. - ]]; - use = function(s, o) - if (o == ctt_dyp_spear) then - remove(ctt_dyp_spear); - take(ctt_dyp_shark); - return [[ - Копье полностью входит в выемку. В пьедестале открывается другая выемка, в которой лежит маленькая фигурка акулы. - ]]; - end; - end; -}; - -ctt_dyp_statue_ped2 = obj { - nam = "ctt_dyp_statue_ped2"; - dsc = [[ - В пьедестале второй статуи вы замечаете {выемку}. - ]]; - act = [[ - На пьедестале выгравирован ключ. - ]]; - use = function(s, o) - if (o == ctt_dyp_key) then - remove(ctt_dyp_key); - take(ctt_dyp_navjiarr); - return [[ - Ключ входит в выемку. В пьедестале открывается другая выемка, в которой лежит маленькая фигурка навьяра. - ]]; - end; - end; -}; - -ctt_dyp_statue_ped3 = obj { - nam = "ctt_dyp_statue_ped3"; - dsc = [[ - В пьедестале третьей статуи вы замечаете {выемку}. - ]]; - act = [[ - На пьедестале выгравирован ключ. - ]]; - use = function(s, o) - if (o == ctt_dyp_lightdisk) then - remove(ctt_dyp_lightdisk); - take(ctt_dyp_navjiarr); - return [[ - Светодиск входит в выемку. В пьедестале открывается другая выемка, в которой лежит маленькая фигурка ската. - ]]; - end; - end; -}; - -ctt_dyp_shark = obj { - nam = "ctt_dyp_shark"; - dsp = "Акула"; - inv = [[ - Каменная фигурка акулы. - ]]; -}; - -ctt_dyp_navjiarr = obj { - nam = "ctt_dyp_navjiarr"; - dsp = "Навьяр"; - inv = [[ - Каменная фигурка навьяра. - ]]; -}; - -ctt_dyp_ray = obj { - nam = "ctt_dyp_ray"; - dsp = "Скат"; - inv = [[ - Каменная фигурка ската. - ]]; -}; - -ctt_dyp_temple_corridor_1 = room { - nam = "Храм Дипатреанотра, коридор"; - dsc = [[ - Узкий извилистый темный коридор, ведущий куда-то вглубь скалы. - ]]; - way = { - kh_vroom("Идти дальше", "ctt_dyp_temple_corridor_2"); - kh_vroom("Идти назад", "ctt_dyp_temple_l3"); - }; -}; - -ctt_dyp_temple_corridor_2 = room { - nam = "Храм Дипатреанотра, коридор"; - dsc = [[ - Узкий извилистый темный коридор, ведущий куда-то вглубь скалы. - ]]; - way = { - kh_vroom("Идти дальше", "ctt_dyp_temple_corridor_3"); - kh_vroom("Идти назад", "ctt_dyp_temple_corridor_1"); - }; -}; - -ctt_dyp_temple_corridor_3 = room { - nam = "Храм Дипатреанотра, коридор"; - dsc = [[ - Конец коридора. Массивная каменная дверь закрывает проход. Перед дверью установлен небольшой пьедестал. - ]]; - way = { - kh_vroom("Выйти из храма", "ctt_dyp_temple_entrance"):disable(); - kh_vroom("Идти назад", "ctt_dyp_temple_corridor_2"); - }; - obj = { - "item_navjiarr_chart_dyp"; - }; -}; \ No newline at end of file diff --git a/atlantis_dlg.lua b/atlantis_dlg.lua --- a/atlantis_dlg.lua +++ b/atlantis_dlg.lua @@ -1,85 +1,152 @@ char_darkstar_dlg = dlg { var { state = 0; + fta = 0; }; nam = "Винсент Даркстар"; disp = "Винсент Даркстар"; - entered = function(s) + + reset_more = function(s) + poff("on_drake", "on_black", "on_darkstar", "on_svetlova", "on_moreau", "on_wright", "on_leroy", "on_jones", "on_goldman", "on_atlantis", "on_navjiarr", "on_learr", "on_ryveerr", "on_aikerjarr", "more_questions"); + if (atl_rep_darkstar < 0) then + if (char_darkstar.drake_asked == 0) then pon("on_drake"); pon("more_questions"); end; + if (char_darkstar.black_asked == 0) then pon("on_black"); pon("more_questions"); end; + if (char_darkstar.darkstar_asked == 0) then pon("on_darkstar"); pon("more_questions"); end; + if (char_darkstar.svetlova_asked == 0) then pon("on_svetlova"); pon("more_questions"); end; + if (char_darkstar.moreau_asked == 0) then pon("on_moreau"); pon("more_questions"); end; + if (char_darkstar.wright_asked == 0) then pon("on_wright"); pon("more_questions"); end; + + if (atl_iof_completed) then + if (char_darkstar.leroy_asked == 0) then pon("on_leroy"); pon("more_questions"); end; + if (char_darkstar.jones_asked == 0) then pon("on_jones"); pon("more_questions"); end; + if (char_darkstar.goldman_asked == 0) then pon("on_goldman"); pon("more_questions"); end; + end; + + if (char_darkstar.atlantis_asked == 0) then pon("on_atlantis"); pon("more_questions"); end; + + if (char_darkstar.navjiarr_asked == 0) then pon("on_navjiarr"); pon("more_questions"); end; + if (char_darkstar.learr_asked == 0) then pon("on_learr"); pon("more_questions"); end; + if (char_darkstar.ryveerr_asked == 0) then pon("on_ryveerr"); pon("more_questions"); end; + if (atl_iof_learr_dead and char_darkstar.aikerjarr_asked == 0) then pon("on_aikerjarr"); pon("more_questions"); end; + else + if (char_darkstar.drake_asked < 2) then pon("on_drake"); pon("more_questions"); end; + if (char_darkstar.black_asked < 2) then pon("on_black"); pon("more_questions"); end; + if (char_darkstar.darkstar_asked < 2) then pon("on_darkstar"); pon("more_questions"); end; + if (char_darkstar.svetlova_asked < 2) then pon("on_svetlova"); pon("more_questions"); end; + if (char_darkstar.moreau_asked < 2) then pon("on_moreau"); pon("more_questions"); end; + if (char_darkstar.wright_asked < 2) then pon("on_wright"); pon("more_questions"); end; + if (atl_iof_completed) then + if (char_darkstar.leroy_asked < 2) then pon("on_leroy"); pon("more_questions"); end; + if (char_darkstar.jones_asked < 2) then pon("on_jones"); pon("more_questions"); end; + if (char_darkstar.goldman_asked < 2) then pon("on_goldman"); pon("more_questions"); end; + end; + if (char_darkstar.atlantis_asked < 2) then pon("on_atlantis"); pon("more_questions"); end; + + if (char_darkstar.navjiarr_asked < 2) then pon("on_navjiarr"); pon("more_questions"); end; + if (char_darkstar.learr_asked < 2) then pon("on_learr"); pon("more_questions"); end; + if (atl_iof_learr_dead and char_darkstar.learr_asked < 3) then pon("on_learr"); pon("more_questions"); end; + if (char_darkstar.ryveerr_asked < 2) then pon("on_ryveerr"); pon("more_questions"); end; + if (atl_iof_learr_dead and char_darkstar.aikerjarr_asked < 2) then pon("on_aikerjarr"); pon("more_questions"); end; + end; + end; + + enter = function(s) if (atl_lfc_panic_warning == 2 and atl_lfc_panic == 2 and atl_lfc_state == 1) then psub("lfc_warning"); return [[Винсент Даркстар недовольно смотрит на вас: "Господин Дрейк. Вы вообще понимаете, что делаете? Это последнее предупреждение. В следующий раз я приму меры. Все ясно? "]]; end; - if (atl_lfc_leroy_spoken) then + if atl_lfc_leroy_spoken and atl_lfc_leroy_spoken ~= 0 then pon("accuse_leroy"); end; - if (atl_lfc_goldman_spoken) then + if atl_lfc_goldman_spoken and atl_lfc_goldman_spoken ~= 0 then pon("accuse_goldman"); end; - poff("on_drake", "on_black", "on_darkstar", "on_svetlova", "on_moreau", "on_wright", "on_leroy", "on_jones", "on_goldman", "on_atlantis", "on_navjiarr", "on_learr", "on_ryveerr", "on_aikerjarr"); - - if (atl_rep_darkstar < 0) then - if (char_darkstar.drake_asked == 0) then pon("on_drake"); end; - if (char_darkstar.black_asked == 0) then pon("on_black"); end; - if (char_darkstar.darkstar_asked == 0) then pon("on_darkstar"); end; - if (char_darkstar.svetlova_asked == 0) then pon("on_svetlova"); end; - if (char_darkstar.moreau_asked == 0) then pon("on_moreau"); end; - if (char_darkstar.wright_asked == 0) then pon("on_wright"); end; - - if (atl_iof_completed) then - if (char_darkstar.leroy_asked == 0) then pon("on_leroy"); end; - if (char_darkstar.jones_asked == 0) then pon("on_jones"); end; - if (char_darkstar.goldman_asked == 0) then pon("on_goldman"); end; - end; - - if (char_darkstar.atlantis_asked == 0) then pon("on_atlantis"); end; - - if (char_darkstar.navjiarr_asked == 0) then pon("on_navjiarr"); end; - if (char_darkstar.learr_asked == 0) then pon("on_learr"); end; - if (char_darkstar.ryveerr_asked == 0) then pon("on_ryveerr"); end; - if (atl_iof_learr_dead and char_darkstar.aikerjarr_asked == 0) then pon("on_aikerjarr"); end; - else - if (char_darkstar.drake_asked < 2) then pon("on_drake"); end; - if (char_darkstar.black_asked < 2) then pon("on_black"); end; - if (char_darkstar.darkstar_asked < 2) then pon("on_darkstar"); end; - if (char_darkstar.svetlova_asked < 2) then pon("on_svetlova"); end; - if (char_darkstar.moreau_asked < 2) then pon("on_moreau"); end; - if (char_darkstar.wright_asked < 2) then pon("on_wright"); end; - if (atl_iof_completed) then - if (char_darkstar.leroy_asked < 2) then pon("on_leroy"); end; - if (char_darkstar.jones_asked < 2) then pon("on_jones"); end; - if (char_darkstar.goldman_asked < 2) then pon("on_goldman"); end; - end; - if (char_darkstar.atlantis_asked < 2) then pon("on_atlantis"); end; - - if (char_darkstar.navjiarr_asked < 2) then pon("on_navjiarr"); end; - if (char_darkstar.learr_asked < 2) then pon("on_learr"); end; - if (atl_iof_learr_dead and char_darkstar.learr_asked < 3) then pon("on_learr"); end; - if (char_darkstar.ryveerr_asked < 2) then pon("on_ryveerr"); end; - if (atl_iof_learr_dead and char_darkstar.aikerjarr_asked < 2) then pon("on_aikerjarr"); end; + s:reset_more(); + + poff("accuse_saboteur", "accuse_saboteur_g", "show_clock", "show_clock_g"); + if (have(item_goldmans_clock)) then + pon("show_clock", "show_clock_g"); end; + if (atl_lfc_saboteur_known and atl_lfc_state < 3) then + pon("accuse_saboteur", "accuse_saboteur_g"); + end; + if (s.state == 0) then psub("first_meeting"); s.state = 1; return [[За столом сидит средних лет мужчина с короткими черными волосами. Он одет в строгий деловой костюм черного цвета. Лицо его гладко выбрито. Холодный взгляд его черных глаз устремлен на вас. Сложив руки на столе, он приветствует вас: "Добро пожаловать на Атлантиду, господин Дрейк. Я Винсент Даркстар, мы уже общались по радио. Я занимаю на Атлантиде пост начальника службы безопаности". ]]; - elseif (atl_fta_state == 2) then - psub("fta"); + elseif (atl_fta_state == 2 or atl_fta_state == 3) and not atl_fta_darkstar_debrief then + atl_fta_darkstar_debrief = true; + psub("fta"); return [[Винсент Даркстар приказывает: "Рассказывайте". ]]; + elseif (atl_lfc_state == 3 or atl_lfc_state == 4) then + if (atl_lfc_state == 3) then + atl_lfc_state = 4; + local r = 0; + if (atl_rep_darkstar >= 0) then r = r + 1; end; + if (atl_rep_svetlova >= 0) then r = r + 1; end; + if (atl_rep_moreau >= 0) then r = r + 1; end; + if (atl_rep_wright >= 0) then r = r + 1; end; + atl_lfc_court_allowed = r > 0; + end; + if (atl_lfc_court_allowed) then + psub("lfc_ending_court"); + if atl_lfc_goldman_exposed then + if leroy_state == 4 then + pon("goldman_only"); + return [[Винсент Даркстар сообщает вам: "Дрейк. В ближайшее время мы будем решать, что делать с саботажником. Я рекомендую вам поговорить с руководителями станции, после чего возвращайтесь и мы приступим к совещанию". ]]; + else + pon("leroy_and_goldman"); + if (atl_lfc_leroy_goldman) then + return [[Винсент Даркстар сообщает вам: "Дрейк. Леруа сдал еще одного человека, замешанного в саботаже -- Леонарда Голдмана. В ближайшее время мы будем решать, что делать с саботажниками. Я рекомендую вам поговорить с руководителями станции, после чего возвращайтесь и мы приступим к совещанию". ]]; + else + return [[Винсент Даркстар сообщает вам: "Дрейк. В ближайшее время мы будем решать, что делать с саботажниками. Я рекомендую вам поговорить с руководителями станции, после чего возвращайтесь и мы приступим к совещанию". ]]; + end; + end; + else + pon("leroy_only"); + return [[Винсент Даркстар сообщает вам: "Дрейк. В ближайшее время мы будем решать, что делать с саботажником. Я рекомендую вам поговорить с руководителями станции, после чего возвращайтесь и мы приступим к совещанию". ]]; + end; + else + atl_lfc_state = 5; + psub("generic"); + if (atl_lfc_goldman_exposed) then + return [[Винсент Даркстар сообщает вам: "Дрейк. Вы отлично помогли в поимке саботажников. Выражаю вам свою благодарность. Советом станции было принято решение заключить их под стражу на неопределенный срок. Моро сказал, что хочет с вами поговорить, так что отправляйтесь к нему". ]]; + end; + end; else psub("generic"); return [[Винсент Даркстар сообщает: "Я слушаю". ]]; end; end; phr = { + {tag="lfc_ending_court"}; + {tag="goldman_only", false, always = true, "Какое наказание ждет подсудимого?", [[Даркстар отвечает: "Я бы расстрелял его на месте, но я не могу принимать решения единолично". ]]}; + {tag="leroy_and_goldman", false, always = true, "Какое наказание ждет подсудимых?", [[Даркстар отвечает: "Я бы расстрелял их на месте, но я не могу принимать решения единолично". ]]}; + {tag="leroy_only", false, always = true, "Какое наказание ждет подсудимого?", [[Даркстар отвечает: "Я бы расстрелял его на месте, но я не могу принимать решения единолично". ]]}; + {always = true, "Я готов.", function(s) + atl_lfc_state = 5; + if atl_lfc_goldman_exposed then + pr([[Даркстар поднимает трубку, поворачивает наборный диск, ждет немного и сообщает: "Моро, Светлова, Райт. Жду вас в своем кабинете". ^^]]); + else + pr([[Даркстар поднимает трубку, поворачивает наборный диск, ждет немного и сообщает: "Моро, Светлова, Райт. Жду вас в своем кабинете". ^^]]); + end; + walk("atl_lfc_court"); + end}; + {always = true, "Я вернусь когда буду готов.", function(s) + back(); + return [[Даркстар кивает: "Я жду". ]]; + end}; {tag="lfc_warning"}; {always = true, "Так точно.", [[Даркстар кивает: "Отлично. Вам нужно что-то еще?"]], code[[ atl_lfc_panic_warning = 3; psub("generic")]]}; {tag="first_meeting"}; {"Что мне нужно сделать, чтобы мне вернули Левиафан?", [[Винсент Даркстар хлопает ладонями о стол и уверенно сообщает: "Вести себя хорошо и не делать глупостей". ]]}; {"Когда мне вернут Левиафан?", [[Винсент Даркстар отвечает: "Всему свое время. Используйте это время с пользой. Если хотите найти Уильяма, сначала стоит выяснить где и как его искать. И вам не помешает узнать кое-что помимо этого". ]]}; - {"Я пришел кое-что спросить. ", [[Винсент Даркстар сообщает :"Я слушаю". ]], code [[psub("generic");]]}; + {"Я пришел кое-что спросить. ", [[Винсент Даркстар сообщает: "Я слушаю". ]], code [[psub("generic");]]}; {tag="ask_more"}; {tag="on_drake", false, "Расскажите об Уильяме. ", function() if (atl_rep_darkstar < 0) then @@ -141,7 +208,7 @@ char_darkstar_dlg = dlg { return [[Винсент Даркстар отвечает: "Мне нечего вам сказать". ]]; else char_darkstar.leroy_asked = 2; - return [[Винсент Даркстар отвечает: "Леруа много знает об устройстве Атлантиды и он открыто выступает в пользу закрытия станции и возвращения на поверхность. Он не выглядит настолько глупым, чтобы саботировать работу станции, однако он один из немногих подпадающих под подозрение. Вообще-то, интересоваться сотрудниками Атлантиды - моя работа, а не ваша". ]]; + return [[Винсент Даркстар отвечает: "Леруа много знает об устройстве Атлантиды и он открыто выступает в пользу закрытия станции и возвращения на поверхность. Он не выглядит настолько глупым, чтобы саботировать работу станции, однако он один из немногих подпадающих под подозрение. Вообще-то, интересоваться сотрудниками Атлантиды -- моя работа, а не ваша". ]]; end; end}; {tag="on_jones", false, "Что вы думаете о Чарли Джонсе? ", function() @@ -150,7 +217,7 @@ char_darkstar_dlg = dlg { return [[Винсент Даркстар отвечает: "Мне нечего вам сказать". ]]; else char_darkstar.jones_asked = 2; - return [[Винсент Даркстар отвечает: "Джонс много знает об устройстве Атлантиды и он открыто выступает в пользу закрытия станции и возвращения на поверхность. Он недостаточно смел, чтобы попытаться саботировать работу станции, однако он один из немногих попадающих под подозрение. Вообще-то, интересоваться сотрудниками Атлантиды - моя работа, а не ваша". ]]; + return [[Винсент Даркстар отвечает: "Джонс много знает об устройстве Атлантиды и он открыто выступает в пользу закрытия станции и возвращения на поверхность. Он недостаточно смел, чтобы попытаться саботировать работу станции, однако он один из немногих попадающих под подозрение. Вообще-то, интересоваться сотрудниками Атлантиды -- моя работа, а не ваша". ]]; end; end}; {tag="on_goldman", false, "Что вы думаете о Леонарде Голдмане? ", function() @@ -159,7 +226,7 @@ char_darkstar_dlg = dlg { return [[Винсент Даркстар отвечает: "Мне нечего вам сказать". ]]; else char_darkstar.goldman_asked = 2; - return [[Винсент Даркстар отвечает: "Голдман много знает об устройстве Атлантиды и он открыто выступает в пользу закрытия станции и возвращения на поверхность. Он эмоционально неуравновешен. Если бы он устроил аварию, он бы уже выдал себя. Однако, он один из немногих, кому хватает знаний, чтобы спланировать саботаж. Вообще-то, интересоваться сотрудниками Атлантиды - моя работа, а не ваша". ]]; + return [[Винсент Даркстар отвечает: "Голдман много знает об устройстве Атлантиды и он открыто выступает в пользу закрытия станции и возвращения на поверхность. Он эмоционально неуравновешен. Если бы он устроил аварию, он бы уже выдал себя. Однако, он один из немногих, кому хватает знаний, чтобы спланировать саботаж. Вообще-то, интересоваться сотрудниками Атлантиды -- моя работа, а не ваша". ]]; end; end}; {tag="on_atlantis", false, "Расскажите об Атлантиде. ", function() @@ -168,7 +235,7 @@ char_darkstar_dlg = dlg { return [[Винсент Даркстар отвечает: "Мне нечего вам сказать". ]]; else char_darkstar.atlantis_asked = 2; - return [[Винсент Даркстар отвечает: "Атлантида построена на средства Вестхейвен Трансоушен -- компании вашего отца. Майкл Райт -- создатель станции, многое продумал, существенно облегчив мне работу. Конечно, периодически, мне приходится иметь дело с нарушениями правил -- я неоднократно просил не загромоздать коридоры; всегда закрывать за собой шлюзы, двери, щитки, панели; не перекрывать посторонними предметами доступ к важным узлам станции. Думаю, вы сами заметили, как исполняются эти указания". ]]; + return [[Винсент Даркстар отвечает: "Атлантида построена на средства Вестхейвен Трансоушен -- компании вашего отца. Майкл Райт -- создатель станции, многое продумал, существенно облегчив мне работу. Конечно, периодически, мне приходится иметь дело с нарушениями правил -- я неоднократно просил не загромождать коридоры; всегда закрывать за собой шлюзы, двери, щитки, панели; не перекрывать посторонними предметами доступ к важным узлам станции. Думаю, вы сами заметили, как исполняются эти указания". ]]; end; end}; {tag="on_navjiarr", false, "Что вы думаете о навьярах? ", function() @@ -212,25 +279,60 @@ char_darkstar_dlg = dlg { return [[Винсент Даркстар отвечает: "Он будет создавать проблемы. Это не предположение, это -- факт". ]]; end; end}; - {always=true, "Вернемся к делу.", [[Даркстар кивает: "Слушаю".]], code [[ pret(); ]]}; + {always=true, "Вернемся к делу.", [[Даркстар кивает: "Слушаю".]], code [[ char_darkstar_dlg:reset_more(); pret(); ]]}; {tag="generic"}; - {tag="accuse_goldman", false, "Саботаж - дело рук Голдмана.", [[Даркстар недовольно отчитывает вас: "Во-первых, я вас просил не лезть в это дело. Во-вторых, я бы не был так уверен. В третьих, я еще раз прошу вас больше расследованию не мешать". ]], code [[ atl_lfc_suspect="goldman"; ]]}; - {tag="accuse_leroy", "Саботаж - дело рук Леруа.", [[Даркстар недовольно отчитывает вас: "Во-первых, я вас просил не лезть в это дело. Во-вторых, я бы не был так уверен. В третьих, я еще раз прошу вас больше расследованию не мешать". ]], code [[ atl_lfc_suspect="leroy"; ]]}; - {always=true, "У меня есть несколько вопросов.", [[Даркстар кивает: "Слушаю".]], code [[ psub('ask_more'); ]]}; - {always=true, "Я пойду", [[Даркстар прощается: "До встречи". ]], code [[ back(); ]]}; - {tag="fta"}; + {tag="show_clock_g", "[Показать часы] А еще я нашел там вот это.", [[Даркстар забирает часы и вертит их в руках: "Так-так-так. Франсуа Голдман. Леонард однозначно в этом замешан, но действовал он не один". ]], code [[ + atl_rep_darkstar = atl_rep_darkstar + 1; + atl_lfc_goldman_exposed = true; + remove("item_goldmans_clock", pl); + walkin("atl_lfc_outro_expose_goldman"); + ]]}; + {tag="accuse_saboteur_g", "Голдман признался в саботаже и сдал Леруа... [Пересказать слова Голдмана]", [[Даркстар кивает: "Прекрасно. Вы далеко пойдете, Дрейк". ]], code [[ + atl_rep_darkstar = atl_rep_darkstar + 1; + atl_lfc_goldman_exposed = true; + remove("item_goldmans_clock", pl); + walkin("atl_lfc_outro_expose"); + ]]}; + {tag="accuse_goldman", false, "Саботаж -- дело рук Голдмана.", [[Даркстар недовольно отчитывает вас: "Во-первых, я вас просил не лезть в это дело. Во-вторых, я бы не был так уверен. В третьих, я еще раз прошу вас больше расследованию не мешать". ]], code [[ atl_lfc_suspect="goldman"; ]]}; + {tag="accuse_leroy", false, "Саботаж -- дело рук Леруа.", [[Даркстар недовольно отчитывает вас: "Во-первых, я вас просил не лезть в это дело. Во-вторых, я бы не был так уверен. В третьих, я еще раз прошу вас больше расследованию не мешать". ]], code [[ atl_lfc_suspect="leroy"; ]]}; + {tag="more_questions", "У меня есть несколько вопросов.", [[Даркстар кивает: "Слушаю".]], code [[ psub('ask_more'); ]]}; + {always=true, "Я пойду.", [[Даркстар прощается: "До встречи". ]], code [[ back(); ]]}; + {tag="fta"}; {"Что вы хотите услышать?", [[Даркстар поясняет: "Все, что произошло в Солисе и показалось вам подозрительным". ]]}; - {"Первый взрыв раздался, когда я был у входа в секцию[Кратко пересказать основные события]", [[Даркстар молча кивает. ]]}; - {"Один из клапанов работал неправильно - давление в нем было выше нормы", [[Даркстар с сомнением произносит: "Интересно. За десять лет работы станции такого никогда не было". ]]}; - {tag="clock", "[Показать часы]А еще я нашел там вот это", [[Даркстар забирает часы и вертит их в руках: "Так-так-так. Франсуа Голдман. Леонард однозначно в этом замешан, но действовал он не один. Я все еще думаю, что они попытаются вывести из строя одну из субмарин. Скорее всего их целью будет Наутилус". ]], code [[ atl_lfc_goldman_exposed = true; psub("why_nau"); ]]}; + {"Первый взрыв раздался, когда я был у входа в секцию... [Кратко пересказать основные события]", [[Даркстар молча кивает. ]], code [[ + char_darkstar_dlg.fta = char_darkstar_dlg.fta + 1; + if char_darkstar_dlg.fta == 2 then + psub("fta2"); + end; + ]]}; + {"Один из клапанов работал неправильно: давление в нем было выше нормы.", [[Даркстар с сомнением произносит: "Интересно. За десять лет работы станции такого никогда не было". ]], code [[ + char_darkstar_dlg.fta = char_darkstar_dlg.fta + 1; + if char_darkstar_dlg.fta == 2 then + psub("fta2"); + end; + ]]}; + {tag="show_clock", "[Показать часы] А еще я нашел там вот это.", [[Даркстар забирает часы и вертит их в руках: "Так-так-так. Франсуа Голдман. Леонард однозначно в этом замешан, но действовал он не один.". ]], code [[ + atl_rep_darkstar = atl_rep_darkstar + 1; + atl_lfc_goldman_exposed = true; + remove("item_goldmans_clock", pl); + walkin("atl_lfc_outro_expose_goldman"); + ]]}; + {tag="accuse_saboteur", "Голдман признался в саботаже и сдал Леруа... [Пересказать слова Голдмана]", [[Даркстар кивает: "Прекрасно. Вы далеко пойдете, Дрейк". ]], code [[ + atl_rep_darkstar = atl_rep_darkstar + 1; + atl_lfc_goldman_exposed = true; + remove("item_goldmans_clock", pl); + walkin("atl_lfc_outro_expose"); + ]]}; + {tag="fta2"}; + {"Что-то еще?", [[Даркстар скрещивает руки на груди и откидывается на спинку кресла, продолжая смотреть прямо вам в глаза. Он подтверждает: "Да, Дрейк. Мне понадобится ваша помощь. Я все еще считаю, что следующей целью саботажника станет Наутилус". ]], code [[ psub("why_nau"); ]]}; {tag="why_nau"}; - {"Почему именно Наутилус?", [[Даркстар объясняет:"Саботажник хочет не убить всех, а поломать станцию. Он хочет наверх, а не умереть здесь. Наутилус - субмарина малого радиуса, а Энтерпрайз и Левиафан способны доставить нас на континенты". ]]}; - {"Соглашусь с вашим предположением", [[Даркстар кивает: "Хорошо. Я попрошу вас помочь мне с этим заданием". ]], code [[ psub("lfc_help"); ]]}; - {"Мне кажется, целью будет другая субмарина", [[Даркстар кивает: "Я это учел. Мы будем следить за всеми доками. Также, я попрошу вас помочь мне с этим заданием". ]], code [[ psub("lfc_help"); ]]}; + {"Почему именно Наутилус?", [[Даркстар объясняет:"Саботажник хочет не убить всех, а поломать станцию. Он хочет наверх, а не умереть здесь. Наутилус -- субмарина малого радиуса, а Энтерпрайз и Левиафан способны доставить нас на континенты". ]]}; + {"Соглашусь с вашим предположением.", [[Даркстар кивает: "Хорошо. Я попрошу вас помочь мне с этим заданием". ]], code [[ psub("lfc_help"); ]]}; + {"Мне кажется, целью будет другая субмарина.", [[Даркстар кивает: "Я это учел. Мы будем следить за всеми доками. Также, я попрошу вас помочь мне с этим заданием". ]], code [[ psub("lfc_help"); ]]}; {tag="lfc_help"}; {"Почему я?", [[Даркстар объясняет:"Я хочу свести количество людей, знающих о саботажах к минимуму, а вы уже в курсе ситуации". ]]}; - {"Что я должен сделать?", [[Даркстар рассказывает:"В семь часов вечера вы отправляетесь в док Наутилуса и наблюдаете за происходящим в течение ночи. Если вы замечаете что-то подозрительное - принимаете меры на ваше усмотрение", -- Даркстар достает из ящика стола револьвер и кладет перед вами: "Это вам не помешает". - ]], code [[ + {"Что я должен сделать?", [[Даркстар рассказывает:"Сейчас отправляетесь в док Наутилуса и наблюдаете за происходящим в течение ночи. Если вы замечаете что-то подозрительное -- принимаете меры на ваше усмотрение", -- Даркстар достает из ящика стола револьвер и кладет перед вами: "Это вам не помешает". ]], code [[ + remove(item_colt, "leviathan_captains_cabin"); take(item_colt); atl_lfc_state = 2; back(); @@ -242,46 +344,89 @@ char_moreau_dlg = dlg { var { state = 0; lfc_dialog = false; + lfc_out_dialog = false; + lfc_goldman_imprison = 0; + lfc_goldman_banish = 1; + lfc_leroy_imprison = 0; + lfc_leroy_banish = 1; }; nam = "Фредерик Моро"; disp = "Фредерик Моро"; - entered = function(s) + reset_more = function(s) + poff("on_drake", "on_black", "on_darkstar", "on_svetlova", "on_moreau", "on_wright", "on_leroy", "on_jones", "on_goldman", "on_atlantis", "on_navjiarr", "on_learr", "on_ryveerr", "on_aikerjarr", "more_questions"); + + if (atl_rep_moreau < 0) then + if (char_moreau.drake_asked == 0) then pon("on_drake"); pon("more_questions"); end; + if (char_moreau.black_asked == 0) then pon("on_black"); pon("more_questions"); end; + if (char_moreau.darkstar_asked == 0) then pon("on_darkstar"); pon("more_questions"); end; + if (char_moreau.svetlova_asked == 0) then pon("on_svetlova"); pon("more_questions"); end; + if (char_moreau.moreau_asked == 0) then pon("on_moreau"); pon("more_questions"); end; + if (char_moreau.wright_asked == 0) then pon("on_wright"); pon("more_questions"); end; + + if (atl_iof_completed) then + if (char_moreau.leroy_asked == 0) then pon("on_leroy"); pon("more_questions"); end; + if (char_moreau.jones_asked == 0) then pon("on_jones"); pon("more_questions"); end; + if (char_moreau.goldman_asked == 0) then pon("on_goldman"); pon("more_questions"); end; + end; + + if (char_moreau.atlantis_asked == 0) then pon("on_atlantis"); pon("more_questions"); end; + + + if (char_moreau.navjiarr_asked == 0) then pon("on_navjiarr"); pon("more_questions"); end; + if (char_moreau.learr_asked == 0) then pon("on_learr"); pon("more_questions"); end; + if (char_moreau.ryveerr_asked == 0) then pon("on_ryveerr"); pon("more_questions"); end; + if (atl_iof_learr_dead and char_moreau.aikerjarr_asked == 0) then pon("on_aikerjarr"); pon("more_questions"); end; + else + if char_moreau.drake_asked < 2 then pon("on_drake"); pon("more_questions"); end; + if char_moreau.black_asked < 2 then pon("on_black"); pon("more_questions"); end; + if char_moreau.darkstar_asked < 2 then pon("on_darkstar"); pon("more_questions"); end; + if char_moreau.svetlova_asked < 2 then pon("on_svetlova"); pon("more_questions"); end; + if char_moreau.moreau_asked < 2 then pon("on_moreau"); pon("more_questions"); end; + if char_moreau.wright_asked < 2 then pon("on_wright"); pon("more_questions"); end; + if atl_iof_completed then + if char_moreau.leroy_asked < 2 then pon("on_leroy"); pon("more_questions"); end; + if char_moreau.jones_asked < 2 then pon("on_jones"); pon("more_questions"); end; + if char_moreau.goldman_asked < 2 then pon("on_goldman"); pon("more_questions"); end; + end; + + if (char_moreau.atlantis_asked < 2) then pon("on_atlantis"); pon("more_questions"); end; + + if (char_moreau.navjiarr_asked < 2) then pon("on_navjiarr"); pon("more_questions"); end; + if (char_moreau.learr_asked < 2) then pon("on_learr"); pon("more_questions"); end; + if (atl_iof_learr_dead and char_moreau.learr_asked < 3) then pon("on_learr"); pon("more_questions"); end; + if (char_moreau.ryveerr_asked < 2) then pon("on_ryveerr"); pon("more_questions"); end; + if (atl_iof_learr_dead and char_moreau.aikerjarr_asked < 2) then pon("on_aikerjarr"); pon("more_questions"); end; + end; + end; + enter = function(s) if (atl_lfc_panic_warning == 2 and atl_lfc_panic == 2 and atl_lfc_state == 1) then psub("lfc_warning"); return [[Фредерик Моро сообщает вам: "Месье Дрейк, добрый день. Винсент Даркстар просил вас срочно поговорить с ним". ]]; end; - - if (atl_lfc_state == 3) then - atl_lfc_state = 4; - atl_lev_state = 1; - local reputation = 0; - if (atl_rep_darkstar > 0) then - reputation = reputation + 1; - end; - if (atl_rep_moreau > 0) then - reputation = reputation + 1; - end; - if (atl_rep_svetlova > 0) then - reputation = reputation + 1; - end; - if (atl_rep_wright > 0) then - reputation = reputation + 1; - end; - - if (reputation > 2 and atl_rep_moreau >= 0) then - psub("lfc_debrief_good"); - return [[Фредерик Моро приветствует вас: "Месье Дрейк, добрый день. Вы очень помогли нам в поимке саботажника. Огромное спасибо. Посовещавшись, мы решили вернуть вам Левиафан. Также, вы можете посещать Атлантиду в любое удобное для вас время -- мы всегда будем рады вас видеть". ]]; - elseif (reputation > 2) then - psub("lfc_debrief_good"); - return [[Фредерик Моро приветствует вас: "Месье Дрейк, добрый день. Вы очень помогли нам в поимке саботажника. Посовещавшись, мы решили вернуть вам Левиафан. Также, мы решили не запрещать вам доступ на Атлантиду, но не думайте, что я рад вас видеть". ]]; - elseif (atl_rep_moreau >= 0) then - psub("lfc_debrief_bad"); - return [[Фредерик Моро приветствует вас: "Месье Дрейк, добрый день. Вы очень помогли нам в поимке саботажника. Огромное спасибо. Посовещавшись, мы решили вернуть вам Левиафан. К сожалению, совет решил ограничить вам доступ к станции, поэтому я прошу вас покинуть Атлантиду как можно скорее". ]]; - else - psub("lfc_debrief_bad"); - return [[Фредерик Моро приветствует вас: "Месье Дрейк, добрый день. Вы очень помогли нам в поимке саботажника. Посовещавшись, мы решили вернуть вам Левиафан. Убирайтесь и больше не возвращайтесь сюда". ]]; - end; - end; + + if atl_lfc_state == 4 then + if not s.lfc_out_dialog then + s.lfc_out_dialog = true; + if atl_rep_moreau >= 0 then + if atl_lfc_goldman_exposed then + poff("leroy"); + else + poff("both", "goldman_1", "goldman_2", "goldman_3", "goldman_4", "goldman_5", "goldman_6", "goldman_7"); + end; + psub("lfc_saboteur"); + return [[Фредерик Моро приветствует вас: "Месье Дрейк, добрый день. Даркстар сказал, что вы зайдете, чтобы обсудить поимку саботажников. Я вас слушаю". ]]; + else + psub("generic"); + return [[Фредерик Моро приветствует вас: "Месье Дрейк, добрый день. Даркстар сказал, что вы зайдете. Я не буду с вами ничего обсуждать, хоть совет и решил, что вы примете участие в суде". ]]; + end; + end; + elseif (atl_lfc_state == 5) then + atl_lfc_state = 6; + atl_lev_state = 1; + + psub("gratitude"); + return [[Фредерик Моро приветствует вас: "Месье Дрейк, добрый день. Вы помогли нам с поимкой саботажника и мы приняли решение дать вам доступ к Левиафану. Он по-прежнему ждет вас в гостевом доке А секции Аква. Мы предоставм вам все необходимое, чтобы помочь в поисках отца. В настоящий момент Левиафан должен быть готов к отплытию". ]]; + end; if (atl_lfc_state == 1 and not s.lfc_dialog) then s.lfc_dialog = true; @@ -290,57 +435,13 @@ char_moreau_dlg = dlg { poff('sabotage', 'ignis_what'); end; - poff("on_drake", "on_black", "on_darkstar", "on_svetlova", "on_moreau", "on_wright", "on_leroy", "on_jones", "on_goldman", "on_atlantis", "on_navjiarr", "on_learr", "on_ryveerr", "on_aikerjarr"); - - if (atl_rep_moreau < 0) then - if (char_moreau.drake_asked == 0) then pon("on_drake"); end; - if (char_moreau.black_asked == 0) then pon("on_black"); end; - if (char_moreau.darkstar_asked == 0) then pon("on_darkstar"); end; - if (char_moreau.svetlova_asked == 0) then pon("on_svetlova"); end; - if (char_moreau.moreau_asked == 0) then pon("on_moreau"); end; - if (char_moreau.wright_asked == 0) then pon("on_wright"); end; - - if (atl_iof_completed) then - if (char_moreau.leroy_asked == 0) then pon("on_leroy"); end; - if (char_moreau.jones_asked == 0) then pon("on_jones"); end; - if (char_moreau.goldman_asked == 0) then pon("on_goldman"); end; - end; - - if (char_moreau.atlantis_asked == 0) then pon("on_atlantis"); end; - - - if (char_moreau.navjiarr_asked == 0) then pon("on_navjiarr"); end; - if (char_moreau.learr_asked == 0) then pon("on_learr"); end; - if (char_moreau.ryveerr_asked == 0) then pon("on_ryveerr"); end; - if (atl_iof_learr_dead and char_moreau.aikerjarr_asked == 0) then pon("on_aikerjarr"); end; - else - if (char_moreau.drake_asked < 2) then pon("on_drake"); end; - if (char_moreau.black_asked < 2) then pon("on_black"); end; - if (char_moreau.darkstar_asked < 2) then pon("on_darkstar"); end; - if (char_moreau.svetlova_asked < 2) then pon("on_svetlova"); end; - if (char_moreau.moreau_asked < 2) then pon("on_moreau"); end; - if (char_moreau.wright_asked < 2) then pon("on_wright"); end; - - if (atl_iof_completed) then - if (char_moreau.leroy_asked < 2) then pon("on_leroy"); end; - if (char_moreau.jones_asked < 2) then pon("on_jones"); end; - if (char_moreau.goldman_asked < 2) then pon("on_goldman"); end; - end; - - if (char_moreau.atlantis_asked < 2) then pon("on_atlantis"); end; - - if (char_moreau.navjiarr_asked < 2) then pon("on_navjiarr"); end; - if (char_moreau.learr_asked < 2) then pon("on_learr"); end; - if (atl_iof_learr_dead and char_moreau.learr_asked < 3) then pon("on_learr"); end; - if (char_moreau.ryveerr_asked < 2) then pon("on_ryveerr"); end; - if (atl_iof_learr_dead and char_moreau.aikerjarr_asked < 2) then pon("on_aikerjarr"); end; - end; + s:reset_more(); if (s.state == 0) then s.state = 1; psub("first_meeting"); - return [[За столом перед вами сидит немолодой мужчина. Кудрявые седые волосы обрамляют его лицо. Он носит длинные седые усы. Одет человек в строгий деловой костюм бежевого цвета. Его серые глаза, скрытые очками, внимательно рассматривают вас. Вертя в руках перо он приветствует вас: "Добро пожаловать на Атлантиду, месье Дрейк. Мое имя - Фредерик Моро и я исполняю обязанности начальника станции в отсутствие Уильяма и Адриана. Ваше прибытие крайне удивило нас - мы думали, с поверхности найти нашу станцию невозможно. Пока мы думаем, что делать с вами дальше, вы можете воспользоваться ресурсами станции, чтобы узнать побольше о вашем отце и, быть может, понять, куда в точности он направился. Для начала, стоит немного ввести вас в курс дела".^ - Моро подходит к книжной полке и берет какую-то книгу. Вернувшись за стол, он раскрывает ее и приступает к рассказу: "Когда мы строили Надежду, нашей целью было создать быстрый и безопасный способ путешествий через Атлантику. Однако, все с самого начала пошло не так, как планировалось. Мы встретили племя подводных существ, именующих себя навьярами - они похожи на рыб и людей одновременно - ходят на двух ногах, используют две руки, но покрыты чешуей и имеют жабры. Тогда мы приняли решение исследовать их тщательнее. Были построены Энтерпрайз, Наутилус и сама Атлантида. Потом мы переселились сюда. Дрейк был захвачен одной из легенд этих рыбней и не так давно, наконец, решился отправиться в экспедицию". ]]; + return [[За столом перед вами сидит немолодой мужчина. Кудрявые седые волосы обрамляют его лицо. Он носит длинные седые усы. Одет человек в строгий деловой костюм бежевого цвета. Его серые глаза, скрытые очками, внимательно рассматривают вас. Вертя в руках перо он приветствует вас: "Добро пожаловать на Атлантиду, месье Дрейк. Мое имя -- Фредерик Моро, и я исполняю обязанности начальника станции в отсутствие Уильяма и Адриана. Ваше прибытие крайне удивило нас -- мы думали, с поверхности найти нашу станцию невозможно. Пока мы думаем, что делать с вами дальше, вы можете воспользоваться ресурсами станции, чтобы узнать побольше о вашем отце и, быть может, понять, куда в точности он направился. Для начала, стоит немного ввести вас в курс дела".^ + Моро подходит к книжной полке и берет какую-то книгу. Вернувшись за стол, он раскрывает ее и приступает к рассказу: "Когда мы строили Надежду, нашей целью было создать быстрый и безопасный способ путешествий через Атлантику. Однако, все с самого начала пошло не так, как планировалось. Мы встретили племя подводных существ, именующих себя навьярами -- они похожи на рыб и людей одновременно -- ходят на двух ногах, используют две руки, но покрыты чешуей и имеют жабры. Тогда мы приняли решение исследовать их тщательнее. Были построены Энтерпрайз, Наутилус и сама Атлантида. Потом мы переселились сюда. Дрейк был захвачен одной из легенд этих рыбней и не так давно, наконец, решился отправиться в экспедицию". ]]; elseif (char_moreau.iof_reaction == 0 and atl_iof_completed) then char_moreau.iof_reaction = 1; if (atl_iof_learr_dead) then @@ -359,8 +460,63 @@ char_moreau_dlg = dlg { end; end; phr = { + {tag="gratitude"}; + {"Благодарю.", [[Моро говорит: "Вы хотите обсудить какие-то вопросы?"]], code [[psub("generic");]]}; + {tag="lfc_saboteur"}; + {tag="both","Что вы будете делать с саботажниками?", [[Фредерик Моро выдерживает паузу, после чего отвечает: "Я предлагаю высадить их где-нибудь в Северной Америке. На станции им не место". ]]}; + {tag="goldman_1", "Одному сумасшедшему никто не поверит, Голдмана стоит отпустить. ", [[Фредерик Моро кивает: "Я с вами полностью согласен". ]], code [[ + poff("goldman_1", "goldman_2", "goldman_3", "goldman_4", "goldman_5", "goldman_6", "goldman_7"); + ]]}; + {tag="goldman_2", "Голдман -- трус. Он никому ничего не скажет. Его можно отправить на поверхность. ", [[Фредерик Моро кивает: "Поэтому я и предлагаю изгнать его". ]], code [[ + poff("goldman_1", "goldman_2", "goldman_3", "goldman_4", "goldman_5", "goldman_6", "goldman_7"); + ]]}; + {tag="goldman_3", "Голдман хитер. На станции он представляет большую опасность, чем вне ее. ", [[Фредерик Моро пожимает плечами: "Не могу согласиться с вами. Голдман никогда не показывал себя с этой стороны". ]], code [[ + poff("goldman_1", "goldman_2", "goldman_3", "goldman_4", "goldman_5", "goldman_6", "goldman_7"); + ]]}; + {tag="goldman_4", "Голдман просто хотел выбраться отсюда. Пусть убирается с Атлантиды. ", [[Фредерик Моро кивает: "Это заставляет меня пересмотреть мое решение". ]], code [[ + char_moreau_dlg.lfc_goldman_imprison = 1; + poff("goldman_1", "goldman_2", "goldman_3", "goldman_4", "goldman_5", "goldman_6", "goldman_7"); + ]]}; + {tag="goldman_5", "Отпускать Голдмана на поверхность нельзя. Единственный выход -- смертная казнь. ", [[Фредерик Моро отрицательно качает головой: "Что бы ни сделал Голдман, это неприемлемо". ]], code [[ + atl_rep_moreau = atl_rep_moreau - 1; + poff("goldman_1", "goldman_2", "goldman_3", "goldman_4", "goldman_5", "goldman_6", "goldman_7"); + ]]}; + {tag="goldman_6", "Голдман подверг опасности все наше дело. Единственный выход -- смертная казнь. ", [[Фредерик Моро отрицательно качает головой: "Что бы ни сделал Голдман, это неприемлемо". ]], code [[ + atl_rep_moreau = atl_rep_moreau - 1; + poff("goldman_1", "goldman_2", "goldman_3", "goldman_4", "goldman_5", "goldman_6", "goldman_7"); + ]]}; + {tag="goldman_7", "Голдман хитер. Вне станции он будет не менее опасен, чем на ней. ", [[Фредерик Моро пожимает плечами: "Не могу согласиться с вами. Голдман никогда не показывал себя с этой стороны". ]], code [[ + poff("goldman_1", "goldman_2", "goldman_3", "goldman_4", "goldman_5", "goldman_6", "goldman_7"); + ]]}; + {tag="leroy", "Что вы будете делать с саботажником?", [[Фредерик Моро выдерживает паузу, после чего отвечает: "Я предлагаю высадить его где-нибудь в Северной Америке. На станции им не место". ]]}; + {tag="leroy_1", "Одному сумасшедшему никто не поверит, Леруа стоит отпустить. ", [[Фредерик Моро кивает: "Я с вами полностью согласен". ]], code [[ + poff("leroy_1", "leroy_2", "leroy_3", "leroy_4", "leroy_5", "leroy_6", "leroy_7"); + ]]}; + {tag="leroy_2", "Леруа -- трус. Он никому ничего не скажет. Его можно отправить на поверхность. ", [[Фредерик Моро пожимает плечами: "Никак не могу согласиться с вами. Я могу назвать Мишеля кем угодно, но только не трусом". ]], code [[ + poff("leroy_1", "leroy_2", "leroy_3", "leroy_4", "leroy_5", "leroy_6", "leroy_7"); + ]]}; + {tag="leroy_3", "Леруа хитер. На станции он представляет большую опасность, чем вне ее. ", [[Фредерик Моро кивает: "Поэтому я и предлагаю изгнать его". ]], code [[ + poff("leroy_1", "leroy_2", "leroy_3", "leroy_4", "leroy_5", "leroy_6", "leroy_7"); + ]]}; + {tag="leroy_4", "Леруа просто хотел выбраться отсюда. Пусть убирается с Атлантиды. ", [[[Фредерик Моро отрицательно качает головой: "Это заставляет меня пересмотреть мое решение". ]], code [[ + char_moreau_dlg.lfc_goldman_imprison = 1; + poff("leroy_1", "leroy_2", "leroy_3", "leroy_4", "leroy_5", "leroy_6", "leroy_7"); + ]]}; + {tag="leroy_5", "Отпускать Леруа на поверхность нельзя. Единственный выход -- смертная казнь. ", [[Фредерик Моро отрицательно качает головой: "Что бы ни сделал Леруа, это неприемлемо". ]], code [[ + atl_rep_moreau = atl_rep_moreau - 1; + poff("leroy_1", "leroy_2", "leroy_3", "leroy_4", "leroy_5", "leroy_6", "leroy_7"); + ]]}; + {tag="leroy_6", "Леруа подверг опасности все наше дело. Единственный выход -- смертная казнь. ", [[Фредерик Моро отрицательно качает головой: "Что бы ни сделал Леруа, это неприемлемо". ]], code [[ + atl_rep_moreau = atl_rep_moreau - 1; + poff("leroy_1", "leroy_2", "leroy_3", "leroy_4", "leroy_5", "leroy_6", "leroy_7"); + ]]}; + {tag="leroy_7", "Леруа хитер. Вне станции он будет не менее опасен, чем на ней. ", [[Фредерик Моро кивает: "Соглашусь с вами. Лучше пусть посидит взаперти пока. А когда вернется Уильям, мы решим, что делать с ними". ]], code [[ + char_moreau_dlg.lfc_goldman_imprison = 1; + poff("leroy_1", "leroy_2", "leroy_3", "leroy_4", "leroy_5", "leroy_6", "leroy_7"); + ]]}; + {"Это все, что я хотел обсудить по данному вопросу. ", [[Фредерик Моро кивает и спрашивает: "Что-нибудь еще?"]], code [[ psub("generic");]] }; {tag="lfc_warning"}; - {always = true, "Я пойду", [[Моро прощается с вами: "До встречи, месье Дрейк". ]], code [[ back(); ]]}; + {always = true, "Я пойду.", [[Моро прощается с вами: "До встречи, месье Дрейк". ]], code [[ back(); ]]}; {tag="iof_learr_dead"}; {"Я ничего не мог сделать. ", [[Фредерик Моро кивает: "Я понимаю". Немного помолчав он говорит: "Давайте к делу". ]], code [[psub("generic");]]}; {"Давайте к делу. ", [[Фредерик Моро неодобрительно кивает: "Слушаю". ]], code [[ @@ -373,10 +529,9 @@ char_moreau_dlg = dlg { {"Рад, что никто не пострадал. ", [[Фредерик моро кивает: "Перейдем к делу". ]], code [[psub("generic");]]}; {tag="first_meeting", empty = code[[ psub("generic"); ]]}; {"Я не имею намерения раскрывать существование Атлантиды.", [[Фредерик Моро кивает: "Рад это слышать, но нам нужно больше чем ваши слова". ]]}; - {"Что за навьяры?", [[Фредерик Моро отвечает: _"Na'vji'a'rr -- с их языка это переводится, как ,,Живущие в глубинах''. Как я сказал, они чем-то похожи на людей, но по сути своей они -- рыбы. Подробнее о них вам стоит поговорить с нашими учеными в секции Окулус. Там же вы можете встретить Ривеерра и Леарр -- наших гостей из двух ближайших поселений навьяров"_. ]]}; - {"Как получилось, что Левиафан остался на поверхности?", [[Фредерик Моро задумчиво чешет подбородок. Через некоторое время он отвечает: _"Сложно сказать. Это было в ведении Майкла Райта. Скорее всего -- они с Дрейком сознательно спрятали его"_. - ]]}; - {"Куда конкретно направился Уильям?", [[Фредерик Моро вздыхает: "У нас нет точных данных. И похоже их не было и у Блэка с Дрейком. Мы знаем, что их цель - древний навьярский город". ]]}; + {"Что за навьяры?", [[Фредерик Моро отвечает: _"Na'vji'a'rr -- с их языка это переводится, как ,,Живущие в глубинах''. Как я сказал, они чем-то похожи на людей, но по сути своей они -- рыбы. Подробнее о них вам смогут нассказать наши ученые в секции Окулус. Там же вы можете встретить Ривеерра и Леарр -- наших гостей из двух ближайших поселений навьяров"_. ]]}; + {"Как получилось, что Левиафан остался на поверхности?", [[Фредерик Моро задумчиво чешет подбородок. Через некоторое время он отвечает: _"Сложно сказать. Это было в ведении Майкла Райта. Скорее всего, они с Дрейком сознательно спрятали его"_. ]]}; + {"Куда конкретно направился Уильям?", [[Фредерик Моро вздыхает: "У нас нет точных данных. И, похоже, их не было и у Блэка с Дрейком. Мы знаем, что их цель -- древний навьярский город". ]]}; {tag="ask_more"}; {tag="on_drake", false, "Расскажите об Уильяме. ", function() if (atl_rep_moreau < 0) then @@ -384,7 +539,7 @@ char_moreau_dlg = dlg { return [[Фредерик Моро отвечает: "Я не хочу говорить об этом сейчас". ]]; else char_moreau.drake_asked = 2; - return [[Фредерик Моро отвечает: "Уильям Дрейк безусловно гениальный предприниматель и грамотный руководитель, однако он не достиг бы таких успехов, если бы работал один. Адриан Блэк всегда помогал ему управлять компанией. Майкл Райт придумал и построил многие суда компании. Уильям всегда понимал важность сотрудников Вестхейвен Трансоушен и оказывал и продолжает оказывать должное уважение всем нам". ]]; + return [[Фредерик Моро отвечает: "Уильям Дрейк, безусловно, гениальный предприниматель и грамотный руководитель, однако он не достиг бы таких успехов, если бы работал один. Адриан Блэк всегда помогал ему управлять компанией. Майкл Райт придумал и построил многие суда компании. Уильям всегда понимал важность сотрудников Вестхейвен Трансоушен и оказывал и продолжает оказывать должное уважение всем нам". ]]; end; end}; {tag="on_black", false, "Расскажите об Адриане Блэке. ", function() @@ -393,7 +548,7 @@ char_moreau_dlg = dlg { return [[Фредерик Моро отвечает: "Я не хочу говорить об этом сейчас". ]]; else char_moreau.black_asked = 2; - return [[Фредерик Моро отвечает: "Адриан Блэк -- один из основателей Вестхейвен Трансоушен. Он совсем не похож на Уильяма -- осторожный и рассчетливый, он часто вступал в спор с Дрейком по поводу особенно рискованных предприятий. Ему мы тоже многим обязаны, но, если говорить честно, Уильям был гораздо популярнее среди сотрудников". ]]; + return [[Фредерик Моро отвечает: "Адриан Блэк -- один из основателей Вестхейвен Трансоушен. Он совсем не похож на Уильяма -- осторожный и рассчетливый, он часто вступал в спор с Дрейком по поводу особенно рискованных предприятий. Ему мы тоже многим обязаны, но, если говорить честно, Уильям гораздо популярнее среди сотрудников". ]]; end; end}; {tag="on_darkstar", false, "Расскажите о Винсенте Даркстаре. ", function() @@ -402,7 +557,7 @@ char_moreau_dlg = dlg { return [[Фредерик Моро отвечает: "Я не хочу говорить об этом сейчас". ]]; else char_moreau.darkstar_asked = 2; - return [[Фредерик Моро отвечает: "О нем мало что известно, да он и неразговорчив. Впрочем он справляется со своими обязанностями и Дрейк доверяет ему". ]]; + return [[Фредерик Моро отвечает: "О нем мало что известно, да он и неразговорчив. Впрочем, он справляется со своими обязанностями, и Дрейк доверяет ему". ]]; end; end}; {tag="on_svetlova", false, "Расскажите о Екатерине Светловой. ", function() @@ -411,7 +566,7 @@ char_moreau_dlg = dlg { return [[Фредерик Моро отвечает: "Я не хочу говорить об этом сейчас". ]]; else char_moreau.svetlova_asked = 2; - return [[Фредерик Моро отвечает: "Екатерина здесь только из-за навьяров. Ваш отец пригласил ее в Вестхейвен Трансоушен сразу после первой экспедиции Надежды. Сейчас она руководит исследованиями на Атлантиде. Она может показаться вам циничной, но, поверьте, это не вполне так". ]]; + return [[Фредерик Моро отвечает: "Екатерина здесь только из-за навьяров. Ваш отец пригласил ее в Вестхейвен Трансоушен сразу после первой экспедиции Надежды. Сейчас она руководит исследованиями на Атлантиде и отлично справляется благодаря личной заинтересованности в этом". ]]; end; end}; {tag="on_moreau", false, "Расскажите о себе. ", function() @@ -474,7 +629,7 @@ char_moreau_dlg = dlg { return [[Фредерик Моро отвечает: "Я не хочу говорить об этом сейчас". ]]; else char_moreau.navjiarr_asked = 2; - return [[Фредерик Моро отвечает: "Интересные существа. Наши ученые говорят, что они ближе к рыбам, чем к кому бы то ни было еще. Однако, они ходят на двух ногах, имеют руки, и способны дышать воздухом! Более подробно вам лучше говорить с учеными, не со мной, -- он делает небольшую паузу, -- Атлантида обязана им своим существованием. Если бы мы не встретили их при первой экспедиции, вряд ли кто-то стал бы строить эту станцию, тем более здесь. Первое время они создавали нам проблемы, но, к счастью, нам удалось их разрешить и наладить отношения с ними. Двое из них сейчас находятся на станции и вы можете погвоорить с ними". ]]; + return [[Фредерик Моро отвечает: "Интересные существа. Наши ученые говорят, что они ближе к рыбам, чем к нам. Однако, они ходят на двух ногах, имеют руки, способны дышать воздухом и мыслить! Более подробно вам расскажут ученые, -- он делает небольшую паузу, -- Атлантида обязана им своим существованием. Если бы мы не встретили их при первой экспедиции, вряд ли кто-то стал бы строить эту станцию, тем более здесь. Первое время они создавали нам проблемы, но, к счастью, нам удалось их разрешить и наладить отношения с ними. Сейчас на станции проживают двое навьяров: Леарр и Ривеерр. Думаю, они не откажутся от разговора с вами". ]]; end; end}; {tag="on_learr", false, "Что вы думаете о Леарр?", function() @@ -487,7 +642,7 @@ char_moreau_dlg = dlg { return [[Фредерик Моро тяжело вздыхает: "Ее гибель -- большая потеря для всех нас. Кажется, даже Винсент Даркстар, не способный, как мне казалось на дружеские чувства, относился к ней с некоторой теплотой". ]]; else char_moreau.learr_asked = 2; - return [[Фредерик Моро отвечает: "Милая девушка, хоть и рыба. Она, конечно, порой бывает надоедлива в виду своей излишней, на мой взгляд любознательности, но вы себя на ее месте представьте -- она родилась и росла в своей примитивной деревне, а тут мы -- неспособные дышать в воде, зато способные строить поразительные машины. Нет ничего удивительного, что она только и делает, что носится между Игнисом, Окулусом и Террой, расспрашивая всех обо всем". ]]; + return [[Фредерик Моро отвечает: "Милая девушка, хоть и рыба. Она, конечно, порой бывает надоедлива ввиду своей излишней, на мой взгляд, любознательности, но вы себя на ее месте представьте -- она родилась и росла в своей примитивной деревне, а тут мы -- неспособные дышать в воде, зато способные строить поразительные машины. Нет ничего удивительного, что она только и делает, что носится между Игнисом, Окулусом и Террой, расспрашивая всех обо всем". ]]; end; end; end}; @@ -509,19 +664,19 @@ char_moreau_dlg = dlg { return [[Фредерик Моро отвечает: "Пренеприятный персонаж. Будь моя воля -- я бы прогнал его со станции, и большая часть руководителей со мной согласна. Однако, понимая, какие у этого будут последствия, я вынужден позволить ему находиться здесь". ]]; end; end}; - {always=true, "Вернемся к делу.", [[Фредерик Моро спрашивает: "Вы что-то хотели?"]], code [[ pret(); ]]}; + {always=true, "Вернемся к делу.", [[Фредерик Моро спрашивает: "Вы что-то хотели?"]], code [[ char_moreau_dlg:reset_more(); pret(); ]]}; {tag="generic"}; {tag="sabotage", false, "Вы знаете, что пожар начался из-за саботажа?", [[Фредерик Моро несколько раз стучит пальцем по столу. Недовольным тоном он делает вам замечание: "Месье Дрейк, -- он выдерживает небольшую паузу, -- Если вы хотите вернуть себе Левиафан, вам стоит следовать нашим правилам и, в частности, не нарушать прямых наших распоряжений". ]], code [[ atl_rep_moreau = atl_rep_moreau - 1; atl_rep_darkstar = atl_rep_darkstar - 1; ]]}; {tag="ignis_what", false, "Почему начался пожар в Игнисе?", [[Фредерик Моро пожимает плечами и как-то неуверенно проговаривает: "Не знаю. Этим вопросом занимаются инженеры и служба безопасности. Будьте спокойны, наши специалисты не допустят повторения аварии". ]]}; - {always=true, "У меня есть несколько вопросов.", [[Моро кивает: "Да, конечно. Я слушаю".]], code [[ psub('ask_more'); ]]}; - {always = true, "Я пойду", [[Моро прощается с вами: "До встречи, месье Дрейк". ]], code [[ back(); ]]}; + {tag="more_questions", "У меня есть несколько вопросов.", [[Моро кивает: "Да, конечно. Я слушаю".]], code [[ psub('ask_more'); ]]}; + {always = true, "Я пойду.", [[Моро прощается с вами: "До встречи, месье Дрейк". ]], code [[ back(); ]]}; {tag="lfc_debrief_good"}; {always = true, "Спасибо, это все.", [[Моро спрашивает: "Вы что-то хотели?". ]], code [[ psub("generic");]]}; {tag="lfc_debrief_bad"}; - {always = true, "Я пойду", [[Моро кивает. ]], code [[ walk("game_over_banished"); ]]}; + {always = true, "Я пойду.", [[Моро кивает. ]], code [[ walk("game_over_banished"); ]]}; }; }; @@ -532,64 +687,95 @@ char_svetlova_dlg = dlg { lfc_dialog = false; flag_help = false; flag_explain = false; + lfc_out_dialog = false; + dyp_quest = false; + lfc_goldman_execute = 0; + lfc_goldman_imprison = 1; + lfc_goldman_banish = 0; + lfc_leroy_execute = 0; + lfc_leroy_imprison = 1; + lfc_leroy_banish = 0; }; nam = "Екатерина Светлова"; disp = "Екатерина Светлова"; - entered = function(s) + reset_more = function(s) + poff("on_drake", "on_black", "on_darkstar", "on_svetlova", "on_moreau", "on_wright", "on_leroy", "on_jones", "on_goldman", "on_atlantis", "on_navjiarr", "on_learr", "on_ryveerr", "on_aikerjarr", "more_questions"); + if (atl_rep_svetlova < 0) then + if (char_svetlova.drake_asked == 0) then pon("on_drake"); pon("more_questions"); end; + if (char_svetlova.black_asked == 0) then pon("on_black"); pon("more_questions"); end; + if (char_svetlova.darkstar_asked == 0) then pon("on_darkstar"); pon("more_questions"); end; + if (char_svetlova.svetlova_asked == 0) then pon("on_svetlova"); pon("more_questions"); end; + if (char_svetlova.moreau_asked == 0) then pon("on_moreau"); pon("more_questions"); end; + if (char_svetlova.wright_asked == 0) then pon("on_wright"); pon("more_questions"); end; + + if (atl_iof_completed) then + if (char_svetlova.leroy_asked == 0) then pon("on_leroy"); pon("more_questions"); end; + if (char_svetlova.jones_asked == 0) then pon("on_jones"); pon("more_questions"); end; + if (char_svetlova.goldman_asked == 0) then pon("on_goldman"); pon("more_questions"); end; + end; + + if (char_svetlova.atlantis_asked == 0) then pon("on_atlantis"); pon("more_questions"); end; + + + if (char_svetlova.navjiarr_asked == 0) then pon("on_navjiarr"); pon("more_questions"); end; + if (char_svetlova.learr_asked == 0) then pon("on_learr"); pon("more_questions"); end; + if (char_svetlova.ryveerr_asked == 0) then pon("on_ryveerr"); pon("more_questions"); end; + if (atl_iof_learr_dead and char_svetlova.aikerjarr_asked == 0) then pon("on_aikerjarr"); pon("more_questions"); end; + else + if (char_svetlova.drake_asked < 2) then pon("on_drake"); pon("more_questions"); end; + if (char_svetlova.black_asked < 2) then pon("on_black"); pon("more_questions"); end; + if (char_svetlova.darkstar_asked < 2) then pon("on_darkstar"); pon("more_questions"); end; + if (char_svetlova.svetlova_asked < 2) then pon("on_svetlova"); pon("more_questions"); end; + if (char_svetlova.moreau_asked < 2) then pon("on_moreau"); pon("more_questions"); end; + if (char_svetlova.wright_asked < 2) then pon("on_wright"); pon("more_questions"); end; + + if (atl_iof_completed) then + if (char_svetlova.leroy_asked < 2) then pon("on_leroy"); pon("more_questions"); end; + if (char_svetlova.jones_asked < 2) then pon("on_jones"); pon("more_questions"); end; + if (char_svetlova.goldman_asked < 2) then pon("on_goldman"); pon("more_questions"); end; + end; + + if (char_svetlova.atlantis_asked < 2) then pon("on_atlantis"); pon("more_questions"); end; + + if (char_svetlova.navjiarr_asked < 2) then pon("on_navjiarr"); pon("more_questions"); end; + if (char_svetlova.learr_asked < 2) then pon("on_learr"); pon("more_questions"); end; + if (atl_iof_learr_dead and char_svetlova.learr_asked < 3) then pon("on_learr"); pon("more_questions"); end; + if (char_svetlova.ryveerr_asked < 2) then pon("on_ryveerr"); pon("more_questions"); end; + if (atl_iof_learr_dead and char_svetlova.aikerjarr_asked < 2) then pon("on_aikerjarr"); pon("more_questions"); end; + end; + end; + enter = function(s) if (atl_lfc_panic_warning == 2 and atl_lfc_panic == 2 and atl_lfc_state == 1) then psub("lfc_warning"); return [[Екатерина Светлова сообщает вам: "Добрый день, господин Дрейк. Винсент Даркстар просил вас срочно поговорить с ним". ]]; end; - poff("on_drake", "on_black", "on_darkstar", "on_svetlova", "on_moreau", "on_wright", "on_leroy", "on_jones", "on_goldman", "on_atlantis", "on_navjiarr", "on_learr", "on_ryveerr", "on_aikerjarr"); - if (atl_rep_svetlova < 0) then - if (char_svetlova.drake_asked == 0) then pon("on_drake"); end; - if (char_svetlova.black_asked == 0) then pon("on_black"); end; - if (char_svetlova.darkstar_asked == 0) then pon("on_darkstar"); end; - if (char_svetlova.svetlova_asked == 0) then pon("on_svetlova"); end; - if (char_svetlova.moreau_asked == 0) then pon("on_moreau"); end; - if (char_svetlova.wright_asked == 0) then pon("on_wright"); end; - - if (atl_iof_completed) then - if (char_svetlova.leroy_asked == 0) then pon("on_leroy"); end; - if (char_svetlova.jones_asked == 0) then pon("on_jones"); end; - if (char_svetlova.goldman_asked == 0) then pon("on_goldman"); end; - end; - - if (char_svetlova.atlantis_asked == 0) then pon("on_atlantis"); end; - - - if (char_svetlova.navjiarr_asked == 0) then pon("on_navjiarr"); end; - if (char_svetlova.learr_asked == 0) then pon("on_learr"); end; - if (char_svetlova.ryveerr_asked == 0) then pon("on_ryveerr"); end; - if (atl_iof_learr_dead and char_svetlova.aikerjarr_asked == 0) then pon("on_aikerjarr"); end; - else - if (char_svetlova.drake_asked < 2) then pon("on_drake"); end; - if (char_svetlova.black_asked < 2) then pon("on_black"); end; - if (char_svetlova.darkstar_asked < 2) then pon("on_darkstar"); end; - if (char_svetlova.svetlova_asked < 2) then pon("on_svetlova"); end; - if (char_svetlova.moreau_asked < 2) then pon("on_moreau"); end; - if (char_svetlova.wright_asked < 2) then pon("on_wright"); end; - - if (atl_iof_completed) then - if (char_svetlova.leroy_asked < 2) then pon("on_leroy"); end; - if (char_svetlova.jones_asked < 2) then pon("on_jones"); end; - if (char_svetlova.goldman_asked < 2) then pon("on_goldman"); end; - end; - - if (char_svetlova.atlantis_asked < 2) then pon("on_atlantis"); end; - - if (char_svetlova.navjiarr_asked < 2) then pon("on_navjiarr"); end; - if (char_svetlova.learr_asked < 2) then pon("on_learr"); end; - if (atl_iof_learr_dead and char_svetlova.learr_asked < 3) then pon("on_learr"); end; - if (char_svetlova.ryveerr_asked < 2) then pon("on_ryveerr"); end; - if (atl_iof_learr_dead and char_svetlova.aikerjarr_asked < 2) then pon("on_aikerjarr"); end; + s:reset_more(); + + if have(dyp_item_star_map) and not have(dyp_item_star_map_copy) and not atl_star_map_copied then + pon("copy_star_map"); + end; + + if (atl_star_map_copied) then + pon("copy_star_map_2"); + end; + + if dyp_quest_state == 1 and not s.dyp_quest then + s.dyp_quest = true; + pon('dyp_quest'); + end; + + poff("iyh1_learr", "iyh1_aikerjarr"); + if (atl_iyh_state == 1 and atl_iyh_learr_spoken and atl_iyh_ryveerr_spoken) then + pon('iyh1_learr'); + elseif (atl_iyh_state == 1 and atl_iyh_aikerjarr_spoken and atl_iyh_ryveerr_spoken) then + pon('iyh1_aikerjarr'); end; if (s.state == 0) then psub('first_meeting'); s.state = 1; - return [[За столом сидит женщина лет сорока-пяти. Золотистые волосы собраны в пучок на затылке. Она одета в простое синее платье. В правой руке она держит карандаш, которым периодически делает пометки в бумагах, лежащих на столе. Она отрывает взгляд от бумаг и приветствует вас: _"Добрый день, господин Дрейк. Мое имя -- Екатерина Светлова, я управляю исследованиями на Атлантиде. Должна признать, вы нас всех узрядно напугали. Даркстар сказал, что вы зайдете. Думаю, вы будете полезны нам. У меня есть предложение для вас. Я знаю, что вы ищете своего отца. Уходя в экспедицию, он не оставил нам почти никаких материалов -- карты, схемы, переводы -- они забрали все с собой. Я прошу вас помочь нам с некоторыми проблемами. Взамен -- мы предоставим вам все имеющиеся у нас материалы. Возможно они помогут вам найти отца"_.]]; + return [[За столом сидит женщина лет сорока-пяти. Золотистые волосы собраны в пучок на затылке. Она одета в простое синее платье. В правой руке она держит карандаш, которым периодически делает пометки в бумагах, лежащих на столе. ^Она отрывает взгляд от бумаг и приветствует вас: _"Добрый день, господин Дрейк. Мое имя -- Екатерина Светлова, я управляю исследованиями на Атлантиде. Даркстар сказал, что вы зайдете. ^Должна признать, вы нас всех изрядно напугали, появившись вот так внезапно. Однако, думаю, вы будете полезны нам. ^У меня есть предложение для вас. Я знаю, что вы ищете своего отца. Уходя в экспедицию, он не оставил нам почти никаких материалов -- карты, схемы, переводы -- они забрали все с собой. Я прошу вас помочь нам с некоторыми проблемами. Взамен мы предоставим вам все имеющиеся у нас материалы. Возможно, они помогут вам найти отца"_.]]; elseif (char_svetlova.iof_reaction == 0 and atl_iof_completed) then char_svetlova.iof_reaction = 1; if (atl_iof_learr_dead) then @@ -606,19 +792,61 @@ char_svetlova_dlg = dlg { psub('ryveerr_on_steal'); return [[Светлова отрывает взгляд от бумаг, лежащих перед ней и смотрит на вас: "Ну как? Поговорили с Ривеерром?" ]]; else + if atl_lfc_state == 4 then + if not s.lfc_out_dialog then + s.lfc_out_dialog = true; + if atl_rep_svetlova >= 0 then + if atl_lfc_goldman_exposed then + poff("leroy"); + else + poff("both", "goldman_1", "goldman_2", "goldman_3", "goldman_4", "goldman_5", "goldman_6", "goldman_7"); + end; + psub("lfc_saboteur"); + return [[Екатерина Светлова открывает взгляд от бумаг, лежащих перед ней, и смотрит на вас: "Добрый день, Дрейк. Даркстар сказал, что вы зайдете, чтобы обсудить поимку саботажников. Я вас слушаю". ]]; + else + psub("generic"); + return [[Екатерина Светлова открывает взгляд от бумаг, лежащих перед ней, и смотрит на вас: "Добрый день, Дрейк. Если вы пришли обсудить поимку саботажников, то у меня нет на это времени". ]]; + end; + end; + end; + if (atl_iyh_state == 9) then atl_iyh_state = 10; - psub('iyh_more'); - take("item_map_2"); - take("item_talk_device"); - take("item_navjiarr_chart_1"); - take("item_navjiarr_chart_2"); - take("item_navjiarr_chart_3"); - if (atl_iyh_artifacts_on_atlantis) then - return [[Светлова отрывает взгляд от бумаг, лежащих перед ней и смотрит на вас: "Добрый день, Дрейк. Мы изучили артефакты, найденные вами в храме. Среди всего прочего, мы нашли несколько фрагментов карты, которые я возвращаю вам - они понадобятся вам в ваших поисках. К сожалению, это именно что фрагменты и мы не можем по ним определить местоположение чего бы то ни было. Однако, недостающие фрагменты могут быть в расположенных неподалеку навьярских города - Дипатреанотре и Ираафаанотре". Она достает из-под стола небольшой чемоданчик с лампочками и кнопочками и вручает его вам: "Этот прибор позволит вам общаться с навьярами под водой. Просто набирайте слова как на клавиатуре печатной машинки, при этом будут последовательно зажигаться лампочки соответствующих цветов". Затем она достает карту, на которой отмечены Атлантида, Ираафаанотр и Дипатреанотр и так же отдает ее вам: "Вы можете взять эту карту". ]]; - else - return [[Светлова отрывает взгляд от бумаг, лежащих перед ней и смотрит на вас: "Добрый день, Дрейк. К сожалению, мы не смогли получить доступ к артефактам, добытым вами в храме. Поэтому, единственное, что вы можете сделать чтобы найти отца - это посетить навьярские города, расположенные неподалеку - Дипатреанотр и Ираафаанотр". Она достает из-под стола небольшой чемоданчик с лампочками и кнопочками и вручает его вам: "Этот прибор позволит вам общаться с навьярами под водой. Просто набирайте слова как на клавиатуре печатной машинки, при этом будут последовательно зажигаться лампочки соответствующих цветов". Затем она достает карту, на которой отмечены Атлантида, Ираафаанотр и Дипатреанотр и так же отдает ее вам: "Вы можете взять эту карту". ]]; - end; + conflict_resolved = true; + if atl_iyh_shockfish_dead then + psub('iyh_more'); + if (atl_iyh_artifacts_on_atlantis) then + -- навьяры не знают про гибель ската. Светловой пофиг + return [[Светлова отрывает взгляд от бумаг, лежащих перед ней, и смотрит на вас: "Добрый день, Дрейк. Благодаря вам отношения между Дипатреанотром и Ираафаанотром восстановлены. Мы изучили артефакты, найденные вами в храме, но, к сожалению для вас, не обнаружили ничего, что могло бы помочь найти Уильяма. Вы говорили, что нашли фрагмент карты. Можете показать его?" ]]; + else + -- навьяры в ярости, светлова тоже + return [[Светлова отрывает взгляд от бумаг, лежащих перед ней, и смотрит на вас: "Дрейк! Вы понимаете, что вы сделали?! Одним маленьким взрывом вы погубили годы работы по налаживанию отношений с навьярами! Конечно, вы решили проблему, но разве не было другого способа?!"^Чуть подождав, она сообщает: "К делу. Покажите фрагмент карты, который вы нашли". ]]; + end; + elseif atl_iyh_entrance_destroyed then + if (atl_iyh_artifacts_on_atlantis) then + -- навьяры не знают про разрушение храма. Светловой пофиг + psub('iyh_more'); + return [[Светлова отрывает взгляд от бумаг, лежащих перед ней, и смотрит на вас: "Добрый день, Дрейк. Благодаря вам отношения между Дипатреанотром и Ираафаанотром восстановлены. Мы изучили артефакты, найденные вами в храме, но, к сожалению для вас, не обнаружили ничего, что могло бы помочь найти Уильяма. Вы говорили, что нашли фрагмент карты. Можете показать его?" ]]; + else + -- навьяры в ярости, светлова тоже + if iof_learr_dead then + psub('iyh_more'); + return [[Светлова отрывает взгляд от бумаг, лежащих перед ней, и смотрит на вас: "Добрый день, Дрейк. Благодаря вам отношения между Дипатреанотром и Ираафаанотром восстановлены. Однако, из-за ваших поспешных действий они теперь гораздо хуже относятся к нам и, скорее всего, нам не придется расчитывать на их помощь в ближайшее время. Вы говорили, что нашли фрагмент карты. Можете показать его?" ]]; + else + psub('learr_back'); + return [[Светлова отрывает взгляд от бумаг, лежащих перед ней, и смотрит на вас: "Добрый день, Дрейк. Мы еще раз обсудили все с Леарр, она хотела бы вернуться в экипаж Левиафана. Вы возьмете ее?" ]] + end; + end; + else + psub('iyh_more'); + if (atl_iyh_artifacts_on_atlantis) then + --Храм в целости, навьяры пляшут, Светлова довольна :) + return [[Светлова отрывает взгляд от бумаг, лежащих перед ней, и смотрит на вас: "Добрый день, Дрейк. Благодаря вам отношения между Дипатреанотром и Ираафаанотром восстановлены. Ваши действия в храме были воистину потрясающи. Мы не зря отправили туда именно вас. Мы изучили артефакты, найденные вами в храме, но, к сожалению для вас, не обнаружили ничего, что могло бы помочь найти Уильяма. Вы говорили, что нашли фрагмент карты. Можете показать его?" ]]; + else + --Храм в целости, навьяры пляшут, Светлова довольна, но без артефактов :( + return [[Светлова отрывает взгляд от бумаг, лежащих перед ней, и смотрит на вас: "Добрый день, Дрейк. Благодаря вам отношения между Дипатреанотром и Ираафаанотром восстановлены. К сожалению, мы не смогли получить доступ к артефактам, добытым вами в храме. Вы говорили, что нашли фрагмент карты. Можете показать его?" ]]; + end; + end; else psub('generic'); @@ -630,19 +858,68 @@ char_svetlova_dlg = dlg { s.lfc_dialog = true; pon('sabotage', 'ignis_what'); end; - - poff('iyh1'); - if (atl_iyh_state == 1 and atl_iyh_learr_spoken and atl_iyh_ryveerr_spoken) then - pon('iyh1'); - end; return [[Светлова отрывает взгляд от бумаг, лежащих перед ней и смотрит на вас: "Добрый день". ]]; end; end; end; phr = { + {tag="lfc_saboteur"}; + {tag="both","Что вы будете делать с саботажниками?", [[Екатерина Светлова отвечает, не задумываясь: "Запереть их в темных камерах, пока не раскаются в своих действиях, а потом посмотрим". ]]}; + {tag="goldman_1", "Одному сумасшедшему никто не поверит, Голдмана стоит отпустить. ", [[Екатерина Светлова кивает: "Может так будет лучше. По-крайней мере нам не надо будет его охранять". ]], code [[ + char_svetlova_dlg.lfc_goldman_banish = 1; + poff("goldman_1", "goldman_2", "goldman_3", "goldman_4", "goldman_5", "goldman_6", "goldman_7"); + ]]}; + {tag="goldman_2", "Голдман -- трус. Он никому ничего не скажет. Его можно отправить на поверхность. ", [[Екатерина Светлова кивает: "Может так будет лучше. По-крайней мере нам не надо будет его охранять". ]], code [[ + char_svetlova_dlg.lfc_goldman_banish = 1; + poff("goldman_1", "goldman_2", "goldman_3", "goldman_4", "goldman_5", "goldman_6", "goldman_7"); + ]]}; + {tag="goldman_3", "Голдман хитер. На станции он представляет большую опасность, чем вне ее. ", [[Екатерина Светлова отвечает: "Вы и правда так думаете? Я считала вас более наблюдательным". ]], code [[ + poff("goldman_1", "goldman_2", "goldman_3", "goldman_4", "goldman_5", "goldman_6", "goldman_7"); + ]]}; + {tag="goldman_4", "Голдман просто хотел выбраться отсюда. Пусть убирается с Атлантиды. ", [[Екатерина Светлова кивает: "Нельзя давать преступникам того, чего они хотят". ]], code [[ + poff("goldman_1", "goldman_2", "goldman_3", "goldman_4", "goldman_5", "goldman_6", "goldman_7"); + ]]}; + {tag="goldman_5", "Отпускать Голдмана на поверхность нельзя. Единственный выход -- смертная казнь. ", [[Екатерина Светлова кивает: "Не думаю, что Голдман заслуживает этого. Он просто попал под дурное влияние". ]], code [[ + atl_rep_svetlova = atl_rep_svetlova - 1; + poff("goldman_1", "goldman_2", "goldman_3", "goldman_4", "goldman_5", "goldman_6", "goldman_7"); + ]]}; + {tag="goldman_6", "Голдман подверг опасности все наше дело. Единственный выход -- смертная казнь. ", [[Екатерина Светлова кивает: "Не думаю, что Голдман заслуживает этого. Он просто попал под дурное влияние". ]], code [[ + atl_rep_svetlova = atl_rep_svetlova - 1; + poff("goldman_1", "goldman_2", "goldman_3", "goldman_4", "goldman_5", "goldman_6", "goldman_7"); + ]]}; + {tag="goldman_7", "Голдман хитер. Вне станции он будет не менее опасен, чем на ней. ", [[Екатерина Светлова отвечает: "Вы и правда так думаете? Я думала, вы наблюдательнее". ]], code [[ + poff("goldman_1", "goldman_2", "goldman_3", "goldman_4", "goldman_5", "goldman_6", "goldman_7"); + ]]}; + {tag="leroy", "Что вы будете делать с саботажником?", [[Екатерина Светлова отвечает, не задумываясь: "Запереть его в темной камере, пока не раскается в своих действиях, а потом посмотрим". ]]}; + {tag="leroy_1", "Одному сумасшедшему никто не поверит, Леруа стоит отпустить. ", [[Екатерина Светлова кивает: "Может так будет лучше. По-крайней мере нам не надо будет его охранять". ]], code [[ + char_svetlova_dlg.lfc_leroy_banish = 1; + poff("leroy_1", "leroy_2", "leroy_3", "leroy_4", "leroy_5", "leroy_6", "leroy_7"); + ]]}; + {tag="leroy_2", "Леруа -- трус. Он никому ничего не скажет. Его можно отправить на поверхность. ", [[Екатерина Светлова отвечает: "Вы и правда так думаете? Я считала вас более наблюдательным". ]], code [[ + poff("leroy_1", "leroy_2", "leroy_3", "leroy_4", "leroy_5", "leroy_6", "leroy_7"); + ]]}; + {tag="leroy_3", "Леруа хитер. На станции он представляет большую опасность, чем вне ее. ", [[Екатерина Светлова кивает: "Может так будет лучше. По-крайней мере нам не надо будет его охранять". ]], code [[ + char_svetlova_dlg.lfc_leroy_banish = 1; + poff("leroy_1", "leroy_2", "leroy_3", "leroy_4", "leroy_5", "leroy_6", "leroy_7"); + ]]}; + {tag="leroy_4", "Леруа просто хотел выбраться отсюда. Пусть убирается с Атлантиды. ", [[Екатерина Светлова кивает: "Нельзя давать преступникам того, чего они хотят". ]], code [[ + poff("leroy_1", "leroy_2", "leroy_3", "leroy_4", "leroy_5", "leroy_6", "leroy_7"); + ]]}; + {tag="leroy_5", "Отпускать Леруа на поверхность нельзя. Единственный выход -- смертная казнь. ", [[Екатерина Светлова задумчиво смотрит на вас: "Жестокое решение, но, вероятно, единственно верное. Не буду с вами спорить". ]], code [[ + char_svetlova_dlg.lfc_leroy_execute = 1; + poff("leroy_1", "leroy_2", "leroy_3", "leroy_4", "leroy_5", "leroy_6", "leroy_7"); + ]]}; + {tag="leroy_6", "Леруа подверг опасности все наше дело. Единственный выход -- смертная казнь. ", [[Екатерина Светлова задумчиво смотрит на вас: "Жестокое решение, но, вероятно, единственно верное. Не буду с вами спорить". ]], code [[ + char_svetlova_dlg.lfc_leroy_execute = 1; + poff("leroy_1", "leroy_2", "leroy_3", "leroy_4", "leroy_5", "leroy_6", "leroy_7"); + ]]}; + {tag="leroy_7", "Леруа хитер. Вне станции он будет не менее опасен, чем на ней. ", [[Екатерина Светлова кивает: "Отлично. Пусть немного посидит взаперти". ]], code [[ + poff("leroy_1", "leroy_2", "leroy_3", "leroy_4", "leroy_5", "leroy_6", "leroy_7"); + ]]}; + {"Это все, что я хотел обсудить по данному вопросу. ", [[Екатерина Светлова кивает и спрашивает: "Что-нибудь еще?"]], code [[ psub("generic");]] }; {tag="lfc_warning"}; - {always = true, "Я пойду", [[Светлова возвращается ко своим бумагам: "До встречи". ]], code [[ back(); ]]}; + {always = true, "Я пойду.", [[Светлова возвращается ко своим бумагам: "До встречи". ]], code [[ back(); ]]}; {tag = "iof_learr_dead"}; {"Я ничего не мог сделать. ", [[Екатерина Светлова опускает глаза: "Я понимаю". Вздохнув, она спрашивает: "Вам что-то нужно?" ]], code [[ psub("generic"); ]]}; {"Перейдем к делу. ", [[Екатерина Светлова кивает: "Что вам нужно?" ]], code [[ @@ -654,19 +931,21 @@ char_svetlova_dlg = dlg { {tag = "iof_learr"}; {"Рад, что никто не пострадал. ", [[Екатерина Светлова кивает и спрашивает: "Вам что-то нужно?"]], code [[ psub("generic"); ]]}; {tag = "first_meeting"}; - {"Как так получилось, что не осталось никакой информации?", [[Екатерина Светлова поясняет: "Блэк сильно торопил Уильяма и едва они закончили минимальные исследования, они отправились в Венаэданотр -- отдаленный навьярский город к западу от Атлантиды. К сожалению, мы не знаем его точное местоположение". ]], code [[ pon('venaedanotrr'); ]]}; - {"В чем заключается цель экспедиции?", [[Екатерина Светлова отвечает: "Дрейк и Блэк ищут Лсэрианотр -- легендарный навьярский город". ]], code [[pon('lseryanotr')]]}; - {tag = "venaedanotrr", false, "Венаэданотр?", [[Екатерина светлова отвечает: "Один из множества навьярских городов. К сожалению, у нас нет почти никакой информации о нем, кроме предположений. Думаю Дрейк и Блэк смогут многое рассказать о нем, когда вернутся из своей экспедиции". ]]}; - {tag = "lseryanotr", false, "Лсэрианотр?", [[Екатерина Светлова отвечает: "По легенде -- это самый древний город навьяров. С ним связано множество легенд. Одна из них гласит, что Наэтвьирр -- существо великой мудрости, по одной из версий, призванное навьярами из другого мира -- должен был дать навьярам великие знания, которые позволили бы им войти в век процветания. Однако, один из мудрецов предостерег навьяров об обмане, задуманном Наэтвьирром. Но, к тому моменту, Наэтвьирр уже прибыл в Лсэрианотр. Навьяры испугались и запечатали город, навеки закрыв Наэтвьирра внутри". ]]}; - {"В чем заключается ваше предложение?", [[Екатерина Светлова откладывает бумаги в сторону, достает из ящика стола карту и раскладывает ее на столе. После чего продолжает: _"На самом деле, вы прибыли как нельзя вовремя. Наши отношения с навьярами несколько натянулись в последнее время, и, боюсь, разрешить разногласия поможете только вы. Я попробую кратко изложить ситуацию, задавайте вопросы по ходу рассказа, если вам потребуется дополнительная информация, -- Светлова делает небольшую паузу, -- Неподалеку от Атлантиды находятся два навьярских поселения - Ираафаанотр и Дипатреанотр. Первая встреча с жителями Дипатреанотра прошла не совсем гладко и в результате ее погибло несколько человек. К счастью, в дальнейшем отношения удалось наладить. Недавно, между Ираафаанотром и Дипатреанотром произошел конфликт, который может негативно повлиять на нас и наши отношения с этими городами. Мы пытались вмешаться, но это лишь обострило разногласия и в дальнейшем может поставить под угрозу само существование станции"_. ]], code [[ psub('help')]]}; + {"Как так получилось, что не осталось никакой информации?", [[Екатерина Светлова поясняет: "Блэк сильно торопил Уильяма и, едва закончив минимальные исследования, они отправились в Венаэданотр -- отдаленный навьярский город где-то к западу от Атлантиды. К сожалению, его точное местоположение нам неизвестно". ]], code [[ pon('venaedanotrr'); ]]}; + {"В чем заключается цель экспедиции?", [[Екатерина Светлова отвечает: "Дрейк и Блэк ищут Лсэрианотр -- легендарный навьярский город". ]], code [[pon('lseryanotrr')]]}; + {tag = "venaedanotrr", false, "Венаэданотр?", [[Екатерина светлова отвечает: "Поселения навьяров раскинулись по всему океанскому дну. Мы точно знаем, что Венаэданотр расположен далеко к западу отсюда и точно знаем, что он значительно больше, нежели Ираафаанотр или Дипатреанотр. Дрейк и Блэк смогут рассказать многое рассказать о нем, когда вернутся из своей экспедиции". ]], code [[ pon("dypatreanotrr", "iraaphaanotrr");]]}; + {tag = "lseryanotrr", false, "Лсэрианотр?", [[Екатерина Светлова отвечает: "По легенде Лсэрианотр -- древний навьярский город, хранящий какие-то тайные знания их народа. Описания разнятся. В одних источниках говорится о страшном монстре, по имени Наэтвьирр, охраняющем город. В других этот же Наэтвьирр предстает как хранитель города и его тайн, призванный самими навьярами. Однако, во всех вариантах легенды именно Наэтвьирр выступает причиной того, что навьяры покидают Лсэрианотр. Мы предполагаем, что Наэтвьирр это кракен или еще какое-то морское чудовище, с которым древние навьяры просто не могли справиться и вынуждены были покинуть Лсэрианотр". ]], code [[ pon("dypatreanotrr", "iraaphaanotrr");]]}; + {tag = "dypatreanotrr", false, "Дипатреанотр?", [[Екатерина Светлова отвечает: "Дипатреанотр расположен чуть дальше к северу от Атлантиды, чем Ираафаанотр. Как и Ираафаанотр, городом в полной мере он не является. В поселении нет даже улиц -- дома просто нагромождены вокруг центральной площади. Впрочем, как вы понимаете, улицы навьярам и ни к чему". ]]}; + {tag = "iraaphaanotrr", false, "Ираафаанотр?", [[Екатерина Светлова отвечает: "Ираафаанотр -- самое близкое к Атлантиде поселение навьяров. Мы называем его городом, хотя по нашим меркам это даже не деревня. Полтора десятка домов, да несколько полей вокруг. И все же, навьяры Ираафаанотра сильно помогают нам, обменивая ресурсы, которые они добывают здесь на более сложные вещи, производить которые самостоятельно они не способны". ]]}; + {"В чем заключается ваше предложение?", [[Екатерина Светлова откладывает бумаги в сторону, достает из ящика стола карту и раскладывает ее на столе. После чего продолжает: _"На самом деле, вы прибыли как нельзя вовремя. Наши отношения с навьярами несколько натянулись в последнее время, и, боюсь, разрешить разногласия поможете только вы. Я попробую кратко изложить ситуацию, задавайте вопросы по ходу рассказа, если вам потребуется дополнительная информация, -- Светлова делает небольшую паузу, -- Неподалеку от Атлантиды находятся два навьярских поселения: Ираафаанотр и Дипатреанотр. Первая встреча с жителями Дипатреанотра прошла не совсем гладко и в результате ее погибло несколько человек. К счастью, в дальнейшем отношения удалось наладить. Недавно, между Ираафаанотром и Дипатреанотром произошел конфликт, который может негативно повлиять на нас и наши отношения с этими городами. Мы пытались вмешаться, но это лишь обострило разногласия и в дальнейшем может поставить под угрозу само существование станции"_. ]], code [[ psub('help')]]}; {tag = 'help'}; - {"И как я смогу помочь?", [[Екатерина Светлова поясняет: _"Навьяры знают, что вы не с Атлантиды, поэтому вы предстанете как нейтральная сторона. Сейчас вам стоит поговорить с Леарр и Ривеерром - узнать их взгляд на ситуацию. Потом приходите ко мне и решим, что делать"_. ]], code [[ + {"И как я смогу помочь?", [[Екатерина Светлова поясняет: _"Навьяры знают, что вы не с Атлантиды, поэтому вы предстанете как нейтральная сторона. Сейчас вам стоит поговорить с Леарр и Ривеерром и узнать их взгляд на ситуацию. Потом приходите ко мне и решим, что делать"_. ]], code [[ char_svetlova_dlg.flag_help = true; if (char_svetlova_dlg.flag_explain) then pon("first_meeting_end"); end; ]]}; - {"И в чем суть этого конфликта?", [[Екатерина Светлова отвечает: "У навьяров много разных священных предметов, табу, пророчеств. За время существования станции мы заполучили и изучили множество реликвий. Большинство их вполне обычны: статуэтки, какие-то религиозные символы, записи и так далее. Однако, мы заметили закономерность -- самые древние предметы разительно отличаются от остальных -- изготовлены они более качественно, а многие предметы и вовсе не имеют сопоставимых аналогов. Например, у нас есть множество металлических фрагментов, очевидно использовавшихся в каких-то механизмах, есть диски, призмы, цилиндры, изготовленные из неизвестных нам материалов -- они преломляют свет совершенно удивительным образом благодаря внутренней структуре материала. Интересно, что эти предметы имеют совершенно правильную форму и хорошо сохранились. Навьяры говорят, что это не просто предметы красоты, но некие записи, изготовленные древними. Не знаю, как относиться к этому. Возможно, вернувшись из экспедиции Блэк и Дрейк смогут что-то прояснить. Но это было просто отступление. Не так давно из Ираафаанотра и Дипатреанотра пропали ценнейшие реликвии. Города теперь обвиняют в этом друг друга и дело грозит обернуться войной". ]], code [[ + {"И в чем суть этого конфликта?", [[Екатерина Светлова отвечает: "Все одновременно очень просто и очень сложно. Из Ираафаанотра и Дипатреанотра не так давно пропали ценные реликвии. Города обвиняют друг друга и непонятно, к чему это приведет. Мы не понимаем, что могло быть причиной этому -- никаких предпосылок к такому у навьяров не было. С самого основания станции города жили в мире и согласии. К несчастью, ни Дипатреанотр, ни Ираафаанотр не дают нам доступа в храмы, где хранились реликвии". ]], code [[ char_svetlova_dlg.flag_explain = true; if (char_svetlova_dlg.flag_help) then psub("first_meeting_end"); @@ -683,7 +962,7 @@ char_svetlova_dlg = dlg { else return [[Екатерина Светлова кивает: _"Поговорите с Леарр и Ривеерром, разберитесь, узнайте больше. Ривеерр большую часть времени находится здесь, в Окулусе. Леарр вы, скорее всего, найдете в Игнисе"_. ]]; end; - end, code [[ + end, code [[ char_svetlova_dlg.state = 1; atl_iyh_state = 1; psub("generic"); @@ -750,7 +1029,7 @@ char_svetlova_dlg = dlg { return [[Екатерина Светлова отвечает: "Спросите кого-нибудь другого". ]]; else char_svetlova.leroy_asked = 2; - return [[Екатерина Светлова отвечает: "Мишель Леруа хорошо известен на станции - он один из первых открыто поднял вопрос о закрытии станции и возвращении на поверхность. К счастью, он пока не успел слишком многих склонить на свою сторону. Вам лучше поговорить с Моро или Райтом по этому поводу". ]]; + return [[Екатерина Светлова отвечает: "Мишель Леруа хорошо известен на станции -- он один из первых открыто поднял вопрос о закрытии станции и возвращении на поверхность. К счастью, он пока не успел слишком многих склонить на свою сторону. Вам лучше поговорить с Моро или Райтом по этому поводу". ]]; end; end}; {tag="on_jones", false, "Что вы думаете о Чарли Джонсе? ", function() @@ -777,7 +1056,7 @@ char_svetlova_dlg = dlg { return [[Екатерина Светлова отвечает: "Спросите кого-нибудь другого". ]]; else char_svetlova.atlantis_asked = 2; - return [[Екатерина Светлова отвечает: "Атлантидабыла построена с единственной целью -- быть ближе к навьярам, получить возможность изучать их. Майкл Райт, конечно, скажет вам другое и будет по-своему прав -- в конце концов, станцию придумал именно он". ]]; + return [[Екатерина Светлова отвечает: "Атлантида была построена с единственной целью -- быть ближе к навьярам, получить возможность изучать их. Майкл Райт, конечно, скажет вам другое и будет по-своему прав -- в конце концов, станцию придумал именно он". ]]; end; end}; {tag="on_navjiarr", false, "Что вы думаете о навьярах? ", function() @@ -795,10 +1074,10 @@ char_svetlova_dlg = dlg { return [[Екатерина Светлова отвечает: "Спросите кого-нибудь другого". ]]; else if (atl_iof_learr_dead) then - char_darkstar.learr_asked = 3; + char_svetlova.learr_asked = 3; return [[Екатерина Светлова отвечает: "Помимо самого факта гибели этой замечательной юной девушки, это событие имеет далеко идущие последствия для Атлантиды". ]]; else - char_darkstar.learr_asked = 2; + char_svetlova.learr_asked = 2; return [[Екатерина Светлова отвечает: "Леарр -- просто находка для нас всех. Она гораздо меньше скована догмами, чем другие, более старые, представители ее племени. Приятно наблюдать, как она с легкостью впитывает наши знания и с готовностью делится своими". ]]; end; end; @@ -809,7 +1088,7 @@ char_svetlova_dlg = dlg { return [[Екатерина Светлова отвечает: "Спросите кого-нибудь другого". ]]; else char_svetlova.ryveerr_asked = 2; - return [[Екатерина Светлова отвечает: "Ривеерр -- достаточно дружелюбный и приятный навьяр. Его интеллект позволяет нам общаться с ним практически на равных, с поправкой на отсутствие знания и понимания многих, известных нам вещей". ]]; + return [[Екатерина Светлова отвечает: "Ривеерр -- достаточно дружелюбный и приятный навьяр. Его интеллект позволяет нам общаться с ним практически на равных, с поправкой на отсутствие некоторых знаний и понимания многих известных нам вещей". ]]; end; end}; {tag="on_aikerjarr", false, "Что вы думаете об Аикерьярре? ", function() @@ -821,8 +1100,11 @@ char_svetlova_dlg = dlg { return [[Екатерина Светлова отвечает: "Нам всем было бы легче, если бы его не было на Атлантиде. К сожалению, сейчас мы не можем просто взять и прогнать его -- это сделает наше положение еще худшим, чем оно есть". ]]; end; end}; - {always=true, "Вернемся к делу.", [[Светлова кивает: "Говорите".]], code [[ pret(); ]]}; - {tag = "generic"}; + {always=true, "Вернемся к делу.", [[Светлова кивает: "Говорите".]], code [[ char_svetlova_dlg:reset_more(); pret(); ]]}; + {tag = "generic"}; + {tag = "copy_star_map", false, "[Показать карту небесных огней] Мы можем сделать копию этой карты, такую, чтобы навьяры не заметили бы подмены?", [[Екатерина Светлова удивленно смотрит на вас: "Не знаю, что вы задумали, но мы никогда не делали ничего подобного". Немного погодя она заявляет: "Думаю, Райт сможет сделать достаточно хорошую копию. У навьяров нет точных приборов, чтобы проверить ее как следует, они не смогут определить ее время изготовления иначе чем на глаз, так что -- это вполне в наших силах. Отправляйтесь в свою комнату, я позову вас, когда копия будет готова". ]], code [[ atl_star_map_copied = true; walk("cutscene_wait_for_copy"); remove(dyp_item_star_map, me());]]}; + {tag = "copy_star_map_2", false, "Я пришел за картой небесных огней", [[Екатерина Светлова передает вам две, на первый взгляд, совершенно одинаковые карты. Лишь приглядевшись, вы замечаете отличия -- линии на копии менее ровные, зато лист металла гораздо более ровный и имеет гораздо меньше царапин. Врядли вождь Дипатреанотра будет придираться к таким вещам, ведь символы на картах совпадают практически точь-в-точь. ]], code [[ atl_star_map_copied = true; take(dyp_item_star_map_copy);take(dyp_item_star_map);]]}; + {tag = "dyp_quest", false, "Вождь Дипатреанотра просил меня принести \"светяющуюся капсулу\". Что мы можем ему предложить?", [[Екатерина Светлова отвечает: "Поговорите с Райтом, он найдет что-нибудь, что можно отдать навьярам". ]]}; {tag = "sabotage", false, "Даркстар считает, что причиной пожара в Игнисе был саботаж. Что вы об этом думаете?", function(s) if (atl_iof_learr_dead) then atl_rep_darkstar = atl_rep_darkstar - 1; @@ -835,7 +1117,7 @@ char_svetlova_dlg = dlg { end}; {tag = "ignis_what", false, "Вы знаете, что произошло в Игнисе?", function(s) if (char_svetlova_dlg.lfc_sabotage) then - return [[Екатерина Светлова отвечает: "Вы же только что сами сказали - саботаж". ]]; + return [[Екатерина Светлова отвечает: "Вы же только что сами сказали -- саботаж". ]]; elseif (atl_iof_learr_dead) then return [[Екатерина Светлова отказывается отвечать: "Мне кажется, это не ваше дело. И не мое. Этим занимается служба безопасности". ]]; else @@ -844,14 +1126,14 @@ char_svetlova_dlg = dlg { return [[Екатерина Светлова отвечает: "Я думаю вы и сами прекрасно знаете. Может расскажете?". ]]; end; end}; - {tag= "iyh1_learr", false, "Я поговорил с навьярами. Леарр отрицает причастность Ираафаанотра к краже реликвии из Дипатреанотра. Ривеерр же открыто признает, что навьяры Дипатреанотра забрали ценности из Ираафаанотра.", [[Светлова разводит руками: "Теперь вы в курсе ситуации. Однако, у нас есть зацепка -- Записи Уильяма. Он мало что оставил нам, но среди найденного есть следующее сообщение", -- Екатерина достает из ящика блокнот и передает вам.^ Вы читаете следующее: "Карты давно утеряны, но отшельник в старом храме обещал помочь. Понятия не имею, что и как он сделает, но если это поможет найти Лсэрианотр -- пусть делает что считает нужным". ]], code [[ dypatreanotrr_temple_found = true; atl_iyh_state = 2; psub('iyh1_sub'); ]]}; - {tag= "iyh1_aikerjarr", false, "Я поговорил с навьярами. Аикерьярр отрицает причастность Ираафаанотра к краже реликвии из Дипатреанотра. Ривеерр же открыто признает, что навьяры Дипатреанотра забрали ценности из Ираафаанотра.", [[Светлова разводит руками: "Теперь вы в курсе ситуации. Аикерьярр, конечно, доверия не заслуживает, но Леарр говорила то же самое. Тем не менее, у нас есть зацепка -- Записи Уильяма. Он мало что оставил нам, но среди найденного есть следующее сообщение", -- Екатерина достает из ящика блокнот и передает вам.^ Вы читаете следующее: "Карты давно утеряны, но отшельник в старом храме обещал помочь. Понятия не имею, что и как он сделает, но если это поможет найти Лсэрианотр -- пусть делает что считает нужным". ]], code [[ dypatreanotrr_temple_found = true; atl_iyh_state = 2; psub('iyh1_sub'); ]]}; - {always=true, "У меня есть несколько вопросов.", [[Светлова кивает: "Спрашивайте".]], code [[ psub('ask_more'); ]]}; - {always = true, "Я пойду", [[Светлова возвращается ко своим бумагам: "До встречи". ]], code [[ back(); ]]}; + {tag= "iyh1_learr", false, "Я поговорил с навьярами. Леарр отрицает причастность Ираафаанотра к краже реликвии из Дипатреанотра. Ривеерр же открыто признает, что навьяры Дипатреанотра забрали ценности из Ираафаанотра.", [[Светлова разводит руками: "Теперь вы в курсе ситуации. Однако, у нас есть зацепка -- Записи Уильяма. Он мало что оставил нам, но среди найденного есть следующее сообщение", -- Екатерина достает из ящика блокнот и передает вам.^ Вы читаете следующее: "Карты давно утеряны, но отшельник в старом храме обещал помочь. Понятия не имею, что и как он сделает, но если это поможет найти Лсэрианотр -- пусть делает что считает нужным". ]], code [[ psub('iyh1_sub'); ]]}; + {tag= "iyh1_aikerjarr", false, "Я поговорил с навьярами. Аикерьярр отрицает причастность Ираафаанотра к краже реликвии из Дипатреанотра. Ривеерр же открыто признает, что навьяры Дипатреанотра забрали ценности из Ираафаанотра.", [[Светлова разводит руками: "Теперь вы в курсе ситуации. Аикерьярр, конечно, доверия не заслуживает, но Леарр говорила то же самое. Тем не менее, у нас есть зацепка -- записи Уильяма. Он мало что оставил нам, но среди найденного есть следующее сообщение", -- Екатерина достает из ящика блокнот и передает вам.^ Вы читаете следующее: "Карты давно утеряны, но отшельник в старом храме обещал помочь. Понятия не имею, что и как он сделает, но если это поможет найти Лсэрианотр -- пусть делает, что считает нужным". ]], code [[ psub('iyh1_sub'); ]]}; + {tag="more_questions", "У меня есть несколько вопросов.", [[Светлова кивает: "Спрашивайте".]], code [[ psub('ask_more'); ]]}; + {always = true, "Я пойду.", [[Светлова возвращается ко своим бумагам: "До встречи". ]], code [[ back(); ]]}; {tag= "iyh1_sub"}; {"Старый храм?", [[Светлова пожимает плечами: "К сожалению, у меня нет ничего кроме намеков. Предполагаю, что где-то здесь может быть еще один храм навьяров, возможно стоит расспросить их?" ]]}; {"Я хотел бы посетить храм Дипатреанотра.", [[Светлова отвечает: "Не думаю, что это хорошая идея. Навьяры не пускают никого внутрь". ]], code [[ pon('outside');]]}; - {tag = "outside", false, "Возможно, самое интересное находится снаружи храма.", [[Светлова соглашается: "Возможно. В любом случае -- прошло уже достаточно много времени, чтобы хоть какие-то следы сохранились". ]], code [[ pret(); ]]}; + {tag = "outside", false, "Возможно, самое интересное находится снаружи храма.", [[Светлова соглашается: "Возможно. В любом случае -- прошло уже достаточно много времени, чтобы хоть какие-то следы сохранились. Я даю вам разрешение отправиться туда. Но перед этим, вам лучше поговорить с навьярами на станции". Екатерина достает из ящика стола свернутую карту и передает вам со словами: "Это поможет вам найти храм". ]], code [[ dypatreanotrr_temple_found = true; atl_iyh_state = 2; pret(); ]]}; {tag = "ignis_sabotage"}; {"Даркстар считает, что причиной пожара был саботаж", function(s) psub("generic"); @@ -865,9 +1147,33 @@ char_svetlova_dlg = dlg { {tag="so_answer"}; {"Да, пожалуй вы правы", [[Екатерина Светлова отвечает: "Отлично. Осталось дождаться, когда вам позволят покидать станцию". ]]}; {"А что будет, если мы принесем им реликвию, которая должна по их мнению быть в Ираафаанотре? Разве они не посчитают, что мы украли ее оттуда? ", [[Екатерина Светлова недовольно отвечает: "Поступайте как знаете. Если ваши действия повредят станции, то Левиафана вам не видать". ]], code [[ back(); ]]}; - {tag="iyh_more"}; - {"Я могу чем-то еще помочь?", [[Екатерина Светлова отвечает: "Пока у нас нет для вас заданий, но возможно позже появится что-то. Сейчас вы можете продолжать ваши поиски". ]]}; - {"Спасибо за помощь, я пойду", [[Екатерина Светлова прощается с вами: "До встречи. Удачи в поисках Уильяма".]], code [[ back(); ]]}; + {tag="learr_back"}; + {"Конечно, Леарр будет крайне полезна в нашей экспедиции.", [[Леарр, все это время молча стоявшая рядом, отвечает: "Я благодарю тебя-Дрейк. Ты помог нам-Ираафаанотру-и-Дипатреанотру. Я разрушение-храма-понимаю. Другого-пути не-было". ^Светлова кивает: "Этот вопрос решен. Переходим к следующему. Вы говорили, что нашли фрагмент карты. Можете показать его?"]], code [[ + table.insert(pl.party, 'learr'); + move(char_learr, char_learr.home); + remove("char_learr_atlantis", where("char_learr_atlantis")); + psub("iyh_more"); + ]]}; + {"Нет, мы справимся без ее помощи.", [[Леарр, все это время молча стоявшая рядом, кивает: "Я предпочла-бы-участвовать-в-экспедиции".]], code [[ + psub("learr_back2"); + ]]}; + {tag="learr_back2"}; + {"Хорошо, возвращайся на Левиафан.", [[Леарр отвечает: "Я благодарю тебя-Дрейк. Ты помог нам-Ираафаанотру-и-Дипатреанотру. Я разрушение-храма-понимаю. Другого-пути не-было". ^Светлова кивает: "Этот вопрос решен. Переходим к следующему. Вы говорили, что нашли фрагмент карты. Можете показать его?" ]], code [[ + table.insert(pl.party, 'learr'); + move(char_learr, char_learr.home); + remove("char_learr_atlantis", where("char_learr_atlantis")); + psub("iyh_more"); + ]]}; + {"Нет, оставайся на Атлантиде", [[Леарр разочарованно отвечает: "Я на-Атлантиде-останусь", -- и выходит из комнаты. ^Светлова качает головой: "Вы зря отказались от ее помощи, Дрейк. Навьяр на борту мог бы оказаться очень полезен. Но, к делу. Вы говорили, что нашли фрагмент карты. Можете показать его?" ]], [[ + move("char_learr_atlantis", "atl_oculus_library"); + psub("iyh_more"); + ]]}; + {tag="iyh_more"}; + {"[Передать фрагмент карты] Да, конечно. Мы нашли это в скрытом помещении в храме.", [[Екатерина Светлова с интересом рассматривает табличку: "Удивительно, эта карта сильно отличается от других навьярских карт, виденных нами. Обратите внимание, на количество деталей -- здесь не только отмечены условными символами три-четыре ориентира. Здесь их десятки, если не сотни. Попробуйте разузнать побольше в Ираафаанотре и Дипатреанотре". Екатерина Светлова сообщает вам местонахождение Ираафаанотра и Дипатреанотра. ]], code [[ + iraaphaanotrr_found = true; + dypatreanotrr_found = true; + psub("generic"); + ]]}; }; }; @@ -875,16 +1181,72 @@ char_michael_wright_dlg = dlg { var { state = 0; lfc_dialog = false; + lfc_out_dialog = false; + lfc_goldman_execute = 0; + lfc_goldman_imprison = 1; + lfc_goldman_banish = 0; + lfc_leroy_execute = 0; + lfc_leroy_imprison = 1; + lfc_leroy_banish = 0; + dyp_quest = false; }; nam = "Майкл Райт"; disp = "Майкл Райт"; - entered = function(s) + + reset_more = function(s) + poff("on_drake", "on_black", "on_darkstar", "on_svetlova", "on_moreau", "on_wright", "on_leroy", "on_jones", "on_goldman", "on_atlantis", "on_navjiarr", "on_learr", "on_aikerjarr", "on_ryveerr", "more_questions"); + if (atl_rep_wright < 0) then + if (char_michael_wright.drake_asked == 0) then pon("on_drake"); pon("more_questions"); end; + if (char_michael_wright.black_asked == 0) then pon("on_black"); pon("more_questions"); end; + if (char_michael_wright.darkstar_asked == 0) then pon("on_darkstar"); pon("more_questions"); end; + if (char_michael_wright.svetlova_asked == 0) then pon("on_svetlova"); pon("more_questions"); end; + if (char_michael_wright.moreau_asked == 0) then pon("on_moreau"); pon("more_questions"); end; + if (char_michael_wright.wright_asked == 0) then pon("on_wright"); pon("more_questions"); end; + + if (atl_iof_completed) then + if (char_michael_wright.leroy_asked == 0) then pon("on_leroy"); pon("more_questions"); end; + if (char_michael_wright.jones_asked == 0) then pon("on_jones"); pon("more_questions"); end; + if (char_michael_wright.goldman_asked == 0) then pon("on_goldman"); pon("more_questions"); end; + end; + + if (char_michael_wright.atlantis_asked == 0) then pon("on_atlantis"); pon("more_questions"); end; + if (char_michael_wright.navjiarr_asked == 0) then pon("on_navjiarr"); pon("more_questions"); end; + if (char_michael_wright.learr_asked == 0) then pon("on_learr"); pon("more_questions"); end; + if (char_michael_wright.ryveerr_asked == 0) then pon("on_ryveerr"); pon("more_questions"); end; + if (atl_iof_learr_dead and char_michael_wright.aikerjarr_asked == 0) then pon("on_aikerjarr"); pon("more_questions"); end; + else + if (char_michael_wright.drake_asked < 2) then pon("on_drake"); pon("more_questions"); end; + if (char_michael_wright.black_asked < 2) then pon("on_black"); pon("more_questions"); end; + if (char_michael_wright.darkstar_asked < 2) then pon("on_darkstar"); pon("more_questions"); end; + if (char_michael_wright.svetlova_asked < 2) then pon("on_svetlova"); pon("more_questions"); end; + if (char_michael_wright.moreau_asked < 2) then pon("on_moreau"); pon("more_questions"); end; + if (char_michael_wright.wright_asked < 2) then pon("on_wright"); pon("more_questions"); end; + if (atl_iof_completed) then + if (char_michael_wright.leroy_asked < 2) then pon("on_leroy"); pon("more_questions"); end; + if (char_michael_wright.jones_asked < 2) then pon("on_jones"); pon("more_questions"); end; + if (char_michael_wright.goldman_asked < 2) then pon("on_goldman"); pon("more_questions"); end; + end; + + if (char_michael_wright.atlantis_asked < 2) then pon("on_atlantis"); pon("more_questions"); end; + if (char_michael_wright.navjiarr_asked < 2) then pon("on_navjiarr"); pon("more_questions"); end; + if (char_michael_wright.learr_asked < 2) then pon("on_learr"); pon("more_questions"); end; + if (atl_iof_learr_dead and char_michael_wright.learr_asked < 3) then pon("on_learr"); pon("more_questions"); end; + if (char_michael_wright.ryveerr_asked < 2) then pon("on_ryveerr"); pon("more_questions"); end; + if (atl_iof_learr_dead and char_michael_wright.aikerjarr_asked < 2) then pon("on_aikerjarr"); pon("more_questions"); end; + end; + end; + + enter = function(s) + if dyp_quest_state == 1 and not s.dyp_quest then + s.dyp_quest = true; + pon('dyp_quest'); + end; if (atl_lfc_panic_warning == 2 and atl_lfc_panic == 2 and atl_lfc_state == 1) then psub("lfc_warning"); - return [[Екатерина Светлова сообщает вам: "Добрый день Винсент Даркстар просил вас срочно поговорить с ним". ]]; + return [[Майкл Райт сообщает вам: "Добрый день. Винсент Даркстар просил вас срочно поговорить с ним". ]]; end; - - if (atl_nih_state == 2) then + poff('nih_fixed'); + if atl_nih_state == 2 or atl_nih_state == 1 then pon('nih_fixed'); end; @@ -897,45 +1259,7 @@ char_michael_wright_dlg = dlg { pon('sabotage', 'ignis_what'); end; - if (atl_rep_wright < 0) then - if (char_michael_wright.drake_asked == 0) then pon("on_drake"); end; - if (char_michael_wright.black_asked == 0) then pon("on_black"); end; - if (char_michael_wright.darkstar_asked == 0) then pon("on_darkstar"); end; - if (char_michael_wright.svetlova_asked == 0) then pon("on_svetlova"); end; - if (char_michael_wright.moreau_asked == 0) then pon("on_moreau"); end; - if (char_michael_wright.wright_asked == 0) then pon("on_wright"); end; - - if (atl_iof_completed) then - if (char_michael_wright.leroy_asked == 0) then pon("on_leroy"); end; - if (char_michael_wright.jones_asked == 0) then pon("on_jones"); end; - if (char_michael_wright.goldman_asked == 0) then pon("on_goldman"); end; - end; - - if (char_michael_wright.atlantis_asked == 0) then pon("on_atlantis"); end; - if (char_michael_wright.navjiarr_asked == 0) then pon("on_navjiarr"); end; - if (char_michael_wright.learr_asked == 0) then pon("on_learr"); end; - if (char_michael_wright.ryveerr_asked == 0) then pon("on_ryveerr"); end; - if (atl_iof_learr_dead and char_michael_wright.aikerjarr_asked == 0) then pon("on_aikerjarr"); end; - else - if (char_michael_wright.drake_asked < 2) then pon("on_drake"); end; - if (char_michael_wright.black_asked < 2) then pon("on_black"); end; - if (char_michael_wright.darkstar_asked < 2) then pon("on_darkstar"); end; - if (char_michael_wright.svetlova_asked < 2) then pon("on_svetlova"); end; - if (char_michael_wright.moreau_asked < 2) then pon("on_moreau"); end; - if (char_michael_wright.wright_asked < 2) then pon("on_wright"); end; - if (atl_iof_completed) then - if (char_michael_wright.leroy_asked < 2) then pon("on_leroy"); end; - if (char_michael_wright.jones_asked < 2) then pon("on_jones"); end; - if (char_michael_wright.goldman_asked < 2) then pon("on_goldman"); end; - end; - - if (char_michael_wright.atlantis_asked < 2) then pon("on_atlantis"); end; - if (char_michael_wright.navjiarr_asked < 2) then pon("on_navjiarr"); end; - if (char_michael_wright.learr_asked < 2) then pon("on_learr"); end; - if (atl_iof_learr_dead and char_michael_wright.learr_asked < 3) then pon("on_learr"); end; - if (char_michael_wright.ryveerr_asked < 2) then pon("on_ryveerr"); end; - if (atl_iof_learr_dead and char_michael_wright.aikerjarr_asked < 2) then pon("on_aikerjarr"); end; - end; + s:reset_more(); if (atl_iof_completed and char_michael_wright.iof_reaction == 0) then char_michael_wright.iof_reaction = 1; @@ -951,29 +1275,106 @@ char_michael_wright_dlg = dlg { end; elseif (atl_nih_state == 3 and atl_iof_completed and atl_fta_state == 0) then atl_fta_state = 1; + psub("fta_agree"); return [[Майкл Райт просматривает какие-то чертежи. Как только вы подходите, он отвлекается и приветствует вас: "Добрый день. У меня есть для вас работа. Сейчас все наши бригады заняты, поэтому я прошу вас помочь с обслуживанием Солиса. Приходите туда и свяжитесь со мной по телефону, я дам вам инструкции". ]]; elseif (atl_fta_state == 2) then atl_fta_state = 3; psub("fta_deb"); return [[Майкл Райт протягивает вам руку: "Только благодаря вам, мы все еще здесь. Я с радостью сообщу Моро, что я за возвращение вам Левиафана". ]]; else + if atl_lfc_state == 4 then + if not s.lfc_out_dialog then + s.lfc_out_dialog = true; + if atl_rep_svetlova >= 0 then + if atl_lfc_goldman_exposed then + poff("leroy"); + else + poff("both", "goldman_1", "goldman_2", "goldman_3", "goldman_4", "goldman_5", "goldman_6", "goldman_7"); + end; + psub("lfc_saboteur"); + return [[Майкл Райт просматривает какие-то чертежи. Как только вы подходите, он отвлекается и приветствует вас: "Добрый день. Даркстар сказал, что вы зайдете обсудить поимку саботажников. Я вас слушаю". ]]; + else + psub("generic"); + return [[Майкл Райт просматривает какие-то чертежи. Как только вы подходите, он отвлекается и приветствует вас: "Добрый день. Если вы пришли обсудить поимку саботажников, то у меня нет на это времени". ]]; + end; + end; + end; + psub("generic"); return [[Майкл Райт просматривает какие-то чертежи. Как только вы подходите, он отвлекается и приветствует вас: "Добрый день. Чем могу быть полезен?" ]]; end; end; phr = { + {tag="lfc_saboteur"}; + {tag="both","Что вы будете делать с саботажниками?", [[Майкл Райт отвечает: "Я думаю стоит подержать их немного взаперти. Пусть подумают над своим поведением. Когда вернется Уильям, будем решать, что делать с ними дальше". ]]}; + {tag="goldman_1", "Одному сумасшедшему никто не поверит, Голдмана стоит отпустить. ", [[Майкл Райт кивает: "Соглашусь с вами. Просто выкинем его на поверхность". ]], code [[ + char_michael_wright_dlg.lfc_goldman_banish = 1; + poff("goldman_1", "goldman_2", "goldman_3", "goldman_4", "goldman_5", "goldman_6", "goldman_7"); + ]]}; + {tag="goldman_2", "Голдман -- трус. Он никому ничего не скажет. Его можно отправить на поверхность. ", [[Майкл Райт кивает: "Соглашусь с вами. Просто выкинем его на поверхность". ]], code [[ + char_michael_wright_dlg.lfc_goldman_banish = 1; + poff("goldman_1", "goldman_2", "goldman_3", "goldman_4", "goldman_5", "goldman_6", "goldman_7"); + ]]}; + {tag="goldman_3", "Голдман хитер. На станции он представляет большую опасность, чем вне ее. ", [[Майкл Райт ухмыляется: "Это этот-то хитер?" ]], code [[ + poff("goldman_1", "goldman_2", "goldman_3", "goldman_4", "goldman_5", "goldman_6", "goldman_7"); + ]]}; + {tag="goldman_4", "Голдман просто хотел выбраться отсюда. Пусть убирается с Атлантиды. ", [[Майкл Райт кивает: "Соглашусь с вами. Просто выкинем его на поверхность". ]], code [[ + char_michael_wright_dlg.lfc_goldman_banish = 1; + poff("goldman_1", "goldman_2", "goldman_3", "goldman_4", "goldman_5", "goldman_6", "goldman_7"); + ]]}; + {tag="goldman_5", "Отпускать Голдмана на поверхность нельзя. Единственный выход -- смертная казнь. ", [[Майкл Райт отрицательно качает головой: "Леонард хороший человек. Все мы совершаем ошибки". ]], code [[ + atl_rep_wright = atl_rep_wright - 1; + poff("goldman_1", "goldman_2", "goldman_3", "goldman_4", "goldman_5", "goldman_6", "goldman_7"); + ]]}; + {tag="goldman_6", "Голдман подверг опасности все наше дело. Единственный выход -- смертная казнь. ", [[Майкл Райт отрицательно качает головой: "Леонард хороший человек. Все мы совершаем ошибки". ]], code [[ + atl_rep_wright = atl_rep_wright - 1; + poff("goldman_1", "goldman_2", "goldman_3", "goldman_4", "goldman_5", "goldman_6", "goldman_7"); + ]]}; + {tag="goldman_7", "Голдман хитер. Вне станции он будет не менее опасен, чем на ней. ", [[Майкл Райт ухмыляется: "Это этот-то хитер?" ]], code [[ + poff("goldman_1", "goldman_2", "goldman_3", "goldman_4", "goldman_5", "goldman_6", "goldman_7"); + ]]}; + {tag="leroy", "Что вы будете делать с саботажником?", [[Екатерина Светлова отвечает, не задумываясь: "Запереть его в темной камере, пока не раскается в своих действиях, а потом посмотрим". ]]}; + {tag="leroy_1", "Одному сумасшедшему никто не поверит, Леруа стоит отпустить. ", [[Майкл Райт кивает: "Соглашусь с вами. Просто выкинем его на поверхность". ]], code [[ + char_michael_wright_dlg.lfc_goldman_banish = 1; + poff("leroy_1", "leroy_2", "leroy_3", "leroy_4", "leroy_5", "leroy_6", "leroy_7"); + ]]}; + {tag="leroy_2", "Леруа -- трус. Он никому ничего не скажет. Его можно отправить на поверхность. ", [[Майкл Райт ухмыляется: "Это этот-то трус?" ]], code [[ + poff("leroy_1", "leroy_2", "leroy_3", "leroy_4", "leroy_5", "leroy_6", "leroy_7"); + ]]}; + {tag="leroy_3", "Леруа хитер. На станции он представляет большую опасность, чем вне ее. ", [[Майкл Райт кивает: "Соглашусь с вами. Просто выкинем его на поверхность". ]], code [[ + char_michael_wright_dlg.lfc_leroy_banish = 1; + poff("leroy_1", "leroy_2", "leroy_3", "leroy_4", "leroy_5", "leroy_6", "leroy_7"); + ]]}; + {tag="leroy_4", "Леруа просто хотел выбраться отсюда. Пусть убирается с Атлантиды. ", [[Майкл Райт кивает: "Соглашусь с вами. Просто выкинем его на поверхность". ]], code [[ + char_michael_wright_dlg.lfc_leroy_banish = 1; + poff("leroy_1", "leroy_2", "leroy_3", "leroy_4", "leroy_5", "leroy_6", "leroy_7"); + ]]}; + {tag="leroy_5", "Отпускать Леруа на поверхность нельзя. Единственный выход -- смертная казнь. ", [[Майкл Райт задумчиво смотрит на вас: "Может вы и правы, но все же это тяжелый выбор". ]], code [[ + char_michael_wright_dlg.lfc_leroy_execute = 1; + poff("leroy_1", "leroy_2", "leroy_3", "leroy_4", "leroy_5", "leroy_6", "leroy_7"); + ]]}; + {tag="leroy_6", "Леруа подверг опасности все наше дело. Единственный выход -- смертная казнь. ", [[Майкл Райт задумчиво смотрит на вас: "Может вы и правы, но все же это тяжелый выбор". ]], code [[ + char_michael_wright_dlg.lfc_leroy_execute = 1; + poff("leroy_1", "leroy_2", "leroy_3", "leroy_4", "leroy_5", "leroy_6", "leroy_7"); + ]]}; + {tag="leroy_7", "Леруа хитер. Вне станции он будет не менее опасен, чем на ней. ", [[Майкл Райт отвечает: "Вот поэтому я и считаю, что его нужно держать под стражей. "]], code [[ + poff("leroy_1", "leroy_2", "leroy_3", "leroy_4", "leroy_5", "leroy_6", "leroy_7"); + ]]}; + {"Это все, что я хотел обсудить по данному вопросу. ", [[Екатерина Светлова кивает и спрашивает: "Что-нибудь еще?"]], code [[ psub("generic");]] }; {tag="lfc_warning"}; - {always=true, "Мне пора", [["До встречи", -- Майкл Райт возвращается к своим делам. ]], code [[ back(); ]]}; + {always=true, "Мне пора.", [["До встречи", -- Майкл Райт возвращается к своим делам. ]], code [[ back(); ]]}; {tag="iof_learr_dead"}; {"Мне очень жаль.", [[Майкл Райт кивает: "Утерянного не вернуть. Мы сделали выводы и постараемся не допустить опасных инцидентов в будущем". ]], code [[psub("generic");]]}; - {"Я чуть не погиб там!", [[Майкл Райт отворачивается от вас и произносит: "Приходите позже, я занят"]], code [[ atl_rep_wright = atl_rep_wright - 1; back(); ]]}; + {"Я чуть не погиб там!", [[Майкл Райт отворачивается от вас и произносит: "Приходите позже, я занят". ]], code [[ atl_rep_wright = atl_rep_wright - 1; back(); ]]}; {tag="iof_learr_suit"}; {"Я сделал, что должен был. ", [[Майкл Райт кивает: "И все же, не каждому пришла бы в голову идея облачить навьяра в скафандр".]], code [[psub("generic");]]}; {tag="iof_learr"}; {"Рад, что никто не пострадал. ", [[Майкл Райт кивает. ]], code [[ psub("generic"); ]]}; + {tag="fta_agree"}; + {"Хорошо, я сделаю, что смогу. ", [[Майкл Райт спрашивает: "Вы что-то еще хотели?" ]], code [[psub("generic"); ]]}; {tag="fta_deb"}; - {"[Пожать руку]Только я все еще не знаю, куда мне следует плыть", [[Майкл Райт кивает: "Мы сделаем все возможное, чтобы помочь вам. Светлова сказала мне, что вы помогаете ей в решении каких-то проблем с навьярами. По ее мнению, это может помочь вам в поисках". ]], code [[ psub('generic'); ]]}; - {"Просто верните мне Левиафан", [[Майкл Райт с сожалением произносит: "Не все так просто. Нужно, чтобы согласие дали еще Моро, Даркстар и Светлова". ]], code [[ psub('generic'); ]]}; + {"[Пожать руку] Только я все еще не знаю, куда мне следует плыть.", [[Майкл Райт кивает: "Мы сделаем все возможное, чтобы помочь вам. Светлова сказала мне, что вы помогаете ей в решении каких-то проблем с навьярами. По ее мнению, это может помочь вам в поисках". ]], code [[ psub('generic'); ]]}; + {"Просто верните мне Левиафан.", [[Майкл Райт с сожалением произносит: "Не все так просто. Нужно, чтобы согласие дали еще Моро, Даркстар и Светлова". ]], code [[ psub('generic'); ]]}; {tag="ask_more"}; {tag="on_drake", false, "Расскажите об Уильяме. ", function() if (atl_rep_wright < 0) then @@ -1000,10 +1401,10 @@ char_michael_wright_dlg = dlg { end}; {tag="on_black", false, "Расскажите об Адриане Блэке. ", function() if (atl_rep_wright < 0) then - char_michael_wright.drake_asked = 1; + char_michael_wright.black_asked = 1; return [[Майкл Райт отвечает: "Я не хочу об этом говорить". ]]; else - char_michael_wright.drake_asked = 2; + char_michael_wright.black_asked = 2; return [[Майкл райт отвечает: "Адриан -- университетский друг вашего отца. Он всегда уравновешивал Дрейка во многих отношениях. Там где Дрейк готов был пойти на риск, Блэк призывал к осторожности. Там где Дрейк соглашался на уступки, Блэк стоял до последнего. К слову, мою идею с субмариной Адриан не одобрил. К счастью, ваш отец все же позволил мне этим заняться". ]]; end; end}; @@ -1013,7 +1414,7 @@ char_michael_wright_dlg = dlg { return [[Майкл Райт отвечает: "Я не хочу об этом говорить". ]]; else char_michael_wright.darkstar_asked = 2; - return [[Майкл Райт отвечает: "Я почти ничего о нем не знаю. Впрочем не думаю, что кто-то на станции может сказать о нем что-то. Параноидальный тип. Я вообще не понимаю, как он согласился сюда пеерехать. Тогда он мне целый допрос устроил - чуть ли не в каждую линию на чертеже тыкал и спрашивал для чего это нужно. Думаю, мне стоит гордиться, что Атлантида прошла его проверку". ]]; + return [[Майкл Райт отвечает: "Я почти ничего о нем не знаю. Впрочем, не думаю, что кто-то на станции может сказать о нем что-то. Параноидальный тип. Я вообще не понимаю, как он согласился сюда пеерехать. Тогда он мне целый допрос устроил -- чуть ли не в каждую линию на чертеже тыкал и спрашивал для чего это нужно. Думаю, мне стоит гордиться, что Атлантида прошла его проверку". ]]; end; end}; {tag="on_svetlova", false, "Расскажите о Екатерине Светловой. ", function() @@ -1031,7 +1432,7 @@ char_michael_wright_dlg = dlg { return [[Майкл Райт отвечает: "Я не хочу об этом говорить". ]]; else char_michael_wright.moreau_asked = 2; - return [[Майкл Райт отвечает: "Фредерик с нами с самого начала. Хотя его влияние может показаться незначительным -- многие даже на станции не знали его, пока он не занял пост управляющего -- он все же делал важное дело. Благодаря ему мы смогли завершить многие проекты вовремя, ведь за все поставки материалов отвечал именно он. С управлением станцией он так же справляется неплохо, хотя здесь все гораздо проще, чем было на поверхности". ]]; + return [[Майкл Райт отвечает: "Фредерик с нами с самого начала. Хотя его влияние может показаться незначительным -- многие на станции даже не слышали о нем, пока он не занял пост управляющего -- он все же делал важное дело. Благодаря ему мы смогли завершить многие проекты вовремя, ведь за все поставки материалов отвечал именно он. С управлением станцией он так же справляется неплохо, хотя здесь все гораздо проще, чем было на поверхности". ]]; end; end}; {tag="on_wright", false, "Расскажите о себе. ", function() @@ -1041,9 +1442,9 @@ char_michael_wright_dlg = dlg { else char_michael_wright.wright_asked = 2; if (atl_jack_in_party) then - return [[Майкл Райт отвечает: "Родился я в Лондоне. Окончил один из местных университетов, получив специальность инженера-кораблестроителя. Вместе с вашим отцом, Фредериком Моро и Адрианом Блэком мы основали Вестхейвен Трансоушен. Поначалу моя работа была далеко не идеальной -- мы купили несколько старых кораблей и привели их в порядок. Мы довольно быстро заработали хорошую репутацию. Дела шли на подъем и, наконец, у нас появились собственные верфи. К этому времени я уже имел глупость жениться. Я спроектировал несколько судов для компании. Лучшим была Огненная Стрела -- быстроходный комфортабельный пароход, вмещающий больше двух сотен пассажиров. Ну и наконец мы построили Надежду. Сказать, что мы удивилсь, когда на первых же испытаниях мы встретили навьяров -- все равно, что ничего не сказать. К сожалению, встреча не прошла бескровно -- наши люди просто вышли поговорить, показать себя. А эти рыбни закидали несчастных супругов Барнз копьями! Блэк тогда не дал мне пустить торпеду в этих уродов, я до сих пор зол на него за это, хотя у мом понимаю, что он был прав. Да и не было бы никакой Атлантиды, убей я тогда тех навьяров. Несколько месяцев мы обсуждали, что делать дальше. Потом мы с Сильвией придумали Атлантиду и переселились сюда", - Райт вздыхает, - "В своем увлечении я позабыл обо всем. Я оставил свою жену, Элис, и сына, Джека, на поверхности. Если честно, я скорее жалею, что женился, чем что оставил их там. Это не делает мою ошибку меньше". ]]; + return [[Майкл Райт отвечает: "Родился я в Лондоне. Окончил один из местных университетов, получив специальность инженера-кораблестроителя. Вместе с вашим отцом, Фредериком Моро и Адрианом Блэком мы основали Вестхейвен Трансоушен. Поначалу моя работа была далеко не идеальной -- мы купили несколько старых кораблей и привели их в порядок. Мы довольно быстро заработали хорошую репутацию. Дела шли на подъем и, наконец, у нас появились собственные верфи. К этому времени я уже имел глупость жениться. Я спроектировал несколько судов для компании. Лучшим была Огненная Стрела -- быстроходный комфортабельный пароход, вмещающий больше двух сотен пассажиров. Ну и наконец мы построили Надежду. Сказать, что мы удивилсь, когда встретили навьяров -- ничего не сказать. К сожалению, встреча не прошла бескровно -- наши люди просто вышли поговорить, показать себя. А эти рыбни закидали несчастных супругов Барнз копьями! Блэк тогда не дал мне пустить торпеду в этих уродов, и я до сих пор зол на него за это, хотя умом понимаю, что он был прав. Да и не было бы никакой Атлантиды, убей я тогда тех навьяров. Несколько месяцев мы обсуждали, что делать дальше. Потом мы с Сильвией придумали Атлантиду и переселились сюда, -- Райт вздыхает, -- В своем увлечении я позабыл обо всем. Я оставил свою жену, Элис, и сына, Джека, на поверхности. Если честно, я скорее жалею, что женился, чем что оставил их там. Это не делает мою ошибку меньше". ]]; else - return [[Майкл Райт отвечает: "Родился я в Лондоне. Окончил один из местных университетов, получив специальность инженера-кораблестроителя. Вместе с вашим отцом, Фредериком Моро и Адрианом Блэком мы основали Вестхейвен Трансоушен. Поначалу моя работа была далеко не идеальной -- мы купили несколько старых кораблей и привели их в порядок. Мы довольно быстро заработали хорошую репутацию. Дела шли на подъем и, наконец, у нас появились собственные верфи. К этому времени я уже имел глупость жениться. Я спроектировал несколько судов для компании. Лучшим была Огненная Стрела -- быстроходный комфортабельный пароход, вмещающий больше двух сотен пассажиров. Ну и наконец мы построили Надежду. Сказать, что мы удивилсь, когда на первых же испытаниях мы встретили навьяров -- все равно, что ничего не сказать. К сожалению, встреча не прошла бескровно -- наши люди просто вышли поговорить, показать себя. А эти рыбни закидали несчастных супругов Барнз копьями! Блэк тогда не дал мне пустить торпеду в этих уродов, я до сих пор зол на него за это, хотя у мом понимаю, что он был прав. Да и не было бы никакой Атлантиды, убей я тогда тех навьяров. Несколько месяцев мы обсуждали, что делать дальше. Потом мы с Сильвией придумали Атлантиду и переселились сюда". ]]; + return [[Майкл Райт отвечает: "Родился я в Лондоне. Окончил один из местных университетов, получив специальность инженера-кораблестроителя. Вместе с вашим отцом, Фредериком Моро и Адрианом Блэком мы основали Вестхейвен Трансоушен. Поначалу моя работа была далеко не идеальной -- мы купили несколько старых кораблей и привели их в порядок. Мы довольно быстро заработали хорошую репутацию. Дела шли на подъем и, наконец, у нас появились собственные верфи. К этому времени я уже имел глупость жениться. Я спроектировал несколько судов для компании. Лучшим была Огненная Стрела -- быстроходный комфортабельный пароход, вмещающий больше двух сотен пассажиров. Ну и наконец мы построили Надежду. Сказать, что мы удивилсь, когда встретили навьяров -- ничего не сказать. К сожалению, встреча не прошла бескровно -- наши люди просто вышли поговорить, показать себя. А эти рыбни закидали несчастных супругов Барнз копьями! Блэк тогда не дал мне пустить торпеду в этих уродов, и я до сих пор зол на него за это, хотя умом понимаю, что он был прав. Да и не было бы никакой Атлантиды, убей я тогда тех навьяров. Несколько месяцев мы обсуждали, что делать дальше. Потом мы с Сильвией придумали Атлантиду и переселились сюда". ]]; end; end; end}; @@ -1080,7 +1481,7 @@ char_michael_wright_dlg = dlg { return [[Майкл Райт отвечает: "Я не хочу об этом говорить". ]]; else char_michael_wright.atlantis_asked = 2; - return [[Майкл Райт отвечает: "Идея построить постоянную подводную станцию пришла мне в голову через некоторое время после завершения Надежды. Думаю, что не встреть мы тогда навьяров, Дрейк не позволил бы мне заниматься этим. Но его явно заинтересовала возможность постоянного пребывания вблизи этих рыбней. Конечно, если бы не Сильвия, я никогда не смог бы сделать станцию автономной -- я долго думал, как обеспечить нас всем необходимым здесь: едой, электричеством, воздухом, инструментами. Еду и воздух мы получаем в секции Аэрис. Электричество получаем сжигая топливо нескольких видов - растения, выращиваемые в Аэрисе и уголь, выменянный у навьяров. С инструментами дале обстоят сложнее всего. Но тут нас снова выручают навьяры, с готовностью предлагая нам металл, который они не умеют обрабатывать". ]]; + return [[Майкл Райт отвечает: "Идея построить постоянную подводную станцию пришла мне в голову через некоторое время после завершения Надежды. Думаю, что не встреть мы тогда навьяров, Дрейк не позволил бы мне заниматься этим. Но его явно заинтересовала возможность постоянного пребывания вблизи этих рыбней. Конечно, если бы не Сильвия, я никогда не смог бы сделать станцию автономной -- я долго думал, как обеспечить нас всем необходимым здесь: едой, электричеством, воздухом, инструментами. Еду и воздух мы получаем в секции Аэрис. Электричество получаем сжигая топливо нескольких видов: растения, выращиваемые в Аэрисе и уголь, выменянный у навьяров. С инструментами дела обстоят сложнее всего. Но тут нас снова выручают навьяры, с готовностью предлагая нам металл, который они не умеют обрабатывать". ]]; end; end}; {tag="on_navjiarr", false, "Что вы думаете о навьярах? ", function() @@ -1089,7 +1490,7 @@ char_michael_wright_dlg = dlg { return [[Майкл Райт отвечает: "Я не хочу об этом говорить". ]]; else char_michael_wright.navjiarr_asked = 2; - return [[Майкл Райт отвечает: "Они меня мало волнуют. Хотя станция существует во многом благодаря сотрудничеству с ними, я предпочитаю поменьше общаться с ними. У меня все еще стоят перед глазами проткнутые кораллловыми копьями тела Ребекки и Нила". ]]; + return [[Майкл Райт отвечает: "Они меня мало волнуют. Хотя станция существует во многом благодаря сотрудничеству с ними, я предпочитаю поменьше общаться с ними. У меня все еще стоят перед глазами проткнутые коралловыми копьями тела Ребекки и Нила". ]]; end; end}; {tag="on_learr", false, "Что вы думаете о Леарр? ", function() @@ -1124,10 +1525,20 @@ char_michael_wright_dlg = dlg { return [[Майкл Райт отвечает: "Не думаю, что могу что-то о нем сказать. Я видел его один раз, при встрече и не могу сказать, что впечатление было благоприятным. Слишком заносчивый он". ]]; end; end}; - {always=true, "Вернемся к делу.", [[Майкл Райт кивает: "Хорошо".]], code [[ pret(); ]]}; + {always=true, "Вернемся к делу.", [[Майкл Райт кивает: "Хорошо".]], code [[ char_michael_wright_dlg:reset_more(); pret(); ]]}; {tag="generic"}; - {tag="nih_fixed", false, "Я нашел утечку", [[Майкл Райт кивает: "Спасибо, я отправлю туда человека, чтобы он все поправил. Пока у меня больше нет для вас заданий". ]], code [[ atl_nih_state = 3; atl_rep_wright = atl_rep_wright + 1; ]]}; - {tag="sabotage", false, "Даркстар считает, что пожар начался из-за саботажа", function(s) + {tag="dyp_quest", false, "Вождь Дипатреанотра просил меня принести \"светящуюся капсулу\". Что мы можем ему предложить?", [[ Майкл Райт говорит: "Можете взять один из фонарей из того шкафа", -- Майкл показывает рукой на шкаф в другом конце мастерской, -- "И не забудьте захватить пару-тройку запасных батарей. Их можете взять там же". ]], code [[ item_electric_lamp:enable(); ]]}; + {tag="nih_fixed", false, "Я нашел утечку.", function(s) + if atl_nih_state == 2 then + atl_nih_state = 3; + disable_nih(); + atl_rep_wright = atl_rep_wright + 1 + return [[Майкл Райт кивает: "Спасибо, Дрейк. Приборы показывают, что утечка устранена". ]] + else + return [[Майкл Райт отрицательно качает головой: "Что-то не так. Приборы показывают, что утечка все еще присутствует. Возможно, были повреждены несколько труб. Перепроверьте, пожалуйста". ]] + end; + end}; + {tag="sabotage", false, "Даркстар считает, что пожар начался из-за саботажа.", function(s) atl_rep_wright = atl_rep_wright - 1; local part1 = [[Майкл Райт недовольно ворчит: "Пожалуйста, не лезьте в это дело. За безопасность станции отвечает Винсент Даркстар и лучше будет, если он будет заниматься этим делом]]; if (not atl_jack_in_party) then @@ -1138,18 +1549,22 @@ char_michael_wright_dlg = dlg { end; end}; {tag="ignis_what", false, "Из-за чего начался пожар в Игнисе?", [[Майкл Райт отвечает: "Короткое замыкание. Рядом, к сожалению, никого не оказалось и потушить возгорание вовремя не удалось. Огонь быстро распространился по всей секции, ну а дальше вы все знаете". ]]}; - {always=true, "У меня есть несколько вопросов.", [[Майкл Райт отвечает: "Задавайте, посмотрим чем смогу помочь".]], code [[ psub('ask_more'); ]]}; - {always=true, "Мне пора", function(s) + {tag="more_questions", "У меня есть несколько вопросов.", [[Майкл Райт отвечает: "Задавайте, посмотрим чем смогу помочь".]], code [[ psub('ask_more'); ]]}; + {always=true, "Мне пора.", function(s) if (atl_nih_state == 0 and atl_jack_in_party) then atl_nih_state = 3; end; if (atl_nih_state == 0 and not atl_jack_in_party) then atl_nih_init(); - pr([["Кстати, у меня есть для вас небольшое задание. У нас где-то утечка воздуха. Ничего критичного. Просто прогуляйтесь по станции и если обнаружите, где это - сообщите мне. До встречи", -- Майкл Райт возвращается к своим делам. ]]); + pr([["Кстати, у меня есть для вас небольшое задание. У нас где-то утечка воздуха. Ничего критичного, но у нас некому заняться этим. Вы могли бы прогуляться по станции и найти и исправить поломку. Проще всего будет просто заменить трубы на такие же. В случае возникновения проблем -- попросите у Мари в библиотеке документацию по воздуховодам, она даст вам все необходимое. Запасные вы найдете здесь или на складе в Акве. До встречи", -- Майкл Райт возвращается к своим делам. ]]); + psub("bq"); else pr([["До встречи", -- Майкл Райт возвращается к своим делам. ]]); + back(); end; - end, code [[ back(); ]]}; + end}; + {tag="bq"}; + {"Хорошо, я сделаю что смогу.", [["До встречи", -- Майкл Райт возвращается к своим делам. ]], code [[ back(); ]]}; {tag="son"}; {"Мать Джека умерла, а сам он прозябает в своем доме ничего не делая. ", [[Майкл Райт вздыхает: "Жаль, что все так вышло. Спасибо, что честно сказали мне. Наверное..."]], code[[pret();]]}; {"Мать Джека умерла, но с ним все в порядке. Он все еще живет в вашем доме. ", [[Майкл Райт вздыхает: "Элис...". ]], code[[pret();]]}; @@ -1164,7 +1579,47 @@ char_anna_atlantis_dlg = dlg { }; nam = "Анна Рэдклифф"; disp = "Анна Рэдклифф"; - entered = function(s) + + reset_more = function(s) + poff("on_anna", "on_walter", "on_atlantis", "on_drake", "more_questions"); + if (rel_anna < 0) then + if (char_anna.anna_asked == 0) then + pon("on_anna"); + pon("more_questions"); + end; + if (char_anna.walter_asked == 0) then + pon("on_walter"); + pon("more_questions"); + end; + if (char_anna.atlantis_asked == 0) then + pon("on_atlantis"); + pon("more_questions"); + end; + if (char_anna.drake_asked == 0) then + pon("on_drake"); + pon("more_questions"); + end; + else + if (char_anna.anna_asked < 2) then + pon("on_anna"); + pon("more_questions"); + end; + if (char_anna.walter_asked < 2) then + pon("on_walter"); + pon("more_questions"); + end; + if (char_anna.atlantis_asked < 2) then + pon("on_atlantis"); + pon("more_questions"); + end; + if (char_anna.drake_asked < 2) then + pon("on_drake"); + pon("more_questions"); + end; + end; + end; + + enter = function(s) if (atl_lfc_state ~= 1) then poff('sabotage', 'ignis_what'); end; @@ -1174,45 +1629,12 @@ char_anna_atlantis_dlg = dlg { pon('sabotage', 'ignis_what'); end; - --[[ - anna_asked = 0; - walter_asked = 0; - atlantis_asked = 0; - drake_asked = 0; - ]] - poff("on_anna", "on_walter", "on_atlantis", "on_drake"); - if (rel_anna < 0) then - if (char_anna.anna_asked == 0) then - pon("on_anna"); - end; - if (char_anna.walter_asked == 0) then - pon("on_walter"); - end; - if (char_anna.atlantis_asked == 0) then - pon("on_atlantis"); - end; - if (char_anna.drake_asked == 0) then - pon("on_drake"); - end; - else - if (char_anna.anna_asked < 2) then - pon("on_anna"); - end; - if (char_anna.walter_asked < 2) then - pon("on_walter"); - end; - if (char_anna.atlantis_asked < 2) then - pon("on_atlantis"); - end; - if (char_anna.drake_asked < 2) then - pon("on_drake"); - end; - end; + s:reset_more(); if (s.state == 0) then s.state = 1; psub("first_meeting"); - return [[Перед вами стоит девушка лет двадцати-пяти--тридцати. Каштановые волосы ниспадают на плечи. Зеленые глаза внимательно следят за движениями навьяра, с которым она разговаривает. Заметив вас, она просит навьяра подождать и обращается к вам: "Приветствую. Вы, должно быть господин Дрейк? Мое имя Анна Рэдклифф". ]]; + return [[Перед вами стоит девушка лет двадцати-пяти--тридцати. Каштановые волосы ниспадают на плечи. Зеленые глаза внимательно следят за движениями навьяра, с которым она разговаривает. Заметив вас, она просит навьяра подождать и обращается к вам: "Приветствую. Вы, должно быть, господин Дрейк? Мое имя Анна Рэдклифф". ]]; else psub("generic"); return [[Анна Рэдклифф разговаривает с навьяром, стоящим рядом. Заметив вас, она просит его подождать и обращается к вам: "Приветствую, вы что-то хотели?" ]]; @@ -1220,8 +1642,17 @@ char_anna_atlantis_dlg = dlg { end; phr = { {tag="first_meeting"}; - {"Да, я Дэвид Дрейк. Рад знакомству", [[Анна Рэдклифф улыбается и спрашивает: "Вы что-то хотели?" ]], code = [[ psub('generic'); ]]}; + {"Да, я Дэвид Дрейк. Рад знакомству. ", [[Анна Рэдклифф улыбается и спрашивает: "Вы что-то хотели?" ]], code = [[ psub('generic'); ]]}; {tag="ask_more"}; + {tag="on_anna", "Расскажите о себе. ", function(s) + if (rel_anna < 0) then + char_anna.anna_asked = 1; + return [[Анна Рэдклифф отвечает: "Я не хочу об этом с вами говорить". ]]; + else + char_anna.anna_asked = 2; + return [[Анна Рэдклифф грустно вздыхает: "Мне почти нечего рассказывать. Я с молодости живу здесь, на Атлантиде. Когда Уолтер сказал, что мы будем жить здесь, я сперва расстроилась -- тогда это казалось мне невероятно скучным -- жить вдалеке от цивилизации, среди людей, которые старше меня на двадцать с лишним лет. На самом деле все оказалось не столь плохо -- помимо навьяров, с которыми всегда интересно, я помогаю Екатерине и Сильвии с расшифровкой текстов или Мари в библиотеке". ]]; + end; + end}; {tag="on_walter", "Расскажите об Уолтере. ", function(s) if (rel_anna < 0) then char_anna.walter_asked = 1; @@ -1233,34 +1664,34 @@ char_anna_atlantis_dlg = dlg { end}; {tag="on_atlantis", "Что вы думаете об Атлантиде?", function(s) if (rel_anna < 0) then - char_anna.on_atlantis = 1; + char_anna.atlantis_asked = 1; return [[Анна Рэдклифф отвечает: "Я не хочу об этом с вами говорить". ]]; else - char_anna.on_atlantis = 2; - return [[Анна Рэдклифф отвечает: "Последние десять лет я живу здесь, на Атлантиде. Я хорошо помню, как расстроена я была, приехав сюда. Конечно, я не думала, что мы все проведем здесь лет десять. Мне казалось, что уже через полгода-год мы вернемся на поверхность, но намерения вашего отца сильно отличались от этого. Потом Екатерина и Сильвия познакомили меня с Телнеарром и Хетеарром -- двумя навьярами, которые первыми жили на станции. Потом Хетеарр вернулся домой, а вместо него на станцию прибыл Ривеерр. А затем покинул станцию и Телнеарр. Его заменила Леарр". ]]; + char_anna.atlantis_asked = 2; + return [[Анна Рэдклифф отвечает: "Последние десять лет я живу здесь, на Атлантиде. Я хорошо помню, как расстроена я была, приехав сюда. Конечно, я не думала, что мы все проведем здесь столько времени. Первое время мне казалось, что мы вот-вот закончим и вернемся на поверхность,но намерения вашего отца сильно отличались от этого. Почти сразу после прибытия Екатерина и Сильвия познакомили меня с Телнеарром и Хетеарром -- двумя навьярами, которые первыми жили на станции. Потом Хетеарр вернулся домой, а вместо него на станцию прибыл Ривеерр. А затем покинул станцию и Телнеарр. Его заменила Леарр". ]]; end; end}; {tag="on_drake", "Расскажите об Уильяме Дрейке. ", function(s) if (rel_anna < 0) then - char_anna.on_drake = 1; + char_anna.drake_asked = 1; return [[Анна Рэдклифф отвечает: "Я не хочу об этом с вами говорить". ]]; else - char_anna.on_drake = 2; + char_anna.drake_asked = 2; return [[Анна Рэдклифф отвечает: "Хотя Дрейк -- руководитель Атлантиды, он проводит больше времени здесь, в Окулусе, чем в своем кабинете в Доминусе. Сейчас он в экспедиции -- они с Блэком отправились на поиски отдаленных навьярских поселений". ]]; end; end}; - {always=true, "Вернемся к делу.", [[Анна Рэдклифф кивает: "Хорошо".]], code [[ pret(); ]]}; - {tag="generic"}; - {tag="on_anna", "Расскажите о себе. ", function(s) - if (rel_anna < 0) then - char_anna.anna_asked = 1; + {tag="on_black", "Расскажите об Адриане Блэке. ", function(s) + if rel_anna < 0 then + char_anna.black_asked = 1; return [[Анна Рэдклифф отвечает: "Я не хочу об этом с вами говорить". ]]; else - char_anna.anna_asked = 2; - return [[Анна Рэдклифф грустно вздыхает: "Мне почти нечего рассказывать. Я с молодости живу здесь, на Атлантиде. Когда Уолтер сказал, что мы будем жить здесь, я сперва расстроилась -- тогда это казалось мне невероятно скучным -- жить вдалеке от цивилизации, среди людей, которые старше меня на двадцать с лишним лет. На самом деле все оказалось не столь плохо -- здесь есть навьяры. Когда они заняты -- я сижу в библиотеке, с Мари, или смотрю фильмы в Игнисе". ]]; + char_anna.black_asked = 2; + return [[Анна Рэдклифф пожимает плечами: "Все вокруг говорят, что он хороший друг вашего отца, но мне почти не доводилось с ним общаться".]]; end; end}; - {tag="sabotage", "Вы знаете, что пожар в Игнисе - следствие саботажа?", function(s) + {always=true, "Вернемся к делу.", [[Анна Рэдклифф кивает: "Хорошо".]], code [[ char_anna_atlantis_dlg:reset_more(); pret(); ]]}; + {tag="generic"}; + {tag="sabotage", "Вы знаете, что пожар в Игнисе -- следствие саботажа?", function(s) atl_lfc_panic = atl_lfc_panic + 1; atl_rep_darkstar = atl_rep_darkstar - 1; rel_walter = rel_walter - 1; @@ -1268,8 +1699,8 @@ char_anna_atlantis_dlg = dlg { return [[Анна удивленно смотрит на вас: "Зачем вы это говорите? Кому может прийти в голову подобное?" ]]; end}; {tag="ignis_what", "Вы знаете, что произошло в Игнисе?", [[Анна отрицательно качает головой: "Мне почти ничего неизвестно. Поговорите с Даркстаром или Райтом. Или спросите моего брата, Уолтера. Я думаю он в курсе". ]]}; - {always=true, "У меня есть несколько вопросов.", [[Анна отвечает: "Да, я слушаю".]], code [[ psub('ask_more'); ]]}; - {always=true, "Я пойду", [[Анна прощается с вами: "До встречи". ]], code [[ back(); ]]}; + {tag="more_questions", "У меня есть несколько вопросов.", [[Анна отвечает: "Да, я слушаю".]], code [[ psub('ask_more'); ]]}; + {always=true, "Я пойду.", [[Анна прощается с вами: "До встречи". ]], code [[ back(); ]]}; }; }; @@ -1281,7 +1712,14 @@ char_learr_atlantis_dlg = dlg { }; nam = "Леарр"; disp = "Леарр"; - entered = function(s) + enter = function(s) + poff('iyh1', 'iyh2'); + if (atl_iyh_state == 1 and not atl_iyh_learr_spoken) then + pon('iyh1'); + elseif (atl_iyh_state == 2 and ArrayUtils.indexOf(pl.party, 'learr') == 0) then + pon('iyh2'); + end; + if (atl_lfc_state == 1 and not s.lfc_dialog) then s.lfc_dialog = true; pon('sabotage', 'ignis_what'); @@ -1312,16 +1750,6 @@ char_learr_atlantis_dlg = dlg { if (char_learr.on_books < 2) then pon("on_books") end; end; - poff('iyh1', 'iyh4', 'iyh5'); - if (atl_iyh_state == 1) then - pon('iyh1'); - elseif (atl_iyh_state == 2 and ArrayUtils.indexOf(pl.party, 'learr') == 0) then - pon('iyh2'); - elseif (atl_iyh_state == 4) then - pon("iyh4"); - elseif (atl_iyh_state == 5) then - pon("iyh5"); - end; psub("generic"); if (rel_learr > 0) then return [[Леарр поворачивается к вам, плавники ее принимают сине-зеленый оттенок, а она говорит: "Я рада-видеть тебя". ]]; @@ -1334,31 +1762,28 @@ char_learr_atlantis_dlg = dlg { {tag='offended'}; {"Монстр?", [[Леарр молча кивает. Оттенок головных плавников на мгновение сменяется на желтый, но затем снова становится фиолетовым: "Ты так-назвал меня. Мы будем-дальше-монстрами-называть друг-друга?" ]], code [[ psub('offended_yes_no') ]]}; {tag='offended_yes_no'}; - {"Не думаю", [[Леарр кивает, ее плавники медленно теряют цвет. Она говорит: "Я слушаю тебя. Ты говори". ]], code [[ + {"Не думаю.", [[Леарр кивает, ее плавники медленно теряют цвет. Она говорит: "Я слушаю тебя. Ты говори". ]], code [[ char_learr_atlantis_dlg.state = 1; walk('atl_iof_intro'); ]]}; - {"От этого суть не изменится, чудище", [[Леарр скалится, показывая блестящие острые зубки: "Ты убиррайся, пока я тебя не ссъела". ]], code [[ + {"От этого суть не изменится, чудище.", [[Леарр скалится, показывая блестящие острые зубки: "Ты убиррайся, пока я тебя не ссъела". ]], code [[ char_learr_atlantis_dlg.state = 1; walk('atl_iof_intro'); ]]}; {tag='pre_iof'}; {"He'vji'a'rr?", [[Леарр кивает: "Мы так-наззываем пришшедшших-сс-поверхноссти-васс". ]]}; - {"Я хотел кое-что спросить", [["Ты говорри", - просит Леарр. ]], code [[ + {"Я хотел кое-что спросить.", [["Ты говорри", -- просит Леарр. ]], code [[ char_learr_atlantis_dlg.state = 1; walk('atl_iof_intro'); ]]}; {tag="after_iof"}; - {"Рад, что смог помочь", [[Леарр кивает, все еще находясь в явном возбуждении: "Ты говоррить-пришшел? Ты говорри". ]], code [[ psub("generic"); ]]}; - {"У меня не было выбора", [[Леарр непонимающе смотрит на вас, однако говорит: "Я благодаррю тебя. Ты говорри". - ]], code [[ rel_learr = rel_learr - 1; psub("generic"); ]]}; + {"Рад, что смог помочь.", [[Леарр кивает, все еще находясь в явном возбуждении: "Ты говоррить-пришшел? Ты говорри". ]], code [[ psub("generic"); ]]}; {tag="generic"}; - {tag="iyh1", "Расскажи о вашем конфликте с Дипатреанотром.", [[Леарр начинает рассказывать, активно жестикулируя: "Рреликвия нессколько-дней-наззад-изз-нашшего-хррама-прропала. Na'vji'a'yhe'dyp'atre'anot'rr вззяли нашшу-рреликвию! Они потом-в-наш-город-пришли и требовали-вернуть их-реликвию! Мы не-брали ее и это-сказали им!" - Леарр недовольно топает и шипит, - "Они нам-не-верят! Они украли нашу-вещь и не-верят нам!" ]], code [[ atl_iyh_learr_spoken = true; ]]}; - {tag="iyh2", "Я отправляюсь в храм Дипатреанотра. Мне не помешает твоя помощь.", [[Плавники Леарр принимают фиолетовый оттенок: "He'vji'a'rr нельзя туда!"]], code [[ psub("join_me"); ]]}; - {tag="iyh4", "Здесь неподалеку есть старый навьярский храм. Я прошу разрешения посетить его.", [[Леарр задумчиво произносит: "He'vji'a'rr нельзя-туда... Я место-не-знаю".^Немного постояв в задумчивости, Леарр восклицает: "Мы-вместе туда-пойдем! Ривеерр это-не-одобрит, но я с-ним-поговорю". ]], code [[ psub("iyh_agree"); ]]}; + {tag="iyh1", false, "Расскажи о вашем конфликте с Дипатреанотром.", [[Леарр начинает рассказывать, активно жестикулируя: "Рреликвия нессколько-дней-наззад-изз-нашшего-хррама-прропала. Na'vji'a'yhe'dyp'atre'anot'rr вззяли нашшу-рреликвию! Они потом-в-наш-город-пришли и требовали-вернуть их-реликвию! Мы не-брали ее и это-сказали им!" -- Леарр недовольно топает и шипит, -- "Они нам-не-верят! Они украли нашу-вещь и не-верят нам!" ]], code [[ atl_iyh_learr_spoken = true; ]]}; + {tag="iyh2", false, "Я отправляюсь в храм Дипатреанотра. Мне не помешает твоя помощь.", [[Плавники Леарр принимают фиолетовый оттенок: "He'vji'a'rr нельзя туда!"]], code [[ psub("join_me"); ]]}; {tag="sabotage", false, "Ты знаешь, что пожар начался из-за саботажа?", [[Леарр непонимающе крутит головой: "Я что-ты-говоришь-не-понимаю. Что саботаж?" ]], code [[ poff("ignis_what");psub("sabotage_explain"); ]]}; {tag="ignis_what", false, "Ты знаешь, почему начался пожар в Игнисе?", [[Леарр неуверенно пожимает плечами: "Я ты-лучше-знаешь-думаю. Ты расскажешь?"]], code [[ psub("sabotage_reason"); ]]}; - {tag="books", false, "[Показать на книгу]Ты читаешь наши книги?", function(s) + {tag="books", false, "[Показать на книгу] Ты читаешь наши книги?", function(s) if (rel_learr < 0) then char_learr.on_books = 1; return [[Леарр неохотно отвечает: "Я иногда-читаю". Она явно не хочет говорить с вами об этом сейчас. ]]; @@ -1368,16 +1793,18 @@ char_learr_atlantis_dlg = dlg { return [[Леарр отвечает: "Я иногда-читаю". Она опускает глаза на книгу, потом смотрит на вас. Немного подумав, она отвечает, как-бы нехотя: "Я не-умею-ваш-язык-читать. Я пытаюсь-учусь. Мари помогает". ]]; end; end}; - {"Я пойду", [[Плавники Леарр медленно теряют цвет и она прощается с вами: "Ты воззврращщайсся". ]], code [[back();]]}; + {always=true, "Я пойду.", [[Плавники Леарр медленно теряют цвет и она прощается с вами: "Ты воззврращщайсся". ]], code [[back();]]}; {tag="join_me"}; {"Я не собираюсь входить внутрь, но мне нужно осмотреть его окрестности.", [[Цвет плавников Леарр меняется на оранжевый и затем на желтый. Она соглашается: "Я с-тобой-пойду. Я давно-в-Ираафаанотре-не-была". ]], code [[ - lifeon("char_learr"); + remove("char_learr_atlantis", where("char_learr_atlantis")); table.insert(pl.party, 'learr'); + move(char_learr, char_learr.home); pret(); ]]}; {"Для этого ты мне и нужна.", [[Цвет плавников Леарр меняет цвет на синий. Она соглашается: "Я согласна. Я с-тобой-пойду". ]], code [[ - lifeon("char_learr"); + remove("char_learr_atlantis", where("char_learr_atlantis")); table.insert(pl.party, 'learr'); + move(char_learr, char_learr.home); pret(); ]]}; {tag="sabotage_explain"}; @@ -1398,18 +1825,7 @@ char_learr_atlantis_dlg = dlg { {"Давно ты этим занимаешься?", [[Леарр кивает: "Я с-ссамого-пррибытия-вашши-книги-учуссь-читать. Я надеюссь-вссе-пойму ссо-врременем". ]]}; {"Как у тебя успехи?", [[Леарр смущенно отвечает: "Я ещще-многое-не-понимаю. Но я ссо-врременем-пойму-надеюссь". ]]}; {"Давай поговорим о другом.", [[Леарр кивает: "Ты говорри". ]], code [[pret();]]}; - {tag="legend2", empty=code [[back();]]}; - {"Значит, вы не брали реликвию?", [[Леарр недовольно шипит: "Ты тожже-мне-не-верришшь?! Ухходи!"]]}; - {"У тебя есть идеи, куда могла пропасть их реликвия?", [[Леарр отрицательно качает головой: "Нет". ]]}; - {tag="iyh_agree"}; - {"Я согласен. Только так мы докажем Дипатреанотру, что вы ни при чем.", [[Леарр отвечает: "Ты сообщщи, когда готов-будешшь. Мы поззжже-поговоррим". ]], code [[ - lifeon("char_learr"); - table.insert(pl.party, 'learr'); - atl_iyh_state = 6; - back(); - ]]}; - {"Лучше я отправлюсь один.", [[Леарр недовольно шипит: "Не взздумай! Ты ссебе, мне и Ry'vee'rr-у ххужже ссделаешшь". ]]}; - }; + } }; char_aikerjarr_dlg = dlg { @@ -1418,60 +1834,63 @@ char_aikerjarr_dlg = dlg { lfc_dialog = false; }; nam = "Аикерьярр"; - dsc = function(s) + enter = function(s) if (atl_lfc_state == 1 and not s.lfc_dialog) then s.lfc_dialog = true; pon('sabotage', 'ignis_what'); elseif (atl_lfc_state ~= 1) then poff('sabotage', 'ignis_what'); end; + + poff('iyh1', 'iyh2', 'iyh4', 'iyh5'); + if (atl_iyh_state == 1 and not atl_iyh_aikerjarr_spoken) then + pon('iyh1'); + elseif (atl_iyh_state == 2 and not atl_iyh2_aikerjarr_spoken) then + if atl_iyh2_ryveerr_spoken then + pon("iyh2_ryveerr"); + end; + pon('iyh2'); + end; + if (s.state == 0) then psub("first_meeting"); - return [[Перед вами стоит высокий стройный навьяр. Серебристая чешуя сверкает в свете электрических ламп. Неприязненный взгляд его зеленых глаз направлен на вас. Существо одето в темно-зеленые облегающие штаны и куртку из водорослей. В правой руке навьяр держит острозаточенное коралловое копье. ]]; + return [[Перед вами стоит высокий стройный навьяр. Серебристая чешуя сверкает в свете электрических ламп. Неприязненный взгляд его зеленых глаз направлен на вас. Существо одето в темно-зеленые облегающие штаны и куртку из водорослей. В правой руке навьяр держит коралловое копье. ]]; elseif (s.state == 1) then psub("generic"); - - poff('iyh1', 'iyh2', 'iyh4', 'iyh5'); - if (atl_iyh_state == 1) then - pon('iyh1'); - elseif (atl_iyh_state == 2 and not atl_iyh2_aikeryarr_spoken) then - pon('iyh2'); - elseif (atl_iyh_state == 4) then - pon("iyh4"); - elseif (atl_iyh_state == 5) then - pon("iyh5"); - end; end; return [[Аикерьярр презрительно смотрит на вас, не говоря ни слова. ]]; end; phr = { {tag = "first_meeting"}; - {always = "true", "Ты Аикерьярр?", [[Навьяр нехотя отвечает: "I'yhe'Aike'rya'yhe'iraa'pha-anot'rr". ]], code [[ char_aikerjarr_dlg.state = 1; psub("first_meeting_2a"); ]]}; - {always = "true", "Добрый день.", [[Навьяр нехотя отвечает: "I'yhe'Aike'rya'yhe'iraa'pha-anot'rr vta'lyt'nn ty'yhe'he'vji'a'rr". ]], code [[ char_aikerjarr_dlg.state = 1; psub("first_meeting_2b"); ]]}; - {always = "true", "Приветствую.", [[Навьяр нехотя отвечает: "I'yhe'Aike'rya'yhe'iraa'pha-anot'rr vta'lyt'nn ty'yhe'he'vji'a'rr". ]], code [[ char_aikerjarr_dlg.state = 1; psub("first_meeting_2b"); ]]}; + {always=true, "Ты Аикерьярр?", [[Навьяр нехотя отвечает: "I'yhe'Aike'rya'yhe'iraa'pha-anot'rr". ]], code [[ char_aikerjarr_dlg.state = 1; psub("first_meeting_2a"); ]]}; + {always=true, "Добрый день.", [[Навьяр нехотя отвечает: "I'yhe'Aike'rya'yhe'iraa'pha-anot'rr vta'lyt'nn ty'yhe'he'vji'a'rr". ]], code [[ char_aikerjarr_dlg.state = 1; psub("first_meeting_2b"); ]]}; + {always=true, "Приветствую.", [[Навьяр нехотя отвечает: "I'yhe'Aike'rya'yhe'iraa'pha-anot'rr vta'lyt'nn ty'yhe'he'vji'a'rr". ]], code [[ char_aikerjarr_dlg.state = 1; psub("first_meeting_2b"); ]]}; {tag="first_meeting_2a"}; - {always = "true", "Нам нужно поговорить.", [[Навьяр надменно бросает: "I'rr vtre'za'nn he'vja'a'za'rr".]], code [[ char_aikerjarr_dlg.state = 1; psub("first_meeting_3a");]]}; + {always=true, "Нам нужно поговорить.", [[Навьяр надменно бросает: "I'rr vtre'za'nn he'vji'a'za'rr".]], code [[ char_aikerjarr_dlg.state = 1; psub("first_meeting_3a");]]}; {tag="first_meeting_2b"}; - {always = "true", "Я тебя не понимаю", [[Навьяр довольно ухмыляется: "Ty'rr zee'vee'nn". ]], code [[char_aikerjarr_dlg.state = 1; psub("first_meeting_2a");]]}; - {always = "true", "Кончай дурить, я знаю, что ты меня понимаешь", [[Навьяр скалит зубы: "Ты-ххевьярр так-ссо-мной-не-говорри". ]], code [[char_aikerjarr_dlg.state = 1; psub("first_meeting_3b");]]}; - {always = "true", "Я приду позже", [[Навьяр довольно ухмыляется: "Ty'rr zee'vee'nn". ]], code [[ back(); ]]}; + {always=true, "Я тебя не понимаю", [[Навьяр довольно ухмыляется: "Ty'rr zee'vee'nn". ]], code [[char_aikerjarr_dlg.state = 1; psub("first_meeting_2a");]]}; + {always=true, "Кончай дурить, я знаю, что ты меня понимаешь.", [[Навьяр скалит зубы: "Ты-ххевьярр так-ссо-мной-не-говорри". ]], code [[ psub("first_meeting_3b");]]}; + {always=true, "Я приду позже.", [[Навьяр довольно ухмыляется: "Ty'rr zee'vee'nn". ]], code [[ back(); ]]}; {tag="first_meeting_3a"}; - {always = "true", "I'rr vtre'za'nn na'vja'za'rr. Нам все еще нужно поговорить. ", [[Навьяр вздыхает: "Ty'rr не-отсстанет. I'rr тебя-сслушшает"]], code [[ char_aikerjarr_dlg.state = 1; psub("generic"); ]]}; - {"Нам все еще нужно поговорить", [[Навьяр надменно бросает: "I'rr vtre'za'nn he'vja'a'za'rr".]], code [[ back(); ]]}; - {always = "true", "Я приду позже", [[Навьяр довольно ухмыляется: "Ty'rr zee'vee'nn". ]], code [[ back(); ]]}; + {always=true, "I'rr vtre'za'nn na'vji'a'za'rr. Нам все еще нужно поговорить. ", [[Навьяр вздыхает: "Ty'rr не-отсстанет. I'rr тебя-сслушшает"]], code [[ char_aikerjarr_dlg.state = 1; psub("generic"); ]]}; + {always=true, "Нам все еще нужно поговорить.", [[Навьяр надменно бросает: "I'rr vtre'za'nn he'vji'a'za'rr".]], code [[ back(); ]]}; + {always=true, "Я приду позже.", [[Навьяр довольно ухмыляется: "Ty'rr zee'vee'nn". ]], code [[ back(); ]]}; {tag="first_meeting_3b"}; - {always= "true", "Значит, ты все-таки меня понимаешь. У меня есть вопросы.", [[Навьяр вздыхает: "Ty'rr не-отсстанет. I'rr тебя-сслушшает"]], code [[char_aikerjarr_dlg.state = 1; psub("generic")]]}; - {always= "true", "Значит, ты все-таки меня понимаешь. Хватит тратить мое время.", [[Навьяр недовольно рычит: "Ты говорри". ]], code [[char_aikerjarr_dlg.state = 1; psub("generic")]]}; - {always= "true", "Значит, ты все-таки меня понимаешь, чертов рыбень. Теперь слушай и отвечай.", [[Навьяр стучит копьем об пол и отворачивается от вас. ]], code [[back();]]}; + {always=true, "Значит, ты все-таки меня понимаешь. У меня есть вопросы.", [[Навьяр вздыхает: "Ty'rr не-отсстанет. I'rr тебя-сслушшает"]], code [[char_aikerjarr_dlg.state = 1; psub("generic")]]}; + {always=true, "Значит, ты все-таки меня понимаешь. Хватит тратить мое время.", [[Навьяр недовольно рычит: "Ты говорри". ]], code [[char_aikerjarr_dlg.state = 1; psub("generic")]]}; + {always=true, "Значит, ты все-таки меня понимаешь, чертов рыбень. Теперь слушай и отвечай.", [[Навьяр стучит копьем об пол и отворачивается от вас. ]], code [[back();]]}; {tag = "generic"}; {tag = "sabotage", "Ты знаешь, что пожар начался из-за саботажа?", [[Аикерьярр лишь слегка усмехается, но не удостаивает вас ответом. ]]}; {tag = "ignis_what", "Ты знаешь, почему начался пожар в Игнисе?", [[Аикерьярр лишь слегка усмехается, но не удостаивает вас ответом. ]]}; - {tag="iyh1", "Расскажи о вашем конфликте с Дипатреанотром.", [[Аикерьярр недовольно смотрит на вас:"He'vji'a'rr не-помочь".^Немного подумав, он рассказывает: "Na'vji'a'yhe'dyp'atre'anot'rr говоррить yhe мы украссть реликвия-изз-ихх-ххррама", -- Аикерьярр злобно стучит зубами и в ярости сжимает кулаки, -- "Мы не-делали-этого-ссказзали им! Но они в-ответ-на-нашш-ххррам-напали и нашши-рреликвии-вззяли!" ]], code [[ atl_iyh_learr_spoken = true; ]]}; - {tag="iyh2", "Я собираюсь в храм Дипатреанотра", [[Аикерьярр пожимает плечами: "Ты туда-не-идешь. Ты спроси Ривеерра".]], code [[ atl_iyh2_aikeryarr_spoken = true; psub("on_iyh2"); ]]}; - {tag="iyh4", "Неподалеку отсюда есть старый храм навьяров. Я прошу разрешения посетить его.", [[ - Аикерьярр кивает: "Я не-понимаю, hyd это связано с-текущей-ситуацией. Ты узнай e тогда-приходи" - ]], code [[ back(); ]]}; - {"Я вернусь позже", [[Аикерьярр отворачивается от вас, даже не удостоив ответом. ]], code [[back(); ]]}; + {tag="iyh1", false, "Расскажи о вашем конфликте с Дипатреанотром.", [[Аикерьярр недовольно смотрит на вас:"He'vji'a'rr не-помочь". ^Немного подумав, он рассказывает: "Na'vji'a'yhe'dyp'atre'anot'rr говоррить yhe мы украссть реликвия-изз-ихх-ххррама, -- Аикерьярр злобно стучит зубами и в ярости сжимает кулаки, -- Мы не-делали-этого-ссказзали им! Но они в-ответ-на-нашш-ххррам-напали и нашши-рреликвии-вззяли!" ]], code [[ atl_iyh_aikerjarr_spoken = true; ]]}; + {tag="iyh2", false, "Я собираюсь в храм Дипатреанотра.", [[Аикерьярр пожимает плечами: "Ты туда-не-идешь. Ты спроси Ривеерра".]], code [[ psub("on_iyh2"); ]]}; + {always=true,"Я вернусь позже.", [[Аикерьярр отворачивается от вас, даже не удостоив ответом. ]], code [[back(); ]]}; + {tag="on_iyh2"}; + {tag="iyh2_ryveerr", false, "Ривеерр дал мне разрешение на осмотр окрестностей храма. ", [[Аикерьярр недовольно рычит: "Никчемный-глупец-Ривеерр. Я ссс-тобой-иду". ]], code [[ atl_iyh2_aikerjarr_spoken = true; table.insert(pl.party, 'aikerjarr'); move(char_aikerjarr_lev, char_aikerjarr_lev.home); psub("on_iyh22"); ]]}; + {always=true,"Я вернусь позже.", [[Аикерьярр отворачивается от вас, даже не удостоив ответом. ]], code [[back(); ]]}; + {tag="on_iyh22"}; + {"Хорошо.", [[Аикерьярр отворачивается от вас, не удостоив ответом. ]], code [[back(); ]]}; + {"Ты мне там не нужен.", [[Аиверьярр отвечает: "Я ссс-тобой-иду или ты не-идешшь-туда". ]]}; }; }; @@ -1482,18 +1901,20 @@ char_ryveerr_dlg = dlg { }; nam = "Ривеерр"; disp = "Ривеерр"; - entered = function(s) + + reset_more = function(s) + poff("on_atlantis", "on_learr", "on_ryveerr", "on_aikerjarr", "more_questions"); if (atl_rep_dyp < 0) then - if (char_ryveerr.atlantis_asked == 0) then pon("on_atlantis"); end; - if (char_ryveerr.learr_asked == 0) then pon("on_learr"); end; - if (char_ryveerr.ryveerr_asked == 0) then pon("on_ryveerr"); end; - if (atl_iof_learr_dead and char_ryveerr.aikerjarr_asked == 0) then pon("on_aikerjarr"); end; + if (char_ryveerr.atlantis_asked == 0) then pon("on_atlantis", "more_questions"); end; + if (char_ryveerr.learr_asked == 0) then pon("on_learr", "more_questions"); end; + if (char_ryveerr.ryveerr_asked == 0) then pon("on_ryveerr", "more_questions"); end; + if (atl_iof_learr_dead and char_ryveerr.aikerjarr_asked == 0) then pon("on_aikerjarr", "more_questions"); end; else - if (char_ryveerr.atlantis_asked < 2) then pon("on_atlantis"); end; - if (char_ryveerr.learr_asked < 2) then pon("on_learr"); end; - if (atl_iof_learr_dead and char_ryveerr.learr_asked < 3) then pon("on_learr"); end; - if (char_ryveerr.ryveerr_asked < 2) then pon("on_ryveerr"); end; - if (atl_iof_learr_dead and char_ryveerr.aikerjarr_asked < 2) then pon("on_aikerjarr"); end; + if (char_ryveerr.atlantis_asked < 2) then pon("on_atlantis", "more_questions"); end; + if (char_ryveerr.learr_asked < 2) then pon("on_learr", "more_questions"); end; + if (atl_iof_learr_dead and char_ryveerr.learr_asked < 3) then pon("on_learr", "more_questions"); end; + if (char_ryveerr.ryveerr_asked < 2) then pon("on_ryveerr", "more_questions"); end; + if (atl_iof_learr_dead and char_ryveerr.aikerjarr_asked < 2) then pon("on_aikerjarr", "more_questions"); end; end; if (atl_lfc_state == 1 and not s.lfc_dialog) then s.lfc_dialog = true; @@ -1501,12 +1922,27 @@ char_ryveerr_dlg = dlg { elseif (atl_lfc_state ~= 1) then poff('sabotage', 'ignis_what'); end; - + end; + + enter = function(s) + s:reset_more(); + + poff('iyh1', 'iyh2', 'learr_comes'); + if (atl_iyh_state == 1 and not atl_iyh_ryveerr_spoken) then + pon('iyh1'); + elseif (atl_iyh_state == 2 and not atl_iyh2_ryveerr_spoken) then + pon('iyh2'); + end; + if (ArrayUtils.indexOf(pl.party, 'learr') ~= 0) then + pon('learr_comes'); + end; + if (s.state == 0) then s.state = 1; psub("first_meeting"); return [[Перед вами стоит навьяр. Серо-зеленая чешуя, несколько более темная, чем у Леарр блестит в свете электрических ламп. Красно-оранжевые глаза внимательно смотрят на вас. Он одет в темно-зеленые облегающие шорты и куртку из водорослей. Навьяр приветствует вас: "Ривеерр-из-Дипатреанотра рад-видеть тебя". ]]; elseif (atl_iof_completed and char_ryveerr.iof_reaction == 0) then + char_ryveerr.iof_reaction = 1; if (atl_iof_learr_dead) then psub("iof_learr_dead"); return [[Плавники Ривеерра окрашиваются синим. Он произносит: "Хевьяр-ты не-помог Леарр". ]]; @@ -1519,37 +1955,16 @@ char_ryveerr_dlg = dlg { end; else psub("generic"); - if (s.state == 1) then - poff('iyh1', 'iyh2'); - if (atl_iyh_state == 1) then - pon('iyh1'); - elseif (atl_iyh_state == 2 and not atl_iyh2_ryveerr_spoken) then - pon('iyh2'); - elseif (atl_iyh_state == 4) then - psub("situation"); - elseif (atl_iyh_state == 5) then - pon("legend"); - end; - elseif (s.state == 2) then - if (atl_iyh_state == 6) then - if (atl_iof_learr_dead) then - pon("take_aikerjarr"); - else - pon("take_learr"); - end; - end; - pon("legend2"); - end; return [[Ривеерр оборачивается к вам: "Ты говори". ]]; end; end; phr = { {tag="first_meeting"}; - {"Мое имя Дэвид Дрейк. Рад знакомству.", [[Плавники Ривеерра окрашиваются в зеленый: "Ты-Уильяма-сын"]], code[[psub("first_meeting_2");]]}; - {"Мое имя Дэвид Дрейк.", [[Плавники Ривеерра окрашиваются в зеленый: "Ты-Уильяма-сын"]], code[[psub("first_meeting_2");]]}; + {"Мое имя Дэвид Дрейк. Рад знакомству.", [[Плавники Ривеерра окрашиваются в зеленый: "Ты-Уильяма-сын". ]], code[[psub("first_meeting_2");]]}; + {"Мое имя Дэвид Дрейк.", [[Плавники Ривеерра окрашиваются в зеленый: "Ты-Уильяма-сын". ]], code[[psub("first_meeting_2");]]}; {tag="first_meeting_2"}; - {"Да, все верно.", [[Ривеерр: "Я рад-помочь тебе. Ты говори"]], code [[psub("generic");]]}; - {"Я хотел кое-что спросить. ", [[Ривеерр: "Ты говори"]], code [[psub("generic");]]}; + {"Да, все верно.", [[Ривеерр: "Я рад-помочь тебе. Ты говори". ]], code [[psub("generic");]]}; + {"Я хотел кое-что спросить. ", [[Ривеерр: "Ты говори". ]], code [[psub("generic");]]}; {tag="iof_learr_dead"}; {"Я сделал все, что мог.", [[Ривеерр кивает: "Мне жаль, что ты-помочь-Леарр-не-смог". Через некоторое время он приглашает: "Ты говори". ]], code [[ psub("generic"); ]]}; {"Я пришел говорить о другом. ", [[Ривеерр отворачивается от вас. ]], code [[ @@ -1560,8 +1975,8 @@ char_ryveerr_dlg = dlg { {tag="iof_learr"}; {"Я тоже. ", [[Ривеерр кивает и приглашает вас: "Ты говори". ]], code [[psub("generic");]]}; {tag="generic"}; - {tag="iyh1", false, "Расскажи о конфликте Ираафаанотра с Дипатреанотром.", [[Ривеерр рассказывает вам: "Na'vji'a'yhe'iraa'pha’anot’rr нашу-реликвию-украли. Мы тем-же-ответили им". ]], code [[ psub("more_on_relic"); ]]}; - {tag="iyh2", "Я собираюсь в храм Дипатреанотра.", [[Плавники на голове Ривеерра меняют цвет на сине-фиолетовый: "Ты туда-не-идешь".]], code [[ atl_iyh2_ryveerr_spoken = true; psub("on_iyh2"); ]]}; + {tag="iyh1", false, "Расскажи о конфликте Ираафаанотра с Дипатреанотром.", [[Ривеерр рассказывает вам: "Na'vji'a'yhe'iraa'pha’anot’rr нашу-реликвию-украли. Мы тем-же-ответили им". ]], code [[ atl_iyh_ryveerr_spoken = true; psub("more_on_relic"); ]]}; + {tag="iyh2", false, "Я собираюсь в храм Дипатреанотра.", [[Плавники на голове Ривеерра меняют цвет на сине-фиолетовый: "Ты туда-не-идешь". ]], code [[ atl_iyh2_ryveerr_spoken = true; psub("on_iyh2"); ]]}; {tag="sabotage", [[Ты знаешь, что пожар начался из-за саботажа?]], function(s) if (atl_iof_learr_dead) then return [[Ривеерр недовольно отвечает: "Это-не-значимо. Значимо, что Леарр мертва". ]]; @@ -1576,16 +1991,16 @@ char_ryveerr_dlg = dlg { return [[Ривеерр спокойно отвечает: "Ты со-мной-про-это-не-говори. Это-ваши-дела. Я не-хочу-ими-заниматься". ]]; end; end}; - {always=true, "Я хочу кое что спросить.", [[Ривеерр кивает: "Ты спрашивай". ]], code [[ psub("questions"); ]]}; + {tag="more_questions", always=true, "Я хочу кое-что спросить.", [[Ривеерр кивает: "Ты спрашивай". ]], code [[ psub("ask_more"); ]]}; {always=true, "Я пойду.", [[Ривеерр прощается с вами: "Мы позже-поговорим". ]], code [[ back(); ]]}; - {tag="questions"}; + {tag="ask_more"}; {tag="on_atlantis", "Что ты думаешь об Атлантиде?", function(s) if (atl_rep_dyp < 0) then char_ryveerr.atlantis_asked = 1; - return [[Ривеерр отвечает: "Хевьяры-с-Атлантиды уже-помогли-нам-немало. Я надеюсь-на-продолжение-плодотворного-сотрудничества".]]; + return [[Ривеерр отвечает: "Хевьяры-с-Атлантиды уже-помогли-нам-немало. Я надеюсь-на-продолжение-плодотворного-сотрудничества". ]]; else char_ryveerr.atlantis_asked = 2; - return [[Ривеерр отвечает: "Хевьяры-с-Атлантиды уже-помогли-нам-немало. Я надеюсь-на-продолжение-плодотворного-сотрудничества. Я продолжаю-доказывать-пользу-нашего-с-вами-хевьярами-общения и многие-в-Дипатреанотре уже-согласны-со-мной. Если план-Дрейка успешен-будет, то наша-благодарность будет-неизмерима. Хевьяры наслеие-древних-ищут, как легенды гласят".]]; + return [[Ривеерр отвечает: "Хевьяры-с-Атлантиды уже-помогли-нам-немало. Я надеюсь-на-продолжение-плодотворного-сотрудничества. Я продолжаю-доказывать-пользу-нашего-с-вами-хевьярами-общения и многие-в-Дипатреанотре уже-согласны-со-мной. Если план-Дрейка успешен-будет, то наша-благодарность будет-неизмерима. Хевьяры наследие-древних-ищут, как легенды гласят". ]]; end; end}; {tag="on_aikerjarr", "Что ты думаешь об Аикерьярре?", function(s) @@ -1613,45 +2028,21 @@ char_ryveerr_dlg = dlg { else if (atl_iof_learr_dead) then char_ryveerr.learr_asked = 3; - return [[Плавники Ривеерра окрашиваются голубым и он отвечает: "Я понимаю ее-гибель-насчастный-случай, но ситуацию-легче-не-делает. Дипатреанотр-мы одну-из-немногих-друзей-в-Ираафаанотре-потеряли". ]]; + return [[Плавники Ривеерра окрашиваются голубым и он отвечает: "Я понимаю ее-гибель-несчастный-случай, но ситуацию-легче-не-делает. Дипатреанотр-мы одну-из-немногих-друзей-в-Ираафаанотре-потеряли". ]]; else char_ryveerr.learr_asked = 2; - return [[Плавники Ривеерра окрашиваются зеленым и он отвечает: "Леарр из Ираафаанотра. Мы часто-разногласия с-ними, но с-Леарр всегда-понимание-находим. Это с-Ираафаанотр-отношениям-помогает и хорошо-есть. Я что-она-на-Атлантиде-рад и друг-с-другом-и-с-вами-что-мы-можем общаться-постоянно. Это с-вами-нашим-отношениям-помогает и тоже-хорошо-есть".]]; + return [[Плавники Ривеерра окрашиваются зеленым и он отвечает: "Леарр из Ираафаанотра. Мы часто-разногласия с-ними, но с-Леарр всегда-понимание-находим. Это с-Ираафаанотр-отношениям-помогает и хорошо-есть. Я что-она-на-Атлантиде-рад и друг-с-другом-и-с-вами-что-мы-можем общаться-постоянно. Это с-вами-нашим-отношениям-помогает и тоже-хорошо-есть". ]]; end; end; end}; - {always=true, "Давай поговорим о другом.", [[Ривеерр кивает: "Ты говори". ]], code [[ pret(); ]]}; + {always=true, "Давай поговорим о другом.", [[Ривеерр кивает: "Ты говори". ]], code [[ char_ryveerr_dlg:reset_more(); pret(); ]]}; {tag="more_on_relic"}; {"Тем же?", [[Ривеерр щелкает зубами: "Мы светодиск-из-их-храма-забрали. Мы вернем его, ysl они вернут нашу-реликвию". ]]}; - {"Вы уверены, что кража - их рук дело?", [[Ривеерр уверенно кивает: "Только-они могли сделать. Я расскажу", -- Ривеерр на небольшое время замолкает, собираясь с мыслями, после чего продолжает: "Na'vji'a'yhe'iraa'pha’anot’rr ночью-в-наш-храм-пришли и охранников-убили. Они реликвию-украли и в-свой-город-унесли". ]], code [[ psub("why"); ]]}; + {"Вы уверены, что кража -- их рук дело?", [[Ривеерр уверенно кивает: "Только-они могли сделать. Я расскажу", -- Ривеерр на небольшое время замолкает, собираясь с мыслями, после чего продолжает: "Na'vji'a'yhe'iraa'pha’anot’rr ночью-в-наш-храм-пришли и охранников-убили. Они реликвию-украли и в-свой-город-унесли". ]], code [[ psub("why"); ]]}; {tag="why", empty=code [[ atl_iyh_ryveerr_spoken = true; psub("generic"); ]]}; {"Вы уверены, что это они?", [[Ривеерр отвечает: "Другой-никто не-мог-сделать". ]]}; {"Как убили охранников?", [[Ривеерр отвечает: "Их копьями-проткнули. Мы раны-видели". ]]}; - {tag="situation"}; - {"Мы знаем об одном древнем храме неподалеку отсюда.", [[Ривеерр пожимает плечами: "Я не-понимаю, hyd это поможет нам". ]], code [[ psub("cancel");]]}; - {always=true, "Я пойду.", [[Ривеерр прощается с вами: "Мы позже-поговорим". ]], code [[ back(); ]]}; - {tag="legend"}; - {"Мы знаем где ваша реликвия. Мы знаем об одном древнем храме, где живет затмевающий свет. [Кратко пеесказать легенду]", [[ - "Я знаю эту-легенду. Вы возможно-правы. В-храм вам-нельзя-идти. Это наше-священное-место. he'vji'a'rr не-место-там. Затмевающий-свет не-враг-нам. Его нельзя-тревожить". - ]], code [[ psub("legend_more")]]}; - {always=true, "Я пойду.", [[ - Ривеерр прощается с вами: "Мы позже-поговорим". - ]], code [[ back(); ]]}; - {tag="legend_more"}; - {"Вы могли бы сопровождать нас. ", [[ - "В-храм нельзя-вам". - ]], code [[ - char_ryveerr_dlg.state = 2; - ]]}; - {always=true, "Я вернусь позже", [[Ривеерр прощается с вами: "Мы поззжже-поговоррим". ]], code [[ back(); ]]}; - {tag="legend2"}; - {tag="take_learr", false, "Леарр согласилась сопровождать нас в храм. ", [[ - "Леарр'yhe'iraa’pha’anot’rr. Не-уверен-я что-могу-доверять-ей. Я подумать-должен..." - Некоторое время Ривеерр стоит неподвижно, задумавшись. Наконец, скрестив руки на груди, Ривеерр продолжает: "Я согласен". - ]], code [[ atl_iyh_state = 6; back(); ]]}; - {tag="take_aikerjarr", false, "Аикерьярр согласился сопровождать нас в храм", [[ - "Аикерьярр'yhe'iraa’pha’anot’rr. Не-уверен-я что-могу-доверять-ему. Я подумать-должен..." - Некоторое время Ривеерр стоит неподвижно, задумавшись. Наконец, скрестив руки на груди, Ривеерр продолжает: "Я согласен". - ]], code [[ atl_iyh_state = 6; back(); ]]}; - {always=true, "Я вернусь позже", [[Ривеерр прощается с вами: "Мы поззжже-поговоррим". ]], code [[ back(); ]]}; + {always=true, "Я вернусь позже.", [[Ривеерр прощается с вами: "Мы поззжже-поговоррим". ]], code [[ back(); ]]}; {tag="on_iyh2"}; {"Я не собираюсь внутрь храма, мне нужно лишь осмотреть окрестности.", [[Ривеерр кивает: "Я это-разрешу. Ты иди". ]], code [[ pret(); ]]}; {tag="learr_comes", "Со мной отправится Леарр.", [[Ривеерр отвечает: "Ты туда-не-идешь. He'vji'a'rr нельзя-в-храм". ]]}; @@ -1664,7 +2055,7 @@ char_evans_dlg = dlg { }; nam = "Кристиан Эванс"; disp = "Кристиан Эванс"; - entered = function(s) + enter = function(s) if (atl_lfc_state ~= 1) then poff('sabotage', 'ignis_what'); end; @@ -1685,8 +2076,7 @@ char_evans_dlg = dlg { end; phr = { {tag="first_meeting"}; - {"Я Дэвид Дрейк, очень приятно", [[ - Кристиан улыбается и отвечает: "Очень рад вас видеть. У вас есть вопросы? Я слушаю". ]], }; + {"Я Дэвид Дрейк, очень приятно.", [[Кристиан улыбается и отвечает: "Очень рад вас видеть. У вас есть вопросы? Я слушаю". ]], code [[ psub("generic"); ]]}; {tag="generic"}; {"Что вы можете рассказать о Леарр?", function(s) if (iof_learr_dead) then @@ -1695,16 +2085,16 @@ char_evans_dlg = dlg { return [[Кристиан отвечает: "С ней приятно иметь дело. Мы многое узнали о навьярах только благодаря ее открытости и желанию общаться с нами. Хотя Ривеерр тоже довольно дружелюбен, он чрезмерно осторожен при общении с нами. Леарр и сама интересуется нами и нашими достижениями -- большую часть времени она проводит в библиотеке и в Игнисе, читая наши книги и газеты и просматривая наши фото- и видеоархивы". ]]; end; end}; - {tag="on_aikerjarr", false, "Что вы можете сказать об Аикерьярре?", [[Кристиан чешет подбородок: "Не знаю, почему Ираафаанотр отправил на Атлантиду этого... Наверное, было бы проще, не будь на Атлантиде вообще никого из Ираафаанотра. И безопаснее для наших отношений тоже. Этот... Да он словно намеренно пытается вывести тут всех из себя".]]}; + {tag="on_aikerjarr", false, "Что вы можете сказать об Аикерьярре?", [[Кристиан чешет подбородок: "Не знаю, почему Ираафаанотр отправил на Атлантиду этого... Наверное, было бы проще, не будь на станции вообще никого из Ираафаанотра. И безопаснее для наших отношений тоже. Этот... Да он словно намеренно пытается вывести тут всех из себя".]]}; {"Что вы можете сказать об Ривеерре?", [[Кристиан задумчиво: "Из жителей Дипатреанотра, Ривеерр, наверное, лучше всех относится к нам. При том, что он достаточно отстранен, чувствуется, что он готов вкладывать силы в улучшение отношений между нами всеми -- Дипатреанотром, Атлантидой и Ираафаанотром". ]]}; {"Что вы можете сказать о навьярах?", [[Кристиан отвечает: "Поразительные существа. Конечно, мы первый раз сталкиваемся с подобным и толком не знаем как себя вести и как стоит их изучать, но, как мне кажется, мы многого достигли -- мы знаем их язык, имеет доступ к их текстам и общаемся с их представителями практически на равных. Вообще, мы поразительно легко наладили с ними контакт -- они не стали воспринимать нас ни как богов, ни как дьяволов, как это случается с племенами людей в далеких от цивилизации местах. Они однозначно не так просты, как кажется, но мы пока не знаем в чем причина этого".]]}; - {tag="sabotage", "Вы знаете, что пожар в Игнисе - результат саботажа?", function(s) + {tag="sabotage", "Вы знаете, что пожар в Игнисе -- результат саботажа?", function(s) atl_lfc_panic = atl_lfc_panic + 1; atl_rep_darkstar = atl_rep_darkstar - 1; return [[Кристиан недовольно ворчит: "Если это так, то надо не на каждом углу кричать, а предоставить сведения Даркстару или Моро. Они найдут, как решить проблему". ]]; end}; {tag="ignis_what", "Вы знаете, что произошло в Игнисе?", [[Кристиан пожимает плечами: "Об этом вам лучше узнать у Райта или Даркстара. Я мало что знаю". ]]}; - {always=true, "Я пойду", [[Кристиан прощается с вами: "До встречи". ]], code [[ back(); ]]}; + {always=true, "Я пойду.", [[Кристиан прощается с вами: "До встречи". ]], code [[ back(); ]]}; }; }; @@ -1714,10 +2104,7 @@ char_winterlight_dlg = dlg { }; nam = "Сильвия Уинтерлайт"; disp = "Сильвия Уинтерлайт"; - entered = function(s) - if (atl_iyh_state == 4) then - pon("legend"); - end; + enter = function(s) if (atl_lfc_state ~= 1) then poff('sabotage', 'ignis_what'); end; @@ -1736,12 +2123,11 @@ char_winterlight_dlg = dlg { end; phr = { {tag="first_meeting"}; - {"Рад знакомству. Я хотел бы кое что спросить.", [[Сильвия улыбается и кивает: "Конечно, господин Дрейк, я слушаю". ]], code [[ psub("generic"); ]]}; + {"Рад знакомству. Я хотел бы кое-что спросить.", [[Сильвия улыбается и кивает: "Конечно, господин Дрейк, я слушаю". ]], code [[ psub("generic"); ]]}; {"Рад знакомству. Я чем-то могу быть полезен?", [[Сильвия улыбается и отвечает: "Вам лучше поговорить с госпожой Светловой, у нее наверняка найдется поручение для вас". ]], code [[ psub("generic"); ]]}; {tag="generic"}; - {"Расскажите об Атлантиде,", [[Сильвия вздыхает: "Боюсь, я тут могу долго рассказывать -- мы с господином Райтом многое придумывали вместе -- в частности системы подачи кислорода, я же помогала в разработке Аэриса. Аэрис вообще довольно значительное достижение -- мы сумели адаптировать некоторые виды растений с поверхности к условиям станции. Конечно, пришлось потрудиться -- очень много энергии уходит на освещение и обогрев секции, но и результат себя оправдывает -- думаю, нам быстро надоело бы питаться одними морепродуктами, а так у нас есть практически все, что может предложить поверхность. Ну, кроме мяса. Также мы выращиваем там несколько видов водорослей -- некоторые производят кислород, другие идут в пищу, третьи отправляются прямиком в печь".]]}; - {"Расскажите о себе.", [[Сильвия усмехается: "Не думаю, что тут есть что-то интересное, но слушайте -- я ева закончила университет и была в поисках работы, когда встретилась с госпожой Светловой. Уж не знаю, что привлекло ее во мне, но она предложила мне работу. Я сперва удивилась -- с чего транспортной компании нанимать таких видных ученых как она? Да и зачем там такие как я? Но после беседы с господином Дрейком, я загорелась идеей обустроить автономную подводную станцию. Тогда планы не были столь грандиозны -- мы не предполагали покидать поверхность, но благодаря нашим с господином райтом успехам мы смогли достичь этого. Тогда же я впервые встретила живого навьяра. Нет, госпожа Светлова рассказывала мне про них и даже показывала фотографии и рисунки, но увидеть подобное вживую ни с чем не сравнимо. И еще более странно, когда такое существо спокойно так тебя приветствует на твоем языке". ]]}; - --[[{tag="legend", false, "Ты можешь рассказать мне навьярскую легенду о скате?", [ [Сильвия кажется заинтересованной: "У навьяров их много, какую конкретно вы хотите услышать?" ] ], code [ [ psub("which_legend"); ] ]};]] + {"Расскажите об Атлантиде,", [[Сильвия отвечает: "Я тут могу долго рассказывать -- мы с господином Райтом многое придумывали вместе -- в частности, системы подачи кислорода, я же помогала в разработке Аэриса. Аэрис, если говорить открыто, крайне значительное достижение -- мы сумели адаптировать некоторые виды растений с поверхности к условиям станции. Конечно, пришлось потрудиться -- очень много энергии уходит на освещение и обогрев секции, но и результат себя оправдывает -- думаю, нам быстро надоело бы питаться одними морепродуктами, а так у нас есть практически все, что может предложить поверхность. Ну, кроме мяса", -- она улыбается, -- "Также мы выращиваем там несколько видов водорослей -- некоторые производят кислород, другие идут в пищу, третьи отправляются прямиком в печь".]]}; + {"Расскажите о себе.", [[Сильвия усмехается: "Не думаю, что тут есть что-то интересное, но слушайте -- я едва закончила университет и была в поисках работы, когда встретилась с госпожой Светловой. Уж не знаю, что привлекло ее во мне, но она предложила мне работу. Я сперва удивилась -- с чего транспортной компании нанимать таких видных ученых, как она? Да и зачем там такие, как я? Когда господин Дрейк рассказал о своем открытии, я загорелась идеей обустроить автономную подводную станцию -- чтобы иметь возможность находиться ближе к навьярам и изучать их. Изначально планы не были столь грандиозны, но благодаря нашим с господином Райтом успехам мы смогли построить Атлантиду такой, какой вы ее видите. Тогда же я впервые встретила живого навьяра. Нет, госпожа Светлова рассказывала мне про них и даже показывала фотографии и рисунки, но увидеть их вживую ни с чем не сравнимо. И еще более странно, когда такое существо тебя приветствует на твоем языке". ]]}; {tag="sabotage", false, "Вы знаете, что пожар начался из-за саботажа?", function(s) atl_lfc_panic = atl_lfc_panic + 1; atl_rep_darkstar = atl_rep_darkstar - 1; @@ -1751,27 +2137,8 @@ char_winterlight_dlg = dlg { return [[Сильвия Уинтерлайт удивленно смотрит на вас: "Вы не первый кто так говорит. Но кто это мог сделать?" ]]; end; end;}; - {tag="ignis_what", false, "Вы знаете, что произошло в Игнисе?", [[ - "Крайней мало. Вам лучше поговорить с Райтом или Даркстаром". - ]]}; + {tag="ignis_what", false, "Вы знаете, что произошло в Игнисе?", [[Сильвия отвечает: "Крайне мало. Вам лучше поговорить с Райтом или Даркстаром". ]]}; {always=true, "Я пойду.", [[Сильвия молча кивает и возвращается к своим делам. ]], code [[ back(); ]]}; - {tag="which_legend"}; - --TODO добавить несколько легенд - {"Что-нибудь связанное с храмами и реликвиями", [[ - Сильвия задуиывается: _"Храмы, реликвии и скаты... Да, есть кое-что", -- она откидивыет волосы назад и продолжает: "Согласно этой легенде, хранителей одного из святилищ навьяров был могучий затмевающий свет по имени Излучающий Тьму. Это было в те времена, когда навьяры и затмевающие свет были связаны узами дружбы. Излучающий тьму был мудрым хранителем - он не только принимал священные реликвии на сохранение, но и многое знал о них - об их предназначении и истинной ценности. Однажды Излучающий Тьму узнает о необычнайно ценной реликвии, хранящейся в одном из городов и скрывающей в себе древние знания навьяров. Узнает он и о том, что живущие навьяры не в силах прочитать. Тогда он прибыл в город, чтобы просить навьяров отдать ему реликвию на сохранение. Но навьяры отказывают ему. Вернувшись в святилище, Излучающий Тьму придумал план. Ночью он пробрался в город и выкрал реликвию. Когда наутро навьяры обнаружили пропажу, они направились к Излучающему Тьму с требованием вернуть им реликвию. На это могучий затмевающий свет спросил их: ,,Знаете ли вы, что скрывает этот предмет?''^ -- кстати, в некоторых переводах я встречала слово ,,светодиск'', как описание реликвии. - ,,Знания наших предков'', -- ответили навьяры. Излучающий Тьму продолжил: ,,Можете ли вы прочитать его?''^ - ,,Нет'', --сказали навьяры. Тогда Излучающий Тьму рассказал им легенду о храме в глубинах, которую он прочитал из данной реликвии(Нам, кстати, так и не довелось получить хоть какой-либо целостный текст этой легенды), и сказал им: ,,Можете приходить сюда когда захотите и я расскажу вам то, что вы захотите знать. Но только, если реликвия ваша остается у меня''. Навьяры поняли, что если заберут реликвию, то навсегда утратят древние знания и согласились". - ]], code [[ psub("more_on_legend"); ]]}; - {tag="more_on_legend"}; - {"Светодиск?", [[ - "Мы плохо понимаем, для чего они служат. У Светловой один такой был. Блестящий диск - сантиметров 10 в диаметре. Правда вот как их ,,читать''... В привычном понимании, по крайней мере, мы не понимаем. Если рассматривать их под микроскопом - там весьма характерный рисунок проступает. Почему светодиск? Мы не знаем - это навьяры их так называют". - ]]}; - {"Что за легенда о храме в глубинах?", [[ - "Мы только приблизительно знаем о ней - она постоянно упоминается в контексте других легенд и у нас есть фрагменты, которые нам рассказывали навьяры. Когда-то давно навьяры построили храм где-то в ущелье, но по какой-то причине были вынуждены покинуть его". - ]]}; - {"Спасибо, я пойду", [[ - "До встречи. Если захотите еще древних сказаний послушать - приходите". - ]], code [[ atl_iyh_state = 5; psub('back'); ]]}; }; }; @@ -1782,7 +2149,7 @@ char_jack_wright_atlantis_dlg = dlg { }; nam = 'char_jack_wright_atlantis_dlg'; disp = "Джек Райт"; - entered = function(s) + enter = function(s) if (rel_jack < 0) then if (char_wright.on_learr == 0) then pon("on_learr"); end; if (char_wright.on_leviathan == 0) then pon("on_leviathan"); end; @@ -1855,7 +2222,7 @@ char_jack_wright_atlantis_dlg = dlg { return [[Джек отвечает: "Левиафан, без сомнения, превосходный корабль. Жаль, что ему не нашлось лучшего капитана". ]]; else char_wright.on_leviathan = 2; - return [[Джек не скрывает своего восхищения: "Никогда не видел ничего подобного. Неудивительно, что отец оставил жизнь на поверхности в пользу возможности создавать подобное здесь. Пока мы были в пути, я подробно изучил субмарину. Многие решения до сих пор кажутся мне невероятными - например, использование электричества в качестве движущей силы или наличие звуковой пушки. Я уже успел обсудить с отцом детали диагностических цепей. Это совершенно непостижимо, чтобы машина сама сообщала, что с ней что-то не так. И все это в одном месте". ]]; + return [[Джек не скрывает своего восхищения: "Никогда не видел ничего подобного. Неудивительно, что отец оставил жизнь на поверхности в пользу возможности создавать подобное здесь. Пока мы были в пути, я подробно изучил субмарину. Многие решения до сих пор кажутся мне невероятными, например, использование электричества в качестве движущей силы или звуковая пушка. Я уже успел обсудить с отцом детали диагностических цепей. Это совершенно непостижимо, чтобы машина сама сообщала, что с ней что-то не так. И все это в одном месте". ]]; end; end}; {tag="on_jack", "Чем ты занимался все это время?", function() @@ -1878,7 +2245,7 @@ char_legrand_dlg = dlg { }; nam = "Мари Легран"; disp = "Мари Легран"; - entered = function(s) + enter = function(s) if (atl_lfc_state ~= 1) then poff('sabotage', 'ignis_what'); end; @@ -1887,70 +2254,49 @@ char_legrand_dlg = dlg { s.lfc_dialog = true; pon('sabotage', 'ignis_what'); end; - + + poff("tube_spec"); + if (atl_nih_state == 1 and not have(atl_item_tube_spec)) then + pon("tube_spec"); + end; + if (s.state == 0) then s.state = 1; psub("first_meeting"); - return [[ - Перед вами, склонившись над каким-то журналом сидит женщина лет сорока--сорока-пяти. Длинные темные волосы убраны в хвост. На носу очки в тяжелой оправе. Не обращая внимания на вас, она продолжает водить пальцем по строчкам, периодически делая какие-то пометки. - ]]; + return [[Перед вами, склонившись над какой-то книгой, сидит женщина лет сорока--сорока-пяти. Длинные темные волосы убраны в хвост. На носу очки в тяжелой оправе. Не обращая внимания на вас, она продолжает водить пальцем по строчкам, периодически делая какие-то пометки. ]]; else psub("generic"); - return [[ - Не обращая внимания на вас, Мари Легран продолжает водить пальцем по строчкам, периодически делая какие-то пометки. - ]]; + return [[Не обращая внимания на вас, Мари Легран продолжает водить пальцем по строчкам, периодически делая какие-то пометки. ]]; end; end; phr = { {tag="first_meeting"}; - {"Извините?", [[ - Женщина поднимает голову и отрывается от работы. Она выпрямляется и улыбаясь приветствует вас: "Добро пожаловать в библиотеку Атлантиды. Я Мари Легран" - ]], code [[psub("first_meeting_2"); ]]}; + {"Извините?", [[Женщина поднимает голову и отрывается от работы. Она выпрямляется и улыбаясь приветствует вас: "Добро пожаловать в библиотеку Атлантиды. Я Мари Легран". ]], code [[psub("first_meeting_2"); ]]}; {tag="first_meeting_2"}; - {"Я Дэвид Дрейк, рад знакомству", [[ - Она кивает и спрашивает вас: "Как вы нашли Левиафан?" - ]], code [[psub("first_meeting_3"); ]]}; + {"Я Дэвид Дрейк, рад знакомству.", [[Она кивает и спрашивает вас: "Как вы нашли Левиафан?"]], code [[psub("first_meeting_3"); ]]}; {tag="first_meeting_3"}; - {"Это долгая история", [[ - Мари Легран кивает: "Ладно, потом как-нибудь, если торопитесь" - ]], [[ psub("generic") ]]}; - {"Я нашел тайник отца со старыми схемами. Пришлось побегать, чтобы восстановить субмарину. Я чудом собрал все необходимое", [[ - Мари Легран удивленно смотрит на вас: "Удивительно. Скорее всего Уильям хотел, чтобы вы нашли Левиафан. Жаль, что вы прибыли слишком поздно. Когда он узнал про этот древний город, он собрал несколько помощников и отправился на Надежде на его поиски". - ]], code [[ pon("father_more");psub("generic"); ]]}; + {"Это долгая история.", [[Мари Легран кивает: "Хорошо, тогда в другой раз".]], [[ psub("generic") ]]}; + {"Я нашел тайник отца со старыми схемами. Пришлось побегать, чтобы восстановить субмарину. Я чудом собрал все необходимое.", [[Мари Легран удивленно смотрит на вас: "Поразительно. Скорее всего Уильям хотел, чтобы вы нашли Левиафан. Жаль, что вы прибыли слишком поздно. Когда он узнал про этот древний город, он собрал несколько помощников и отправился на Надежде на его поиски". ]], code [[ pon("father_more", "ancient_city");psub("generic"); ]]}; {tag="generic"}; - {tag="father_more", false, "Кто отправился вместе с моим отцом?", [[ - "Немногие. Они вообще хотел отправиться вдвоем с Блэком, но Блэк уговорил Уильяма взять Джона Брауна и Дэмина Пина". - ]], code [[psub("more_people");]]}; + {tag="tube_spec", false, "Мне нужна документация по системам воздуховодов.", [[Мари Легран удивленно спрашивает: "Райт просил? Удачи в изучении", -- и кладет на стол перед вами толстую книжицу. ]], code [[ take(atl_item_tube_spec); ]]}; + {tag="father_more", false, "Кто отправился вместе с моим отцом?", [[Мари Легран отвечает: "Немногие. Они вообще хотел отправиться вдвоем с Блэком, но Блэк уговорил Уильяма взять Джона Брауна и Антонио Гарсия". ]], code [[psub("more_people");]]}; + {tag="ancient_city", false, "Какой еще город?", [[Мари Легран отвечает: "Да, вы же не в курсе. Лсэрианотр, или как-то так. Древний навьярский город по легенде скрывает какое-то древнее знание, которое, как и всегда в легендах, сторожит непобедимое чудовище. Дрейк и Блэк, вроде как, сумели найти какие-то карты, якобы указывающие путь к этому городу". ]]}; {tag="sabotage", false, "Вы знаете, что пожар в Игнисе начался из-за саботажа?", function(s) atl_lfc_panic = atl_lfc_panic + 1; atl_rep_darkstar = atl_rep_darkstar - 1; if (atl_lfc_panic <= 2) then - return [[ - Мари Легран удивленно смотрит на вас: "Откуда вы знаете? Кому такое в голову придти может?" - ]]; + return [[Мари Легран удивленно смотрит на вас: "Откуда вы знаете? Кому такое в голову придти может?"]]; elseif (atl_lfc_panic == 3) then - return [[ - Мари Легран удивленно смотрит на вас: "Вы понимаете, что говорите? Кому такое в голову придти может?" - ]]; + return [[Мари Легран удивленно смотрит на вас: "Вы понимаете, что говорите? Кому такое в голову придти может?"]]; end; end}; - {tag="ignis_what", false, "Вы знаете, что произошло в Игнисе?", [[ - "Поговорите лучше с Даркстаром или Райтом". - ]]}; - {always=true, "Я пойду", [[ - "Приходите еще" - ]], code [[ back(); ]]}; + {tag="ignis_what", false, "Вы знаете, что произошло в Игнисе?", [[Мари Легран пожимает плечами: "Поговорите лучше с Даркстаром или Райтом".]]}; + {always=true, "Я пойду.", [[Мари Легран возвращается к книге, прощаясь с вами: "Приходите еще".]], code [[ back(); ]]}; {tag="more_people"}; - {"Расскажите больше об Адриане Блэке", [[ - ]]}; - {"Расскажите больше о Джоне Брауне", [[ - ]]}; - {"Расскажите больше о Дэмине Пине", [[ - - ]]}; - {"Давайте о другом поговорим", [[ - "Хорошо" - ]], code [[pret();]]}; + {"Расскажите больше об Адриане Блэке.", [[Мари Легран рассказывает: "Блэк -- заместитель Дрейка. По-крайней мере, официально он занимал именно эту должность. По факту, он был близким другом вашего отца и компанией они управляли вместе". ]]}; + {"Расскажите больше о Джоне Брауне.", [[Мари Легран рассказывает: "У Джона золотые руки, наверное, именно поэтому Дрейк взял в экспедицию именно его". ]]}; + {"Расскажите больше о Антонио Гарсии.", [[Мари Легран рассказывает: "Талантливый молодой человек. Он хорошо знает язык навьяров и много с ними общался". ]]}; + {"Поговорим в другой раз.", [[Мари Легран кивает: "Хорошо".]], code [[pret();]]}; }; }; @@ -1961,7 +2307,42 @@ char_radcliffe_atlantis_dlg = dlg { }; nam = "Уолтер Рэдклифф"; disp = "Уолтер Рэдклифф"; - entered = function(s) + + reset_more = function(s) + poff("on_anna", "on_walter", "on_atlantis", "on_drake", "on_black", "on_join", "talk"); + if (rel_walter < 0) then + pon("talk"); + else + if (char_radcliffe.on_anna < 2) then + pon("on_anna"); + pon("talk"); + end; + if (char_radcliffe.on_black < 2) then + pon("on_black"); + pon("talk"); + end; + if (char_radcliffe.on_walter < 2) then + pon("on_walter"); + pon("talk"); + end; + if (char_radcliffe.on_atlantis < 2) then + pon("on_atlantis"); + pon("talk"); + end; + if (char_radcliffe.on_drake < 2) then + pon("on_drake"); + pon("talk"); + end; + if (char_radcliffe.on_join < 2) then + pon("on_join"); + pon("talk"); + end; + end; + end; + + enter = function(s) + s:reset_more(); + if (atl_lfc_state ~= 1) then poff('sabotage', 'ignis_what'); end; @@ -1974,25 +2355,43 @@ char_radcliffe_atlantis_dlg = dlg { if (s.state == 0) then s.state = 1; psub("first_meeting"); - return [[ - Перед вами стоит человек лет сорока--сорока-пяти, одетый в рабочий халат. Как только вы входите, он протягивает вам руку: "Добро пожаловать, господин Дрейк. Я - Уолтер Рэдклифф, инженер". - ]]; + return [[Перед вами стоит человек лет сорока--сорока-пяти, одетый в рабочий халат. Как только вы входите, он протягивает вам руку: "Добро пожаловать, господин Дрейк. Уолтер Рэдклифф, инженер". ]]; else psub("generic"); - return [[ - Уолтер Рэдклифф кивает вам: "Добрый день". - ]]; + return [[Уолтер Рэдклифф приветствует вас: "Добрый день". ]]; end; end; phr = { + {tag="questions"}; + {tag="on_black", "Что ты можешь сказать о Блэке?", function(s) + char_radcliffe.on_black = 2; + return [[Уолтер пожимает плечами: "Что я могу сказать про него? Он хороший друг Дрейка и вполне искренне радеет за благополучие нашей миссии. Однако, я думаю, его истинные цели могут отличаться от наших". ]]; + end}; + {tag="on_walter", "Расскажи о себе.", function(s) + char_radcliffe.on_walter = 2; + return [[Уолтер пожимает плечами: "Да мне нечего рассказать. Мы с сестрой жили в Лондоне, я уже работал в Вестхейвен Трансоушен, когда наши родители погибли -- пароход, на котором они отправились в США просто не прибыл в порт назначения. Мы с Анной остались одни. Она еще даже школу не закончила тогда. А потом мы построили Надежду, Атлантиду и далее по списку. Потом мне предложили работать внизу, на станции. Я, конечно, мог тогда отказаться, уйти в другую компанию, но направление, избранное Дрейком слишком меня привлекало. Я согласился". ]]; + end}; + {tag="on_anna", "Расскажи о своей сестре, Анне.", function(s) + char_radcliffe.on_anna = 2; + return [[Уолтер вздыхает: "Будь у меня выбор тогда, я ни за что не взял бы ее на Атлантиду. И жалел бы сейчас об этом. Не думаю, что на поверхности она стала бы той, кто она сейчас. Все-таки общество поглощенных своей работой людей накладывает определенный отпечаток, я думаю". ]]; + end}; + {tag="on_drake", "Что ты можешь сказать о Дрейке?", function(s) + char_radcliffe.on_drake = 2; + return [[Уолтер отвечает: "Не думаю, что скажу про него больше чем кто-то еще. Послушайте Райта, Моро, быть может Даркстара, хотя черт знает, что у этого типа на уме. Они скажут вам все и даже больше. "]]; + end}; + {tag="on_atlantis", "Что ты думаешь об Атлантиде?", function(s) + char_radcliffe.on_atlantis = 2; + return [[Уолтер отвечает: "Думаю только Райт и Уинтерлайт в полной мере осознают, насколько большим достижением для нас, для всего человечества, является постройка этой станции. Тем не менее, они, отчего-то, не спешат поделиться своими знаниями с другими. Не думаю, что сегодняшнее общество сможет по достоинству оценить новые возможности, даруемые этими технологиями. Да и что станет с навьярами? Вспомните Новый Свет, посмотрите на другие наши колонии -- хотите ли вы этого для Леарр и других?"]]; + end}; + {tag="quit", always=true, "Поговорим в другой раз. ", [[Уолтер кивает: "Хорошо".]], code [[ char_radcliffe_atlantis_dlg:reset_more(); pret();]]}; {tag = "first_meeting"}; - {"[Пожать руку]Рад знакомству", [[ - "Мы с Майклом вместе работали над Левиафаном. Многие решения в вашей субмарине - мои. Если вы не против, я хотел бы продолжить путешествие вместе с вами - во-первых - вам пригодится мой опыт, а во-вторых - я хочу увидеть Левиафан в деле". + {"[Пожать руку] Рад знакомству.", [[ + "Мы с Майклом вместе работали над Левиафаном. Многие решения в вашей субмарине -- мои. Если вы не против, я хотел бы продолжить путешествие вместе с вами. Во-первых, вам пригодится мой опыт, а во-вторых, я хочу увидеть Левиафан в деле". ]], code [[ rel_walter = rel_walter + 1; psub("leviathan"); ]]}; - {"Рад знакомству", [[ + {"Рад знакомству.", [[ Уолтер убирает руку и продолжает: "Я думаю, вы не просто так пришли. Спрашивайте". ]], code [[ psub("generic"); @@ -2005,29 +2404,33 @@ char_radcliffe_atlantis_dlg = dlg { ]]}; {tag = "leviathan"}; {"Интересно, и что вы можете рассказать о Левиафане?", [[ - Уолтер снимает очки, убирая их в нагрудный карман: "Левиафан строился как Надежда - для дальних путешествий и максимальной автономности. После успеха предыдущих субмарин, Райт решил сделать Левиафан заметно больше предыдущих кораблей. Сверхмощная батарея обеспечивает субмарину энергией более месяца при максимальных оборотах двигателей. Также есть паровой двигатель - он используется не только для движения, но и генерирует электричество. До Левиафана мы не экспериментировали с этим". + Уолтер снимает очки, убирая их в нагрудный карман: "Левиафан строился как Надежда -- для дальних путешествий и максимальной автономности. После успеха предыдущих субмарин, Райт решил сделать Левиафан заметно больше предыдущих кораблей. Сверхмощная батарея обеспечивает субмарину энергией более месяца при максимальных оборотах двигателей. Также есть паровой двигатель -- он используется не только для движения, но и генерирует электричество. До Левиафана мы не экспериментировали с этим". ]]}; {"Вы знаете, куда отправился мой отец отсюда?", [[ Уолтер отрицательно качает головой: "Не больше, чем остальные на станции". ]]}; - {"Буду рад, если вы присоединитесь к нам", [[ + {"Буду рад, если вы присоединитесь к нам. ", [[ "Отлично. Но вы ведь, еще поговорить хотите?" ]], code [[ psub("generic");]]}; - {"Я не думаю, что вы поможете", [[ + {"Я не думаю, что вы поможете. ", [[ "Очень жаль. Впрочем, у вас есть время подумать. Насколько я знаю, Даркстар и Моро собираются держать вас здесь какое-то время". ]], code [[ psub("generic");]]}; {tag = "generic"}; - {tag="sabotage", false, "Вы знаете, что пожар в Игнисе - результат саботажа?", [[ - "Безусловно. Системы энергоснабжения проектировал я и абсолютно уверен в их безопасности и надежности. Судя по тому, что произошло - кто-то весьма грамотный ,,доработал'' систему энергоснабжения Игниса. Я не думаю, что это мог быть один человек... Хотя если он делал это несколько дней - вполне вероятно. Как это сделать, кроме нас с Райтом знают только трое: Мишель Леруа, Чарльз Джонс и Мари Легран. И еще кое-что. Даркстар просил меня ни с кем про это не разговаривать, поэтому надеюсь на ваше понимание. Отдельно попрошу - не говорить на эту тему с моей сестрой". - ]], code [[ + {tag="questions", "У меня есть несколько вопросов. ", function(s) + if (rel_anna < 0) then + return [[Уолтер отрицательно качает головой: "Не сейчас, я занят". ]]; + else + psub("questions"); + return [[Уолтер кивает: "Слушаю". ]]; + end; + end}; + {tag="sabotage", false, "Вы знаете, что пожар в Игнисе -- результат саботажа?", [["Безусловно. Системы энергоснабжения проектировал я и абсолютно уверен в их безопасности и надежности. Судя по тому, что произошло -- кто-то весьма грамотный ,,доработал'' систему энергоснабжения Игниса. Я не думаю, что это мог быть один человек... Хотя если он делал это несколько дней -- вполне вероятно. Как это сделать, кроме нас с Райтом знают только трое: Мишель Леруа, Чарльз Джонс и Мари Легран. И еще кое-что. Даркстар просил меня ни с кем про это не разговаривать, поэтому надеюсь на ваше понимание. Отдельно попрошу -- не говорить на эту тему с моей сестрой". ]], code [[ rel_walter = rel_walter + 1; ]]}; {tag="ignis_what", false, "Вы, как инженер, можете рассказать, что произошло в Игнисе?", [[ "Пожар. Вам что-то еще известно?" ]]}; - {"Я пойду", [[ - "До встречи", - Уолтер отворачивается от вас и возвращается к своим делам. - ]], code [[ back();]]}; + {always=true, "Я пойду.", [["До встречи", -- Уолтер отворачивается от вас и возвращается к своим делам. ]], code [[ back();]]}; }; }; @@ -2037,16 +2440,16 @@ char_page_dlg = dlg { }; nam = "Фрэнсис Пейдж"; disp = "Фрэнсис Пейдж"; - entered = function(s) + enter = function(s) if (atl_lfc_state ~= 1) then poff('sabotage', 'ignis_what'); end; - + if (atl_lfc_state == 1 and not s.lfc_dialog) then s.lfc_dialog = true; pon('sabotage', 'ignis_what'); end; - + if (s.state == 0 ) then s.state = 1; psub("first_meeting"); @@ -2058,23 +2461,23 @@ char_page_dlg = dlg { end; phr = { {tag="first_meeting"}; - {"Дэвид Дрейк, рад знакомству", [[Фрэнсис на секунду отвлекается и внимательно смотрит на вас: "Да, я замечаю сходство с Уильямом". ]], code [[ psub("first_meeting_2"); ]]}; + {"Дэвид Дрейк, рад знакомству.", [[Фрэнсис на секунду отвлекается и внимательно смотрит на вас: "Да, я замечаю сходство с Уильямом". ]], code [[ psub("first_meeting_2"); ]]}; {tag="first_meeting_2"}; - {"Вы хорошо знали отца?", [[Фрэнсис кивает: "Я уважаю его, как, думаю, все на этой станции. Пожертвовать всем ради призрачной мечты - только великий человек мог пойти на такое. Он отправился на поиски легендарного города древних навьяров. К сожалению, я не смог отправиться с ним - я нужен на станции. Я знаю что вы здесь из-за него и я надеюсь, что вы не оставите вашу идею найти Уильяма и доведете свое дело до конца". ]], code [[ psub("generic"); ]]}; - {"У меня к вам несколько вопросов", [["Слушаю". ]], code [[ psub("generic"); ]]}; + {"Вы хорошо знали отца?", [[Фрэнсис кивает: "Я уважаю его, как, думаю, все на этой станции. Пожертвовать всем ради призрачной мечты -- только великий человек мог пойти на такое. Он отправился на поиски легендарного города древних навьяров. К сожалению, я не смог отправиться с ним -- я нужен на станции. Я знаю, что вы здесь из-за него и я надеюсь, что вы не оставите вашу идею найти Уильяма и доведете свое дело до конца". ]], code [[ psub("generic"); ]]}; + {"У меня к вам несколько вопросов.", [["Слушаю". ]], code [[ psub("generic"); ]]}; {tag="generic"}; - {tag="sabotage", false, "Вы знаете, что пожар в Игнисе - следствие саботажа?", function(s) + {tag="sabotage", false, "Вы знаете, что пожар в Игнисе -- следствие саботажа?", function(s) atl_lfc_panic = atl_lfc_panic + 1; atl_rep_darkstar = atl_rep_darkstar - 1; - return [[Фрэнсис от удивления роняет карандаш, но быстро собирается и отвечает: "Оставьте это Даркстару. Если саботаж имел место быть - Винсент найдет виновного. Я передам ему ваши слова". ]] + return [[Фрэнсис от удивления роняет карандаш, но быстро собирается и отвечает: "Оставьте это Даркстару. Если саботаж имел место быть, Винсент найдет виновного. Я передам ему ваши слова". ]]; end;}; {tag="ignis_what", false, "Что произошло в Игнисе?", [[Фрэнсис пожимает плечами: "Меня там не было. Не берусь говорить".]]}; - {"Что вы можете рассказать об Атлантиде?", [[Фрэнсис пожимает плечами: "Если честно, вам лучше расспросить кого-нибудь из управляющих, а лучше всего - Майкла Райта. Все что я могу сказать -- я до сих пор поражаюсь успеху этого невероятного проекта". ]]}; + {"Что вы можете рассказать об Атлантиде?", [[Фрэнсис пожимает плечами: "Если честно, вам лучше расспросить кого-нибудь из управляющих, а лучше всего -- Майкла Райта. Все что я могу сказать -- я до сих пор поражаюсь успеху этого невероятного проекта". ]]}; {"Что вы можете рассказать о Наутилусе?", [[Френсис кивает: "Когда мы создавали Наутилус, я уже работал в Вестхейвен Трансоушен. Атлантида тогда существовала, но была далеко от того, что вы видите. Мы тогда просто строили вторую Надежду. Нам не нужна была высокая автономность, но мы хотели большую маневренность и мощность -- собственно на этом мы и сконцентрировались. Получилось то, что получилось -- рабочая лошадка, которой мы пользуемся по сей день". ]]}; - {"Что вы можете рассказать об Энтерпрайзе?", [[Френсис кивает: "Энтерпрайз мы начали когда захотели судно побольше. Опыта и знаний нам хватило только на пропорциональное увеличение размеров и немного более мощный двигатель. райт наверное сказал бы, что получилось из рук вон плохо, но на мой взгляд -- Энтерпрайз вполне неплох, да и с честью служит нам до сих пор". ]]}; + {"Что вы можете рассказать об Энтерпрайзе?", [[Френсис кивает: "Энтерпрайз мы начали когда захотели судно побольше. Опыта и знаний нам хватило только на пропорциональное увеличение размеров и немного более мощный двигатель. Райт наверное сказал бы, что получилось из рук вон плохо, но, на мой взгляд, Энтерпрайз вполне неплох, да и с честью служит нам до сих пор". ]]}; {"Что вы можете рассказать о Надежде?", [[Фрэнсис кивает: "Надежда была первой субмариной, построенной нами. Я в этом участия не принимал, так что многие конструктивные решения меня удивляют. Впрочем, более поздние субмарины спроектированы гораздо грамотнее, да и после переоборудования многое удалось решить". ]]}; - {"Что вы можете рассказать о Левиафане?", [[Френсис отвечает: "С первого взгляда ясно, что Левиафан не имеет практически ничего общего с Надеждой, Наутилосом и даже Энтерпрайзом. Интересно, что Левиафан строился с оглядкой на высокую автономность -- так же, как и Надежда. За это конечно пришлось многим поплатиться -- Левиафан большой и неповоротливый в сравнении с Надеждой". ]]}; - {always=true, "Я пойду", [[Фрэнсис Пейдж прощается с вами: "Увидимся позже". ]], code [[ back(); ]]}; + {"Что вы можете рассказать о Левиафане?", [[Френсис отвечает: "С первого взгляда ясно, что Левиафан не имеет практически ничего общего с Надеждой, Наутилусом и даже Энтерпрайзом. Интересно, что Левиафан строился с оглядкой на высокую автономность -- так же, как и Надежда. За это, конечно, пришлось многим поплатиться -- Левиафан большой и неповоротливый в сравнении с Надеждой". ]]}; + {always=true, "Я пойду.", [[Фрэнсис Пейдж прощается с вами: "Увидимся позже". ]], code [[ back(); ]]}; }; }; @@ -2084,7 +2487,7 @@ char_leroy_dlg = dlg { }; nam = "Мишель Леруа"; disp = "Мишель Леруа"; - entered = function(s) + enter = function(s) if (atl_lfc_state ~= 1) then poff('sabotage', 'ignis_what'); end; @@ -2105,16 +2508,16 @@ char_leroy_dlg = dlg { end; phr = { {tag="first_meeting"}; - {"Добрый день. Я Дэвид Дрейк", [[Человек отрывается от чертежа, чтобы поздороваться с вами. Он протягивает вам руку и произносит: "Мишель Леруа. Инженер". ]], code [[ psub('first_meeting_2'); ]]}; + {"Добрый день. Я Дэвид Дрейк.", [[Человек отрывается от чертежа, чтобы поздороваться с вами. Он протягивает вам руку и произносит: "Мишель Леруа. Инженер". ]], code [[ psub('first_meeting_2'); ]]}; {tag="first_meeting_2"}; - {"[Пожать руку]Рад знакомству", [[Вы пожимаете руку Мишеля, и он спрашивает вас: "Что вы хотели?" ]], code [[ psub('generic'); ]]}; - {"Рад знакомству", [[Мишель кладет руку обратно на стол и спрашивает: "Что вы хотели?" ]], code [[ psub('generic'); ]]}; + {"[Пожать руку] Рад знакомству.", [[Вы пожимаете руку Мишеля, и он спрашивает вас: "Что вы хотели?" ]], code [[ psub('generic'); ]]}; + {"Рад знакомству.", [[Мишель кладет руку обратно на стол и спрашивает: "Что вы хотели?" ]], code [[ psub('generic'); ]]}; {tag="generic"}; {tag="sabotage", false, "Вы знаете, что пожар в Игнисе начался из-за саботажа?", [[Мишель удивленно переспрашивает: "Кто вам это сказал? не думаю, что здесь есть люди настолько не ценящие свою жизнь". ]], code [[ atl_lfc_leroy_spoken = 1; ]]}; {tag="ignis_what", false,"Что вы можете сказать о произошедшем в Игнисе?", [[ Мишель уверенно отвечает: "Короткое замыкание. К сожалению, пленки и другие материалы, хранимые в Игнисе достаточно горючи". ]]}; - {"Почему вы считаете, что станцию необходимо закрыть?", [[Мишель начинает объяснять, активно жестикулируя: "Вы недавно здесь, и для вас это долэно быть гораздо более очевидно, чем для многих из нас. Легко представить, к чему здесь может привести самая мелкая поломка". ]]}; - {always=true, "Я пойду", [[Мишель возвращается к чертежу. ]], code [[ back(); ]]}; + {"Почему вы считаете, что станцию необходимо закрыть?", [[Мишель начинает объяснять, активно жестикулируя: "Вы недавно здесь, и для вас это должно быть гораздо более очевидно, чем для многих из нас. Легко представить, к чему здесь может привести самая мелкая поломка. А эти самонадеянные люди, в лице Дрейка, Блэка, Светловой, Моро, Райта и даже Даркстара не видят дальше собственного носа! Что произойдет, если Доминус даст течь? Мы просто останемся погребенными под тоннами соленой воды и никакие меры предосторожности не помогут. Одно дело -- кратковременные экспедиции и совсем другое -- полное переселение сюда". ]]}; + {always=true, "Я пойду.", [[Мишель возвращается к чертежу. ]], code [[ back(); ]]}; }; }; @@ -2124,7 +2527,7 @@ char_goldman_dlg = dlg { }; nam = "Леонард Голдман"; disp = "Леонард Голдман"; - entered = function(s) + enter = function(s) if (atl_lfc_state ~= 1) then poff('sabotage', 'ignis_what'); end; @@ -2134,6 +2537,7 @@ char_goldman_dlg = dlg { pon('sabotage', 'ignis_what'); end; + poff('show_clock'); if (have(item_goldmans_clock)) then pon('show_clock'); end; @@ -2151,34 +2555,33 @@ char_goldman_dlg = dlg { {tag="first_meeting"}; {"Я Дэвид Дрейк. Рад знакомству. ", [[Леонард кивает, но ничего не говорит. ]], code [[ psub("generic"); ]]}; {tag="generic"}; - {tag="show_clock", false, "[Показать часы]Это ваше?", [[Голдман протягивает руку, чтобы взять часы и удивленно спрашивает: "Мои. Где вы их взяли?" ]], code [[ atl_lfc_goldman_known = true; psub("give_clock"); ]]}; + {tag="show_clock", false, "[Показать часы] Это ваше?", [[Голдман протягивает руку, чтобы взять часы и удивленно спрашивает: "Мои. Где вы их взяли?" ]], code [[ psub("give_clock"); ]]}; {tag="sabotage", false, "Вы знаете, что пожар начался из-за саботажа?", [[Вы видите удивление и страх на лице Голдмана. Он неуверенно спрашивает: "С чего вы взяли?" ]], code [[ psub("sabotage2"); atl_lfc_leroy_spoken = 1; ]]}; {tag="ignis_what", false, "Вы знаете, что произошло в Игнисе?", [[Голдман пожимает плечами: "Не больше чем вы". ]]}; - {"Почему вы считаете, что станцию стоит закрыть?", [[Голдман объясняет: "Мы уже десять лет здесь. Не видели ни солнца, ни неба, ни травы. Только металлический потолок и километры воды над головой. Мне кажется, что пора бы уже закончить этот эксперимент. В чем-то я согласен с Джонсом -- станция стареет, оборудование выходит из строя. Долго ли до того, как мы потеряем наши субмарины, а вместе с ними и вообще возможность вернуться наверх?"]]}; - {"Я пойду", [[Голдман кивает: "Поговорим позже". ]], code [[ back(); ]]}; + {"Почему вы считаете, что станцию стоит закрыть?", [[Голдман объясняет: "Мы уже десять лет здесь. Не видели ни солнца, ни неба, ни травы. Только металлический потолок и километры воды над головой. Мне кажется, что пора бы уже закончить этот эксперимент. В чем-то я согласен с Джонсом -- станция стареет, оборудование выходит из строя. Долго ли до того, как мы потеряем наши субмарины, а вместе с ними и вообще всякую возможность вернуться наверх?"]]}; + {"Я пойду.", [[Голдман кивает: "Поговорим позже". ]], code [[ back(); ]]}; {tag="sabotage2"}; - {"Даркстар сказал", [[Леонард Голдман пожимает плачеми: "Даркстар мог и ошибиться -- он же параноик. А я в это не поверю". ]]}; - {"Это очевидно", [[Леонард Голдман недовольно предупреждает вас: "Будете дальше распускать подобные слухи - я доложу Даркстару". ]]}; - {"Эээ... Я пошутил", [[Леонард Голдман недовольно восклицает: "Вы вообще нормальный?!"]], code [[ back(); ]]}; + {"Даркстар сказал.", [[Леонард Голдман пожимает плечами: "Даркстар мог и ошибиться. А я в это не поверю". ]]}; + {"Это очевидно.", [[Леонард Голдман недовольно предупреждает вас: "Будете дальше распускать подобные слухи -- я доложу Даркстару". ]]}; + {"Эээ... Я пошутил.", [[Леонард Голдман недовольно восклицает: "Вы вообще нормальный?!"]], code [[ back(); ]]}; {tag="give_clock"}; - {"[Отдать часы]Нашел", [[Леонард Голдман кивает: "Благодарю. Это часы моего деда, они очень важны для меня". ]], code [[ remove("item_goldmans_clock"); pret(); ]]}; - {"[Убрать часы]Не так быстро. Что вы делали в Солисе?", [[Ваш запрос похоже застал Леонарда врасплох. Заикаясь, он спрашивает: "С ч-чего вы вз-взяли?" ]], code [[ psub("give_clock_2");]]}; + {"[Отдать часы] Нашел.", [[Леонард Голдман кивает: "Благодарю. Это часы моего деда, они очень важны для меня". ]], code [[ remove("item_goldmans_clock"); pret(); ]]}; + {"[Убрать часы] Не так быстро. Что вы делали в Солисе?", [[Ваш запрос похоже застал Леонарда врасплох. Заикаясь, он спрашивает: "С ч-чего вы вз-взяли?" ]], code [[ psub("give_clock_2");]]}; {tag="give_clock_2"}; {"Эти часы я подобрал на месте саботажа. Теперь вы не отвертитесь.", [[Леонард поднимается и садится. Тяжело вздохнув он сознается: "Хорошо, я все скажу. Только если обещаете, что меня больше не будут держать на этой станции". ]], code [[ psub('promise'); ]]}; {tag="promise"}; - {always = true, "Я сделаю все, что в моих силах.", [[Леонард Голдман вздыхает и начинает сбивчиво рассказывать: "Это все Мишель придумал. У меня бы мозгов не хватило. Он и в Игнисе пожар устроил. Солис он тоже хотел взорвать сам, но Даркстар, кажется подозревает его. Поэтому он упросил меня это сделать... И зачем я согласился?!" - ]], code [[ atl_lfc_saboteur_known = true; psub("leroy");]]}; + {always = true, "Я сделаю все, что в моих силах.", [[Леонард Голдман вздыхает и начинает сбивчиво рассказывать: "Это все Мишель придумал. У меня бы мозгов не хватило. Он и в Игнисе пожар устроил. Солис он тоже хотел взорвать сам, но Даркстар, кажется, подозревает его. Поэтому он упросил меня это сделать... И зачем я согласился?!" ]], code [[ atl_lfc_saboteur_known = true; psub("leroy");]]}; {always = true, "Я ничего не обещаю.",[[Леонард Голдман дрожащим голосом отвечает: "Тогда я ничего не скажу". ]], code [[ psub("threaten"); ]]}; {tag = "threaten"}; - {always = true, "Тогда пусть Даркстар с вами разбирается", [[Леонард Голдман вздыхает и начинает сбивчиво рассказывать: "Это все Мишель придумал. У меня бы мозгов не хватило. Он и в Игнисе пожар устроил. Солис он тоже хотел взорвать сам, но Даркстар, кажется подозревает его. Поэтому он упросил меня это сделать... И зачем я согласился?!" ]], code [[ atl_lfc_saboteur_known = true; psub("leroy");]]}; - {"[Отдать часы]Черт с тобой, забирай свои часы.", [[Голдман крайне удивлен: "Вот так просто?" ]], code [[ remove("item_goldmans_clock"); psub("tired_of_you"); ]]}; + {always = true, "Тогда пусть Даркстар с вами разбирается.", [[Леонард Голдман вздыхает и начинает сбивчиво рассказывать: "Это все Мишель придумал. У меня бы мозгов не хватило. Он и в Игнисе пожар устроил. Солис он тоже хотел взорвать сам, но Даркстар, кажется подозревает его. Поэтому он упросил меня это сделать... И зачем я согласился?!" ]], code [[ atl_lfc_saboteur_known = true; psub("leroy");]]}; + {"[Отдать часы] Черт с тобой, забирай свои часы.", [[Голдман крайне удивлен: "Вот так просто?" ]], code [[ remove("item_goldmans_clock", pl); psub("tired_of_you"); ]]}; {"[Уйти]", code = [[ back(); ]]}; {tag = "tired_of_you"}; {"Даю вам последний шанс рассказать все, что знаете.", [[леонард Голдман отказывается отвечать: "Я назвал свои условия". ]], code [[ psub('promise'); ]]}; {"[Уйти]", code = [[ back(); ]]}; {tag = "leroy"}; {"И что вы еще намереваетесь сломать?", [[Леонард Голдман пожимает плечами. Испуганно глядя на вас, он отвечает: "Не знаю. Мишель хотел сломать станцию... Так чтобы никто не пострадал. Все бы просто вернулись на поверхность и дело с концом". ]]}; - {"Я пойду", [[Леонард Голдман кивает: "Помни, что ты обещал". ]], code = [[ back(); ]]}; + {"Я пойду.", [[Леонард Голдман кивает: "Помни, что ты обещал". ]], code = [[ back(); ]]}; }; }; @@ -2189,7 +2592,7 @@ char_jones_dlg = dlg { }; nam = "Чарльз Джонс"; disp = "Чарльз Джонс"; - entered = function(s) + enter = function(s) if (atl_lfc_state ~= 1) then poff('sabotage', 'ignis_what'); end; @@ -2206,14 +2609,14 @@ char_jones_dlg = dlg { if (s.state == 0) then s.state = 1; psub("first_meeting"); - return [[на койке перед вами сидит немолодой человек, одетый в простой серый костюм. Его седые волосы коротко острижены. Подбородок гладко выбрит. Лицо изрыто глубокими морщинами. В руках он вертит карандаш, задумчиво разглядывая его. ^При виде вас он встает и приветствует вас: "Добрый день, меня зовут Чарли. Чарли Джонс". ]]; + return [[На койке перед вами сидит немолодой человек, одетый в простой серый костюм. Его седые волосы коротко острижены. Подбородок гладко выбрит. Лицо изрыто глубокими морщинами. В руках он вертит карандаш, задумчиво разглядывая его. ^При виде вас он встает и приветствует вас: "Добрый день, меня зовут Чарли. Чарли Джонс". ]]; else psub("generic"); return [[Чарльз Джонс приветствует вас, отвлекаясь от своего занятия: "Добрый день". ]]; end; end; phr = { - {"Я Дэвид Дрейк. Рад знакомству", [[Чарльз тяжело вздыхает: "Взаимно". ]], code [[ psub("generic"); ]]}; + {"Я Дэвид Дрейк. Рад знакомству.", [[Чарльз тяжело вздыхает: "Взаимно". ]], code [[ psub("generic"); ]]}; {tag="sabotage", false, "Вы знаете, что причиной пожара был саботаж?", function(s) atl_lfc_panic = atl_lfc_panic + 1; atl_rep_darkstar = atl_rep_darkstar - 1; @@ -2226,50 +2629,52 @@ char_jones_dlg = dlg { end; end}; {tag="ignis_what", false, "Вы знаете, что произошло в Игнисе?", [["Думаю да. Короткое замыкание -- станция старая, провода старые. Где-то нарушилась изоляция. Дальше будет еще хуже -- я постоянно об этом говорю, пора бросить эту груду металлолома и вернуться к людям, на поверхность". ]]}; - {tag="on_atlantis", false, "Вы считаете, что станцию необходимо закрыть?", [[Чарльз кивает: "Даже вы понимаете, хотя лишь несколько дней провели здесь. Станция старая, разваливается на глазах. Нас слишком мало, чтобы своевременно устранять возрастающее число неполадок". ]], code [[ char_jones.on_atlantis = 1; psub("on_leaving");]]}; - {always=true, "Я пойду", [[ + {tag="on_atlantis", false, "Вы считаете, что станцию необходимо закрыть?", [[Чарльз кивает: "Станция старая, разваливается на глазах. Нас слишком мало, чтобы своевременно устранять возрастающее число неполадок". ]], code [[ char_jones.on_atlantis = 1; psub("on_leaving");]]}; + {always=true, "Я пойду.", [[ "До встречи". ]], code [[ back(); ]]}; {tag="on_leaving"}; - {tag="Да. соглашусь с вами. ", [[Чарли понимающе кивает. ]], code [[ pret(); ]]}; - {tag="Но ведь станция в отличном состоянии. ", [[Чарли вздыхает: "Просто, вы еще не пробыли здесь достаточно и многого не видели". ]], code [[ pret(); ]]}; + {"Да. соглашусь с вами. ", [[Чарли понимающе кивает. ]], code [[ pret(); ]]}; + {"Но ведь станция в отличном состоянии. ", [[Чарли вздыхает: "Просто, вы еще не пробыли здесь достаточно и многого не видели". ]], code [[ pret(); ]]}; }; }; -atl_lev_radcliffe_dlg = room { +atl_lev_radcliffe_dlg = dlg { nam = "Уолтер Рэдклифф"; - dsc = [[ - В доке Левиафана вы встречаете Уолтера Рэдклиффа. Завидев вас он говорит: "Дрейк, какая встреча. Я только что поместил на Левиафан два скафандра, которые вам выделили Моро с Райтом. Хорошо, что я вас встретил. Я хотел бы присоединиться к экипажу Левиафана и предложить вам свою помощь в поисках Уильяма". - ]]; + entered = function(s) + char_radcliffe.rel_on_join = rel_walter; + char_anna.rel_on_join = rel_anna; + atl_lev_state = 2; + psub("step1"); + if char_radcliffe_atlantis_dlg.state == 0 then + char_radcliffe_atlantis_dlg.state = 1; + return [[В доке Левиафана вы встречаете человека лет сорока--сорока-пяти, одетого в рабочий халат. При виде вас, он представляется: "Добрый день, господин Дрейк. Мое имя -- Уолтер Рэдклифф, я инженер. Мы только что перенесли на Левиафан припасы и оборудование, которые вам выделили Моро с Райтом. Хорошо, что я вас встретил. Нужно вас проинструктировать. Вы уже знаете, что скафандры снабжены радиопередатчиком и фонарем, но вы не знаете об еще одном важном устройстве. Мы называем его кодировщиком", -- Рэдклифф показывает вам устройство, которое все это время держал в руке. Аппарат представляет из себя клавиатуру, как у печатной машинки и набор лампочек, расположенных в ряд. Само устройство помещено в водонепроницаемый корпус, чтобы его можно было использовать под водой. Рэдклифф поясняет: "Каждый скафандр снабжен таким устройством. Оно позволяет нам общаться с навьярами. Как вы уже знаете, навьяры общаются посредством последовательностей цветовых сигналов. При нажатии на клавишу кодировщика, зажигается соответствующая лампочка. Лампы горят строго определенное время, которое регулируется ручкой, вот здесь. Вы можете набирать так быстро, как хотите. Кодировщик выведет последовательность целиком с заданной скоростью. Клавиши промаркированы буквами нашего алфавита, сопоставленными буквам навьярского. Если вы прочитаете учебник, что мы поместили в вашу каюту, вы разберетесь". ]]; + else + return [[В доке Левиафана вы встречаете Уолтера Рэдклиффа. Завидев вас он говорит: "Дрейк, какая встреча. Мы только что перенесли на Левиафан припасы и оборудование, которые вам выделили Моро с Райтом. Хорошо, что я вас встретил. Нужно вас проинструктировать. Вы уже знаете, что скафандры снабжены радиопередатчиком и фонарем, но вы не знаете об еще одном важном устройстве. Мы называем его кодировщиком", -- Рэдклифф показывает вам устройство, которое все это время держал в руке. Аппарат представляет из себя клавиатуру, как у печатной машинки и набор лампочек, расположенных в ряд. Само устройство помещено в водонепроницаемый корпус, чтобы его можно было использовать под водой. Рэдклифф поясняет: "Каждый скафандр снабжен таким устройством. Оно позволяет нам общаться с навьярами. Как вы уже знаете, навьяры общаются посредством последовательностей цветовых сигналов. При нажатии на клавишу кодировщика, зажигается соответствующая лампочка. Лампы горят строго определенное время, которое регулируется ручкой, вот здесь. Вы можете набирать так быстро, как хотите. Кодировщик выведет последовательность целиком с заданной скоростью. Клавиши промаркированы буквами нашего алфавита, сопоставленными буквам навьярского. Если вы прочитаете учебник, что мы поместили в вашу каюту, вы разберетесь". ]]; + end; + end; phr = { - {"Как к этому отнесутся на Атлантиде?", [[ - "Я уже обговорил это с Моро и Райтом. Они не против моего решения, тем более, что они не меньше вас заинтересованы в успехе вашей экспедиции". - ]]}; - {"Благодарю, добро пожаловать на борт", [[ - "Отлично, благодарю. У меня есть еще одна просьба. Я хотел бы, чтобы моя сестра отправилась вместе с нами. Она знает язык навьяров и может оказаться крайне полезна во множестве ситуаций, кроме того - так она остается под моим присмотром". - ]], code [[ - lifeon("char_radcliffe"); + {tag="step1"}; + {"Благодарю.", [[Уолтер кивает и продолжает: "Я хотел бы присоединиться к экипажу Левиафана и предложить вам свою помощь в поисках Уильяма". ]], code [[psub("step2");]]}; + {tag="step2"}; + {"Как к этому отнесутся на Атлантиде?", [["Я уже обговорил это с Моро и Райтом. Они не против моего решения, тем более, что они не меньше вас заинтересованы в успехе вашей экспедиции". ]]}; + {"Добро пожаловать на борт.", [["Отлично, благодарю. У меня есть еще одна просьба. Я хотел бы, чтобы моя сестра отправилась вместе с нами. Она знает язык навьяров и может оказаться крайне полезна во множестве ситуаций, кроме того -- так она остается под моим присмотром". ]], code [[ table.insert(pl.party, 'radcliffe'); + move(char_radcliffe, char_radcliffe.home); psub("sister"); ]]}; {tag="sister"}; - {"Я не думаю, что ей место на Левиафане - экспедиция может быть опасна", function(s) + {"Я не думаю, что ей место на Левиафане -- экспедиция может быть опасна.", function(s) if (ArrayUtils.indexOf(pl.party, 'learr') ~= 0) then walk(atl_lev_first_sail); - return [[ - "Вы правы, Анне будет безопаснее остаться на Атлантиде. Я знаю, что с вами отправляется Леарр, которая достаточно хорошо знает наш язык, так что я надеюсь, что мы справимся без помощи моей сестры. Я скоро прибуду" - с этими словами он выходит из дока. - ]]; + return [["Вы правы, Анне будет безопаснее остаться на Атлантиде. Я знаю, что с вами отправляется Леарр, которая достаточно хорошо знает наш язык, так что я надеюсь, что мы справимся без помощи моей сестры. Я скоро вернусь", -- с этими словами он выходит из дока. ]]; else - return [[ - "Я хотел бы, чтобы Анна отправилась с нами - я лично позабочусь о ее безопасности, а вам понадобится человек, долгое время посвятивший изучению культуры навьяров". - ]]; + return [["Я хотел бы, чтобы Анна отправилась с нами -- я лично позабочусь о ее безопасности, а вам понадобится человек, долгое время посвятивший изучению культуры навьяров". ]]; end; end}; - {"Хорошо, ее помощь нам не помешает", [[ - "Отлично, мы скоро будем готовы" - с этим словами он выходит из дока. - ]], [[ - lifeon("char_anna"); + {"Хорошо, ее помощь нам не помешает.", [["Отлично, мы скоро будем готовы", -- с этим словами он выходит из дока. ]], [[ table.insert(pl.party, 'anna'); + move(char_anna, char_anna.home); walk(atl_lev_first_sail); ]]}; }; diff --git a/atlantis_dyp.lua b/atlantis_dyp.lua new file mode 100644 --- /dev/null +++ b/atlantis_dyp.lua @@ -0,0 +1,2088 @@ +--[[ +Дипатреанотр +]] + +global { + dyp_quest_state = 0; + -- 0 - не начат + -- 1 - вождь попросил светящуюся капсулу с Атлантиды + -- 2 - вождь попросил зуб акулы + -- 3(1) - вождь попросил карту + -- 4(2) - узнали, что карту унес Аэдиенрр в Дипатреанотр + -- 5(3) - узнали, куда унес карту Аэдиенрр из Дипатреанотра + -- 6(4) - Отдали оригинал КНО в Ираафаанотр + -- 7(5) - Отдали жезл в Ираафаанотр + dyp_stones_known = false; + dyp_lib_stone_state = 0; +}; + +--[[ +Дипатреанотр город +]] + +dyp_entry = lcutscene("dyp_entry", "Левиафан, рубка", [[Дипатреанотр расположен всего в нескольких часах пути от Атлантиды. Как только вы прибываете на место, вашим глазам открывается картина неприглядного поселения -- небольшой деревушки, состоящей из не более чем сотни домов, сгрудившихся вокруг центральной площади, посреди которой возвышается каменный обелиск. Вы не замечаете никаких улиц, кроме одной, соединящей дом вождя с центральной площадью. Вы направляете Левиафан к центру и субмарина, послушная вашим указаниям, замирает рядом с обелиском. ]], "Вы прибыли в Дипатреанотр. ", leviathan_wheelhouse); + +dyp_center = room { + nam = "dyp_center"; + underwater = true; + handwheel_room = "dyp_temple_navigation"; + disp = "Дипатреанотр, центр"; + view = [[Левиафан находится над центром Дипатреанотра -- небольшого навьярского поселения. Вокруг небольшой центральной площади неровными кругами расположены небольшие каменные дома. Явно выраженные улицы отсутствуют, за исключением широкой, выложенной камнем дороги от площади до дома вождя. В другом конце площади расположено большое здание библиотеки. ]]; + dsc = [[Вы находитесь на центральной площади Дипатреанотра -- небольшого навьярского поселения. Вокруг небольшой центральной площади неровными кругами расположены небольшие каменные дома. Явно выраженные улицы отсутствуют, за исключением широкой, выложенной камнем дороги от площади до дома вождя. В другом конце площади расположено большое здание библиотеки. ]]; + obj = { + "dyp_obelisk"; + }; + way = { + kh_vroom("К библиотеке", "dyp_library_entrance"); + kh_vroom("К дому вождя", "dyp_chief_house_entrance"); + kh_vroom("В Левиафан", "leviathan_airlock"); + kh_vroom("К окраине", "dyp_outskirts"); + }; +}; + +dyp_outskirts = room { + nam = "dyp_outskirts"; + underwater = true; + disp = "Дипатреанотр, окраина"; + dsc = [[Вы стоите на южной окраине Дипатреанотра. К северу от вас расположены неказистые каменные дома жителей города. Отсюда прекрасно виден зависший над центральной площадью Левиафан. ]]; + obj = { + "dyp_guardian"; + }; + way = { + kh_vroom("К обелиску", "dyp_center"); + }; +}; + +dyp_guardian = npc { + nam = "dyp_guardian"; + dsc = [[Рядом с вами неспешно прогуливается {стражник}, вооруженный копьем. Кажется, ваш вид его нисколько не удивляет и не беспокоит. ]]; + phrases = function(s) + if language_known then + return { + [[Стражник не обращает на вас внимания. ]]; + [[По головным плавникам стражника бегут цветные полосы: "Ты говори с вождем, не со мной". ]]; + }; + else + return { + [[Стражник не обращает на вас внимания. ]]; + [[По головным плавникам стражника бегут цветные полосы. К сожалению, вы не понимаете, что он пытается вам сказать. ]]; + }; + end; + end; + dlg = function(s) + if dyp_quest_state == 4 then + return "dyp_guardian_dlg"; + end; + end; +}; + +dyp_guardian_dlg = dlg { + nam = "dyp_guardian_dlg"; + disp = "Стражник"; + entered = function(s) + if language_known then + psub("speak"); + return [[По головным плавникам стражника бегут цветные полосы: "Ты говори с вождем, не со мной". ]]; + else + psub("no_speak"); + return [[По головным плавникам стражника бегут цветные полосы. К сожалению, вы не понимаете, что он пытается вам сказать. ]]; + end; + end; + phr = { + {tag="no_speak"}; + {always = true; "[Уйти]", code [[ back(); ]]}; + {tag="speak"}; + {"[Кодировщик] Я ищу навьяра по имени Аэдиенрр. Он проходил здесь недавно.", [[Стражник кивает: "Аэдиенрр из Ираафаанотра ушел на восток несколько дней назад. Кажется, он направлялся к обелискам". ]], code [[ dyp_quest_state = 5; ]]}; + {always = true; "[Уйти]", code [[ back(); ]]}; + }; +}; + +dyp_obelisk = obj { + nam = "dyp_obelisk"; + dsc = [[В центре площади стоит большой каменный {обелиск}, с нанесенными на него символами. ]]; + act = function(s) + if dyp_stones_known then + p [[У самого основания обелиска вы видите небольшое изображение, вырезанное в камне. Некогда оно было разрезано на шестнадцать частей, а части перепутаны между собой. ]]; + walkin("dyp_obelisk_puzzle"); + else + return [[На обелиске, традиционно для навьяров, начертано название города и вырезана карта, указывающая путь к храму. ]]; + end; + end; +}; + +dyp_obelisk_puzzle = room { + var { + state = { + 0, 1, 2, 3, + 4, 5, 6, 7, + 8, 9,10,11, + 12,13,14,15 + }; + set = false; + }; + win = ""; + nam = "Дипатреанотр, центр"; + underwater = true; + entered = function(s) + if not s.set then + s.set = true; + local details = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; + local matches = 3; + for i = 1, 16 do + local item; + local index; + repeat + index = rnd(#details); + item = details[index]; + until matches > 0 or item ~= s.state[i] or i == 16; + table.remove(details, index); + s.state[i] = item; + end; + local k = 1; + for i = 1, 16 do + if s.state[i] == 1 then + for j = i + 1, 16 do + if s.state[i] > s.state[j] and s.state[j] ~= 12 then + k = k + 1; + end; + end; + else + k = k + math.floor(i / 4); + end; + end; + if k % 2 == 0 then + for i = 16, 1, -1 do + if s.state[i] == 14 then + s.state[i] = 15; + elseif s.state[i] == 15 then + s.state[i] = 14; + end; + end; + end; + end; + end; + pic = function(s) + local p = 'images/dyp15.png'; + for i = 1, #s.state do + local f = s.state[i]; + p = p .. ';images/dyp15_' .. tostring(f) .. '.png@' .. tostring(math.floor((i - 1) / 4) * 40) .. ',' .. tostring((3 - (i - 1) % 4) * 40); + end; + return p; + end; + dsc = [[У самого основания обелиска вы видите небольшое изображение, вырезанное в камне. Некогда оно было разрезано на шестнадцать частей, а части перепутаны между собой. ]]; + click = function(s, x, y) + local ty = math.floor(x / 40); + local tx = 3 - math.floor(y / 40); + local tile = tx + ty * 4 + 1; + if (s.state[tile] ~= 15) then + if (tile - 4 > 0) and s.state[tile - 4] == 15 then + tx = s.state[tile]; + s.state[tile] = s.state[tile - 4]; + s.state[tile - 4] = tx; + elseif tx > 0 and s.state[tile - 1] == 15 then + tx = s.state[tile]; + s.state[tile] = s.state[tile - 1]; + s.state[tile - 1] = tx; + elseif tx < 3 and s.state[tile + 1] == 15 then + tx = s.state[tile]; + s.state[tile] = s.state[tile + 1]; + s.state[tile + 1] = tx; + elseif (tile + 4) <= 16 and s.state[tile + 4] == 15 then + tx = s.state[tile]; + s.state[tile] = s.state[tile + 4]; + s.state[tile + 4] = tx; + end; + end; + local f = ""; + for i = 1, #s.state do + f = f .. "," .. tostring(s.state[i]); + end; + print(f); + if not s:check_win() then + walkin(here()); + else + p = [[Одна из каменных плит рядом с обелиском отодвигается. В образовавшейся выемке вы видите небольшой светящийся красным светом камень. Вы забираете камень себе. ]]; + put(dyp_item_stone_red, pl); + walk(dyp_center); + end; + end; + check_win = function(s) + for i = 1, #s.state do + if s.state[i] ~= 16 - i then + return false; + end; + end; + return true; + end; + way = { + kh_vroom("Отойти", "dyp_center"); + }; +}; + +dyp_navjiarr = npc{ + nam = "dyp_navjiarr"; + dsc = [[Немногие {навьяры}, находящиеся сейчас на площади с интересом оглядываютс на Левиафан и вас. ]]; + phrases = { + "Не стоит их беспокоить. ", + "Вряд ли они смогут сказать вам что-то полезное. " + }; +}; + +dyp_library_entrance = room { + nam = "Дипатреанотр, вход в библиотеку"; + underwater = true; + dsc = [[Двухэтажное каменное здание библиотеки разительно отличается от большинства строений Дипатреанотра. Выстроенное из массивных каменных плит, а не из булыжников, как остальные, оно хорошо сохранилось несмотря на достаточно большой возраст. Ровные стены тщательно очищаются навьярами от ила и водорослей, сохрнаяя здание в перозданном виде. ]]; + way = { + kh_vroom("К обелиску", "dyp_center"); + kh_vroom("В библиотеку", "dyp_library_floor1"); + }; +}; + +dyp_library_floor1 = room { + nam = "Дипатреанотр, библиотека, первый этаж"; + underwater = true; + dsc = [[Первый этаж здания библиотеки представляет собой огромный зал. Множество колонн, установленных ровными рядами, поддерживают потолок, между ними и вдоль стен установлены массивные стеллажи, заполненные различными записями. Большинство их сделаны на каменных табличках, но изредка встречаются и древние металлические. Ваше внимание привлекает одна из полок, заполненная небольшими блестящими дисками из неизвестного материала. ]]; + obj = { + "dyp_library_statue" + }; + way = { + kh_vroom("Наружу", "dyp_library_entrance"); + kh_vroom("На второй этаж", "dyp_library_floor2"); + }; +}; + +dyp_library_floor2 = room { + nam = "Дипатреанотр, библиотека, второй этаж"; + underwater = true; + dsc = [[Второй этаж библиотеки мало чем отличается от первого -- точно такие же колонны, точно такие же стеллажи. Здесь гораздо больше полок содержат блестящие диски вместо привычных вам записей. ]]; + obj = { + "dyp_librarian"; + }; + way = { + kh_vroom("На первый этаж", "dyp_library_floor1"); + }; +}; + +dyp_librarian = npc { + var { + state = 0; + }; + nam = "dyp_librarian"; + dsc = function(s) + if s.state == 0 then + return [[Перед вами на полу сидит {навьяр}. Вокруг него разложены какие-то записи, которые он рассматривает, время от времени перекладывая с места на место. ]]; + else + return [[Перед вами на полу сидит {Эйлехиарр}. Вокруг него разложены какие-то записи, которые он рассматривает, время от времени перекладывая с места на место. ]]; + end; + end; + dlg = "dyp_librarian_dlg"; +}; + +dyp_librarian_dlg = dlg { + var { + lse = false; + }; + nam = "dyp_librarian_dlg"; + disp = "Эйлехиарр"; + entered = function(s) + if atl_iyh_state == 10 and not s.lse then + s.lse = true; + pon("lse"); + end; + + if language_known then + psub("speak"); + if (dyp_librarian_dlg.state == 0) then + dyp_librarian_dlg.state = 1; + return [[Перед вами, прямо на полу сидит навьяр. Рядом с ним разложены какие-то записи, которые он внимательно рассматривает, иногда перекладывая с места на место. Заметив вас, он поднимается и приветствует вас: "Я, Эйлехиарр из Дипатреанотра, приветствую тебя хевьяр. Ты говори, зачем ты пришел". ]]; + else + return [[Эйлехиарр сидит на полу, перекладывая какие-то записи. Заметив вас он поднимается и приветствует вас: "Ты говори, зачем ты пришел". ]]; + end; + else + psub("no_speak"); + return [[Перед вами, прямо на полу сидит навьяр. Рядом с ним разложены какие-то записи, которые он внимательно рассматривает, иногда перекладывая с места на место. Заметив вас, он поднимается. По плавникам на его голове начинают бежать цветные полосы, но вы не понимаете, что он хочет вам сказать. ]]; + end; + end; + phr = { + {tag="no_speak"}; + {always=true, "[Уйти]", code [[ back(); ]]}; + {tag="speak"}; + {"[Кодировщик] Что ты делаешь?", [[Эйлехиарр отвечает: "Эти записи сильно повреждены. К счастью у нас есть несколько копий этого текста. Но мои предшественники умудрились испортить все три!" ]]}; + {tag="lse", false, "[Кодировщик] Я ищу карту пути в Лсэрианотр.", [[Эйлехиарр задумчиво оглядывает помещение. Делает несколько шагов в одну сторону, потом в другую. Садится рядом со своими записями, снова встает. Наконец, он берет с одной из полок металлическую табличку и сообщает: "Здесь говорится о пещере рядом с храмом. Три ключа закрывают вход". ]], code [[pon("three_keys");]]}; + {tag="three_keys", false, "[Кодировщик] Где найти эти ключи?", [[Эйлехиарр отвечает: "Здесь, в Дипатреанотре. Один ты можешь забрать внизу, у статуи". ]], code [[ dyp_stones_known = true; dyp_lib_stone_state = 1; ]]}; + {always=true, "[Кодировщик] Я пойду.", [[Эйлехиарр прощается: "Ты возвращайся". ]], code [[ back(); ]]}; + }; +}; + +dyp_item_stone_blue = obj { + nam = "dyp_item_stone_blue"; + disp = [[Синий камень]]; + inv = [[Небольшой круглый камень, излучающий яркий синий свет. ]]; +}; + +dyp_item_stone_green= obj { + nam = "dyp_item_stone_green"; + disp = [[Зеленый камень]]; + inv = [[Небольшой круглый камень, излучающий яркий зеленый свет. ]]; +}; + +dyp_item_stone_red = obj { + nam = "dyp_item_stone_red"; + disp = [[Красный камень]]; + inv = [[Небольшой круглый камень, излучающий яркий красный свет. ]]; +}; + +dyp_item_wand = obj { + nam = "dyp_item_wand"; + disp = "Жезл"; + inv = [[Жезл из неизвестного металла, покрытый навьярскими письменами. ]]; +}; + +dyp_library_statue = obj { + nam = "dyp_library_statue"; + dsc =function(s) + if dyp_lib_stone_state > 1 then + return [[В центре зала стоит статуя навьяра. В правой руке он держит табличку, которую сосредоточенно рассматривает. Левая рука статуи выглядит так, словно в ней должен находиться какой-то небольшой предмет, однако он отсутствует. ]]; + else + return [[В центре зала стоит статуя навьяра. В правой руке он держит табличку, которую сосредоточенно рассматривает. В левой руке статуи лежит небольшой светящийся синий {камень}. ]]; + end; + end; + act = function(s) + if dyp_lib_stone_state == 0 then + return [[Красивая старая статуя. Навьяр изображен пораительно подробно -- вы можете разглядеть каждую чешуйку. Небольшой камень лежит в руке статуи так, что его очень легко вынуть. ]]; + elseif dyp_lib_stone_state == 1 then + dyp_lib_stone_state = 2; + take("dyp_item_stone_blue"); + return [[Вы легко забираете из руки статуи камень. ]]; + elseif dyp_lib_stone_state == 2 then + return [[Красивая старая статуя. Навьяр изображен пораительно подробно -- вы можете разглядеть каждую чешуйку. ]]; + end; + end; +}; + +dyp_chief_house_entrance = room { + nam = "dyp_chief_house_entrance"; + underwater = true; + disp = "Дипатреанотр, перед домом вождя"; + dsc = [[Дом вождя Дипатреанотра не уступает размерами библиотеке. Двухэтажное здание очневидно не раз расширялось и достраивалось. Часть его сложена из обработанных каменных плит, другая -- из булыжников, как большинство зданий города. Широкая выложенная камнем улица ведет отсюда к центральной площади города.]]; + way = { + kh_vroom("К обелиску", "dyp_center"); + kh_vroom("В дом", "dyp_chief_house"); + }; +}; + +dyp_chief_house = room { + nam = "dyp_chief_house"; + underwater = true; + disp = "Дипатреанотр, дом вождя"; + dsc = [[Приемная дома вождя представляет собой огромный зал с ровными рядами стройных каменных колонн, удреживающих потолок. В дальнем конце зала установлен каменный трон, перед которым установлен массивный каменный стол. ]]; + way = { + kh_vroom("Наружу", "dyp_chief_house_entrance"); + }; + obj = { + "dyp_chief"; + }; +}; + +dyp_chief = npc { + nam = "dyp_chief"; + dsc = [[{Вождь Дипатреанотра} сидит на троне с закрытыми глазами. Руки его сложены на груди. В правой он держит небольшой золотистый жезл, в навершии которого укреплен круглый камень, излучающий яркий зеленый свет. Светло-синяя чешуя покрыта узором из татуировок. Как и другие навьяры он одет в костюм из водорослей. На левой руке дремлюего вождя вы видите искусный браслет из блестящего металла. ]]; + dlg = "dyp_chief_dlg"; +}; + +dyp_chief_dlg = dlg { + var { + lse = false; + aed = false; + }; + nam = "dyp_chief_dlg"; + disp = "Вождь Дипатреанотра"; + entered = function(s) + if not language_known then + psub("no_speak"); + return [[Как только вы приближаетесь к столу, глаза вождя открываются. Он поднимается с трона. Руки его остаются сложенными на груди, а взгляд его желтых глаз устремляется на вас. По его головным плавникам бегут цветные полосы. К сожалению, вы не понимаете, что он пытается вам сказать. ]]; + else + psub("speak"); + if atl_iyh_state == 10 and not s.lse then + s.lse = true; + pon("lseryanotrr"); + end; + if dyp_quest_state == 1 and have(item_electric_lamp, pl) and item_electric_lamp.state == 2 then + pon("quest1"); + end; + if dyp_quest_state == 2 and have(item_shark_tooth, pl) then + pon("quest2"); + end; + if dyp_stones_known and dyp_quest_state == 0 then + pon("quest"); + end; + poff("quest3"); + if have(dyp_item_star_map_copy) or have(dyp_item_star_map) then + pon("quest3"); + end; + if dyp_quest_state == 4 and not s.aed then + s.aed = true; + pon("aedienrr"); + end; + return [[Как только вы приближаетесь к столу, глаза вождя открываются. Он поднимается с трона. Руки его остаются сложенными на груди, а взгляд его желтых глаз устремляется на вас. По его головным плавникам бегут цветные полосы: "Чем скромные навьяры из Дипатреанотра обязаны визиту почтенного хевьяра? Ты говори". ]]; + end; + end; + phr = { + {tag="no_speak"}; + {always=true, "[Уйти]", code [[ back(); ]]}; + {tag="speak"}; + {tag="lseryanotrr", false, "[Кодировщик] Я ищу карту пути в Лсэрианотр.", [[Вождь отвечает: "Ты спроси в храме или в библиотеке. Я ничего такого не знаю". ]]}; + --[[{tag="star_map", false, "[Кодировщик] Мне нужен камень из твоего жезла. Что я могу предложить в обмен на него?", [ [Глаза вождя загораются, он ухмыляется. По плавникам быстро, словно в нетерпении, бегут цветные полосы: "Я хочу карту небесных огней из Ираафаанотра. Принеси ее и забирай этот жезл вместе с камнем". ] ], code [ [ dyp_quest_state = 1; ] ]};]] + {tag="quest", false, "[Кодировщик] Мне нужен камень из твоего жезла. Что я могу предложить в обмен на него?", [[Глаза вождя загораются, он ухмыляется. По плавникам быстро, словно в нетерпении бегут цветные полосы: "Принеси мне три вещи, что я попрошу и получишь жезл вместе с камнем". ]], code [[psub("agree_quest");]]}; + {tag="quest1", false, "[Отдать светильник] [Кодировщик] Вот то, что ты просил. Что тебе еще нужно?", [[Вождь с интересом рассматривает принесенный вами прибор, после чего ставит его на стол перед собой и говорит: "Еще мне нужен акулий зуб". ]], code [[ remove("item_electric_lamp", pl); dyp_quest_state = 2; ]]}; + {tag="quest2", false, "[Отдать зуб акулы] [Кодировщик] Вот то, что ты просил. Что тебе еще нужно?", [[Вождь кладет зуб на стол рядом со светильником и говорит: "Я хочу карту небесных огней из Ираафаанотра. Принеси ее и забирай этот жезл вместе с камнем". ]], code [[ remove("item_shark_tooth", pl); dyp_quest_state = 3; psub("agree_quest2"); ]]}; + {tag="quest3", false, "[Отдать карту небесных огней] Вот то, что ты просил. Я могу забрать камень?", function(s) + if have(dyp_item_star_map_copy) then + remove(dyp_item_star_map_copy, me()); + else + remove(dyp_item_star_map, me()); + atl_rep_iraa = atl_rep_iraa - 1; + end; + dyp_map = true; + take(dyp_item_stone_green); + atl_rep_dyp = atl_rep_dyp + 1; + return [[Вождь отдает вам свой жезл со словами: "Благодарю тебя, честный хевьяр и держу свое слово". ]]; + end}; + {tag="aedienrr", false, "[Кодировщик] Ваш город посещал Аэдиенрр из Ираафаанотра недавно?", [[Вождь отвечает: "Не мое дело следить за этим. Спроси у стражников". ]]}; + {always=true, "[Кодировщик] Я пойду.", [[Вождь прощается с вами: "Ты возвращайся". Он садится обратно на трон и закрывает глаза. ]], code [[ back(); ]]}; + {tag="agree_quest"}; + {always=true,"[Кодировщик] Что ты хочешь, чтобы я принес?", [[Вождь отвечает: "Первая вещь, что мне нужна -- это светящаяся капсула из вашего города". ]], code [[ dyp_quest_state = 1; pret(); ]]}; + {always=true,"[Кодировщик] Я передумал. ", [[Вождь пожимает плечами. ]], code [[ pon("quest"); pret(); ]]}; + {tag="agree_quest2"}; + {always=true,"[Кодировщик] Как к этому отнесутся в Ираафаанотре?", [[Вождь отвечает: "Они могут быть против. Уговори их". ]], code [[ pret(); ]]}; + {always=true,"[Кодировщик] Я не буду этого делать.", [[Вождь отвечает: "Я отдам посох только за карту небесных огней". ]], code [[ pret(); ]]}; + }; +}; + +--[[ +Дипатреанотр храм +]] + +dyp_temple_entry = lcutscene("dyp_temple_entry", "Левиафан, рубка", [[Храм Дипатреанотра располагается в нескольких часах пути от Атлантиды на Левиафане. К массивным дверям храма, вырезанным в толще скалы, ведет широкая каменная лестница, некогда украшенная резными орнаментами, ныне осыпавшимися и раскрошившимися. Над входом вырезано изображение, состоящее из нескольких концентрических кругов и каких-то символов. ]], "Вы прибыли в Храм Дипатреанотра. ", leviathan_wheelhouse); + +dyp_temple_guard = npc { + nam = "ctt_dyp_temple_guard"; + dsc = [[У ворот стоят два навьяра, вооруженные копьями. При вашем приближении они начинают нервничать -- переглянувшись, они перехватывают копья, готовясь при необходимости прогнать вас. По плавникам одного из них бегут цветные полосы: темно-фиолетовая, зеленая, оранжевая -- шире чем остальные, серая, ярко-розовая, желтая -- снова широкая, салатовая, снова широкая желтая и, наконец, широкая бледно-оранжевая. После небольшой паузы, полосы появляются снова. ]]; + phrases = { + [[Стражник не реагирует на ваши попытки начать общение. ]]; + }; + +}; + +dyp_temple_carving_look = room { + nam = "Храм Дипатреанотра, вход"; + pic ="images/iyh_navjiarr_map.png"; + dsc = [[Над входом в храм вырезана схема, состоящая из нескольких концентрических кругов. Часть схемы полностью стерлась от времени. ]]; + obj = { + vway("continue", "{Продолжить}", "dyp_temple_entrance"); + }; +}; + +dyp_temple_carving = obj { + nam = "dyp_temple_carving"; + dsc = [[Над входом в храм вырезано {изображение} состоящее из нескольких кругов и еще каких-то символов. Часть изображения стерлась от времени, однако остальная часть все еще читаема. ]]; + act = function(s) + walkin("dyp_temple_carving_look"); + end; +}; + +dyp_temple_entrance = room { + nam = "Храм Дипатреанотра, вход"; + dsc = [[Перед вами находится вырезанный в скале вход в навьярский храм. Массивные каменные ступени ведут к громадным двустворчатым дверям, украшенным полустершимися орнаментами. Некогда яркие краски потускнели -- осторожные навьяры не решаются их обновить. ^Скала продолжается на восток и на юго-запад от храма. Вдалеке на севере видны длинные, вытянувшиеся на несколько метров вверх водоросли. К северо-западу заметен каменный обелиск. ]]; + view = [[Через иллюминаторы вы видите вырезанный в скале вход в навьярский храм. Массивные каменные ступени ведут к громадным двустворчатым дверям, украшенным полустершимися орнаментами. Некогда яркие краски потускнели -- осторожные навьяры не решаются их обновить. ^Скала продолжается на восток и на юго-запад от храма. Вдалеке на севере видны длинные, вытянувшиеся на несколько метров вверх водоросли. К северо-западу заметен каменный обелиск. ]]; + underwater = true; + handwheel_room = 'dyp_temple_navigation'; + obj = { + "dyp_temple_guard"; + "dyp_temple_carving"; + }; + way = { + kh_vroom("В храм", function(s) + pr('Охранники не колеблясь убьют вас, если вы попытаетесь войти. '); + return false; + end):disable(); + kh_vroom("В Левиафан", "leviathan_airlock"); + }; +}; + +dyp_temple_east = room { + nam = "Океан"; + view = [[Вы находитесь у подножья скалы, протянувшейся на многие километры на восток от вас. На западе она сворачивает к югу. В освещенной мощным прожектором Левиафана скале вы видите раверзшуюся пасть пещеры. ]]; + dsc = [[Вы находитесь у подножья скалы, протянувшейся на многие километры на восток от вас. На западе она сворачивает к югу. Перед собой вы видите разверзшуюся пасть пещеры, освещенную мощным прожектором Левиафана. ]]; + underwater = true; + handwheel_room = 'dyp_temple_navigation'; + way = { + kh_vroom("В пещеру", "dyp_temple_cave_entrance"); + kh_vroom("В Левиафан", "leviathan_airlock"); + }; +}; + +dyp_temple_south_west = room { + nam = "Океан"; + no_exit = [[Нет смысла покидать Левиафан здесь. ]]; + view = [[Вы находитесь у подножья скалы. К юго-западу от вас скала сворачивает на юг и тянется на многие километры. К северо-востоку вы видите храм Дипатреанотра. ]]; + handwheel_room = 'dyp_temple_navigation'; +}; + +dyp_temple_south_far = room { + nam = "Океан"; + no_exit = [[Нет смысла покидать Левиафан здесь. ]]; + view = [[Вы находитесь у подножья скалы, протянувшейся на многие километры на юг. На севере скала сворачивает к востоку. ]]; + handwheel_room = 'dyp_temple_navigation'; +}; + +dyp_temple_north_west = room { + nam = "Океан"; + no_exit = function(s) + if dyp_quest_state ~= 5 then + return [[Нет смысла покидать Левиафан здесь. ]]; + end; + end; + underwater = true; + handwheel_room = 'dyp_temple_navigation'; + view = [[Перед вами возвышается массивный каменный обелиск. Некогда он был украшен резными орнаментами, но сейчас все они практически полностью стерлись. К юго-востоку от вас возвышается отвесная скала, протянувшаяся на многие километры с юга на восток. Вдалеке на западе вы видите каменные строения навьярского города -- Дипатреанотра. ]]; + dsc = [[К юго-востоку от вас возвышается отвесная скала, протянувшаяся на многие километры с юга на восток. Вдалеке на западе вы видите каменные строения навьярского города -- Дипатреанотра. ]]; + obj = { + "dyp_temple_west_footprints"; + "dyp_temple_north_west_obelisk"; + }; + way = { + kh_vroom("В Левиафан", "leviathan_airlock"); + }; +}; + +dyp_temple_west_footprints = obj { + nam = "dyp_temple_west_footprints"; + dsc = [[На илистом дне вы видите {следы}. ]]; + act = [[Следы навьяра ведут на север. ]]; +}; + +dyp_temple_north_west_obelisk = obj { + nam = "dyp_temple_north_west_obelisk"; + dsc = [[Перед вами возвышается массивный каменный {обелиск}. Некогда он был украшен резными орнаментами, но сейчас все они практически полностью стерлись. ]]; + act = [[Древняя каменная конструкция, с неизвестной целью помещенная в этом месте. ]]; +}; + +dyp_temple_north = room { + nam = "Океан"; + no_exit = [[Нет смысла покидать Левиафан здесь. ]]; + view = [[Левиафан застыл над высокими стеблями водорослей, едва заметно колышущимися в спокойной воде. ]]; + handwheel_room = 'dyp_temple_navigation'; +}; + +dyp_temple_crevice_middle = room { + nam = "Океан"; + no_exit = [[Нет смысла покидать Левиафан здесь. ]]; + view = [[Левиафан застыл над неглубоким ущельем, протянувшимся с востока на запад. На юге вы видите длинные стебли водорослей, поднимающиеся на несколько метров над землей. Вдалеке на севере протянулась параллельно ущелью высокая отвесная скала. ]]; + handwheel_room = 'dyp_temple_navigation'; +}; + +dyp_temple_crevice_east = room { + nam = "Океан"; + no_exit = [[Нет смысла покидать Левиафан здесь. ]]; + view = [[Левиафан застыл над неглубоким ущельем, протянувшимся с востока на запад. На юго-западе вы видите длинные стебли водорослей, поднимающиеся на несколько метров над землей. Вдалеке на севере протянулась параллельно ущелью высокая отвесная скала. На северо-востоке вы видите огромный скелет кита, с незапамятных времен покоящийся там. ]]; + handwheel_room = 'dyp_temple_navigation'; +}; + +dyp_temple_crevice_far_east = room { + nam = "Океан"; + no_exit = [[Нет смысла покидать Левиафан здесь. ]]; + view = [[Левиафан застыл над неглубоким ущельем, протянувшимся с востока на запад. На севере вы видите огромный скелет кита, с незапамятных времен покоящийся там. ]]; + handwheel_room = 'dyp_temple_navigation'; +}; + +dyp_temple_crevice_west = room { + nam = "Океан"; + no_exit = [[Нет смысла покидать Левиафан здесь. ]]; + view = [[Левиафан застыл над неглубоким ущельем, протянувшимся с востока на запад. На юго-востоке вы видите длинные стебли водорослей, поднимающиеся на несколько метров над землей. На северо-западе возвышается каменный обелиск, а еще дальше на севере параллельно ущелью протянулась высокая отвесная скала. ]]; + handwheel_room = 'dyp_temple_navigation'; +}; + +dyp_temple_crevice_far_west = room { + nam = "Океан"; + no_exit = [[Нет смысла покидать Левиафан здесь. ]]; + view = [[Левиафан застыл над неглубоким ущельем, протянувшимся с востока на запад. Вдалеке на севере и на юге от вас возвышаются каменные обелиски. ]]; + handwheel_room = 'dyp_temple_navigation'; +}; + +dyp_temple_warning = room { + nam = "Океан"; + no_exit = function(s) + if dyp_quest_state ~= 5 then + return [[Нет смысла покидать Левиафан здесь. ]]; + end; + end; + view = [[Перед вами возвышается массивный каменный обелиск. Большая часть изображенного на нем стерлась. ]]; + dsc = [[Вы находитесь посреди бескрайней илистой равнины. К северу вы видите скалу, протянувшуюся с запада на восток. К югу вы видите глубокое ущелье, протянувшееся параллельно скале. ]]; + underwater = true; + handwheel_room = 'dyp_temple_navigation'; + way = { + kh_vroom("В Левиафан", "leviathan_airlock"); + }; + obj = { + "dyp_temple_obelisk_footprints"; + "dyp_temple_warning_obelisk"; + }; +}; + +dyp_temple_obelisk_footprints = obj { + nam = "dyp_temple_obelisk_footprints"; + dsc = [[На илистом дне вы видите {следы}. ]]; + act = [[Следы навьяра ведут на север. ]]; +}; + +dyp_temple_warning_obelisk = obj { + nam = "dyp_temple_warning_obelisk"; + dsc = [[Перед вами возвышается массивный каменный {обелиск}. Некогда он был украшен резными орнаментами, но сейчас все они практически полностью стерлись. ]]; + act = [[Древняя каменная конструкция, с неизвестной целью помещенная в этом месте. ]]; +}; + +dyp_temple_cliff_1 = room { + nam = "Океан"; + no_exit = function(s) + if dyp_quest_state ~= 5 then + return [[Нет смысла покидать Левиафан здесь. ]]; + end; + end; + view = [[Вы находитесь к югу от высокой скалы, протянувшейся с востока на запад. Здесь в скале вы видите вход в глубокую темную пещеру. К юго-востоку от вас возвышается каменный обелиск. ]]; + underwater = true; + handwheel_room = 'dyp_temple_navigation'; + way = { + kh_vroom("В Левиафан", "leviathan_airlock"); + kh_vroom("В пещеру", "dyp_crab_cave"); + }; + obj = { + "dyp_temple_cliff_1_footprints"; + }; +}; + +dyp_temple_cliff_1_footprints = obj { + nam = "dyp_temple_cliff_1_footprints"; + dsc = [[На илистом дне хорошо сохранились {следы} множества тонких ног. ]]; + act = [[Следы множества тонких ног, тянущиеся с востока, ведут в пещеру. ]]; +}; + +dyp_temple_cliff_2 = room { + nam = "Океан"; + no_exit = function(s) + if dyp_quest_state ~= 5 then + return [[Нет смысла покидать Левиафан здесь. ]]; + end; + end; + view = [[Вы находитесь к югу от высокой скалы, протянувшейся с востока на запад. Вдалеке на юге возвышается каменный обелиск. ]]; + dsc = [[Вы стоите у подножия высокой скалы, протянувшейся с востока на запад к северу от вас. К югу от вас возвышается каменный обелиск. ]]; + handwheel_room = 'dyp_temple_navigation'; + underwater = true; + way = { + kh_vroom("В Левиафан", "leviathan_airlock"); + }; + obj = { + "dyp_temple_cliff_2_footprints"; + }; +}; + +dyp_temple_cliff_2_footprints = obj { + nam = "dyp_temple_cliff_2_footprints"; + dsc = [[Здесь {следы} навьяра обрываются. ]]; + act = [[Следы обрываются, но не просто так. Здесь явно произошла драка, скорее всего с каким-то морским животным. Вы замечаете следы множества тонких ног, ведущие на запад. ]]; +}; + +dyp_temple_cliff_3 = room { + nam = "Океан"; + no_exit = [[Нет смысла покидать Левиафан здесь. Вдалеке на юго-западе возвышается каменный обелиск. ]]; + view = [[Вы находитесь к югу от высокой скалы, протянувшейся с востока на запад. К юго-западу от вас возвышается каменный обелиск. ]]; + handwheel_room = 'dyp_temple_navigation'; +}; + +dyp_temple_cliff_4 = room { + nam = "Океан"; + no_exit = [[Нет смысла покидать Левиафан здесь. ]]; + view = [[Вы находитесь к югу от высокой скалы, протянувшейся с востока на запад. Вдалеке на юге вы видите ущелье, протянувшееся параллельно скале. ]]; + handwheel_room = 'dyp_temple_navigation'; +}; + +dyp_temple_cliff_5 = room { + nam = "Океан"; + no_exit = [[Нет смысла покидать Левиафан здесь. ]]; + view = [[Вы находитесь к югу от высокой скалы, протянувшейся с востока на запад. Вдалеке на юге вы видите ущелье, протянувшееся параллельно скале. На юго-востоке вы видете скелет кита, покоящийся здесь многие десятилетия. ]]; + handwheel_room = 'dyp_temple_navigation'; +}; + +dyp_temple_whale = room { + nam = "Океан"; + no_exit = [[Нет смысла покидать Левиафан здесь. ]]; + view = [[Рядом с вами покоится скелет громадного кита. Древние кости занесены илом, однако все еще прекрасно видны с большого расстояния. На севере вы видите вырезанный в скале вход в древний навьярский храм. На юге глубокое ущелье протянулось с востока на запад. ]]; + handwheel_room = 'dyp_temple_navigation'; +}; + +dyp_temple_navigation = dlg { + nam = "Штурвал Левиафана"; + entered = function(s) + psub(stead.deref(where(submarine_leviathan))); + return where(submarine_leviathan).view; + end; + phr = { + {tag="dyp_temple_entrance"}; + {always=true, "[На восток, вдоль скалы]", function() + move(submarine_leviathan, "dyp_temple_east"); + psub("dyp_temple_east"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На северо-восток, к зарослям]", function() + move(submarine_leviathan, "dyp_temple_north"); + psub("dyp_temple_north"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На северо-запад, к обелиску]", function() + move(submarine_leviathan, "dyp_temple_north_west"); + psub("dyp_temple_north_west"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На юго-запад, вдоль скалы]", function() + move(submarine_leviathan, "dyp_temple_south_west"); + psub("dyp_temple_south_west"); + return where(submarine_leviathan).view; + end}; + {always=true, "[Отойти от штурвала]", code = [[ + walk('leviathan_wheelhouse'); + ]]}; + {always=true, "[Отправиться в другое место]", code = [[ + walk('leviathan_dlg'); + ]]}; + + {tag="dyp_temple_east"}; + {always=true, "[На запад, вдоль скалы]", function() + move(submarine_leviathan, "dyp_temple_entrance"); + psub("dyp_temple_entrance"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На север, к зарослям]", function() + move(submarine_leviathan, "dyp_temple_north"); + psub("dyp_temple_north"); + return where(submarine_leviathan).view; + end}; + {always=true, "[Отойти от штурвала]", code = [[ + walk('leviathan_wheelhouse'); + ]]}; + {always=true, "[Отправиться в другое место]", code = [[ + walk('leviathan_dlg'); + ]]}; + + {tag="dyp_temple_south_west"}; + {always=true, "[На северо-восток, вдоль скалы]", function() + move(submarine_leviathan, "dyp_temple_entrance"); + psub("dyp_temple_entrance"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На юг, вдоль скалы]", function() + move(submarine_leviathan, "dyp_temple_south_far"); + psub("dyp_temple_south_far"); + return where(submarine_leviathan).view; + end}; + {always=true, "[Отойти от штурвала]", code = [[ + walk('leviathan_wheelhouse'); + ]]}; + {always=true, "[Отправиться в другое место]", code = [[ + walk('leviathan_dlg'); + ]]}; + + {tag="dyp_temple_south_far"}; + {always=true, "[На север, вдоль скалы]", function() + move(submarine_leviathan, "dyp_temple_south_west"); + psub("dyp_temple_south_west"); + return where(submarine_leviathan).view; + end}; + {always=true, "[Отойти от штурвала]", code = [[ + walk('leviathan_wheelhouse'); + ]]}; + {always=true, "[Отправиться в другое место]", code = [[ + walk('leviathan_dlg'); + ]]}; + + {tag="dyp_temple_north_west"}; + {always=true, "[На север, к ущелью]", function() + move(submarine_leviathan, "dyp_temple_crevice_far_west"); + psub("dyp_temple_crevice_far_west"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На юго-восток, к храму]", function() + move(submarine_leviathan, "dyp_temple_entrance"); + psub("dyp_temple_entrance"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На запад, в Дипатреанотр]", function() + dypatreanotrr_found = true; + move(submarine_leviathan, "dyp_center"); + psub("dyp_center"); + return where(submarine_leviathan).view; + end}; + {always=true, "[Отойти от штурвала]", code = [[ + walk('leviathan_wheelhouse'); + ]]}; + {always=true, "[Отправиться в другое место]", code = [[ + walk('leviathan_dlg'); + ]]}; + + {tag="dyp_temple_north"}; + {always=true, "[На юго-запад, к храму]", function() + move(submarine_leviathan, "dyp_temple_entrance"); + psub("dyp_temple_entrance"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На юг, к скале]", function() + move(submarine_leviathan, "dyp_temple_east"); + psub("dyp_temple_east"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На север, к ущелью]", function() + move(submarine_leviathan, "dyp_temple_crevice_middle"); + psub("dyp_temple_crevice_middle"); + return where(submarine_leviathan).view; + end}; + {always=true, "[Отойти от штурвала]", code = [[ + walk('leviathan_wheelhouse'); + ]]}; + {always=true, "[Отправиться в другое место]", code = [[ + walk('leviathan_dlg'); + ]]}; + + {tag="dyp_temple_crevice_middle"}; + {always=true, "[На юг, к зарослям]", function() + move(submarine_leviathan, "dyp_temple_north"); + psub("dyp_temple_north"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На восток, вдоль ущелья]", function() + move(submarine_leviathan, "dyp_temple_crevice_east"); + psub("dyp_temple_crevice_east"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На север, к скале]", function() + move(submarine_leviathan, "dyp_temple_cliff_4"); + psub("dyp_temple_cliff_4"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На запад, вдоль ущелья]", function() + move(submarine_leviathan, "dyp_temple_crevice_west"); + psub("dyp_temple_crevice_west"); + return where(submarine_leviathan).view; + end}; + {always=true, "[Отойти от штурвала]", code = [[ + walk('leviathan_wheelhouse'); + ]]}; + {always=true, "[Отправиться в другое место]", code = [[ + walk('leviathan_dlg'); + ]]}; + + {tag="dyp_temple_crevice_east"}; + {always=true, "[На юго-запад, к зарослям]", function() + move(submarine_leviathan, "dyp_temple_north"); + psub("dyp_temple_north"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На восток, вдоль ущелья]", function() + move(submarine_leviathan, "dyp_temple_crevice_far_east"); + psub("dyp_temple_crevice_far_east"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На северо-восток, к скелету]", function() + move(submarine_leviathan, "dyp_temple_whale"); + psub("dyp_temple_whale"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На север, к скале]", function() + move(submarine_leviathan, "dyp_temple_cliff_5"); + psub("dyp_temple_cliff_5"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На запад, вдоль ущелья]", function() + move(submarine_leviathan, "dyp_temple_crevice_middle"); + psub("dyp_temple_crevice_middle"); + return where(submarine_leviathan).view; + end}; + {always=true, "[Отойти от штурвала]", code = [[ + walk('leviathan_wheelhouse'); + ]]}; + {always=true, "[Отправиться в другое место]", code = [[ + walk('leviathan_dlg'); + ]]}; + + {tag="dyp_temple_crevice_far_east"}; + {always=true, "[На север, к скелету]", function() + move(submarine_leviathan, "dyp_temple_whale"); + psub("dyp_temple_whale"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На запад, вдоль ущелья]", function() + move(submarine_leviathan, "dyp_temple_crevice_east"); + psub("dyp_temple_crevice_east"); + return where(submarine_leviathan).view; + end}; + {always=true, "[Отойти от штурвала]", code = [[ + walk('leviathan_wheelhouse'); + ]]}; + {always=true, "[Отправиться в другое место]", code = [[ + walk('leviathan_dlg'); + ]]}; + + {tag="dyp_temple_crevice_west"}; + {always=true, "[На север, к скале]", function() + move(submarine_leviathan, "dyp_temple_cliff_3"); + psub("dyp_temple_cliff_3"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На восток, вдоль ущелья]", function() + move(submarine_leviathan, "dyp_temple_crevice_middle"); + psub("dyp_temple_crevice_middle"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На юго-восток, к зарослям]", function() + move(submarine_leviathan, "dyp_temple_north"); + psub("dyp_temple_north"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На запад, вдоль ущелья]", function() + move(submarine_leviathan, "dyp_temple_crevice_far_west"); + psub("dyp_temple_crevice_far_west"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На северо-запад, к обелиску]", function() + move(submarine_leviathan, "dyp_temple_warning"); + psub("dyp_temple_warning"); + return where(submarine_leviathan).view; + end}; + {always=true, "[Отойти от штурвала]", code = [[ + walk('leviathan_wheelhouse'); + ]]}; + {always=true, "[Отправиться в другое место]", code = [[ + walk('leviathan_dlg'); + ]]}; + + {tag="dyp_temple_crevice_far_west"}; + {always=true, "[На север, к обелиску]", function() + move(submarine_leviathan, "dyp_temple_warning"); + psub("dyp_temple_warning"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На восток, вдоль ущелья]", function() + move(submarine_leviathan, "dyp_temple_crevice_west"); + psub("dyp_temple_crevice_west"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На юг, к обелиску]", function() + move(submarine_leviathan, "dyp_temple_north_west"); + psub("dyp_temple_north_west"); + return where(submarine_leviathan).view; + end}; + {always=true, "[Отойти от штурвала]", code = [[ + walk('leviathan_wheelhouse'); + ]]}; + {always=true, "[Отправиться в другое место]", code = [[ + walk('leviathan_dlg'); + ]]}; + + {tag="dyp_temple_warning"}; + {always=true, "[На север, к скале]", function() + move(submarine_leviathan, "dyp_temple_cliff_2"); + psub("dyp_temple_cliff_2"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На юг, к ущелью]", function() + move(submarine_leviathan, "dyp_temple_crevice_far_west"); + psub("dyp_temple_crevice_far_west"); + return where(submarine_leviathan).view; + end}; + {always=true, "[Отойти от штурвала]", code = [[ + walk('leviathan_wheelhouse'); + ]]}; + {always=true, "[Отправиться в другое место]", code = [[ + walk('leviathan_dlg'); + ]]}; + + {tag="dyp_temple_cliff_1"}; + {always=true, "[На восток, вдоль скалы]", function() + move(submarine_leviathan, "dyp_temple_cliff_2"); + psub("dyp_temple_cliff_2"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На юго-восток, к обелиску]", function() + move(submarine_leviathan, "dyp_temple_warning"); + psub("dyp_temple_warning"); + return where(submarine_leviathan).view; + end}; + {always=true, "[Отойти от штурвала]", code = [[ + walk('leviathan_wheelhouse'); + ]]}; + {always=true, "[Отправиться в другое место]", code = [[ + walk('leviathan_dlg'); + ]]}; + + {tag="dyp_temple_cliff_2"}; + {always=true, "[На восток, вдоль скалы]", function() + move(submarine_leviathan, "dyp_temple_cliff_3"); + psub("dyp_temple_cliff_3"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На юг, к обелиску]", function() + move(submarine_leviathan, "dyp_temple_warning"); + psub("dyp_temple_warning"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На запад, вдоль скалы]", function() + move(submarine_leviathan, "dyp_temple_cliff_1"); + psub("dyp_temple_cliff_1"); + return where(submarine_leviathan).view; + end}; + {always=true, "[Отойти от штурвала]", code = [[ + walk('leviathan_wheelhouse'); + ]]}; + {always=true, "[Отправиться в другое место]", code = [[ + walk('leviathan_dlg'); + ]]}; + + {tag="dyp_temple_cliff_3"}; + {always=true, "[На восток, вдоль скалы]", function() + move(submarine_leviathan, "dyp_temple_cliff_4"); + psub("dyp_temple_cliff_4"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На юг, к ущелью]", function() + move(submarine_leviathan, "dyp_temple_crevice_west"); + psub("dyp_temple_crevice_west"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На юго-запад, к обелиску]", function() + move(submarine_leviathan, "dyp_temple_warning"); + psub("dyp_temple_warning"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На запад, вдоль скалы]", function() + move(submarine_leviathan, "dyp_temple_cliff_2"); + psub("dyp_temple_cliff_2"); + return where(submarine_leviathan).view; + end}; + {always=true, "[Отойти от штурвала]", code = [[ + walk('leviathan_wheelhouse'); + ]]}; + {always=true, "[Отправиться в другое место]", code = [[ + walk('leviathan_dlg'); + ]]}; + + {tag="dyp_temple_cliff_4"}; + {always=true, "[На восток, вдоль скалы]", function() + move(submarine_leviathan, "dyp_temple_cliff_5"); + psub("dyp_temple_cliff_5"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На юг, к ущелью]", function() + move(submarine_leviathan, "dyp_temple_crevice_middle"); + psub("dyp_temple_crevice_middle"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На запад, вдоль скалы]", function() + move(submarine_leviathan, "dyp_temple_cliff_3"); + psub("dyp_temple_cliff_3"); + return where(submarine_leviathan).view; + end}; + {always=true, "[Отойти от штурвала]", code = [[ + walk('leviathan_wheelhouse'); + ]]}; + {always=true, "[Отправиться в другое место]", code = [[ + walk('leviathan_dlg'); + ]]}; + + {tag="dyp_temple_cliff_5"}; + {always=true, "[На восток, вдоль скалы]", function() + temple_found = true; + move(submarine_leviathan, "iyh_far_from_entrance_foot"); + walk("iyh_far_from_entrance"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На юго-восток, к скелету]", function() + move(submarine_leviathan, "dyp_temple_whale"); + psub("dyp_temple_whale"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На юг, к ущелью]", function() + move(submarine_leviathan, "dyp_temple_crevice_east"); + psub("dyp_temple_crevice_east"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На запад, вдоль скалы]", function() + move(submarine_leviathan, "dyp_temple_cliff_4"); + psub("dyp_temple_cliff_4"); + return where(submarine_leviathan).view; + end}; + {always=true, "[Отойти от штурвала]", code = [[ + walk('leviathan_wheelhouse'); + ]]}; + {always=true, "[Отправиться в другое место]", code = [[ + walk('leviathan_dlg'); + ]]}; + + {tag="dyp_temple_whale"}; + {always=true, "[На север, к храму]", function() + temple_found = true; + move(submarine_leviathan, "iyh_far_from_entrance_foot"); + walk("iyh_far_from_entrance"); + return where(submarine_leviathan).view; + end}; + {always=true, "[На юг, к ущелью]", function() + move(submarine_leviathan, "dyp_temple_crevice_far_east"); + psub("dyp_temple_crevice_far_east"); + return where(submarine_leviathan).view; + end}; + {always=true, "[Отойти от штурвала]", code = [[ + walk('leviathan_wheelhouse'); + ]]}; + {always=true, "[Отправиться в другое место]", code = [[ + walk('leviathan_dlg'); + ]]}; + + {tag="dyp_center"}; + {always=true, "[На восток, к обелиску]", function() + move(submarine_leviathan, "dyp_temple_north_west"); + psub("dyp_temple_north_west"); + return where(submarine_leviathan).view; + end}; + {always=true, "[Отойти от штурвала]", code = [[ + walk('leviathan_wheelhouse'); + ]]}; + {always=true, "[Отправиться в другое место]", code = [[ + walk('leviathan_dlg'); + ]]}; + }; +}; + +dyp_temple_cave_entrance = room { + nam = "dyp_temple_cave_entrance"; + disp = "Храм Дипатреанотра, пещера"; + dsc = [[Вы стоите у выхода из глубокой пещеры, расположенной неподалеку от храма Дипатреанотра. Перед вами длинный коридор, ведущий куда-то вглубь скалы. Вдалеке, в коридоре вы видите слабое свечение. ]]; + underwater = true; + way = { + kh_vroom("Выйти из пещеры", "dyp_temple_east"); + kh_vroom("Вглубь пещеры", "dyp_temple_cave_deep"); + }; +}; + +dyp_temple_cave_deep = room { + nam = "dyp_temple_cave_deep"; + disp = "Храм Дипатреанотра, пещера"; + dsc = [[Здесь коридор разветвляется на три. В конце каждого вы видите слабое свечение красного, зеленого и синего цветов. ]]; + underwater = true; + way = { + kh_vroom("К выходу из пещеры", "dyp_temple_cave_entrance"); + kh_vroom("В \"Красный\" коридор", "dyp_temple_cave_red"); + kh_vroom("В \"Зеленый\" коридор", "dyp_temple_cave_green"); + kh_vroom("В \"Синий\" коридор", "dyp_temple_cave_blue"); + }; +}; + +dyp_temple_cave_red = room { + nam = "dyp_temple_cave_red"; + disp = "Храм Дипатреанотра, пещера"; + dsc = [[Проход заканчивается массивной металлической дверью, совершенно гладкой. Вы не видите никакого способа открыть ее. ]]; + underwater = true; + obj = { + "dyp_temple_statue_red"; + }; + way = { + kh_vroom("В главный коридор", "dyp_temple_cave_deep"); + }; +}; + +dyp_temple_statue_red = obj { + nam = "dyp_temple_statue_red"; + dsc = [[Рядом с дверью стоит древняя статуя навьяра. В правой руке статуя держит копье, в навершии которого ярко светится красный камень. На поясе статуи вы видите небольшое круглое {отверстие}. ]]; +}; + +dyp_temple_cave_green = room { + nam = "dyp_temple_cave_green"; + disp = "Храм Дипатреанотра, пещера"; + dsc = [[Проход заканчивается массивной металлической дверью, совершенно гладкой. Вы не видите никакого способа открыть ее. ]]; + underwater = true; + obj = { + "dyp_temple_statue_green"; + }; + way = { + kh_vroom("В главный коридор", "dyp_temple_cave_deep"); + }; +}; + +dyp_temple_statue_green = obj { + nam = "dyp_temple_statue_green"; + dsc = [[Рядом с дверью стоит древняя статуя навьяра. В правой руке статуя держит копье, в навершии которого ярко светится зеленый камень. На поясе статуи вы видите небольшое круглое {отверстие}. ]]; +}; + +dyp_temple_cave_blue = room { + nam = "dyp_temple_cave_blue"; + disp = "Храм Дипатреанотра, пещера"; + dsc = [[Проход заканчивается массивной металлической дверью, совершенно гладкой. Вы не видите никакого способа открыть ее. ]]; + underwater = true; + obj = { + "dyp_temple_statue_blue"; + }; + way = { + kh_vroom("В главный коридор", "dyp_temple_cave_deep"); + }; +}; + +dyp_temple_statue_blue = obj { + nam = "dyp_temple_statue_blue"; + dsc = [[Рядом с дверью стоит древняя статуя навьяра. В правой руке статуя держит копье, в навершии которого ярко светится синий камень. На поясе статуи вы видите небольшое круглое {отверстие}. ]]; +}; + +dyp_crab_cave = labyrinth { + var { + position = "00"; + fight = false; + }; + nam = "dyp_crab_cave"; + disp = "Пещера"; + dir1 = "На северо-запад"; + dir2 = "На северо-восток"; + dir3 = "На юго-запад"; + dir4 = "На юго-восток"; + ex = "Выйти"; + underwater = true; + map = { + ["00"] = { + name = [[Вы стоите у входа в глубокую пещеру. Стены здесь неровные и извилистые, образую причудливые переплетения длинный коридоров. Кто знает, куда они приведут? На каменистом полу едва ли можно заметить какие-либо следы. ]]; + e1 = "10"; + e2 = "11"; + ex = "dyp_temple_cliff_1"; + }; + ["10"] = { + e1 = "20"; + e2 = "21"; + e4 = "00"; + }; + ["11"] = { + e1 = "21"; + e2 = "22"; + e3 = "00"; + }; + ["20"] = { + e1 = "30"; + e4 = "10"; + }; + ["21"] = { + e1 = "31"; + e2 = "32"; + e3 = "10"; + e4 = "11"; + }; + ["22"] = { + e2 = "33"; + e3 = "11"; + }; + ["30"] = { + e1 = "40"; + e2 = "41"; + e4 = "20"; + }; + ["31"] = { + e2 = "42"; + e4 = "21"; + }; + ["32"] = { + e2 = "43"; + e3 = "21"; + }; + ["33"] = { + e3 = "22"; + }; + ["40"] = { + e2 = "50"; + e4 = "30"; + }; + ["41"] = { + e3 = "30"; + }; + ["42"] = { + e1 = "51"; + e3 = "31"; + }; + ["43"] = { + e1 = "52"; + e3 = "32"; + enter = function(s) + if not s.fight then + s.fight = true; + walk("dyp_crab_fight_intro"); + end; + end; + }; + ["50"] = { + e3 = "40"; + enter = function(s) + if (not exist(dyp_scepter_chest, s)) then + move(dyp_scepter_chest, s); + end; + end; + exit = function(s) + remove(dyp_scepter_chest, s); + end; + }; + ["51"] = { + e4 = "42"; + }; + ["52"] = { + e4 = "43"; + enter = function(s) + if (not exist(dyp_dead_navjiarr, s)) then + move(dyp_dead_navjiarr, s); + end; + end; + exit = function(s) + remove(dyp_dead_navjiarr, s); + end; + }; + }; +}; + +dyp_scepter_chest = obj { + var { + state = 0; + }; + nam = "dyp_scepter_chest"; + dsc = function(s) + if s.state == 0 then + return [[В углу аккуратно поставлен небольшой {сундучок} с хитрым замком. Чтобы открыть его придется сперва разобраться, как он устроен. ]]; + else + return [[В углу аккуратно поставлен небольшой {сундучок}. Сейчас он пуст. ]]; + end; + end; + act = function(s) + if s.state == 1 then + return [[Вам здесь больше ничего не нужно. ]]; + else + walk("dyp_crab_cave_puzzle"); + return [[Вы присматриваетесь к замку. ]]; + end; + end; +}; + +dyp_dead_navjiarr = obj { + var { + state = 0; + }; + nam = "dyp_dead_navjiarr"; + dsc = [[Рядом с вами лежит мертвый навьяр. Тело изуродовано могучими клешнями крабов, однако, судя по всему лежит здесь недавно. Рядом с трупом лежит его {сумка}. ]]; + act = function(s) + if s.state == 0 then + s.state = 1; + move(dyp_item_star_map, pl); + move(dyp_item_aedienrr_notes, pl); + return [[В сумке лежат две таблички: металлическая и обычная, каменная. Металлическая табличка сразу привлекает ваше внимание. Причудливые узоры схем никак не напоминают навьярские письмена, а символы нанесенные вокруг не говорят вам ровным счетом ни о чем. Стоит показать это Светловой, быть может она сможет что-то из этого извлечь. ]]; + else + return "Сумка пуста. "; + end; + end; +}; + +dyp_item_aedienrr_notes = obj { + nam = "dyp_item_aedienrr_notes"; + disp = function(s) + if language_known then + return "Записи Аэдиенрра"; + else + return "Каменная табличка"; + end; + end; + inv = function(s) + if language_known then + return "Надписи на каменной табличке рассказывают о последнем путешествии Аэдиенрра. Молодой навьяр разгадал схемы на карте небесных огней и предположил, что они ведут в пещеру в скале к северу от Дипатреанотра. Ориентирами служат каменные обелиски-предостережения и храм, расположенный к востоку от нее. Никто из Ираафаанотра не смогу рассказать ничего о храме, поэтому исследователю пришлось долго идти наугад. Последняя запись гласит, что он почти добрался до пещеры... "; + else + return "Вы не понимаете языка и надписи значат для вас не больше чем ряды вертикальных цветных полосок. "; + end; + end; +}; + +dyp_item_star_map = obj { + nam = "dyp_item_star_map"; + disp = "Карта небесных огней"; + inv = [[Металлическая табличка, испещренная непонятными вам линиями и символами. Письмена напоминают навьярские лишь очень отдаленно и вы даже не предполагаете, что они могут значить. ]]; +}; + +dyp_item_star_map_copy = obj { + nam = "dyp_item_star_map"; + disp = "Карта небесных огней(копия)"; + inv = [[Металлическая табличка, испещренная непонятными вам линиями и символами. Письмена напоминают навьярские лишь очень отдаленно и вы даже не предполагаете, что они могут значить. ]]; +}; + +dyp_crab_fight_intro = cutscene("dyp_crab_fight_intro", "Пещера", [[Впереди, вы замечаете какое-то движение. Луч прожетора выхватывает огромные острые клешни гигантского краба, устремившегося к вам. Следом за ним вы видите множество крабов поменьше, также ползущих к вам на своих тонких острых ногах. ]], "dyp_crab_fight"); + +dyp_crab_fight_win = cutscene("dyp_crab_fight_win", "Пещера", [[Отбившись от крабов, вы остаетесь одни в темном лабиринте пещер. ]], "dyp_crab_cave"); + +dyp_cmbt_learr = combatant { + nam = "dyp_cmbt_learr"; + disp2 = "Леарр"; + disp3 = "Леарр"; + x = 5; + y = 7; + pic = "images/learr.png"; + ally = "Я не буду атаковать союзника."; + nohit = "Я не буду атаковать союзника."; + noshoot = "Я не буду атаковать союзника."; + hp = 10; + hasSpear = true; + make_turn = function(s) + local enemies = { }; + for item=1,#here().obj do + local obj = here().obj[item]; + if (obj.enemy and obj.hp > 0) then + local p = here():getWalkDistance(s.x, s.y, obj.x, obj.y); + if (p) then + table.insert(enemies, { + o = obj, + p = p + }); + end; + end; + end; + if (#enemies == 0) then + pn("Леарр ждет. "); + return; + end; + table.sort(enemies, function(a, b) + return (a.p.l < b.p.l); + end); + local enemy = enemies[1].o; + local path = enemies[1].p; + for i = 1,#enemies do + print(enemies[i].p.l); + end; + -- AI Order: + -- If has spear and enemy is far - throw spear + -- If has spear and enemy is close - hit with spear + -- if spear is nearer than any enemy - walk towards spear + -- walk towards nearest enemy + -- If enemy close and enemy has spear - take spear from enemy + -- If enemy close and enemy doesn't have spear - hit with claws + + if s.hasSpear then + if (math.abs(s.x - enemy.x) + math.abs(s.y - enemy.y) <= 2 and here():canShoot(s.x,s.y, enemy.x, enemy.y)) then + --50% + if (rnd(2) > 1) then + enemy.hp = enemy.hp - 2; + pn("Леарр бьет " .. enemy.disp2 .. " копьем и попадает. "); + else + pn("Леарр бьет " .. enemy.disp2 .. " копьем, но промахивается. "); + end; + return; + elseif (math.abs(s.x - enemy.x) == 1 and math.abs(s.y - enemy.y) == 1) then + --75% + if (rnd(4) > 1) then + enemy.hp = enemy.hp - 2; + pn("Леарр бьет " .. enemy.disp2 .. " копьем и попадает. "); + else + pn("Леарр бьет " .. enemy.disp2 .. " копьем, но промахивается. "); + end; + return; + elseif (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or + s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then + --100% + enemy.hp = enemy.hp - 2; + pn("Леарр бьет " .. enemy.disp2 .. " копьем и попадает. "); + return; + end; + else + if (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or + s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then + enemy.hp = enemy.hp - 1; + pn("Леарр бьет " .. enemy.disp2 .. " и попадает. "); + return; + end; + end; + + s.x = path.p[2][1]; + s.y = path.p[2][2]; + pn("Леарр идет к " .. enemy.disp3 .. ". "); + end; + dsc = function(s) + if (s.hp > 0) then + return [[ {Леарр} готова к бою. ]]; + else + return [[ {Леарр} без сознания. ]]; + end; + end; +}; + +dyp_cmbt_wright = combatant { + nam = "za_cmbt_wright"; + disp2 = "Райта"; + disp3 = "Райту"; + x = 5; + y = 7; + pic = "images/jack.png"; + ally = "Я не буду атаковать союзника."; + nohit = "Я не буду атаковать союзника."; + noshoot = "Я не буду атаковать союзника."; + hp = 10; + hasHarpoon = true; + make_turn = function(s) + local enemies = { }; + for item=1,#here().obj do + local obj = here().obj[item]; + if (obj.enemy and obj.hp > 0) then + local p = here():getWalkDistance(s.x, s.y, obj.x, obj.y); + if (p) then + table.insert(enemies, { + o = obj, + p = p + }); + end; + end; + end; + if (#enemies == 0) then + pn("Райт ждет. "); + return; + end; + table.sort(enemies, function(a, b) + return (a.p.l < b.p.l); + end); + local enemy = enemies[1].o; + local path = enemies[1].p; + + if (s.x ~= 6 or s.y ~=3) then + local ppath = here():getWalkDistance(s.x, s.y, 6, 3); + if (ppath.l < path.l) then + s.x = ppath.p[2][1]; + s.y = ppath.p[2][2]; + pn("Райт идет к укрытию"); + end; + end; + + -- AI Order: + -- If has harpoon and enemy is far - shoot + -- If has harpoon and enemy is close - hit with harpoon + -- walk towards nearest enemy + + if (s.hasHarpoon) then + if (math.abs(s.x - enemy.x) + math.abs(s.y - enemy.y) <= 2 and here():canShoot(s.x,s.y, enemy.x, enemy.y)) then + --50% + if (rnd(2) > 1) then + enemy.hp = enemy.hp - 2; + pn("Райт бьет " .. enemy.disp2 .. " гарпуном и попадает. "); + else + pn("Райт бьет " .. enemy.disp2 .. " гарпуном, но промахивается. "); + end; + return; + elseif (math.abs(s.x - enemy.x) == 1 and math.abs(s.y - enemy.y) == 1) then + --75% + if (rnd(4) > 1) then + enemy.hp = enemy.hp - 2; + pn("Райт бьет " .. enemy.disp2 .. " гарпуном и попадает. "); + else + pn("Райт бьет " .. enemy.disp2 .. " гарпуном, но промахивается. "); + end; + return; + elseif (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or + s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then + --100% + enemy.hp = enemy.hp - 2; + pn("Райт бьет " .. enemy.disp2 .. " гарпуном и попадает. "); + return; + else + local dist = math.sqrt((s.x - here().plX) * (s.x - here().plX) + (s.y - here().plY) * (s.y - here().plY));--here().getDistance(here().plX, here().plY, s.x, s.y); + if (rnd(4) > dist - 2) then + s.hasSpear = false; + enemy.hp = enemy.hp - 2; + pn("Райт стреляет в " .. enemy.disp2 .. " гарпуном и попадает. "); + else + pn("Райт стреляет в " .. enemy.disp2 .. " гарпуном, но промахивается. "); + end; + return; + end; + else + s.hasHarpoon = true; + pn("Райт перезаряжает ружье. "); + end; + + s.x = path.p[2][1]; + s.y = path.p[2][2]; + pn("Райт идет к " .. enemy.disp3 .. ". "); + end; + dsc = function(s) + if (s.hp > 0) then + return [[ {Райт} готов к бою. ]]; + else + return [[ {Райт} без сознания. ]]; + end; + end; +}; + +dyp_cmbt_radcliffe = combatant { + nam = "dyp_cmbt_radcliffe"; + disp2 = "Рэклиффа"; + disp3 = "Рэдклиффу"; + x = 5; + y = 7; + pic = "images/walter.png"; + ally = "Я не буду атаковать союзника."; + nohit = "Я не буду атаковать союзника."; + noshoot = "Я не буду атаковать союзника."; + hp = 10; + hasHarpoon = true; + make_turn = function(s) + local enemies = { }; + for item=1,#here().obj do + local obj = here().obj[item]; + if (obj.enemy and obj.hp > 0) then + local p = here():getWalkDistance(s.x, s.y, obj.x, obj.y); + if (p) then + table.insert(enemies, { + o = obj, + p = p + }); + end; + end; + end; + if (#enemies == 0) then + pn("Рэдклифф ждет. "); + return; + end; + table.sort(enemies, function(a, b) + return (a.p.l < b.p.l); + end); + local enemy = enemies[1].o; + local path = enemies[1].p; + + if (s.x ~= 6 or s.y ~=3) then + local ppath = here():getWalkDistance(s.x, s.y, 6, 3); + if (ppath.l < path.l) then + s.x = ppath.p[2][1]; + s.y = ppath.p[2][2]; + pn("Рэдклифф идет к укрытию"); + end; + end; + + -- AI Order: + -- If has harpoon and enemy is far - shoot + -- If has harpoon and enemy is close - hit with harpoon + -- walk towards nearest enemy + + if (s.hasHarpoon) then + if (math.abs(s.x - enemy.x) + math.abs(s.y - enemy.y) <= 2 and here():canShoot(s.x,s.y, enemy.x, enemy.y)) then + --50% + if (rnd(2) > 1) then + enemy.hp = enemy.hp - 2; + pn("Рэдклифф бьет " .. enemy.disp2 .. " гарпуном и попадает. "); + else + pn("Рэдклифф бьет " .. enemy.disp2 .. " гарпуном, но промахивается. "); + end; + return; + elseif (math.abs(s.x - enemy.x) == 1 and math.abs(s.y - enemy.y) == 1) then + --75% + if (rnd(4) > 1) then + enemy.hp = enemy.hp - 2; + pn("Рэдклифф бьет " .. enemy.disp2 .. " гарпуном и попадает. "); + else + pn("Рэдклифф бьет " .. enemy.disp2 .. " гарпуном, но промахивается. "); + end; + return; + elseif (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or + s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then + --100% + enemy.hp = enemy.hp - 2; + pn("Рэдклифф бьет " .. enemy.disp2 .. " гарпуном и попадает. "); + return; + else + local dist = math.sqrt((s.x - here().plX) * (s.x - here().plX) + (s.y - here().plY) * (s.y - here().plY));--here().getDistance(here().plX, here().plY, s.x, s.y); + if (rnd(4) > dist - 2) then + s.hasSpear = false; + enemy.hp = enemy.hp - 2; + pn("Рэдклифф стреляет в " .. enemy.disp2 .. " гарпуном и попадает. "); + else + pn("Рэдклифф стреляет в " .. enemy.disp2 .. " гарпуном, но промахивается. "); + end; + return; + end; + else + s.hasHarpoon = true; + pn("Рэдклифф перезаряжает ружье. "); + end; + + s.x = path.p[2][1]; + s.y = path.p[2][2]; + pn("Рэдклифф идет к " .. enemy.disp3 .. ". "); + end; + dsc = function(s) + if (s.hp > 0) then + return [[ {Рэдклифф} готов к бою. ]]; + else + return [[ {Рэдклифф} без сознания. ]]; + end; + end; +}; + +dyp_cmbt_anna = combatant { + nam = "dyp_cmbt_anna"; + disp2 = "Анну"; + disp3 = "Анне"; + x = 5; + y = 7; + pic = "images/anna.png"; + ally = "Я не буду атаковать союзника."; + nohit = "Я не буду атаковать союзника."; + noshoot = "Я не буду атаковать союзника."; + hp = 10; + hasHarpoon = true; + make_turn = function(s) + local enemies = { }; + for item=1,#here().obj do + local obj = here().obj[item]; + if (obj.enemy and obj.hp > 0) then + local p = here():getWalkDistance(s.x, s.y, obj.x, obj.y); + if (p) then + table.insert(enemies, { + o = obj, + p = p + }); + end; + end; + end; + if (#enemies == 0) then + pn("Анна ждет. "); + return; + end; + table.sort(enemies, function(a, b) + return (a.p.l < b.p.l); + end); + local enemy = enemies[1].o; + local path = enemies[1].p; + + if (s.x ~= 6 or s.y ~=3) then + local ppath = here():getWalkDistance(s.x, s.y, 6, 3); + if (ppath.l < path.l) then + s.x = ppath.p[2][1]; + s.y = ppath.p[2][2]; + pn("Анна идет к укрытию"); + end; + end; + + -- AI Order: + -- If has harpoon and enemy is far - shoot + -- If has harpoon and enemy is close - hit with harpoon + -- walk towards nearest enemy + + if (s.hasHarpoon) then + if (math.abs(s.x - enemy.x) + math.abs(s.y - enemy.y) <= 2 and here():canShoot(s.x,s.y, enemy.x, enemy.y)) then + --50% + if (rnd(2) > 1) then + enemy.hp = enemy.hp - 2; + pn("Анна бьет " .. enemy.disp2 .. " гарпуном и попадает. "); + else + pn("Анна бьет " .. enemy.disp2 .. " гарпуном, но промахивается. "); + end; + return; + elseif (math.abs(s.x - enemy.x) == 1 and math.abs(s.y - enemy.y) == 1) then + --75% + if (rnd(4) > 1) then + enemy.hp = enemy.hp - 2; + pn("Анна бьет " .. enemy.disp2 .. " гарпуном и попадает. "); + else + pn("Анна бьет " .. enemy.disp2 .. " гарпуном, но промахивается. "); + end; + return; + elseif (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or + s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then + --100% + enemy.hp = enemy.hp - 2; + pn("Анна бьет " .. enemy.disp2 .. " гарпуном и попадает. "); + return; + else + local dist = math.sqrt((s.x - here().plX) * (s.x - here().plX) + (s.y - here().plY) * (s.y - here().plY));--here().getDistance(here().plX, here().plY, s.x, s.y); + if (rnd(4) > dist - 2) then + s.hasSpear = false; + enemy.hp = enemy.hp - 2; + pn("Анна стреляет в " .. enemy.disp2 .. " гарпуном и попадает. "); + else + pn("Анна стреляет в " .. enemy.disp2 .. " гарпуном, но промахивается. "); + end; + return; + end; + else + s.hasHarpoon = true; + pn("Анна перезаряжает ружье. "); + end; + + local plpath = here():getWalkDistance(s.x, s.y, pl.x, pl.y); + if (plpath.l > 2) then + s.x = plpath.p[2][1]; + s.y = plpath.p[2][2]; + pn("Анна идет к вам. "); + end; + end; + dsc = function(s) + if (s.hp > 0) then + return [[ {Анна} готова к бою. ]]; + else + return [[ {Анна} без сознания. ]]; + end; + end; +}; + +dyp_king_crab = combatant { + nam = "dyp_king_crab"; + disp2 = "краба"; + disp3 = "крабу"; + x = 4; + y = 1; + hp = 4; + pic = "images/king_crab.png"; + shootHit = "Вы стреляете в краба и попадаете в него. "; + shootMiss = "Вы стреляете в краба, но не попадаете в него. "; + shootKill = "Вы стреляете в краба и он умирает. "; + handHit = "Вы ударяете краба. "; + handKill = "Вы ударяет краба, убивая его. "; + handFar = "Слишком далеко. "; + enemy = true; + dsc = function(s) + if (s.hp > 0) then + return "{Краб} готов к бою. "; + else + return false; + end; + end; + make_turn = function(s) + local enemies = { }; + for item=1,#here().obj do + local obj = here().obj[item]; + if (obj.ally and obj.hp > 0) then + local p = here():getWalkDistance(s.x, s.y, obj.x, obj.y); + if (p) then + table.insert(enemies, { + o = obj, + p = p + }); + end; + end; + end; + table.sort(enemies, function(a, b) + return (a.p.l < b.p.l); + end); + + local enemy = enemies[1]; + local path = here():getWalkDistance(s.x, s.y, here().plX, here().plY); + if (not enemy or path and enemy.p.l > path.l ) then + enemy = pl; + else + path = enemy.p; + enemy = enemy.o; + end; + + if (not enemy or not path) then + pn("Краб ждет. "); + return; + end; + + -- AI Order: + -- If has spear and enemy is close - hit with spear + -- walk towards nearest enemy + -- If enemy close - hit with claws + + if (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or + s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then + enemy.hp = enemy.hp - 2; + pn("Краб бьет " .. enemy.disp2 .. " и попадает. "); + return; + end; + + print("fug2",path); + s.x = path.p[2][1]; + s.y = path.p[2][2]; + pn("Краб идет к " .. enemy.disp3 .. ". "); + end; +}; + +dyp_little_crab = function(nam, index, x, y) + return combatant { + nam = nam; + disp2 = "детеныша краба " .. tostring(index); + disp3 = "детенышу краба " .. tostring(index); + x = x; + y = y; + hp = 2; + pic = "images/little_crab_".. index ..".png"; + shootHit = "Вы стреляете в детеныша краба и попадаете в него. "; + shootMiss = "Вы стреляете в детеныша краба, но не попадаете в него. "; + shootKill = "Вы стреляете в детеныша краба и он умирает. "; + handHit = "Вы ударяете детеныша краба. "; + handKill = "Вы ударяет детеныша краба, убивая его. "; + handFar = "Слишком далеко. "; + enemy = true; + dsc = function(s) + if (s.hp > 0) then + return "{Детеныш краба " .. tostring(index).. "} готов к бою. "; + else + return false; + end; + end; + make_turn = function(s) + local enemies = { }; + for item=1,#here().obj do + local obj = here().obj[item]; + if (obj.ally and obj.hp > 0) then + local p = here():getWalkDistance(s.x, s.y, obj.x, obj.y); + if (p) then + table.insert(enemies, { + o = obj, + p = p + }); + end; + end; + end; + table.sort(enemies, function(a, b) + return (a.p.l < b.p.l); + end); + + local enemy = enemies[1]; + local path = here():getWalkDistance(s.x, s.y, here().plX, here().plY); + if (not enemy or path and enemy.p.l > path.l ) then + enemy = pl; + else + path = enemy.p; + enemy = enemy.o; + end; + + if (not enemy or not path) then + pn("Детеныш краба ".. tostring(index).. " ждет. "); + return; + end; + + -- AI Order: + -- If has spear and enemy is close - hit with spear + -- walk towards nearest enemy + -- If enemy close - hit with claws + + if (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or + s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then + enemy.hp = enemy.hp - 1; + pn("Детеныш краба ".. tostring(index).. " бьет " .. enemy.disp2 .. " и попадает. "); + return; + end; + + print("fug2",path); + s.x = path.p[2][1]; + s.y = path.p[2][2]; + pn("Детеныш краба ".. tostring(index).. " идет к " .. enemy.disp3 .. ". "); + end; + }; +end; + +dyp_crab_fight = battlefield { + nam = "Пещера"; + plX = 4; + plY = 7; + map = { + {2,0,0,0,0,0,2}; + {2,0,0,0,0,0,2}; + {2,1,0,0,0,0,2}; + {2,0,0,1,0,1,2}; + {2,0,1,0,0,0,2}; + {2,0,0,0,0,1,2}; + {2,0,0,0,0,0,2}; + }; + win = "dyp_crab_cave_win"; + lose = "game_over_crab_cave"; + obstacle = "images/stones.png"; + underwater = true; + entered = function(s) + --TODO prepend player associate - anna, learr, walter or jack + if (char_learr.follow) then + table.insert(s.obj, 1, dyp_cmbt_learr); + s.plX = 3; + elseif (char_anna.follow) then + table.insert(s.obj, 1, dyp_cmbt_anna); + s.plX = 3; + elseif (char_wright.follow) then + table.insert(s.obj, 1, dyp_cmbt_wright); + s.plX = 3; + elseif (char_radcliffe.follow) then + table.insert(s.obj, 1, dyp_cmbt_radcliffe); + s.plX = 3; + end; + end; + obj = { + "dyp_king_crab"; + dyp_little_crab("dyp_little_crab_1", 1, 2, 1); + dyp_little_crab("dyp_little_crab_2", 2, 3, 1); + dyp_little_crab("dyp_little_crab_3", 3, 5, 1); + dyp_little_crab("dyp_little_crab_4", 4, 6, 1); + dyp_little_crab("dyp_little_crab_5", 5, 3, 2); + dyp_little_crab("dyp_little_crab_6", 6, 4, 2); + dyp_little_crab("dyp_little_crab_7", 7, 5, 2); + }; +}; + +dyp_crab_cave_puzzle = room { + var { + values = { + 0, 2, 1, 2, 5 ,4, + 1, 1, 2, 4, 0, 5, + 1, 3, 2, 4, 0, 3, + 0, 2, 0, 3, 5, 4, + 5, 0, 4, 1, 3, 3, + 3, 5, 5, 1, 4, 2 + }; + pressed = { + nil, + nil, + nil, + nil, + nil, + nil + }; + }; + nam = "Пещера"; + pic = function(s) + local p = "blank:180x180"; + for v = 1, #s.values do + local tx = (v - 1) % 6; + local ty = math.floor((v - 1) / 6); + local lstate = ''; + if s.pressed[s.values[v] + 1] and s.pressed[s.values[v] + 1][1] == tx and s.pressed[s.values[v] + 1][2] == ty then + lstate = 'p'; + end; + p = p .. ';images/cavelock_' .. tostring(s.values[v]) .. lstate .. '.png@' .. tostring(tx * 30) .. ',' .. tostring(ty * 30); + end; + print(p); + return p; + end; + click = function(s,x,y) + local tx = math.floor(x / 30); + local ty = math.floor(y / 30); + local i = tx + ty * 6 + 1; + local val = s.values[i]; + for p = 1, 6 do + if s.pressed[p] and (s.pressed[p][1] == tx or s.pressed[p][2] == ty) then + s.pressed[p] = nil; + end; + end; + s.pressed[val + 1] = {tx, ty}; + for p = 1, 6 do + if not s.pressed[p] then + walkin(here()); + return; + end; + end; + p("С легким скрежетом сундук открывается. Внутри вы обнаруживаете небольшой жезл с нанесенными цветными символами. Цвета определенно соответствуют навьярским словам, но что значат символы вам неведомо. "); + dyp_scepter_chest.state = 1; + put(dyp_item_wand, me()); + walk(dyp_crab_cave); + end; + way = { + kh_vroom("Отойти", "dyp_crab_cave"); + }; +}; + +dyp_crab_cave_win = cutscene("dyp_crab_cave_win", "Пещера", [[Вы расправляетесь с выводком крабов, поселившихся в этой пещере. Чуть поодаль, вы видите тело навьяра, истерзанное этими монстрами. ]], "dyp_crab_cave"); + +cutscene_wait_for_copy = cutscene("cutscene_wait_for_copy", "Атлантида", [[Вы отправляетесь в свою комнату и ждете. Уже утром, вас вызывает Светлова и сообщает: "Ваша копия готова, можете забирать". ]], "atlantis_drake_room") \ No newline at end of file diff --git a/atlantis_from_the_ashes.lua b/atlantis_from_the_ashes.lua --- a/atlantis_from_the_ashes.lua +++ b/atlantis_from_the_ashes.lua @@ -1,8 +1,9 @@ atl_fta_is_terra_solis = room { + var { + state = 0; + }; nam = "Атлантида, межсекционный кодидор"; - dsc = [[ - Небольшой коридор, соединяющий секции Терра и Солис. Яркий свет электрических ламп освещает помещение. - ]]; + dsc = [[Небольшой коридор, соединяющий секции Терра и Солис. Яркий свет электрических ламп освещает помещение. ]]; entered = function(s) if (s.state == 0) then return [[ @@ -76,50 +77,37 @@ atl_fta_dlg_radio = dlg { entered = function(s) if (s.state == 0) then psub("tuning"); - return [[ - Радио не настроено - ]]; + return [[Радио не настроено. ]]; elseif (s.state == 1) then psub("ok"); - return [[ - Радио настроено, вы можете говорить - ]]; + return [[Радио настроено, вы можете говорить. ]]; elseif (s.state == 2) then psub("next"); - return [[ - Радио настроено, вы можете говорить - ]]; + return [[Радио настроено, вы можете говорить. ]]; elseif (s.state == 3) then psub("more"); - return [[ - Радио настроено, вы можете говорить - ]]; + return [[Радио настроено, вы можете говорить. ]]; end; end; phr = { {tag="tuning"}; - {"[Настроить приемник]Прием, как слышите?", [[ - Через несколько минут настройки, вы слышите в динамике голос Райта: "Да, Дрейк". + {"[Настроить приемник] Прием, как слышите?", [[ + Через несколько минут настройки, вы слышите в динамике голос Райта: "Слушаю вас, Дрейк". ]], code [[ atl_fta_dlg_radio.state = 1; psub("ok"); ]]}; {tag="ok"}; {"Что мне делать?", [[ "Что вы видите?" ]], code [[ atl_fta_dlg_radio.state = 2; psub("what_i_see"); ]]}; {tag="what_i_see"}; - {"К юго-востоку от меня вижу огонь, скорее всего взрыв был там. Здесь жарко. В остальном все вроде пока в порядке", [[ - "Идите по западной стороне. Ваша задача - попасть в центр секции, с северной стороны. Вы увидите несколько вентилей. Вам надо будет перекрыть их все. Там хитрая защита от случайного закрытия, но я думаю, вы справитесь". - ]], code [[ back(); ]]}; + {"К юго-востоку от меня вижу огонь, скорее всего взрыв был там. Здесь жарко. ", [[Райт инструктирует вас: "Идите по западной стороне. Ваша задача -- попасть в центр секции с северной стороны. Вы увидите несколько вентилей. Просто перекройте тот, в котором давление слишком большое". ]], code [[ psub("clear"); ]]}; {tag="next"}; - {"Что мне делать?", [[ - "Идите по западной стороне. Ваша задача - попасть в центр секции, с северной стороны. Вы увидите несколько вентилей. Вам надо будет перекрыть их все. Там хитрая защита от случайного закрытия, но я думаю, вы справитесь". - ]]}; + {always=true, "Что мне делать?", [[Райт инструктирует вас: "Идите по западной стороне. Ваша задача -- попасть в центр секции с северной стороны. Вы увидите несколько вентилей. Просто перекройте тот, в котором давление слишком большое". ]], code [[ psub("clear"); ]]}; + {"Конец связи. ", "", code [[ back(); ]]}; {tag="more"}; - {"Тут еще что-то взорвалось", [[ - "Я знаю. Поторопитесь. Если взорвется еще один котел, то станция обречена". - ]], code [[ atl_fta_dlg_radio.state = 2; ]]}; - {"Как я выберусь отсюда?", [[ - "На юге есть шлюз, выйдете через него". - ]], code [[ atl_fta_dlg_radio.state = 2; ]]}; + {"Тут еще что-то взорвалось", [[Райт подтверждает: "Я знаю. Поторопитесь. Если взорвется еще один котел, то станция обречена". ]], code [[ atl_fta_dlg_radio.state = 2; ]]}; + {"Как я выберусь отсюда?", [[Райт отвечает: "На юге есть шлюз, выйдете через него". ]], code [[ atl_fta_dlg_radio.state = 2; ]]}; + {tag="clear"}; + {"Вас понял. Конец связи.", "", code [[ back(); ]]} }; }; @@ -130,7 +118,7 @@ atl_fta_dlg_phone = dlg { Вы не успеваете и слова сказать, как в разговор вмешивается Майкл Райт: "Стойте! Дрейк, кроме вас там никого нет, поэтому одевайте скафандр и слушайте мои инструкции". ]]; phr = { - {"Вас понял", code = [[ psub("back"); ]]}; + {"Вас понял.", code = [[ psub("back"); ]]}; }; }; @@ -141,6 +129,12 @@ atl_fta_solis_entry = room { ]]; entered = function(s) item_atl_fta_suit.dlg = "atl_fta_dlg_radio"; + + if (atl_fta_solis_c2.broken_valve == 0) then + atl_fta_solis_c2.broken_valve = rnd(5); + atl_fta_valves[atl_fta_solis_c2.broken_valve].broken = true; + atl_fta_solis_c2.broken_offset = rnd(9) + 10; + end; end; way = { vroom("На восток", "atl_fta_solis_ne"); @@ -148,7 +142,7 @@ atl_fta_solis_entry = room { }; }; -atl_fta_solis_ne_1 = room { +atl_fta_solis_ne = room { nam = "Атлантида, Солис"; dsc = [[ В помещении темно и жарко. Cо всех сторон от вас проложено множество труб. Сквозь просветы в них вы видите огонь где-то вдалеке на юге. @@ -273,12 +267,6 @@ atl_fta_solis_c2 = room { ]]; end; end; - entered = function(s) - if (s.broken_valve == 0) then - s.broken_valve = rnd(5); - s.broken_offset = rnd(9) + 10; - end; - end; way = { vroom("На юг", atl_fta_solis_exit); }; @@ -307,12 +295,13 @@ atl_fta_solis_valvea = obj { elseif (atl_fta_solis_c2.valve_a == 6) then atl_fta_solis_c2.valve_a = 2; end; + return "Вы поворачиваете вентиль. Значения на манометрах изменились. "; end; }; atl_fta_solis_valveb = obj { nam = "Вентиль"; - dsc = " а тот, что {справа} - буквой B."; + dsc = " а тот, что {справа} -- буквой B."; act = function(s) if (atl_fta_solis_c2.valve_b == 90) then atl_fta_solis_c2.valve_b = 60; @@ -323,6 +312,7 @@ atl_fta_solis_valveb = obj { elseif (atl_fta_solis_c2.valve_b == 30) then atl_fta_solis_c2.valve_b = 90; end; + return "Вы поворачиваете вентиль. Значения на манометрах изменились. "; end; }; @@ -349,7 +339,7 @@ atl_fta_solis_valve = function(index) if (atl_fta_solis_c2:solved()) then return "Шипение пара прекращается. Вы сделали все, что нужно. "; else - return false; + return "Вы поворачиваете вентиль. "; end; end; }; @@ -361,6 +351,14 @@ atl_fta_solis_valve3 = atl_fta_solis_val atl_fta_solis_valve4 = atl_fta_solis_valve(4); atl_fta_solis_valve5 = atl_fta_solis_valve(5); +atl_fta_valves = { + atl_fta_solis_valve1; + atl_fta_solis_valve2; + atl_fta_solis_valve3; + atl_fta_solis_valve4; + atl_fta_solis_valve5; +}; + atl_fta_game_over_left = room { nam = "Игра окончена"; dsc = [[ @@ -377,15 +375,16 @@ atl_fta_game_over_left_2 = room { atl_fta_ending = room { nam = "Атлантида"; - dsc = [[ - Через шлюз вы выбираетесь из Солиса и оказываетесь снаружи. Через некоторое время вас подбирает Наутилус, чтобы вернуть на станцию. От экипажа вы узнаете, что потребление энергии на станции сокращено до восстановления Солиса. ^ - Вернувшись на станцию, вы сразу же отправляетесь в свою каюту, чтобы отдохнуть. - ]]; + dsc = [[Через шлюз вы выбираетесь из Солиса и оказываетесь снаружи. Через некоторое время вас подбирает Наутилус, чтобы вернуть на станцию. От экипажа вы узнаете, что потребление энергии на станции сокращено до восстановления Солиса. ^Вернувшись на станцию, вы сразу же отправляетесь в свою каюту, чтобы отдохнуть. ]]; entered = function(s) + if char_darkstar_dlg.state == 0 then + char_darkstar_dlg.state = 1; + end; atl_fta_state = 2; - remove(item_atl_fta_suit); + remove(item_atl_fta_suit, pl); + me().has_light = false; end; obj = { vway('continue', '{Продолжить}', 'atl_luna_drake_room'); }; -}; \ No newline at end of file +}; diff --git a/atlantis_ignis.lua b/atlantis_ignis.lua --- a/atlantis_ignis.lua +++ b/atlantis_ignis.lua @@ -75,7 +75,7 @@ atl_ignis_main_toa = room { dsc = [[Огромный круглый зал залит ярким светом электрических ламп. Вокруг установлено большое количество заполненных кинопленками и образущих широкие коридоры высоких стеллажей, упирающихся в металлический потолок зала. Вы находитесь в северо-западной части зала, рядом со входом в зал A. ]]; way = { vroom("В зал A", "atl_ignis_hall_a"); - vroom("На юг", "atl_ignis_main_n"); + vroom("На юг", "atl_ignis_main_center"); vroom("На запад", "atl_ignis_main_nw_wall"); vroom("На восток", "atl_ignis_main_tos"); }; diff --git a/atlantis_ignis_on_fire.lua b/atlantis_ignis_on_fire.lua --- a/atlantis_ignis_on_fire.lua +++ b/atlantis_ignis_on_fire.lua @@ -1,6 +1,6 @@ atlantis_learr_intro = room { nam = "Атлантида, Окулус, Главный коридор"; - dsc = [[Вы выходите из межсекционного коридора в главный коридор секции _"Окулус"_ и сталкиваетесь лицом к лицу с неведомым существом: ^стройное, покрытое блестящей серо-зеленой чешуей тело, рыбья голова с небольшими отростками-плавниками, тонкие ноги и руки с широкими перепонками между длинными пальцами. Ярко-оранжевые глаза существа с интересом разглядывают вас. Во рту существа сверкают острые треугольные зубы. Одето оно в белую рубашку и ярко-синюю юбку до колен. На шее существа вы замечаете жабры. Отростки на голове существа принимают слабо уловимый сине-зеленый оттенок. ]]; + dsc = [[Вы выходите из межсекционного коридора в главный коридор секции _"Окулус"_ и сталкиваетесь лицом к лицу с неведомым существом. Стройное, покрытое блестящей серо-зеленой чешуей тело слегка покачивается. Рыбья голова с небольшими отростками-плавниками, тонкие ноги и руки с широкими перепонками между длинными пальцами покрыты такой же чешуей. Ярко-оранжевые глаза существа с интересом разглядывают вас. Во рту существа сверкают острые треугольные зубы. Одето оно в белую рубашку и ярко-синюю юбку до колен. На шее существа вы замечаете жабры. Отростки на голове существа принимают слабо уловимый сине-зеленый оттенок. ]]; obj = { vway('continue', '{Продолжить}', 'atlantis_learr_first_dlg') }; @@ -8,23 +8,23 @@ atlantis_learr_intro = room { atlantis_learr_first_dlg = dlg { nam = "Леарр"; - entered = [[Существо начинает говорить: "Я зздессь-рраньшше-не-видела васс". Голос звучит непривычно для вашего слуха - гласные произносятся очень коротко, между некоторыми словами делаются резкие паузы, другие же сливаются практически в одно, шипящие и "р" произносятся удлиненно. ]]; + entered = [[Существо начинает говорить: "Я зздессь-рраньшше-не-видела васс". Голос звучит непривычно для вашего слуха -- гласные произносятся очень коротко, между некоторыми словами делаются резкие паузы, другие же сливаются практически в одно, шипящие и "р" произносятся удлиненно. ]]; phr = { - {"Кто ты?", [[ - Существо отвечает: "I'yhe'lea'yhe'na'vji'a'rr", -- вы отчетливо различаете короткие паузы между слогами. ]], code [[ pon('who_are_you'); ]]}; - {tag="who_are_you", false, "Я не понимаю, что ты говоришь", [[Существо ненадолго застывает в замешательстве. Затем отвечает: "Я Lea'rr. Ты так-понимаешь?". ]], code [[psub('learr'); ]]}; - {"Аааа, монстр, помогите!!!", [[Существо скалит зубы. Плавники меняют цвет на ярко-фиолетовый. Оно рычит на вас: "Прропусти. Нет-врремени". Щелкнув зубами, _"Чудовище"_ уходит. ]], code [[ + {"Кто ты?", [[Существо отвечает: "I'yhe'lea'yhe'na'vji'a'rr", -- вы отчетливо различаете короткие паузы между слогами. ]], code [[ pon('who_are_you'); ]]}; + {tag="who_are_you", false, "Я не понимаю, что ты говоришь.", [[Существо ненадолго застывает в замешательстве. Затем отвечает: "Я Lea'rr. Ты так-понимаешь?". ]], code [[psub('learr'); ]]}; + {"Аааа, монстр, помогите!!!", [[Существо скалит зубы. Плавники меняют цвет на ярко-фиолетовый. Оно рычит на вас: "Прропусти. Нет-врремени". ^Щелкнув зубами, _"Чудовище"_ уходит. ]], code [[ put(char_learr_atlantis, atl_ignis_hall_a); char_learr_atlantis.offended = true; walk("atl_oculus_main_corridor"); ]]}; {tag="learr"}; {"Рад знакомству. Я Дэвид Дрейк. ", [[Леарр переспрашивает: "Ты ззнаешшь Уильяма-Дррейка?" -- Вам кажется, вы чувствуете удивление, хотя интонации в словах существа вам совершенно чужды. ]], code [[ psub('drake') ]]}; - {"Откуда ты?", [[Леарр отвечает: "Я изз Iraa'pha'anot'rr. Я на-Атлантиде-жживу-ссейчасс".]]}; + {"Что ты такое?", [[Леарр ненадолго задумывается и отвечает: "Мы себя-навьярами-называем. Мы недалеко-живем-в-нескольких-кругах-отсюда".]], code [[ pon('under_water'); ]]}; + {tag="under_water", false, "Под водой?", [[Леарр кивает. Через некоторое время отвечает: "Ты с-поверхности? Никогда-нас-не-видел, похоже". ]]}; {tag="drake"}; {"Да, я его сын. Ты знакома с ним?", [[оттенок головных плавников Леарр становится более ярким и смещается ближе к зеленому. Она отвечает: _"Да, я его-ззнаю. Уильям-Дррейк нашшу-иссторрию-иззучал. Он ссейчасс-исскать-уехал Lse'ry'anot'rr. Я что-вы-зздессь рада"_. ]], code [[ psub('follow_drake') ]]}; {tag="follow_drake"}; - {"Я здесь из-за него. " , [[Леарр кивает: _"Я вам-как-смогу-помогу. Я в-Игниссе-буду, ессли вы говоррить-хотите"_. Леарр уходит, а вы остаетесь один в коридоре. ]], code [[ put(char_learr_atlantis, atl_ignis_hall_a); walk("atl_oculus_main_corridor"); ]]}; + {"Я здесь из-за него. " , [[Леарр кивает: _"Я вам-как-смогу-помогу. Я в-Игниссе-буду, ессли вы говоррить-хотите"_. ^Леарр уходит, а вы остаетесь в одиночестве. ]], code [[ put(char_learr_atlantis, atl_ignis_hall_a); walk("atl_oculus_main_corridor"); ]]}; }; }; @@ -85,7 +85,7 @@ char_learr_iof = obj { end; end; life = function(s) - if (where(s) ~= where(pl) and where(pl).iof) then + if (where(s) ~= where(pl) and where(pl).iof and not s.faint) then move(s, where(pl)); end; end; @@ -93,7 +93,7 @@ char_learr_iof = obj { if (where(s) == atl_iof_ignis_service_room and not dlg_learr_suit.state) then walkin('dlg_learr_suit'); elseif (s.faint) then - walkin('atl_iof_learr_faint_alone'); + walkin('atl_iof_learr_faint_alone_2'); else return [[Некогда разговаривать. ]]; end; @@ -111,7 +111,7 @@ dlg_learr_suit = dlg { return [[Леарр вопросительно смотрит на вас. ]]; end; phr = { - {"Я хочу, чтобы ты одела скафандр. ", [[Леарр недоуменно смотрит на вас: "Ззачем он мне? Ссама-я в-воде-дышшу. Мне не-нужжны вашши-пррисспоссобления". ]], code [[ + {"Я хочу, чтобы ты надела скафандр. ", [[Леарр недоуменно смотрит на вас: "Ззачем он мне? Ссама-я в-воде-дышшу. Мне не-нужжны вашши-пррисспоссобления". ]], code [[ psub('tag1'); ]]}; {"Мы сейчас наденем скафандры. Продолжай следовать за нами. ", [[Леарр молча кивает. ]], code [[ @@ -140,12 +140,12 @@ dlg_learr_iof = dlg { disp = "Леарр"; entered = [[Леарр подбегает к вам и спрашивает: "Что происходит?" ]]; phr = { - {'Надеюсь, все в порядке, следуй за мной', [[Леарр молча кивает. ]], code [[ + {'Надеюсь, все в порядке, следуй за мной. ', [[Леарр молча кивает. ]], code [[ lifeon('char_learr_iof'); char_learr_iof.state = 1; walk('atl_iof_ignis_hall_a'); ]]}; - {'Такое уже происходило?', [[Леарр пожимает плечами: "Я не-видела". ]]}; + {'Такое уже происходило? ', [[Леарр пожимает плечами: "Я не-видела". ]]}; }; }; @@ -208,9 +208,10 @@ atl_iof_time_state = obj { carry_learr = false; }; life = function(s) - if (not where(pl).iof) then + if (not where(pl).iof or where(pl).no_limits) then return; end; + s.life_left = s.life_left - 1; if (s.life_left == 5) then if (not s.pl_safe) then @@ -252,13 +253,29 @@ atl_iof_time_state = obj { end; }; +atl_iof_learr_faint_alone_2 = dlg { + nam = "Леарр"; + disp = "Леарр"; + dsc = [[Леарр лежит на полу без сознания. ]]; + phr = { + {"[Взять Леарр на руки]", [[Леарр теряет сознание, обессилев. Вы берете навьярессу на руки. Она весит не больше обычного человека. Вы вполне в состоянии донести ее до выхода. ]], code [[ + remove(char_learr_iof, where(char_learr_iof)); + put(char_learr_faint, pl); + lifeon(char_learr_faint); + atl_iof_time_state.carry_learr = true; + back(); + ]]}; + {"[Уйти]", "", code [[ back(); ]]}; + }; +}; + atl_iof_learr_faint_alone = dlg { nam = "Леарр"; disp = "Леарр"; dsc = [[Леарр медленно опускается на пол. Сквозь скафандр вы с трудом различаете ее голос: "Я не-могу-идти". ]]; phr = { {"Совсем немного осталось, пойдем. [Помочь Леарр подняться]", [[Леарр пытается подняться опираясь на вашу руку, но снова падает, теряя сознание. ]], code [[ - tag('faint'); + psub('faint'); ]]}; {"Оставайся здесь, я вернусь. ", [[Леарр теряет сознание, обессилев. ]], code [[ char_learr_iof.faint = true; @@ -280,10 +297,11 @@ atl_iof_learr_faint_alone = dlg { remove(char_learr_iof, where(char_learr_iof)); put(char_learr_faint, pl); lifeon(char_learr_faint); + char_learr_iof.faint = true; atl_iof_time_state.carry_learr = true; - back(); + back(); ]]}; - {"[Уйти]", "", code [[ back(); ]]}; + {"[Уйти]", "", code [[ char_learr_iof.faint = true; back(); ]]}; }; }; @@ -366,7 +384,7 @@ atl_iof_main_n1 = room { way = { kh_vroom("Против часовой", "atl_iof_main_nw1"); kh_vroom("По часовой", "atl_iof_main_ne1"); - kh_vroom("В Лифт", function() + kh_vroom("В лифт", function() pr("Лифт не работает"); return false; end); @@ -584,10 +602,10 @@ atl_iof_external_radio_dlg = dlg { phr = { {"Вы слышите меня?", [[В динамике вы слышите встревоженный голос начальника станции: "Моро на связи! Дрейк, вы там все в порядке?" ]], code [[psub('is_ok')]]}; {tag = "is_ok"}; - {"Да, все здесь. Мы одеваем скафандры.", [[В динамике раздается голос Майкла Райта: "Отлично. Они защитят вас от жара и обеспечат воздухом. Лифт не работает, поэтому воспользуйтесь аварийным шлюзом в южной части секции. Наутилус подхватит вас там". ]], code [[psub('clear')]]}; - {"Да, все здесь. Как нам выбраться?", [[В динамике раздается голос Майкла Райта: "Лифт не работает, поэтому воспользуйтесь аварийным шлюзом в южной части секции. Оденьте скафандры - они защитят вас от жара и обеспечат воздухом. Наутилус подхватит вас у выхода". ]], code [[psub('clear')]]}; + {"Да, все здесь. Мы надеваем скафандры.", [[В динамике раздается голос Майкла Райта: "Отлично. Они защитят вас от жара и обеспечат воздухом. Лифт не работает, поэтому воспользуйтесь аварийным шлюзом в южной части секции. Наутилус подхватит вас там". ]], code [[psub('clear')]]}; + {"Да, все здесь. Как нам выбраться?", [[В динамике раздается голос Майкла Райта: "Лифт не работает, поэтому воспользуйтесь аварийным шлюзом в южной части секции. Наденьте скафандры. Они защитят вас от жара и обеспечат воздухом. Наутилус подхватит вас у выхода". ]], code [[psub('clear')]]}; {tag = "clear"}; - {"Вас понял, конец связи[Выключить радио].", code [[back();]]}; + {"Вас понял, конец связи. [Выключить радио]", code [[back();]]}; }; }; @@ -595,6 +613,7 @@ atl_iof_ignis_service_room = room { nam = "Атлантида, Игнис, служебное помещение"; disp = "Атлантида, Игнис, служебное помещение"; iof = true; + no_limits = true; dsc = [[Небольшое помещение, используемое для хранения различного оборудования, необходимого для обслуживания секции. ]]; way = { kh_vroom("В главный зал", function(s) @@ -614,21 +633,24 @@ atl_iof_ignis_service_room = room { atl_iof_outside = room { nam = "Атлантида, Игнис"; iof = true; + hideinv = true; + nosave = true; + noautosave = true; entered = function(s) + remove(char_learr_faint, pl); + lifeoff(char_learr_faint); lifeoff(atl_iof_time_state); - end; - dsc = function(s) if (have(char_learr_faint)) then if (atl_iof_time_state.wright_here) then - return [[Вы добираетесь до аварийного шлюза Игниса. Вы с трудом отдраиваете его и заходите в шлюзовую камеру. Как только вы задраиваете внутренний люк, Райт опускает Леарр на пол и начинает вместе с вами отдраивать внешний люк. ^Вода быстро заполняет отсек. Снаружи вы видите Наутилус, находящийся прямо под люком. Вы берете Леарр и выходите наружу. Тяжелый скафандр тянет вас вниз и вы плавно опускаетесь на верхнюю обшивку Наутилуса. Группа людей, облаченных в скафандры помогает вам забраться внутрь Наутилуса. ]]; + s.dsc = [[Вы добираетесь до аварийного шлюза Игниса. Вы с трудом отдраиваете его и заходите в шлюзовую камеру. Как только вы задраиваете внутренний люк, Райт опускает Леарр на пол и начинает вместе с вами отдраивать внешний люк. ^Вода быстро заполняет отсек. Снаружи вы видите Наутилус, находящийся прямо под люком. Вы берете Леарр и выходите наружу. Тяжелый скафандр тянет вас вниз и вы плавно опускаетесь на верхнюю обшивку Наутилуса. Группа людей, облаченных в скафандры помогает вам забраться внутрь Наутилуса. ]]; else - return [[Вы добираетесь до аварийного шлюза Игниса. Вы с трудом отдраиваете его и заходите в шлюзовую камеру. Вы кладете Леарр на пол и снова задраиваете внутренний люк и, тяжело вздохнув, начинаете открывать внешний. ^Вода быстро заполняет отсек. Снаружи вы видите Наутилус, находящийся прямо под люком. Вы берете Леарр и выходите наружу. Тяжелый скафандр тянет вас вниз и вы плавно опускаетесь на верхнюю обшивку Наутилуса. Группа людей, облаченных в скафандры помогает вам забраться внутрь Наутилуса. ]]; + s.dsc = [[Вы добираетесь до аварийного шлюза Игниса. Вы с трудом отдраиваете его и заходите в шлюзовую камеру. Вы кладете Леарр на пол и снова задраиваете внутренний люк и, тяжело вздохнув, начинаете открывать внешний. ^Вода быстро заполняет отсек. Снаружи вы видите Наутилус, находящийся прямо под люком. Вы берете Леарр и выходите наружу. Тяжелый скафандр тянет вас вниз и вы плавно опускаетесь на верхнюю обшивку Наутилуса. Группа людей, облаченных в скафандры помогает вам забраться внутрь Наутилуса. ]]; end; else if (atl_iof_time_state.learr_safe) then - return [[Вы добираетесь до аварийного шлюза Игниса. Вы с трудом отдраиваете его и заходите в шлюзовую камеру. Задраив люк изнутри, вы приступаете к открытию внешнего. ^Вода быстро заполняет отсек и вы замечаете некоторую растерянность Леарр. Снаружи вы видите Наутилус, находящийся прямо под люком. Вы спрыгиваете вниз. Леарр следует за вами. Группа людей, облаченных в скафандры помогает вам забраться внутрь Наутилуса. ]]; + s.dsc = [[Вы добираетесь до аварийного шлюза Игниса. Вы с трудом отдраиваете его и заходите в шлюзовую камеру. Задраив люк изнутри, вы приступаете к открытию внешнего. ^Вода быстро заполняет отсек и вы замечаете некоторую растерянность Леарр. Снаружи вы видите Наутилус, находящийся прямо под люком. Вы спрыгиваете вниз. Леарр следует за вами. Группа людей, облаченных в скафандры помогает вам забраться внутрь Наутилуса. ]]; else - return [[Вы добираетесь до аварийного шлюза Игниса. Вы с трудом отдраиваете его и заходите в шлюзовую камеру. Задраив люк изнутри, вы приступаете к открытию внешнего. ^Вода быстро заполняет отсек. Снаружи вы видите Наутилус, находящийся прямо под люком. Вы спрыгиваете вниз. Группа людей, облаченных в скафандры помогает вам забраться внутрь Наутилуса. ]]; + s.dsc = [[Вы добираетесь до аварийного шлюза Игниса. Вы с трудом отдраиваете его и заходите в шлюзовую камеру. Задраив люк изнутри, вы приступаете к открытию внешнего. ^Вода быстро заполняет отсек. Снаружи вы видите Наутилус, находящийся прямо под люком. Вы спрыгиваете вниз. Группа людей, облаченных в скафандры помогает вам забраться внутрь Наутилуса. ]]; end; end; end; @@ -639,9 +661,12 @@ atl_iof_outside = room { atl_iof_part2_dlg = dlg { nam = "Атлантида, Игнис"; + hideinv = true; + nosave = true; + noautosave = true; entered = [[Вы слышите голос, доносящийся из динамика: "Все в порядке. Наутилус доставит вас на станцию". ]]; phr = { - {"Хорошо[Войти в шлюз Наутилуса].", [[Вы забираетесь внутрь Наутилуса - эта субмарина заметно меньше вашего Левиафана, но также вмещает довольно большой экипаж. Вы снимаете скафандры и проходите в кают-компанию. По радио вы слышите голос Моро: "Как только вы придете в себя после произошедшего, я жду вас в моем кабинете". ^Через считанные минуты вы оказываетесь в доке. Вы с трудом добираетесь до своей каюты, где без сил засыпаете. ]], code [[ walk('atlantis_luna_drake_room'); ]]}; + {"Хорошо. [Войти в шлюз Наутилуса]", [[Вы забираетесь внутрь Наутилуса -- эта субмарина заметно меньше вашего Левиафана, но так же вмещает довольно большой экипаж. Вы снимаете скафандры и проходите в кают-компанию. По радио вы слышите голос Моро: "Как только вы придете в себя после произошедшего, я жду вас в моем кабинете". ^Через считанные минуты вы оказываетесь в доке. Вы с трудом добираетесь до своей каюты, где без сил засыпаете. ]], code [[ walk('atl_iof_end'); ]]}; {"Я могу чем-то помочь?", function(s) if (atl_iof_time_state.carry_learr or atl_iof_time_state.learr_safe or not char_learr_iof.faint) then psub('help'); @@ -652,8 +677,8 @@ atl_iof_part2_dlg = dlg { end; end}; {tag="help"}; - {"Хорошо, я готов", [[Райт продолжает: "Спускайтесь вниз, на крышу Доминуса, и идите к лифту. Где-то с южной стороны должна быть панель управления. С ней вы, думаю, разберетесь". Вы аккуратно спрыгиваете с Наутилуса вниз и идете к лифту. ]], code [[ walk('atl_iof_outside_lift'); ]]}; - {"Я передумал", [[Райт отвечает: "Хорошо, возвращайтесь на станцию. Мои люди все сделают". ]], code [[ walk('atl_iof_end'); ]]}; + {"Хорошо, я готов.", [[Райт продолжает: "Спускайтесь вниз, на крышу Доминуса, и идите к лифту. Где-то с южной стороны должна быть панель управления. С ней вы, думаю, разберетесь". Вы аккуратно спрыгиваете с Наутилуса вниз и идете к лифту. ]], code [[ walk('atl_iof_outside_lift'); ]]}; + {"Я передумал.", [[Райт отвечает: "Хорошо, возвращайтесь на станцию. Мои люди все сделают". ]], code [[ walk('atl_iof_end'); ]]}; }; }; @@ -661,10 +686,18 @@ atl_iof_outside_lift = room { nam = "Атлантида"; dsc = [[Над вами нависает громада Игниса, покоящаяся на множестве опор. Вы находитесь снаружи шахты лифта, одновременно служащей центральной опорой секции. Сверху вы слышите скрежет металла, подвергаемого сильному термальному воздействию. ]]; obj = { - "atl_iof_air_valves" + "atl_iof_air_valves_outside"; }; }; +atl_iof_air_valves_outside = obj { + nam = "atl_iof_air_valves_outside"; + dsc = [[Перед вами расположено переплетение труб с несколькими {клапанами}. ]]; + act = function(s) + walk("atl_iof_air_valves"); + end; +}; + atl_iof_air_valves = room { var { valves = { 0,0,0,0,0,0 }; @@ -849,12 +882,10 @@ atl_iof_air_ccw = obj { atl_iof_air_valves.valves[atl_iof_air_valves.selected] = t; atl_iof_air_valves.selected = 0; - + p(r); if (atl_iof_air_valves:is_solved()) then walk("atl_iof_electr_dlg"); end; - - return r; end; }; @@ -930,11 +961,10 @@ atl_iof_air_cw = obj { atl_iof_air_valves.selected = 0; + p(r); if (atl_iof_air_valves:is_solved()) then walk("atl_iof_electr_dlg"); end; - - return r; end; }; @@ -960,11 +990,13 @@ atl_iof_air_cancel = obj { atl_iof_electr_dlg = dlg { nam = "Атлантида, Игнис"; - entered = [[Вы останавливаете подачу кислорода и собиратесь сообщить об этом по радио, когда из динамика раздается голос Майкла Райта: "Как у вас успехи? Нужно отключить еще подачу электричества". ]]; + entered = function(s) + return [[Вы останавливаете подачу кислорода и собиратесь сообщить об этом по радио, когда из динамика раздается голос Майкла Райта: "Как у вас успехи? Нужно отключить еще подачу электричества". ]]; + end; phr = { {"Подача воздуха отключена. Как я смогу отключить электричество?", [[Райт продолжает: "Отлично. Там рядом должна быть панель, она подписана. Там замок хитрый, но, думаю, вы разберетесь. Затем просто дергаете рубильник и дело сделано". ]], code [[ psub("next"); ]]}; {tag="next"}; - {"Вас понял. Конец связи", [[Вы быстро находите необходимую панель и приступаете к работе. ]], code [[ walk("atl_iof_electr_panel_closed"); ]]}; + {"Вас понял. Конец связи.", [[Вы быстро находите необходимую панель и приступаете к работе. ]], code [[ walk("atl_iof_electr_panel_closed"); ]]}; }; }; @@ -1004,8 +1036,8 @@ atl_iof_electr_panel_closed = room { }; is_solved = function(s) local unsolved = false; - for i = 1, #locks do - unsolved = unsolved or s.locks[i]; + for i = 1, #atl_iof_electr_panel_closed.locks do + unsolved = unsolved or atl_iof_electr_panel_closed.locks[i]; end; return not unsolved; @@ -1031,13 +1063,11 @@ atl_iof_electr_select = function(index) atl_iof_electr_panel_closed.locks[index + 4] = not atl_iof_electr_panel_closed.locks[index + 4]; end; - if (atl_iof_electr_panel_closed.is_solved()) then + if (atl_iof_electr_panel_closed:is_solved()) then walk("atl_iof_electr_panel_open"); - - return ""; + else + return "Вы сдвигаете защелку " .. tostring(index); end; - - return "Вы сдвигаете защелку " .. tostring(index); end; }; end; @@ -1055,15 +1085,19 @@ atl_iof_electr_panel_open = dlg { nam = "Атлантида, Игнис"; dsc = [[Вы снимаете щиток и дергаете рубильник, обесточивая Игнис. Вы связываетесь по радио с Наутилусом. ]]; phr = { - {"Подача электричества в Игнис отключена, возвращаюсь на станцию", [[В динамике вы слышите голос Райта: "Отлично, возвращайтесь". ]], code [[ walk("atl_iof_end"); ]]}; + {"Подача электричества в Игнис отключена, возвращаюсь на станцию.", [[В динамике вы слышите голос Райта: "Отлично, ждем вас". ]], code [[ walk("atl_iof_end"); ]]}; }; }; atl_iof_end = room { nam = "Атлантида"; - dsc = [[Вы возвращаетесь на станцию и сразу же отправляетесь в свою комнату, чтобы отдохнуть. Вы просыпаетесь утром. ^Едва вы поднимаетесь с койки, к вам в комнату входят двое охранников. Они просят вас проследовать за ними к начальнику службы безопасности - Винсенту Даркстару. У вас нет никакого выхода, кроме как пойти с ними. ]]; + hideinv = true; + nosave = true; + noautosave = true; + dsc = [[Вы возвращаетесь на станцию и сразу же отправляетесь в свою комнату, чтобы отдохнуть. ^Едва вы просыпаетесь, к вам в комнату входят двое охранников. Они просят вас проследовать за ними к Винсенту Даркстару. У вас нет никакого выхода, кроме как пойти с ними. ]]; entered = function(s) atl_lfc_state = 1; + rel_learr = rel_learr + 1; if (ArrayUtils.indexOf(pl.party, 'wright') ~= 0) then put(char_jack_wright_atlantis, atl_luna_jack_room); end; @@ -1076,10 +1110,11 @@ atl_iof_end = room { else atl_iof_learr_dead = true; put(char_aikerjarr, atl_oculus_lab_b); + walk("preview_unavailable_learr"); end; atl_iof_completed = true; end; obj = { vway("Продолжить", "{Продолжить}", "atl_lfc_darkstar_dlg"); }; -}; \ No newline at end of file +}; diff --git a/atlantis_intro.lua b/atlantis_intro.lua --- a/atlantis_intro.lua +++ b/atlantis_intro.lua @@ -1,14 +1,18 @@ atlantis_intro_dock = room { nam = "Атлантида"; entered = function(s) + me().has_light = false; remove(item_lamp, pl); submarine_leviathan.refit = true; + put("item_colt", "leviathan_captains_cabin"); + put("item_harpoon", "leviathan_airlock"); + put("item_book_on_navjiarr", "leviathan_captains_cabin"); if (ArrayUtils.indexOf(pl.party, 'wright') ~= 0) then atl_jack_in_party = true; char_wright:accompany(false); end; end; - dsc = [[В большом прямоугольном зале, ярко освещенном электрическими лампами слышен шум воды, плещущейся под вами. Шлюзовая дверь в стене зала открывается и внутрь входит группа людей, одетых в блестящие черные костюмы. На поясе каждого висит револьвер. ^Один из них держит в руке чемоданчик с двумя антеннами и телефонной трубкой, соединенной с ним. Он молча протягивает вам трубку. Поднеся ее к уху, вы слышите голос: "Добро пожаловать на Атлантиду". ]]; + dsc = [[Выйдя из люка, вы оказываетесь в большом прямоугольном доке, ярко освещенном электрическими лампами. Высоко над вами нависает металлический потолок, в нескольких местах пересеченный массивными опорными балками. Под потолком укреплены рельсы, предназначенные для подъемных кранов. По периметру здания расположены металлические платформы, от одной из которых к Левиафану тянется легкий плавучий мостик. В стене напротив вас вы видите шлюзовую дверь. Она открывается и в док входит группа людей, одетых в блестящие черные костюмы. На поясе каждого висит револьвер. ^Один из них держит в руке чемоданчик с двумя антеннами и телефонной трубкой, соединенной с ним. Он молча протягивает вам трубку. Вы подносите ее к уху, и слышите спокойный и уверенный голос: "Добро пожаловать на Атлантиду". ]]; obj = { vway("continue", "{Продолжить}", "atlantis_intro_radio_dlg"); }; @@ -16,25 +20,21 @@ atlantis_intro_dock = room { atlantis_intro_radio_dlg = dlg { nam = "Радио"; - entered = [[В левой руке вы держите телефонную трубку, соединенную проводами только с чемоданчиком в руках одного из вооруженных людей. Из трубки доносится голос: "Кто вы такие? Прошу отвечать максимально честно и полно. Не будем терять времени". ]]; + entered = [[В левой руке вы держите телефонную трубку, соединенную проводами только с чемоданчиком в руке одного из охранников. Из трубки доносится голос: "Кто вы такие? Прошу отвечать максимально честно и полно. Не будем терять времени". ]]; phr = { {"Как эта штука работает?", [[Невидимый собеседник кратко объясняет вам: "В чемоданчике спрятано небольшое радио и батарея. Когда вы говорите, ваш голос преобразуется в радиосигнал и принимается моим аппаратом. Он преобразует радиосигнал обратно в голос и выводит его на динамик". ]]}; {"Кто вы?", [[Из трубки доносится спокойный, уверенный голос собеседника: "Я Винсент Даркстар, начальник службы безопасности станции". ]]}; - {"Вы знаете Уильяма Дрейка?", [["Ответьте на мои вопросы, пожалуйста", отвечает собеседник. Он говорит спокойно и уверенно. ]]}; - {"Мое имя - Дэвид Дрейк. ", [[Собеседник удивленно переспрашивает: "Дрейк?", - вы слышите легкий щелчок. Через некоторое время вы слышите еще один щечок, и тот же голос задает вам следующий вопрос: "Как вы нашли нас?" ]], code [[ psub('station') ]]}; + {"Вы знаете Уильяма Дрейка?", [["Ответьте на мои вопросы, пожалуйста", -- отвечает собеседник. Он говорит спокойно и уверенно. ]]}; + {"Мое имя - Дэвид Дрейк. ", [[Собеседник удивленно переспрашивает: "Дрейк?", -- вы слышите легкий щелчок. Через некоторое время вы слышите еще один щелчок, и тот же голос задает вам следующий вопрос: "Как вы нашли нас?" ]], code [[ psub('station') ]]}; {tag="station"}; {"Я нашел этот корабль, _\"Левиафан\"_, в одном из старых доков Вестхейвен Трансоушен. Также, среди бумаг компании мне удалось найти карту, указывающую это место. ", [[Вы слышите в трубке другой голос, гораздо тише, кажется говорящий находится на некотором удалении от трубки: _"Я думал, мы уничтожили все документы. Нам..."_ - вы слышите легкий щелчок и соединение прерывается. Через несколько минут вы снова слышите щелчок и в трубке раздается голос первого собеседника: _"Господин Дрейк, мы не можем вас отпустить и предлагаем вам остаться на станции в качестве гостя. Позже, мы решим что делать с вами дальше"_. ]], code [[ psub('trust')]]}; {tag="trust"}; {"Я ищу своего отца, Уильяма Дрейка. Вы знаете его?", [[Голос в трубке отвечает: "Уильяма сейчас нет на станции". ]], code [[psub('drake')]]}; {"Что это значит? Я не могу здесь задерживаться!", [[Голос в трубке отвечает: "Мы решим этот вопрос при личной встрече". ]]}; {tag='drake'}; - {"Где он?", [[ - Собеседник отвечает: _"Он отправился в экспедицию"_. - ]], code [[ psub("drake2");]]}; + {"Где он?", [[Собеседник отвечает: _"Он отправился в экспедицию"_. ]], code [[ psub("drake2");]]}; {tag="drake2"}; - {"Мне нужно найти его. ", [[ - Голос в трубке отвечает: "Думаю, мы можем помочь друг другу. Поговорите с руководителями станции: Фредериком Моро, Екатериной Светловой и Майклом Райтом". - ]], code [[ walkin('atlantis_intro_cutscene1'); ]]}; + {"Мне нужно найти его. ", code [[ walkin('atlantis_intro_cutscene1'); ]]}; }; }; @@ -42,9 +42,9 @@ atlantis_intro_cutscene1 = room { nam = "Атлантида"; dsc = function(s) if (ArrayUtils.indexOf(pl.party, 'wright') ~= 0) then - return [[Ваш собеседник отключает связь. Через некоторое время, охранник забирает у вас трубку и просит покинуть док.^ Как только вы выходите, охранники задраивают люк.^Вы оказываетесь в широком, ярко освещенном коридоре. К вам подходит человек лет пятидесяти, одетый в пыльный рабочий костюм. Короткие седые волосы и густая серая борода украшают его морщинистое лицо. На носу - большие очки, скрывающие серые глаза. ^Джек, стоящий рядом с вами, изумленно восклицает: "Папа?"^На лице человека вы видите не меньшее удивление: "Джек? Что ты здесь делаешь?"^Джек кратко пересказывает все произошедшее с ним за последние годы до вашего появления в его доме. ]]; + return [[Голос в трубке отвечает: "Думаю, мы можем помочь друг другу. Поговорите с руководителями станции: Фредериком Моро, Екатериной Светловой и Майклом Райтом". ^Ваш собеседник отключает связь. Через некоторое время, охранник забирает у вас трубку и просит покинуть док.^ Как только вы выходите, охранники задраивают люк, ведущий к Левиафану. ^Вы оказываетесь в широком, ярко освещенном коридоре. К вам подходит человек лет пятидесяти, одетый в пыльный рабочий костюм. Короткие седые волосы и густая серая борода украшают его морщинистое лицо. На носу у мужчины большие очки, скрывающие серые глаза. ^Джек, стоящий рядом с вами, изумленно восклицает: "Папа?"^На лице человека вы видите не меньшее удивление: "Джек? Что ты здесь делаешь?"^Ваш спутник кратко пересказывает события, начиная с вашего появления в его доме. ]]; else - return [[Ваш собеседник отключает связь. Через некоторое время, охранник забирает у вас трубку и просит покинуть док. как только вы выходите, охранники задраивают люк. Вы оказываетесь в широком, ярко освещенном коридоре. К вам подходит человек лет пятидесяти, одетый в пыльный рабочий костюм. Короткие седые волосы и густая серая борода украшают его морщинистое лицо. На носу - большие очки, скрывающие серые глаза. ]]; + return [[Голос в трубке отвечает: "Думаю, мы можем помочь друг другу. Поговорите с руководителями станции: Фредериком Моро, Екатериной Светловой и Майклом Райтом". ^Ваш собеседник отключает связь. Через некоторое время, охранник забирает у вас трубку и просит покинуть док. Как только вы выходите, охранники задраивают люк, ведущий к Левиафану. ^Вы оказываетесь в широком, ярко освещенном коридоре. К вам подходит человек лет пятидесяти, одетый в пыльный рабочий костюм. Короткие седые волосы и густая серая борода украшают его морщинистое лицо. На носу у мужчины большие очки, скрывающие серые глаза. ]]; end; end; obj = { @@ -56,26 +56,14 @@ atlantis_intro_wright_dlg = dlg { nam = "Майкл Райт"; entered = function(s) if (ArrayUtils.indexOf(pl.party, 'wright') ~= 0) then - return [[Поговорив с сыном, старший Райт обращается к вам: "Я несказанно рад, что вы прибыли сюда. Вы, наверное не знаете меня, господин Дрейк. Мое имя - Майкл Райт, я начальник инженеров Атлантиды. Мы построили эту станцию вместе с вашим отцом. Если хотите, я могу показать вам ее". ]]; + return [[Поговорив с сыном, старший Райт обращается к вам: "Я несказанно рад, что вы прибыли сюда. Вы, наверное не знаете меня, господин Дрейк. Мое имя -- Майкл Райт, я начальник инженеров Атлантиды. Мы построили эту станцию вместе с вашим отцом. Если хотите, я могу показать вам ее". ]]; else - return [[Человек протягивает вам руку и приветствует вас: "Добро пожаловать на Атлантиду, господин Дрейк. Мое имя - Майкл Райт, я начальник инженеров станции. Мы построили эту станцию вместе с вашим отцом. Если хотите, я могу показать вам ее". ]]; + return [[Человек протягивает вам руку и приветствует вас: "Добро пожаловать на Атлантиду, господин Дрейк. Мое имя -- Майкл Райт, я начальник инженеров станции. Мы построили эту станцию вместе с вашим отцом. Если хотите, я могу показать вам ее". ]]; end; end; phr = { - {"Да, конечно.", function(s) - if (ArrayUtils.indexOf(pl.party, 'wright') ~= 0) then - return [[Получив ваше согласие, Майкл начинает рассказ: _"Сейчас мы находимся в коридоре B секции Аква - здесь у нас расположены доки и основные склады. Сейчас мы пройдем через центральный коридор в секцию Доминус -- центр Атлантиды"_. ^ Джек спрашивает: _"Кому пришло в голову все это?"_ ^Майкл, немного подумав, отвечает: _"Это долгая история. Надежду придумали я, Уильям и Адриан Блэк - друг вашего отца. Потом мы встретили навьяров. Вы, скорее всего, не слышали о них, но вы увидите их здесь, на Атлантиде. Тогда мы с Сильвией и придумали как построить станцию"_.]]; - else - return [[Получив ваше согласие, Майкл начинает рассказ: _"Сейчас мы находимся в коридоре B секции Аква - здесь у нас расположены доки и основные склады. Сейчас мы пройдем через центральный коридор в секцию Доминус -- центр Атлантиды"_.]]; - end; - end, code [[ walk('atlantis_intro_walk_to_dominus')]];}; - {"Спасибо, это не нужно.", function(s) - if (ArrayUtils.indexOf(pl.party, 'wright') ~= 0) then - return [[Майкл кивает: _"Хорошо, я буду в мастерской. Возможно у меня будет для вас несколько поручений, так что заходите"_. Затем он снова обращается к сыну: _"Пошли. Нам есть что обсудить, да и помощь мне не помешает"_. Джек молча кивает. Они уходят и вы остаетесь в одиночестве. ]]; - else - return [[Майкл пожимает плечами: _"Хорошо, я буду в мастерской. Возможно у меня будет для вас несколько поручений, так что заходите"_. Он уходит и вы остаетесь один. ]]; - end; - end, code [[ walk('atl_aqua_corridor_b'); ]]}; + {"Да, конечно.", code [[ walk('atlantis_intro_walk_to_dominus')]];}; + {"Спасибо, это не нужно.", code [[ walk('atlantis_intro_skip'); ]]}; }; }; @@ -83,9 +71,9 @@ atlantis_intro_walk_to_dominus = room { nam = "Атлантида"; dsc = function(s) if (ArrayUtils.indexOf(pl.party, 'wright') ~= 0) then - return [[Вы следуете за Майклом сперва в центральный коридор секции Аква, затем в короткий межсекционный коридор. Майкл кратко объясняет вам смысл постройки таких коридоров: _"Сейчас такие коридоры просто соединяют секции станции, однако, они могут использоваться как шлюзы при необходимости"_. ^ Джек с интересом осматривает систему насосов, приводимых в действие рычагом и спрашивает: "Откуда вы берете энергию для всего этого?" ^Майкл отвечает: "Электричество производится в одной из секций станции. Как только мы дойдем туда, я поясню, как это происходит". ]]; + return [[Получив ваше согласие, Майкл начинает рассказ: _"Сейчас мы находимся в коридоре B секции Аква -- здесь у нас расположены доки и основные склады. Сейчас мы пройдем через центральный коридор в секцию Доминус -- центр Атлантиды"_. ^ Джек спрашивает: _"Кому пришло в голову все это?"_ ^Майкл, немного подумав, отвечает: _"Это долгая история. Надежду придумали я, Уильям и Адриан Блэк, еще один друг вашего отца. Потом мы встретили навьяров. Вы, скорее всего, не слышали о них, но вы увидите их здесь, на Атлантиде. Тогда мы с Сильвией и придумали как построить станцию"_. ^Вы следуете за Майклом сперва в центральный коридор секции Аква, затем в короткий межсекционный коридор. Майкл кратко объясняет вам смысл постройки таких коридоров: _"Сейчас такие коридоры просто соединяют секции станции, однако, они могут использоваться как шлюзы при необходимости"_. ^ Джек с интересом осматривает систему насосов, приводимых в действие рычагом и спрашивает: "Откуда вы берете энергию для всего этого?" ^Майкл отвечает: "Электричество производится в одной из секций станции. Как только мы дойдем туда, я поясню, как это происходит". ]]; else - return [[Вы следуете за Майклом сперва в центральный коридор секции Аква, затем в короткий межсекционный коридор. Майкл кратко объясняет вам смысл постройки таких коридоров: _"Сейчас такие коридоры просто соединяют секции станции, однако, они могут использоваться как шлюзы при необходимости"_. ]]; + return [[Получив ваше согласие, Майкл начинает рассказ: _"Сейчас мы находимся в коридоре B секции Аква - здесь у нас расположены доки и основные склады. Сейчас мы пройдем через центральный коридор в секцию Доминус -- центр Атлантиды"_. ^Вы следуете за Майклом сперва в центральный коридор секции Аква, затем в короткий межсекционный коридор. Майкл кратко объясняет вам смысл постройки таких коридоров: _"Сейчас такие коридоры просто соединяют секции станции, однако, они могут использоваться как шлюзы при необходимости"_. ]]; end; end; obj = { @@ -93,9 +81,17 @@ atlantis_intro_walk_to_dominus = room { }; }; +atlantis_intro_skip = cutscene("Атлантида", "Атлантида", function(s) + if (ArrayUtils.indexOf(pl.party, 'wright') ~= 0) then + return [[Майкл кивает: _"Хорошо, я буду в мастерской. Возможно у меня будет для вас несколько поручений, так что заходите"_. Затем он снова обращается к сыну: _"Пошли. Нам есть что обсудить, да и помощь мне не помешает"_. Джек молча кивает. Они уходят и вы остаетесь в одиночестве. ]]; + else + return [[Майкл пожимает плечами: _"Хорошо, я буду в мастерской. Возможно у меня будет для вас несколько поручений, так что заходите"_. Он уходит и вы остаетесь один. ]]; + end; +end, "atl_aqua_corridor_b") + atlantis_intro_dominus = room { nam = "Атлантида"; - dsc = [[Из межсекционного коридора вы попадаете в огромный зал. По его периметру и на многочисленных колоннах установлены электрические лампы, дающие яркий ровный свет. Стеклянный купол над головой отделяет вас от бескрайнего океана. Над куполом вы видите огромный металлический диск, покоящийся на массивных металлических колоннах. Майкл Райт поясняет: "Не самый лучший вид, но нам надо было куда-то пристроить Игнис -- секцию, что вы видите наверху. Там у нас залы отдыха и архивы кинопленки. Там же мы собираемся для обсуждения важных вопросов". ^Майкл продолжает свой рассказ: _"Сейчас мы находимся в центральныом зале секции Доминус. Здесь находятся офисы начальника безопасности -- Винсента Даркстара и управляющего станцией -- Уильяма Дрейка. Сейчас Уильяма заменяет Фредерик Моро."_. ^Слушая Майкла, вы следуете за ним к противоположному концу зала. ]]; + dsc = [[Из межсекционного коридора вы попадаете в огромный зал. По его периметру и на многочисленных колоннах установлены электрические лампы, дающие яркий ровный свет. Стеклянный купол над головой отделяет вас от бескрайнего океана. Над куполом вы видите огромный металлический диск, покоящийся на массивных металлических колоннах. Майкл Райт поясняет: "Не самый лучший вид, но нам надо было куда-то пристроить Игнис -- секцию, что вы видите наверху. Там у нас залы отдыха и архивы кинопленки. Там же мы собираемся для обсуждения важных вопросов". ^Майкл продолжает свой рассказ: _"Сейчас мы находимся в центральныом зале секции Доминус. Здесь находятся офисы начальника безопасности -- Винсента Даркстара и управляющего станцией -- Уильяма Дрейка. Сейчас Уильяма заменяет Фредерик Моро"_. ^Слушая Майкла, вы следуете за ним к противоположному концу зала. ]]; obj = { vway("continue", "{Продолжить}", "atlantis_intro_walk_to_solis"); }; @@ -103,7 +99,7 @@ atlantis_intro_dominus = room { atlantis_intro_walk_to_solis = room { nam = "Атлантида"; - dsc = [[Вы проходите через межсекционный отсек и оказываетесь в широком коридоре, заставленном ящиками. В одной из стен коридора в рыд расположены несколько дверей. Майкл поясняет вам: _"Это секция Терра, здесь у нас мастерские, где мы собираем все необходимые машины и детали для станции -- некоторые секции были полностью построены здесь без какой-либо помощи с поверхности. Большую часть времени я провожу здесь, в одной из мастерских"_. Вы следуете в дальний конец коридора, где расположен переход в следующую секцию станции. Майкл останавливается и рассказывает вам: "За этой дверью расположена секция Солис -- наша электростанция. Работает она вполне привычно -- пар под высоким давлением вращает турбины генераторов. Винсент Даркстар просил закрыть для вас доступ в эту секцию, поэтому внутрь я вас проводить не буду". ]]; + dsc = [[Вы проходите через межсекционный отсек и оказываетесь в широком коридоре, заставленном ящиками. В одной из стен коридора в ряд расположены несколько дверей. Майкл поясняет вам: _"Это секция Терра, здесь у нас мастерские, где мы собираем все необходимые машины и детали для станции -- некоторые секции были полностью построены здесь без какой-либо помощи с поверхности. Большую часть времени я провожу здесь, в одной из мастерских"_. ^Вы следуете в дальний конец коридора, где расположен переход в следующую секцию станции. Майкл останавливается и рассказывает вам: "За этой дверью расположена секция Солис -- наша электростанция. Работает она вполне привычно -- пар под высоким давлением вращает турбины генераторов. Винсент Даркстар просил закрыть для вас доступ в эту секцию, поэтому внутрь я вас проводить не буду". ]]; obj = { vway("continue", "{Продолжить}", "atlantis_intro_walk_to_aeris"); }; @@ -112,7 +108,7 @@ atlantis_intro_walk_to_solis = room { atlantis_intro_walk_to_aeris = room { nam = "Атлантида"; dsc = function(s) - return [[Вы возвращаетесь назад к секции Доминус и заходите в другую дверь. Вы оказываетесь в широком коридоре, похожем на виденный вами в секции Терра, но не загроможденный ящиками. Майкл снова начинает рассказывать: "Это секция Окулус. Здесь работают наши ученые. Основная их задача - изучения навьяров, их культуры, истории, биологии. Помимо этого, мы решаем вопросы повышения эффективности станции - наши технологии слишком несовершенны и мы многое не можем позволить себе. Если вы захотите узнать больше о навьярах - то можете поговорить с Екатериной Светловой. Она работает в первой лаборатории Окулуса. Но сейчас я хочу показать вам наше главное достижение - секцию Аэрис". ]]; + return [[Вы возвращаетесь назад к секции Доминус и заходите в другую дверь. Вы оказываетесь в широком коридоре, похожем на виденный вами в секции Терра, но не загроможденный ящиками. Майкл снова начинает рассказывать: "Это секция Окулус. Здесь работают наши ученые. Основная их задача - изучения навьяров, их культуры, истории, биологии. Помимо этого, мы решаем вопросы повышения эффективности станции - наши технологии слишком несовершенны и мы многое не можем позволить себе. Если вы захотите узнать больше о навьярах - то можете поговорить с Екатериной Светловой. Она работает в первой лаборатории Окулуса. Но сейчас я хочу показать вам наше главное достижение -- секцию Аэрис". ]]; end; obj = { vway("continue", "{Продолжить}", "atlantis_intro_aeris"); @@ -121,8 +117,7 @@ atlantis_intro_walk_to_aeris = room { atlantis_intro_aeris = room { nam = "Атлантида"; - dsc = [[Вы проходите через очередной межсекционный коридор и оказываетесь в просторном зале. Под металлическим потолком и в свете мощных электрических ламп, перед вами предстает цветущий сад с деревьями и кустарниками и даже цветами. Вдоль стен зала установлены огромные аквариумы, в которых плавают крупные рыбы и растут какие-то водоросли. Майкл рассказывает: "Эта секция дает нам практически все - воздух которым мы дышим, еду, топливо. Это идея Сильвии Уинтерлайт, и вам стоит обязательно расспросить ее об этом". - ]]; + dsc = [[Вы проходите через очередной межсекционный коридор и оказываетесь в просторном зале. Под металлическим потолком и в свете мощных электрических ламп, перед вами предстает цветущий сад с деревьями и кустарниками и даже цветами. Вдоль стен зала установлены огромные аквариумы, в которых плавают крупные рыбы и растут какие-то водоросли. Майкл рассказывает: "Эта секция дает нам практически все - воздух которым мы дышим, еду, топливо. Это идея Сильвии Уинтерлайт, и вам стоит обязательно расспросить ее об этом". ]]; obj = { vway("continue", "{Продолжить}", "atlantis_intro_final"); }; @@ -130,7 +125,7 @@ atlantis_intro_aeris = room { atlantis_intro_final = room { nam = "Атлантида"; - dsc = [[Когда вы возвращаетесь, в межсекционном коридоре звонит телефон. Майкл снимает трубку и бросает: _"Райт слушает"_. Через какое-то время он отвечает: _"Хорошо, понял"_. Положив трубку, он обращается к вам: _"Мне срочно надо идти, извините"_.^Вместе с Райтом вы входите обратно в главный коридор секции Окулус. ]]; + dsc = [[Когда вы возвращаетесь, в межсекционном коридоре звонит телефон. Майкл поднимает трубку со словами: _"Райт слушает"_. ^Через какое-то время он отвечает: _"Хорошо, понял"_. ^Положив трубку, он обращается к вам: _"Мне срочно надо идти, извините"_. ^Вместе с Райтом вы входите обратно в главный коридор секции Окулус, где он оставляет вас. ]]; obj = { vway("continue", "{Продолжить}", "atl_oculus_main_corridor"); }; diff --git a/atlantis_iraa.lua b/atlantis_iraa.lua new file mode 100644 --- /dev/null +++ b/atlantis_iraa.lua @@ -0,0 +1,1560 @@ +--[[ +Файл содержит локации навьярских поселений для главы Атлантида. +]] + +--[[ +Ираафаанотр +]] + +--[[ +Ираафаанотр.Город +]] + +iraa_entry = lcutscene("iraa_entry", "Левиафан, рубка", [[Ираафаанотр расположен на обширном плато к северу от Атлантиды. Вы без проблем добираетесь туда. Поселение представляет собой несколько домов, раскиданных по обе стороны от широкой мощеной улицы, протянувшейся с запада на восток. В центре ее возвышается обелиск, вокруг которого расположена центральная площадь. Там же расположены два самых больших здания города, разительно отличающиеся от небольших, грубо сложенных хижин, расположенных вокруг. ]], "Вы прибыли в Ираафаанотр ", leviathan_wheelhouse); + +iraa_near_city_west = room { + nam = "iraa_near_city_west"; + underwater = true; + disp = [[Ираафаанотр, у города]]; + dsc = [[Ровное илистое плато простирается вокруг насколько хватает взгляда. Вы находитесь на западной окраине Ираафаанотра -- небольшого навьярского поселения. Невысокие каменные здания, раскиданные в кажущемся беспорядке служат жилищем для многих из них. В центре городка возвышается каменный обелиск, с нанесенными на него изображениями. ]]; + view = [[Ровное илистое плато простирается вокруг насколько хватает взгляда. Вы находитесь на западной окраине Ираафаанотра -- небольшого навьярского поселения. Невысокие каменные здания, раскиданные в кажущемся беспорядке служат жилищем для многих из них. В центре городка возвышается каменный обелиск, с нанесенными на него изображениями. ]]; + obj = { + "iraa_city_west_guard" + }; + way = { + kh_vroom("В левиафан", "leviathan_airlock"); + kh_vroom("На восток, к центру Ираафаанотра", "iraa_city_west"); + }; +}; + +iraa_city_west = room { + nam = "iraa_city_west"; + underwater = true; + disp = "Ираафаанотр, улица"; + dsc = [[Широкая мощеная улица, пересекающая город с востока на запад. К северу вы видите обширные поля, обрабатываемые десятками рук и дающие пищу жителям селения. К востоку вы видите каменный обелиск, возвышающийся над центральной площадью Ираафаанотра. ]]; + way = { + kh_vroom("На запад", "iraa_near_city_west"); + kh_vroom("На восток, к центру Ираафаанотра", "iraa_city_center"); + }; +}; + +iraa_city_center = room { + nam = "iraa_city_center"; + underwater = true; + disp = "Ираафаанотр, центральная площадь"; + dsc = [[Центральная площадь Ираафаанотра практически пуста. Лишь несколько зевак с интересом разглядывает вас, осторожно выглядывая из дверей библиотеки -- крупного здания, расположенного к северу от вас. Напротив библиотеки расположен дом вождя, не уступающий размерами библиотеке. ]]; + obj = { + "iraa_obelisk"; + }; + way = { + kh_vroom("На запад", "iraa_city_west"); + kh_vroom("На восток", "iraa_city_east"); + kh_vroom("В библиотеку", "iraa_city_library"); + kh_vroom("В дом вождя", "iraa_city_chief_house"); + }; +}; + +iraa_obelisk = obj { + nam = "iraa_obelisk"; + dsc = [[В центре площади стоит большой каменный {обелиск}, с нанесенными на него символами. ]]; + act = function(s) + iraaphaanotrr_temple_found = true; + return [[На обелиске, традиционно для навьяров, начертано название города и вырезана карта, указывающая путь к храму. ]]; + end; +}; + +iraa_city_east = room { + var { + state = 0; + }; + nam = "iraa_city_east"; + underwater = true; + disp = "Ираафаанотр, улица"; + dsc = [[Широкая мощеная улица, пересекающая город с востока на запад. К северу вы видите обширные поля, обрабатываемые десятками рук и дающие пищу жителям селения. К западу вы видите каменный обелиск, возвышающийся над центральной площадью Ираафаанотра. ]]; + entered = function(s) + if (state == 0 and char_learr.follow) then + path("На юг, к саду"):enable(); + if language_known then + return [[Здесь Леарр неожиданно останавливается. Она смотрит на юг, а по ее головным плавникам бегут цветные полосы -- она говорит, что здесь, за домом вождя есть небольшой сад, а сразу за ним находится ее дом. Она просит вас пойти туда вместе с ней. ]]; + else + return [[Здесь Леарр неожиданно останавливается. Она смотрит на юг, а по ее головным плавникам бегут цветные полосы. Вы не понимаете, что она пытается вам сказать, но она хватает вас за руку и пытается вести за собой на юг. ]]; + end; + end; + end; + way = { + kh_vroom("На восток", "iraa_near_city_east"); + kh_vroom("На юг, к саду", "iraa_garden"):disable(); + kh_vroom("На запад, к центру Ираафаанотра", "iraa_city_center"); + }; +}; + +iraa_garden = room { + nam = "iraa_garden"; + underwater = true; + disp = "Ираафаанотр, сад"; + dsc = [[Небольшой сад, расположенный за домом вождя. ]]; + way = { + kh_vroom("На север, к главной улице", "iraa_near_city_east"); + kh_vroom("На юг, к дому Леарр", "iraa_learr_house_near"); + }; +}; + +iraa_learr_house_near = room { + nam = "iraa_learr_house_near"; + underwater = true; + disp = "Ираафаанотр, у дома Леарр"; +}; + +iraa_near_city_east = room { + nam = "iraa_near_city_east"; + underwater = true; + disp = [[Ираафаанотр, у города]]; + dsc = [[Ровное илистое плато простирается вокруг насколько хватает взгляда. Вы находитесь на восточной окраине Ираафаанотра -- небольшого навьярского поселения. Невысокие каменные здания, раскиданные в кажущемся беспорядке служат жилищем для многих из них. В центре городка возвышается каменный обелиск, с нанесенными на него изображениями. ]]; + obj = { + "iraa_city_east_guard"; + }; + way = { + kh_vroom("На запад, к центру Ираафаанотра", "iraa_city_east"); + }; +}; + +iraa_city_west_guard = npc { + nam = "iraa_city_west_guard"; + dsc = [[По обе стороны дороги стоят двое навьярских {стражникиов}. ]]; + phrases = function(s) + if (language_known) then + if (atl_rep_iraa >= 0) then + return { + "Стражники указывают вам на дом вождя. По головным плавникам стражников бегут цветные полосы -- они просят вас говорить с вождем. ", + "По головным плавникам стражников бегут цветные полосы -- они приветствуют вас. " + }; + else + return { + "Стражники указывают вам на дом вождя. По их головным плавникам бегут цветные полосы -- они просят вас говорить с вождем. " + }; + end; + else + return { + "Стражники указывают вам на дом вождя. По головным плавникам стражников бегут цветные полосы, но вы не понимаете, что они значат. " + }; + end; + end; +}; + +iraa_city_east_guard = npc { + nam = "iraa_city_east_guard"; + dsc = [[По обе стороны дороги стоят двое навьярских {стражникиов}. ]]; + phrases = function(s) + if (language_known) then + if (atl_rep_iraa >= 0) then + return { + "Стражники указывают вам на дом вождя. По головным плавникам стражников бегут цветные полосы -- они просят вас говорить с вождем. ", + "По головным плавникам стражников бегут цветные полосы -- они приветствуют вас. " + }; + else + return { + "Стражники указывают вам на дом вождя. По их головным плавникам бегут цветные полосы -- они просят вас говорить с вождем. " + }; + end; + else + return { + "Стражники указывают вам на дом вождя. По головным плавникам стражников бегут цветные полосы, но вы не понимаете, что они значат. " + }; + end; + end; +}; + +iraa_city_chief_house = room { + nam = "iraa_chief_house"; + disp = "Ираафаанотр, дом вождя"; + underwater = true; + dsc = [[Приемная дома вождя представляет собой огромый зал. Несколько массивных колонн, не слишком искусно сделанных, поддерживают тяжелую каменную крышу здания. В дальнем конце зала установлен каменный трон. Перед троном установлен громадный, каменный же стол, вокруг которого расставлено множество стульев. ]]; + way = { + kh_vroom("На площадь", "iraa_city_center"); + }; + obj = { + "iraa_chief" + }; +}; + +iraa_chief = npc { + nam = "iraa_chief"; + dsc = [[{Вождь Ираафаанотра} сидит на троне, внимательно наблюдая за вами своими серыми глазами. Руки его неподвижно лежат на подлокотниках. Серебристая чешуя, слегка синеватая, потускнела за долгие годы жизни. Одет он в плотный облегающий костюм из водорослей, не стесняющий движения, как принято у всех, даже самых высокопоставленных навьяров. ]]; + dlg = "iraa_chief_dlg"; +}; + +iraa_chief_dlg = dlg { + var { + ask_temple = false; + }; + nam = "iraa_chief_dlg"; + disp = "Вождь Ираафаанотра"; + entered = function(s) + if have(dyp_item_wand) then + pon("wand"); + end; + if have(dyp_item_star_map) and (have(dyp_item_star_map_copy) or dyp_map) then + pon("star_map"); + end; + if (language_known) then + psub("greet"); + if (s.ask_temple) then + s.ask_temple = false; + pon("temple"); + end; + return [[Вы подходите к каменному столу, чтобы предстать перед вождем Ираафаанотра -- немолодым уже навьяром. Длинные руки, покрытые тусклой серебристой чешуей, с едва заметным синеватым отливом, покоятся на подлокотниках трона. Не поднимаясь, он начинает говорить. По головным плавникам вождя бегут цветные полосы -- вождь прииглашает вас сесть напротив него и открыть цель вашего визита. В скафандре у вас с трудом получается это сделать, но вы не решаетесь оскорбить вождя и остаться стоять перед ним. ]]; + else + psub("no_speech"); + return [[Вы подходите к каменному столу, чтобы предстать перед вождем Ираафаанотра -- немолодым уже навьяром. Длинные руки, покрытые тусклой серебристой чешуей, с едва заметным синеватым отливом, покоятся на подлокотниках трона. Не поднимаясь, он начинает говорить. По головным плавникам вождя бегут цветные полосы -- вождь прииглашает вас сесть напротив него и открыть цель вашего визита. В скафандре у вас с трудом получается это сделать, но вы не решаетесь оскорбить вождя и остаться стоять перед ним. ]]; + end; + end; + phr = { + {tag="no_speech"}; + {"[Уйти]", code [[ back(); ]]}; + {tag="greet"}; + {"[Кодировщик] Приветствую. Мы ищем фрагмент карты пути к Лсэрианотру, который находится у вас. ", [[Вождь задумчиво смотрит на вас. Через некоторое время он отвечает: "У нас нет ничего подобного. Я не знаю, о чем вы говорите". ]], code [[psub("more_info");]]}; + {tag="star_map", false, "[Отдать карту небесных огней] Я принес вам утерянный артефакт. К сожалению, Аэдиенрр погиб, пытаясь воспользоваться им.", [[Вождь кивает: "Ты сделал правильное дело, хевьяр. Благодарю тебя от лица всего Ираафаанотра". ]], code [[ + atl_rep_iraa = atl_rep_iraa + 1; + iraa_map = true; + remove(dyp_item_star_map, me()); + ]]}; + {tag="wand", false, "[Отдать жезл] Я принес вам жезл, найденный с помощью карты небесных огней. К сожалению, Аэдиенрр погиб, пытаясь найти его.", [[Вождь кивает: "Это жезл наших предков. Ты помог нам вернуть утраченное и мы будем вечно благодарны тебе. Твое имя, Дэвид Дрейк из хевьяров, будет внесено в наши летописи". ]], code [[ + atl_rep_iraa = atl_rep_iraa + 1; + iraa_scepter = true; + remove(dyp_item_wand, me()); + ]]}; + {tag="temple", false, "[Кодировщик] Мы просим разрешения посетить храм Ираафаанотра. ", [[Вождь отрицательно качает головой: "Это исключено, хевьяр". ]], code [[ + atl_ctt_iraa_refusal = true; + ]]}; + {"[Кодировщик] Мы ищем Венаэданотр. Вы знаете где это?", [[Вождь кивает: "Далеко отсюда. Спросите у Ритларра". ]]}; + {"[Кодировщик] Мы ищем Нлейисланотр. Вы знаете где это?", [[Вождь кивает: "Далеко отсюда. Спросите у Ритларра". ]]}; + {"[Уйти]", code [[ back(); ]]}; + {tag="more_info"}; + {"[Кодировщик] Один из фрагментов карты должен быть у вас. [Передать табличку, найденную в храме]", [[Вождь отвечает: "Я не знаю ни о чем подобном. вам стоит спросить у Ритларра в библиотеке". ]]}; + {"[Уйти]", code [[ back(); ]]}; + }; +}; + +iraa_city_library = room { + nam = "iraa_city_library"; + disp = "Ираафаанотр, библиотека"; + underwater = true; + dsc = [[Огромный зал библиотеки Ираафаанотра практически пуст. ]]; + obj = { + "iraa_rytlarr", + "iraa_shelves" + }; + way = { + kh_vroom("На площадь", "iraa_city_center"); + }; +}; + +iraa_shelves = obj { + nam = "iraa_shelves"; + dsc = [[Вдоль стен стоят многочисленные {стеллажи} с древними и новыми записями. Большинство из них сделаны на металлических табличках и явно очень стары. Вперемешку с ними стоят и каменные -- более современные, и даже сделанные на водорослях -- те, что еще не успели переписать на что-то более долговечное. ]]; + act = [[Вам потребуются десятилетия, чтобы изучить все находящиеся здесь записи. ]]; +}; + +iraa_rytlarr = npc { + nam = "iraa_rytlarr"; + dsc = [[По залу неспешно расхаживает молодой {навьяр}. Зеленые глаза внимательно рассматривают полки. Зеленовато-серая чешуя поблескивает на свету. Время от времени он останавливается возле одной из полок, чтобы перенести те или иные записи с места на место]]; + dlg = "iraa_rytlarr_dlg"; +}; + +iraa_rytlarr_dlg = dlg { + nam = "iraa_rytlarr_dlg"; + disp = [[Ритларр]]; + enter = function(s) + if dyp_quest_state == 3 then + pon("star_map"); + end; + if (language_known) then + psub("generic"); + return [[Навьяр обращается к вам: "Ритларр приветствует тебя, хевьяр". ]]; + else + psub("no_speech"); + return [[По головным плавникам навьяра бегут цветные полосы, но вы не понимаете, что он пытается сказать вам. ]]; + end; + end; + phr = { + {tag="no_speech"}; + {"[Уйти]", always=true, code [[ back(); ]]}; + {tag="generic"}; + {"[Кодировщик] Я ищу часть карты, ведущей в Лсэрианотр.", [[Навьяр некоторое время стоит, задумавшись. Потом он начинает ходить от полки к полке. Наконец, он сообщает: "Я не уверен, что она у нас есть. Но если вы уверены -- она должна быть в храме. Спросите у вождя. Быть может он позволит вам войти внутрь по такому случаю". ]], code [[ iraa_chief_dlg.ask_temple = true; ]]}; + {tag="star_map", false, "[Кодировщик] Ты знаешь что-нибудь о карте небесных огней?", [[Навьяр кивает: "Наше сокровище. Аэдиенрр взял ее не так давно. Он сказал, что знает как найти место, указанное в ней. Но прошло много дней, а он не вернулся. Если ты сможешь найти его и вернуть карту, мы будем очень благодарны. Я не знаю точно конечную цель, но я знаю, что он вышел по направлению к Дипатреанотру". ]], code [[ dyp_quest_state = 4; ]]}; + {"[Кодировщик] Ты знаешь, где находится Венаэданотр?", [[Навьяр кивает: "Мы знаем путь туда". Он ведет вас к одной из полок в дальнем конце зала. Ритларр достает одну из металлических пластин и перерисовывает ее на гибкий лист из водорослей. Работа занимает несколько часов. Наконец, Ритларр протягивает вам карту: "Держите". ]], code [[ take("item_venaedanotrr_map"); ]]}; + {"[Кодировщик] Ты знаешь, где находится Нлейисланотр?", [[Навьяр отрицательно качает головой: "У нас нет карты пути к этому месту. Быть может, путь знают в Дипатреанотре. "]]}; + {"[Уйти]", always=true, code [[ back(); ]]}; + }; +}; + +--[[ +Ираафаанотр.Храм +]] + +iraa_temple_entry = lcutscene("dyp_entry", "Левиафан, рубка", [[После недолгого путешествия, вы оказываетесь у цели. Как и другие, виденные вами храмы, храм Ираафаанотра вырезан в толще скалы. Массивные ворота, вытесанные из камня заперты. Рисунок над ними указывает путь к Ираафаанотру. ]], "Вы прибыли в храм Ираафаанотра ", leviathan_wheelhouse); + +player_learr = player { + nam = "player_learr"; + has_light = true; + obj = {}; +}; + +iraa_learr_choice_dlg = dlg { + nam = "iraa_learr_choice_dlg"; + disp = "Леарр"; + entered = [[Вы уже собираетесь покинуть Левиафан, как в шлюзовую камеру входит Леарр со словами: "Дрейк-ты здесь-оставайся. Я в-храм-пойду". ]]; + phr = { + {"Почему не отправиться вместе?", [[Леарр отрицательно качает головой: "Хевьярам нельзя-в-храм-входить, поэтому я внутрь-только-одна-войду". ]]}; + {"Хорошо, ты справишься лучше. ", [[Леарр кивает: "Я вернусь-с-картой. Вы здесь-ждите". Вы покидаете шлюзовую камеру и Леарр выходит наружу. ]], code [[ + rel_learr = rel_learr + 1; + change_pl(player_learr); + walk("iraa_temple_entrance"); + ]]}; + {"Я пойду сам. ", [[Леарр недовольно качает головой. Плавники окрашиваются синим. Со совами: "Ты ошибку-совершаешь", -- она выходит из шлюзовой камеры. ^^Вы выбираетесь из Левиафана. ]], code [[ + rel_learr = rel_learr - 1; + walk("iraa_temple_entrance"); + ]]}; + }; +}; + +iraa_temple_entrance = room { + var { + state = 0; + }; + nam = "Храм Ираафаанотра, вход"; + underwater = true; + dsc = function(s) + if me() == player_learr then + return [[Леарр стоит перед массивными двустворчатыми воротами храма, вытесанными в скале, протянувшейся с севера на юг. Над ними расположена карта, указывающая путь к Ираафаанотру. Работники храма регулярно обновляли и восстанавливали карту в течение многих столетий. ]]; + else + return [[Перед вами возвышаются массивные двустворчатые ворота храма, вытесанные из камня. Над ними вы видите тщательно поддерживаемую в порядке карту, указывающую путь к Ираафаанотру. Скала тянется с севера на юг насколько хватает глаз. ]]; + end; + end; + view = [[Через иллюминаторы видны массивные ворота вытесанного в скале храма. Над входом расположен символ храма -- карта пути к самому Ираафаанотру отсюда. ]]; + enter = function(s) + if s.state == 0 and ArrayUtils.indexOf(pl.party, 'learr') ~= 0 then + s.state = 1; + walkin("iraa_learr_choice_dlg"); + end; + end; + obj = { + "iraa_temple_guardians"; + }; + way = { + kh_vroom("Войти", function(s) + if me() == player_learr then + return "iraa_temple_main_1"; + else + pr [[Стражники не пропустят вас. ]]; + return false; + end; + + end); + kh_vroom("Вдоль скалы на север", function(s) + if me() == player_learr then + pr [[В голове Леарр проносится мысль: "Там нет ничего интересного, я много раз там бывала". ]]; + return false; + else + return "iraa_temple_north_1"; + end; + end); + kh_vroom("Вдоль скалы на юг", function(s) + if me() == player_learr then + pr [[В голове Леарр проносится мысль: "Там нет ничего интересного, я много раз там бывала". ]]; + return false; + else + return "iraa_temple_south"; + end; + end); + kh_vroom("В Левиафан", function(s) + print(pl); + print(player_learr); + print(player_drake); + if me() == player_learr and iraa_temple_hidden_pedestal.state == 0 then + pr [[В голове Леарр проносится мысль: "Я еще не сделала все, что нужно". ]]; + return false; + else + change_pl(player_drake); + remove(player_learr, where(player_learr)); + return "leviathan_airlock"; + end; + end); + }; +}; + +iraa_temple_guardians = npc { + nam = "iraa_temple_guardians"; + dsc = [[У входа в храм стоят двое {стражников} -- обычный дозор. ]]; + phrases = function(s) + if me() == player_learr then + return { + "Один из стражников приветствует Леарр и приглашает войти в храм. "; + "Стражники не обращают на Леарр внимания. "; + }; + elseif language_known then + return { + "В вашем присутствии стражники заметно нервничают. "; + "Стражники осторожно переглядываются. "; + "По головным плавникам одного из стражников бегут цветные полосы: \"Уходите, вам здесь не место\". "; + }; + else + return { + "В вашем присутствии стражники заметно нервничают. "; + "Стражники осторожно переглядываются. "; + "По головным плавникам одного из стражников бегут цветные полосы, но вы не понимаете, что он хочет вам сказать. "; + }; + end; + end; +}; + +iraa_temple_south = room { + nam = "iraa_temple_south"; + disp = "У скалы"; + underwater = true; + dsc = [[На востоке от вас возвышаетеся скала, протянувшаяся на многие километры с севера на юг. Вдалеке на севере вы видите Левиафан -- вашу субмарину и вход в храм Ираафаанотра, охраняемый двумя вооруженными навьярами. ]]; + way = { + kh_vroom("Вдоль скалы на север", "iraa_temple_entrance"); + }; +}; + +iraa_temple_north_1 = room { + nam = "iraa_temple_north_1"; + disp = "У скалы"; + underwater = true; + dsc = [[На востоке от вас возвышаетеся скала, протянувшаяся на многие километры с севера на юг. Вдалеке на юге вы видите Левиафан -- вашу субмарину и вход в храм Ираафаанотра, охраняемый двумя вооруженными навьярами. ]]; + way = { + kh_vroom("Вдоль скалы на север", "iraa_temple_north_2"); + kh_vroom("Вдоль скалы на юг", "iraa_temple_entrance"); + }; +}; + +iraa_temple_north_2 = room { + nam = "iraa_temple_north_2"; + disp = "У скалы"; + underwater = true; + dsc = [[На востоке от вас возвышаетеся скала, протянувшаяся на многие километры с севера на юг. Вдалеке на юге вы едва различаете Левиафан -- вашу субмарину. ]]; + way = { + kh_vroom("Вдоль скалы на север", "iraa_temple_north_3"); + kh_vroom("Вдоль скалы на юг", "iraa_temple_north_1"); + }; + entered = function(s) + lifeoff(iraa_temple_shark); + end; +}; + +iraa_temple_north_3 = room { + nam = "iraa_temple_north_3"; + disp = "У входа в ущелье"; + underwater = true; + dsc = [[К востоку от вас возвышается скала, протянувшаяся на многие километры ссевера на юг. Рядом с вами в скале имеется узкое ущелье -- настолько незаметное, что проплывай вы мимо на Левиафане, вы не обратили бы на него никакого внимания. ]]; + way = { + kh_vroom("В ущелье", "iraa_temple_ravine_1"); + kh_vroom("Вдоль скалы на юг", "iraa_temple_north_2"); + }; + entered = function(s) + lifeoff(iraa_temple_shark); + end; +}; + +iraa_temple_shark = obj { + var { + alive = true; + position = 1; + wait = 0; + }; + map = { + ["2"] = iraa_temple_ravine_2, + ["3"] = iraa_temple_ravine_3, + ["4"] = iraa_temple_ravine_4, + ["6"] = iraa_temple_ravine_6, + ["7"] = iraa_temple_ravine_7, + ["8"] = iraa_temple_ravine_8, + ["9"] = iraa_temple_ravine_9 + }; + cycle = {2,6,7,8,9,4,3}; + nam = "iraa_temple_shark"; + disp2 = "акулу"; + life = function(s) + s.wait = s.wait + 1; + if (s.wait < 3) then + return; + end; + s.wait = 0; + s.position = s.position + 1; + if (s.position > #s.cycle) then + s.position = 1; + end; + print(s.position, s.cycle[s.position], here().index); + if s.position == here().index then + walk("game_over_eaten_by_shark"); + end; + end; + canshoot = true; + onshoot = function(s) + s.alive = false; + lifeoff(s); + s:disable(); + move(item_shark_tooth, s.map[tostring(s.cycle[s.position])]); + return [[Пронзенная гарпуном, акула умирает. ]]; + end; + dsc = function(s) + print("fungul"); + if s.alive then + if here().index == 1 then + if s.cycle[s.position] == 2 then + return [[На востоке от вас вы видите {акулу}, она движется на север. ]]; + end; + elseif here().index == 5 then + if s.cycle[s.position] == 4 then + return [[На западе от вас вы видите {акулу}, она движется на запад. ]]; + end; + elseif here().index == 10 then + if s.cycle[s.position] == 7 then + return [[На юге от вас вы видите {акулу}, она движется на восток. ]]; + end; + elseif here().index == 2 then + if s.cycle[s.position] == 3 then + return [[С востока к вам приближается {акула}. ]]; + elseif s.cycle[s.position] == 6 then + return [[К северу от вас вы видите {акулу}. Она не видит вас и продолжает движение от вас. ]]; + end; + elseif here().index == 6 then + if s.cycle[s.position] == 2 then + return [[С юга к вам приближается {акула}. ]]; + elseif s.cycle[s.position] == 7 then + return [[К северу от вас вы видите {акулу}. Она не видит вас и продолжает движение от вас. ]]; + end; + elseif here().index == 7 then + if s.cycle[s.position] == 6 then + return [[С юга к вам приближается {акула}. ]]; + elseif s.cycle[s.position] == 8 then + return [[На востоке вы видите {акулу}, удаляющуюся от вас. ]]; + end; + elseif here().index == 8 then + if s.cycle[s.position] == 7 then + return [[С запада к вам приближается {акула}. ]]; + elseif s.cycle[s.position] == 9 then + return [[На востоке вы видите {акулу}, удаляющуюся от вас. ]]; + end; + elseif here().index == 9 then + if s.cycle[s.position] == 8 then + return [[С запада к вам приближается {акула}. ]]; + elseif s.cycle[s.position] == 4 then + return [[На юге вы видите {акулу}, удаляющуюся от вас. ]]; + end; + elseif here().index == 4 then + if s.cycle[s.position] == 9 then + return [[С севера к вам приближается {акула}. ]]; + elseif s.cycle[s.position] == 3 then + return [[На западе вы видите {акулу}, удаляющуюся от вас. ]]; + end; + elseif here().index == 3 then + if s.cycle[s.position] == 4 then + return [[С востока к вам приближается {акула}. ]]; + elseif s.cycle[s.position] == 2 then + return [[На западе вы видите {акулу}, удаляющуюся от вас. ]]; + end; + end; + end; + end; +}; + +iraa_temple_ravine_1 = room { + index = 1; + nam = "iraa_temple_ravine_1"; + disp = "Ущелье"; + dsc = [[Глубокое узкое ущелье. Стены его почти отвесные и очен неровные, но вы бы не рискнули пытаться карабкаться по ним -- порода очень мягкая и может легко обрушиться под вшим весом. ]]; + underwater = true; + way = { + kh_vroom("На запад", "iraa_temple_north_3"); + kh_vroom("На восток", "iraa_temple_ravine_2"); + }; + entered = function(s) + if iraa_temple_shark.alive then + lifeon(iraa_temple_shark); + end; + end; + obj = { + "iraa_temple_shark" + }; +}; + +iraa_temple_ravine_2 = room { + index = 2; + nam = "iraa_temple_ravine_2"; + disp = "Ущелье"; + dsc = [[Глубокое узкое ущелье. Стены его почти отвесные и очен неровные, но вы бы не рискнули пытаться карабкаться по ним -- порода очень мягкая и может легко обрушиться под вшим весом. ]]; + underwater = true; + way = { + kh_vroom("На запад", "iraa_temple_ravine_1"); + kh_vroom("На север", "iraa_temple_ravine_6"); + kh_vroom("На восток", "iraa_temple_ravine_3"); + }; + obj = { + "iraa_temple_shark" + }; +}; + +iraa_temple_ravine_3 = room { + index = 3; + nam = "iraa_temple_ravine_3"; + disp = "Ущелье"; + dsc = [[Глубокое узкое ущелье. Стены его почти отвесные и очен неровные, но вы бы не рискнули пытаться карабкаться по ним -- порода очень мягкая и может легко обрушиться под вшим весом. ]]; + underwater = true; + way = { + kh_vroom("На запад", "iraa_temple_ravine_2"); + kh_vroom("На восток", "iraa_temple_ravine_4"); + }; + obj = { + "iraa_temple_shark" + }; +}; + +iraa_temple_ravine_4 = room { + index = 4; + nam = "iraa_temple_ravine_4"; + disp = "Ущелье"; + dsc = [[Глубокое узкое ущелье. Стены его почти отвесные и очен неровные, но вы бы не рискнули пытаться карабкаться по ним -- порода очень мягкая и может легко обрушиться под вшим весом. ]]; + underwater = true; + way = { + kh_vroom("На запад", "iraa_temple_ravine_3"); + kh_vroom("На север", "iraa_temple_ravine_9"); + kh_vroom("На восток", "iraa_temple_ravine_5"); + }; + obj = { + "iraa_temple_shark" + }; +}; + +iraa_temple_ravine_5 = room { + index = 5; + nam = "iraa_temple_ravine_5"; + disp = "Ущелье"; + dsc = [[Глубокое узкое ущелье. Стены его почти отвесные и очен неровные, но вы бы не рискнули пытаться карабкаться по ним -- порода очень мягкая и может легко обрушиться под вшим весом. ]]; + underwater = true; + way = { + kh_vroom("На запад", "iraa_temple_ravine_4"); + kh_vroom("В трещину", "iraa_temple_crevice"); + }; + obj = { + "iraa_temple_shark" + }; + entered = function(s) + lifeoff(iraa_temple_guardian); + end; +}; + +iraa_temple_ravine_6 = room { + index = 6; + nam = "iraa_temple_ravine_6"; + disp = "Ущелье"; + dsc = [[Глубокое узкое ущелье. Стены его почти отвесные и очен неровные, но вы бы не рискнули пытаться карабкаться по ним -- порода очень мягкая и может легко обрушиться под вшим весом. ]]; + underwater = true; + way = { + kh_vroom("На юг", "iraa_temple_ravine_2"); + kh_vroom("На север", "iraa_temple_ravine_7"); + }; + obj = { + "iraa_temple_shark" + }; +}; + +iraa_temple_ravine_7 = room { + index = 7; + nam = "iraa_temple_ravine_7"; + disp = "Ущелье"; + dsc = [[Глубокое узкое ущелье. Стены его почти отвесные и очен неровные, но вы бы не рискнули пытаться карабкаться по ним -- порода очень мягкая и может легко обрушиться под вшим весом. ]]; + underwater = true; + way = { + kh_vroom("На юг", "iraa_temple_ravine_6"); + kh_vroom("На восток", "iraa_temple_ravine_8"); + kh_vroom("На север", "iraa_temple_ravine_10"); + }; + obj = { + "iraa_temple_shark" + }; +}; + +iraa_temple_ravine_8 = room { + index = 8; + nam = "iraa_temple_ravine_8"; + disp = "Ущелье"; + dsc = [[Глубокое узкое ущелье. Стены его почти отвесные и очен неровные, но вы бы не рискнули пытаться карабкаться по ним -- порода очень мягкая и может легко обрушиться под вшим весом. ]]; + underwater = true; + way = { + kh_vroom("На запад", "iraa_temple_ravine_7"); + kh_vroom("На север", "iraa_temple_ravine_10"); + kh_vroom("На восток", "iraa_temple_ravine_9"); + }; + obj = { + "iraa_temple_shark" + }; +}; + +iraa_temple_ravine_9 = room { + index = 9; + nam = "iraa_temple_ravine_9"; + disp = "Ущелье"; + dsc = [[Глубокое узкое ущелье. Стены его почти отвесные и очен неровные, но вы бы не рискнули пытаться карабкаться по ним -- порода очень мягкая и может легко обрушиться под вшим весом. ]]; + underwater = true; + way = { + kh_vroom("На запад", "iraa_temple_ravine_8"); + kh_vroom("На юг", "iraa_temple_ravine_4"); + }; + obj = { + "iraa_temple_shark" + }; +}; + +iraa_temple_ravine_10 = room { + index = 10; + nam = "iraa_temple_ravine_10"; + disp = "Ущелье"; + dsc = [[Глубокое узкое ущелье. Стены его почти отвесные и очен неровные, но вы бы не рискнули пытаться карабкаться по ним -- порода очень мягкая и может легко обрушиться под вшим весом. ]]; + underwater = true; + way = { + kh_vroom("На север", "iraa_temple_ravine_11"); + kh_vroom("На восток", "iraa_temple_ravine_8"); + kh_vroom("На юг", "iraa_temple_ravine_7"); + }; + obj = { + "iraa_temple_shark" + }; +}; + +iraa_temple_ravine_11 = room { + nam = "iraa_temple_ravine_11"; + disp = "Ущелье"; + dsc = [[Глубокое узкое ущелье. Стены его почти отвесные и очен неровные, но вы бы не рискнули пытаться карабкаться по ним -- порода очень мягкая и может легко обрушиться под вшим весом. ]]; + underwater = true; + way = { + kh_vroom("На север", "iraa_temple_ravine_11"); + kh_vroom("На восток", "iraa_temple_ravine_8"); + kh_vroom("На юг", "iraa_temple_ravine_7"); + }; +}; + +iraa_temple_crack = room { + index = 7; + nam = "iraa_temple_crack"; + disp = "Трещина в скале"; + dsc = [[Небольшая узкая трещина в скале. Вы с огромным трудом перемещаетесь внутри. С одной стороны вы видите ущелье, через которое вы проникли сюда. С другой стороны -- какой-то хорошо освещенный коридор. ]]; + underwater = true; + way = { + kh_vroom("В коридор", "iraa_temple_corridor_6"); + kh_vroom("В ущелье", "iraa_temple_ravine_5"); + }; + entered = function(s) + lifeon(iraa_temple_guardian); + end; +}; + +iraa_temple_guardian = obj { + var { + position = 1; + direction = 1; + wait = 0; + }; + nam = "iraa_temple_guardian"; + life = function(s) + s.wait = s.wait + 1; + if (s.wait < 3) then + return; + end; + s.wait = 0; + if (s.direction == 1) then + if (s.position < 3) then + s.position = s.position + 1; + if (here().index >= s.position) then + pr [[Вы слышите шаги приближащегося стражника. ]]; + else + pr [[Вы слышите шаги удаляющегося стражника. ]]; + end; + else + s.direction = 2; + end; + elseif (s.direction == 2) then + if (s.position < 6) then + s.position = s.position + 1; + if (here().index >= s.position) then + pr [[Вы слышите шаги приближащегося стражника. ]]; + else + pr [[Вы слышите шаги удаляющегося стражника. ]]; + end; + else + s.direction = 2; + end; + elseif (s.direction == -2) then + if (s.position > 3) then + s.position = s.position - 1; + if (here().index <= s.position) then + pr [[Вы слышите шаги приближащегося стражника. ]]; + else + pr [[Вы слышите шаги удаляющегося стражника. ]]; + end; + else + s.direction = -1; + end; + elseif (s.direction == -1) then + if (s.position > 1) then + s.position = s.position - 1; + if (here().index <= s.position) then + pr [[Вы слышите шаги приближащегося стражника. ]]; + else + pr [[Вы слышите шаги удаляющегося стражника. ]]; + end; + else + s.direction = 1; + end; + end; + if here().index > 6 or here().index < 1 then + return; + end; + if s.direction == 1 and here().index < 4 and here().index >= s.position or + s.direction == 2 and here().index >= s.position or + s.direction == -2 and here().index > 2 and here().index <= s.position or + s.direction == -1 and here().index <= s.position then + walk("game_over_caught_iraa"); + end; + end; + dsc = function(s) + if me() == player_learr then + return ""; + end; + if here().index > 6 or here().index < 1 then + return [[]]; + end; + if s.direction == 1 then + if here().index < s.position then + return [[К востоку вы видите стражника. Он стоит спиной к вам. ]]; + end; + elseif s.direction == 2 then + if here().index > 2 and here().index < s.position then + return [[К северу вы видите стражника. Он стоит спиной к вам. ]]; + end; + elseif s.direction == -2 then + if here().index > s.position then + return [[К югу вы видите стражника. Он стоит спиной к вам. ]]; + end; + elseif s.direction == -1 then + if here().index > s.position then + return [[К западу вы видите стражника. Он стоит спиной к вам. ]]; + end; + end; + end; +}; + +iraa_temple_corridor_6 = room { + index = 6; + nam = "iraa_temple_corridor_6"; + disp = "Храм Ираафаанотра, коридор"; + underwater = true; + dsc = function(s) + if me() == player_learr then + return [[Леарр находится в коридоре в храме Ираафаанотра. Каменные стены покрыты файирром. В стенах коридора имеются проемы, ведущие в служебные комнаты. Северную стену рассекает глубокая трещина, а в западной находится дверь, ведущая в одну из служебных комнат. ]]; + else + return [[Вы стоите в самом конце коридора в храме Ираафаанотра. Вокруг -- камееные стены, покрытые светящимися водорослями. В одной из них вы видите глубокую, трещину, через которую вы с трудом протиснулись сюда. В западной стене вы видите небольшой дверной проем, за которым скрывается маленькая комнатка. ]]; + end; + end; + way = { + kh_vroom("В трещину", function(s) + if me() == player_learr then + pr [[В голове Леарр мелькает мысль: "Мне нечего там делать". ]]; + return false; + else + return "iraa_temple_crack"; + end; + end); + kh_vroom("В комнату", "iraa_temple_room_0"); + kh_vroom("По коридору, на юг", "iraa_temple_corridor_5"); + }; + obj = { + "iraa_temple_guardian" + }; +}; + +iraa_temple_corridor_5 = room { + index = 5; + nam = "iraa_temple_corridor_5"; + disp = "Храм Ираафаанотра, коридор"; + underwater = true; + dsc = function(s) + if me() == player_learr then + return [[Леарр находится в коридоре в храме Ираафаанотра. Ровные каменные стены покрыты файирром. В западной стене коридора имеется проем, ведущий в одну из служебных комнат. ]]; + else + return [[Вы стоите в коридоре в храме Ираафаанотра. Вокруг -- каменные стены, покрытые светящимися водорослями. В западной стене находится дверной проем, ведущий в небольшую комнату. ]]; + end; + end; + way = { + kh_vroom("В комнату", "iraa_temple_room_2"); + kh_vroom("По коридору, на север", "iraa_temple_corridor_6"); + kh_vroom("По коридору, на юг", "iraa_temple_corridor_4"); + }; + obj = { + "iraa_temple_guardian" + }; +}; + +iraa_temple_corridor_4 = room { + index = 4; + nam = "iraa_temple_corridor_4"; + disp = "Храм Ираафаанотра, коридор"; + underwater = true; + dsc = function(s) + if me() == player_learr then + return [[Леарр находится в коридоре в храме Ираафаанотра. Ровные каменные стены покрыты файирром. ]]; + else + return [[Вы стоите в коридоре в храме Ираафаанотра. Вокруг -- каменные стены, покрытые светящимися водорослями. ]]; + end; + end; + way = { + kh_vroom("По коридору, на север", "iraa_temple_corridor_5"); + kh_vroom("По коридору, на юг", "iraa_temple_corridor_3"); + }; + obj = { + "iraa_temple_guardian" + }; +}; + +iraa_temple_corridor_3 = room { + index = 3; + nam = "iraa_temple_corridor_3"; + disp = "Храм Ираафаанотра, коридор"; + underwater = true; + dsc = function(s) + if me() == player_learr then + return [[Леарр находится в коридоре в храме Ираафаанотра. Ровные каменные стены покрыты файирром. Коридор сворачивает под прямым углом к северу. В восточной стене расположена массивная каменная дверь -- задний вход в храм. Леарр никогда не понимала этой необходимости, но во всех известных ей храмах было ровно два входа. ]]; + else + return [[Вы стоите в коридоре в храме Ираафаанотра. Вокруг -- ровные каменные стены. Здесь коридор сворачивает под прямым углом к северу. В конце коридора на западе вы видите массивную каменную дверь, которая сейчас открыта. На севере коридор заканчивается тупиком. К востоку от вас массивная каменная дверь, но она заперта. ]]; + end; + end; + way = { + kh_vroom("По коридору, на север", "iraa_temple_corridor_4"); + kh_vroom("В комнату", "iraa_temple_room_5"); + kh_vroom("По коридору, на запад", "iraa_temple_corridor_2"); + }; + obj = { + "iraa_temple_guardian" + }; +}; + +iraa_temple_corridor_2 = room { + index = 2; + nam = "iraa_temple_corridor_2"; + disp = "Храм Ираафаанотра, коридор"; + underwater = true; + dsc = function(s) + if me() == player_learr then + return [[Леарр находится в коридоре в храме Ираафаанотра. Ровные каменные стены покрыты файирром. В стенах коридора имеются проемы, ведущие в служебные комнаты. ]]; + else + return [[Вы стоите в коридоре в храме Ираафаанотра. Вокруг -- каменные стены, покрытые светящимися водорослями. В стенах имеются дверные проемы, ведущие в небольшие комнаты. ]]; + end; + end; + way = { + kh_vroom("По коридору, на восток", "iraa_temple_corridor_3"); + kh_vroom("В комнату в северной стене", "iraa_temple_room_3"); + kh_vroom("В комнату в южной стене", "iraa_temple_room_6"); + kh_vroom("По коридору, на запад", "iraa_temple_corridor_1"); + }; + obj = { + "iraa_temple_guardian" + }; +}; + +iraa_temple_corridor_1 = room { + index = 1; + nam = "iraa_temple_corridor_1"; + disp = "Храм Ираафаанотра, коридор"; + underwater = true; + dsc = function(s) + if me() == player_learr then + return [[Леарр впервые за долгие годы оказалась в задней части храма. Хотя проход сюда, в принципе, не запрещен, необходимости бывать здесь, как правило, нет -- все, что доступно пониманию горожан происходит в главном зале. Ровные каменные стены покрыты файирром -- светящимися водорослями, используемыми навьярами повсеместно. В западной стене находится дверь, ведущая в основное помещение храма, а в северной и южной -- проемы, ведущие в служебные комнаты. ]]; + else + return [[Вы стоите в коридоре в храме Ираафаанотра. Вокруг -- ровные каменные стены, покрытые светящимися водорослями. Прямо перед вами находится дверь, ведущая в основное помещение храма. Отсюда вы видите, что в нем никого нет. ]]; + end; + end; + way = { + kh_vroom("По коридору, на восток", "iraa_temple_corridor_2"); + kh_vroom("В комнату в северной стене", "iraa_temple_room_7"); + kh_vroom("В комнату в южной стене", "iraa_temple_room_1"); + kh_vroom("В главный зал", "iraa_temple_main_3"); + }; + obj = { + "iraa_temple_guardian" + }; +}; + +iraa_temple_main_3 = room { + nam = "iraa_temple_main_3"; + disp = "Храм Ираафаанотра, главный зал"; + underwater = true; + dsc = function(s) + if me() == player_learr then + return [[Леарр находится в главном зале Ираафаанотра. Повсюду аккуратно разложены свяценные реликвии, накопленные за века существования Ираафаанотра. Рядом с Леарр расположена дверь, ведущая в задние помещения храма. Обычно там бывают лишь те, кто всю свою жизнь посвятил служению в этом храме. ]]; + else + return [[Вы находитесь в конце главного зала храма Ираафаанотра. В стенах проделаны многочисленые ниши, в которых покоятся священные реликвии навьяров. Массивная каменная дверь ведет в задние помещения. ]]; + end; + end; + way = { + kh_vroom("В дверь", "iraa_temple_corridor_1"); + kh_vroom("К центру зала", "iraa_temple_main_2"); + }; +}; + +iraa_temple_main_2 = room { + nam = "iraa_temple_main_2"; + disp = "Храм Ираафаанотра, главный зал"; + underwater = true; + dsc = function(s) + if me() == player_learr then + return [[Леарр находится в центре главного зала храма Ираафаанотра. Рядом с ней находится пустой пьедестал, на котором должна находиться важнейшая реликвия храма, украденная ворами из Дипатреанотра. Слева и справа находятся залы, с незапамятных времен именуемые залом Вопроса и залом Ответа. ]]; + else + return [[Вы находитесь в центре главного зала храма Ираафаанотра. Рядом с вами находится пустой пьедестал, на котором должна покоиться важнейшая реликвия храма, однако сейчас она отсутствует. Слева и справа от вас находятся залы, именуемые залами ответа и вопроса. ]]; + end; + end; + way = { + kh_vroom("В конец зала", "iraa_temple_main_3"); + kh_vroom("В зал вопроса", "iraa_temple_qhall"); + kh_vroom("В зал ответа", "iraa_temple_ahall"); + kh_vroom("К главному входу", "iraa_temple_main_1"); + }; + obj = { + "iraa_temple_lever_4" + }; +}; + +iraa_temple_main_1 = room { + nam = "iraa_temple_main_1"; + disp = "Храм Ираафаанотра, главный зал"; + underwater = true; + dsc = function(s) + if me() == player_learr then + return [[Леарр находится в главном зале храма Ираафаанотра, у центрального входа. Повсюду аккуратно разложены свяценные реликвии, накопленные за века существования Ираафаанотра. ]]; + else + return [[Вы находитесь в главном зале храма Ираафаанотра. В многочисленных нишах в стенах покоятся древние реликвии. Перед вами возвышаются массивные ворота храма, за которыми наверняка стоит обычная стража -- двое вооруженных навьяров. ]]; + end; + end; + way = { + kh_vroom("В ворота", function(s) + if me() == player_learr then + return "iraa_temple_entrance"; + else + pr("Не стоит делать этого. Стража вас схватит. "); + return false; + end; + end); + kh_vroom("К центру зала", "iraa_temple_main_2"); + }; +}; + +iraa_temple_question = obj { + nam = "iraa_temple_question"; + dsc = function(s) + if me() == player_learr then + return [[Единственной достопримечательностью помещения была загадочная надпись "Ты ищешь число здесь", на стене напротив входа. ]]; + else + return [[На стене напротив входа нанесены какие-то {письмена}. Видно, что навьяры раз за разом тщательно обновляют их, сохраняя их в первозданном виде. ]]; + end; + end; + act = [[Письмена гласят: "Ты число-здесь-ищешь". ]]; +}; + +iraa_temple_qhall = room { + nam = "iraa_temple_qhall"; + disp = "Храм Ираафаанотра, зал вопроса"; + underwater = true; + dsc = function(s) + if me() == player_learr then + return [[Назначение небольшого по размерам зала вопроса, отделеного высокой аркой от основного зала, всегда казалось Леарр непонятным -- оно всегда было совершенно пустым. Здесь ничего не хранилось, сюда редко ходили как служители, так и горожане. ]]; + else + return [[Зал вопроса представляет собой небольшое помещение, отделенное от основного зала высокой аркой. В отличие от центрального зала, стены здесь не имеют никаких ниш или полок -- здесь явно не должно храниться никаких реликвий. ]]; + end; + end; + way = { + kh_vroom("В главный зал", "iraa_temple_main_2"); + }; + obj = { + "iraa_temple_question"; + }; +}; + +iraa_temple_answer = obj { + nam = "iraa_temple_answer"; + dsc = function(s) + if me() == player_learr then + return [[Вырезанное в камне стены изображение {спрута} всегда пугало Леарр, однако и притягивало -- есть в нем что-то необычное, интересное. ]]; + else + return [[Вы видите вырезанное в стене изображение {спрута}. ]]; + end; + end; + act = function(s) + if me() == player_learr then + return [[В голове Леарр пробегает мысль: "Для чего он здесь?" В первый раз в жизни, Леарр обращает внимание на наличие шестнадцати щупалец у существа. ]]; + else + return [[Традиционное для навьяров схематичное изображение спрута. Вам бросается в глаза наличие у существа шестнадцати щупалец. ]]; + end; + end; +}; + +iraa_temple_ahall = room { + nam = "iraa_temple_ahall"; + disp = "Храм Ираафаанотра, зал ответа"; + underwater = true; + dsc = function(s) + if me() == player_learr then + return [[Назначение небольшого по размерам зала ответа, отделеного высокой аркой от основного зала, всегда казалось Леарр непонятным -- оно всегда было совершенно пустым. Здесь ничего не хранилось, сюда редко ходили как служители, так и горожане. ]]; + else + return [[Зал ответа представляет собой небольшое помещение, отделенное от основного зала высокой аркой. В отличие от центрального зала, стены здесь не имеют никаких ниш или полок -- здесь явно не должно храниться никаких реликвий. ]]; + end; + end; + way = { + kh_vroom("В главный зал", "iraa_temple_main_2"); + }; + obj = { + "iraa_temple_answer"; + }; +}; + +iraa_temple_room_0 = room { + var { + state = false; + }; + index = 0; + nam = "iraa_temple_room_0"; + underwater = true; + disp = "Храм Ираафаанотра, комната"; + dsc = [[Небольшая, хорошо освещенная светящимися водорослями, комната. Ниши в стенах пустуют. ]]; + way = { + kh_vroom("В коридор", "iraa_temple_corridor_6"); + kh_vroom("В скрытый проход", "iraa_temple_hidden_stairs"):disable(); + }; + obj = { + "iraa_temple_lever_0" + }; + open = function(s) + s.state = true; + path("В скрытый проход", s):enable(); + if here() == s then + return "Вы видите, как одна из стен раздвигается, открывая скрытый проход куда-то в глубь скалы. "; + else + return "Вы слышите где-то поблизости скрежет каменных плит. "; + end; + end; + close = function(s) + if s.state then + s.state = false; + path("В скрытый проход", s):disable(); + if here() == s then + return "Вы видите, как одна из стен cдвигается, вновь закрывая потайной проход. "; + else + return "Вы слышите где-то поблизости скрежет каменных плит. "; + end; + end; + return "Вы дергаете рычаг"; + end; +}; + +iraa_temple_room_1 = room { + nam = "iraa_temple_room_1"; + disp = "Храм Ираафаанотра, комната"; + underwater = true; + index = 0; + dsc = function(s) + if me() == player_learr then + return [[Леарр находится в одной из служебных комнат храма. Стены и пол покрыты файирром. Ниши в стенах, сделанные специально, чтобы служители могли отдыхать в них, пустуют. ]]; + else + return [[Небольшая, хорошо освещенная светящимися водорослями, комната. Большие -- в рост навьяра, ниши в стенах пустуют. ]]; + end; + end; + way = { + kh_vroom("В коридор", "iraa_temple_corridor_1"); + }; + obj = { + "iraa_temple_lever_1" + }; +}; + +iraa_temple_room_2 = room { + nam = "iraa_temple_room_2"; + disp = "Храм Ираафаанотра, комната"; + underwater = true; + index = 0; + dsc = function(s) + if me() == player_learr then + return [[Леарр находится в одной из служебных комнат храма. Стены и пол покрыты файирром. Ниши в стенах, сделанные специально, чтобы служители могли отдыхать в них, пустуют. ]]; + else + return [[Небольшая, хорошо освещенная светящимися водорослями, комната. Большие -- в рост навьяра, ниши в стенах пустуют. ]]; + end; + end; + way = { + kh_vroom("В коридор", "iraa_temple_corridor_5"); + }; + obj = { + "iraa_temple_lever_2" + }; +}; + +iraa_temple_room_3 = room { + nam = "iraa_temple_room_3"; + disp = "Храм Ираафаанотра, комната"; + underwater = true; + index = 0; + dsc = function(s) + if me() == player_learr then + return [[Леарр находится в одной из служебных комнат храма. Стены и пол покрыты файирром. Ниши в стенах, сделанные специально, чтобы служители могли отдыхать в них, пустуют. ]]; + else + return [[Небольшая, хорошо освещенная светящимися водорослями, комната. Большие -- в рост навьяра, ниши в стенах пустуют. ]]; + end; + end; + way = { + kh_vroom("В коридор", "iraa_temple_corridor_2"); + }; + obj = { + "iraa_temple_lever_3" + }; +}; + +iraa_temple_room_5 = room { + nam = "iraa_temple_room_5"; + disp = "Храм Ираафаанотра, комната"; + underwater = true; + index = 0; + dsc = function(s) + if me() == player_learr then + return [[Леарр находится в одной из служебных комнат храма. Стены и пол покрыты файирром. Ниши в стенах, сделанные специально, чтобы служители могли отдыхать в них, пустуют. ]]; + else + return [[Небольшая, хорошо освещенная светящимися водорослями, комната. Большие -- в рост навьяра, ниши в стенах пустуют. ]]; + end; + end; + way = { + kh_vroom("В коридор", "iraa_temple_corridor_3"); + }; + obj = { + "iraa_temple_lever_5" + }; +}; + +iraa_temple_room_6 = room { + nam = "iraa_temple_room_6"; + disp = "Храм Ираафаанотра, комната"; + underwater = true; + index = 0; + dsc = function(s) + if me() == player_learr then + return [[Леарр находится в одной из служебных комнат храма. Стены и пол покрыты файирром. Ниши в стенах, сделанные специально, чтобы служители могли отдыхать в них, пустуют. ]]; + else + return [[Небольшая, хорошо освещенная светящимися водорослями, комната. Большие -- в рост навьяра, ниши в стенах пустуют. ]]; + end; + end; + way = { + kh_vroom("В коридор", "iraa_temple_corridor_2"); + }; +}; + +iraa_temple_room_7 = room { + nam = "iraa_temple_room_7"; + disp = "Храм Ираафаанотра, комната"; + underwater = true; + index = 0; + dsc = function(s) + if me() == player_learr then + return [[Леарр находится в одной из служебных комнат храма. Стены и пол покрыты файирром. Ниши в стенах, сделанные специально, чтобы служители могли отдыхать в них, пустуют. ]]; + else + return [[Небольшая, хорошо освещенная светящимися водорослями, комната. Большие -- в рост навьяра, ниши в стенах пустуют. ]]; + end; + end; + way = { + kh_vroom("В коридор", "iraa_temple_corridor_1"); + }; +}; + +iraa_temple_switch = obj { + nam = "iraa_temple_switch"; + var { + state = {false,false,false,false,false,false}; + }; + switch = function(s, index) + if index < 7 and index > 0 then + s.state[index] = not s.state[index]; + end; + if not s.state[1] and not s.state[2] and s.state[3] and not s.state[4] and s.state[5] and not s.state[6] then + -- A valid state + return iraa_temple_room_0:open(); + else + -- An invalid state + return iraa_temple_room_0:close(); + end; + end; +}; + +iraa_temple_lever_0 = obj { + nam = "iraa_temple_lever_0"; + dsc = function(s) + local r = [[Рядом со входом расположен едва заметный {рычаг} с отметкой фиолетового цвета. ]]; + if iraa_temple_switch.state[1] then + r = r..[[Сейчас он опущен вниз. ]]; + else + r = r..[[Сейчас он поднят вверх. ]]; + end; + return r; + end; + act = function(s) + return iraa_temple_switch:switch(1); + end; +}; + +iraa_temple_lever_1 = obj { + nam = "iraa_temple_lever_0"; + dsc = function(s) + local r = [[Рядом со входом расположен едва заметный {рычаг} с отметкой синего цвета. ]]; + if iraa_temple_switch.state[2] then + r = r..[[Сейчас он опущен вниз. ]]; + else + r = r..[[Сейчас он поднят вверх. ]]; + end; + return r; + end; + act = function(s) + return iraa_temple_switch:switch(2); + end; +}; + +iraa_temple_lever_2 = obj { + nam = "iraa_temple_lever_0"; + dsc = function(s) + local r = [[Рядом со входом расположен едва заметный {рычаг} с отметкой зеленого цвета. ]]; + if iraa_temple_switch.state[3] then + r = r..[[Сейчас он опущен вниз. ]]; + else + r = r..[[Сейчас он поднят вверх. ]]; + end; + return r; + end; + act = function(s) + return iraa_temple_switch:switch(3); + end; +}; + +iraa_temple_lever_3 = obj { + nam = "iraa_temple_lever_0"; + dsc = function(s) + local r = [[Рядом со входом расположен едва заметный {рычаг} с отметкой желтого цвета. ]]; + if iraa_temple_switch.state[4] then + r = r..[[Сейчас он опущен вниз. ]]; + else + r = r..[[Сейчас он поднят вверх. ]]; + end; + return r; + end; + act = function(s) + return iraa_temple_switch:switch(4); + end; +}; + +iraa_temple_lever_4 = obj { + nam = "iraa_temple_lever_0"; + dsc = function(s) + local r = [[Рядом со входом расположен едва заметный {рычаг} с отметкой оранжевого цвета. ]]; + if iraa_temple_switch.state[5] then + r = r..[[Сейчас он опущен вниз. ]]; + else + r = r..[[Сейчас он поднят вверх. ]]; + end; + return r; + end; + act = function(s) + return iraa_temple_switch:switch(5); + end; +}; + +iraa_temple_lever_5 = obj { + nam = "iraa_temple_lever_0"; + dsc = function(s) + local r = [[Рядом со входом расположен едва заметный {рычаг} с отметкой красного цвета. ]]; + if iraa_temple_switch.state[6] then + r = r..[[Сейчас он опущен вниз. ]]; + else + r = r..[[Сейчас он поднят вверх. ]]; + end; + return r; + end; + act = function(s) + return iraa_temple_switch:switch(6); + end; +}; + +iraa_temple_hidden_stairs = darkroom { + nam = "iraa_temple_hidden_stairs"; + disp = "Храм Ираафаанотра, потайной ход"; + underwater = true; + dsc_dark = [[Потайной спуск уходит далеко вниз, под храм. В темноте вы ничего не различаете. ]]; + dsc_halflit = function(s) + if me() == player_learr then + return [[Потайной спуск уходит далеко вниз, под храм. Глаза Леарр хорошо различают плавно уходящий вниз коридор. ]]; + else + return [[Потайной спуск уходит далеко вниз, под храм. В слабом свете фонаря, встроенного в скафандр, вы различаете плавно уходящий вниз коридор. ]]; + end; + end; + way = { + kh_vroom("Наверх", "iraa_temple_room_0", 2); + kh_vroom("Вниз", "iraa_temple_hidden_hall", 1); + }; +}; + +iraa_temple_button_ctr = function(nam, index) + return obj { + nam = nam; + seen_level = 1; + dsc = function(s) + local im = "images/dyp_bg.png"; + for i = 1, #iraa_temple_hidden_hall.buttons[index] do + im = im .. ";images/dyp_" .. tostring(iraa_temple_hidden_hall.buttons[index][i]) .. ".png"; + end; + if (iraa_temple_hidden_hall.pressed_buttons[index]) then + return "{Рычаг с символами " .. img(im) .."} включен.^"; + else + return "{Рычаг с символами " .. img(im) .."} выключен.^"; + end; + end; + act = function(s) + if iraa_temple_hidden_hall:check(index) then + return [[Вы переключаете рычаг и узор на полу комнаты меняется. Металлические плиты в стенах комнаты поднимаются, открывая проходы вниз и наверх. ]]; + else + return [[Вы переключаете рычаг и узор на полу комнаты меняется. ]]; + end; + end; + }; +end; + +iraa_temple_hidden_hall = room { + var { + active_parts = {false, false, false, false, false, false, false, false, false, false, false, false}; + pressed_buttons = {false, false, false, false, false, false, false, false}; + solved = false; + }; + buttons = { + {1, 5, 9, 11, 12}; + {1, 2, 3, 4}; + {4, 8, 10, 11, 12}; + {2, 4, 5, 6}; + {1, 5, 7, 9, 10, 11, 12}; + {2, 6, 9, 10, 12}; + {1, 3, 7, 8}; + {3, 7, 9, 10, 11}; + }; + pic = function(s) + local pic = 'images/dyp_bg.png'; + local cnt = 0; + for i = 1, #s.active_parts do + if (s.active_parts[i]) then + cnt = cnt + 1; + pic = pic .. ";images/dyp_" .. tostring(i) .. ".png"; + end; + end; + if (cnt > 0) then + return pic; + else + return nil; + end; + end; + nam = "Храм Ираафаанотра, потайной зал"; + dsc = function(s) + if me() == player_learr then + return [[Леарр оказывается в огромном зале. Мягкий, едва заметный свет исходит из самих стен. В центре зала находятся восемь рычагов, рядом с которыми нанесены символы. ]]; + else + return [[Большой круглый зал. Мягкий, едва заметный свет исходит из самих стен. В центре зала расположено восемь рычагов, рядом с которыми нанесены какие-то символы. ]]; + end; + end; + entered = function(s) + if not s.solved then + return [[Позади вас металлическая плита почти бесшумно сдвигается, закрывая вход. ]]; + end; + end; + obj = { + iraa_temple_button_ctr("iraa_temple_b1", 1); + iraa_temple_button_ctr("iraa_temple_b2", 2); + iraa_temple_button_ctr("iraa_temple_b3", 3); + iraa_temple_button_ctr("iraa_temple_b4", 4); + iraa_temple_button_ctr("iraa_temple_b5", 5); + iraa_temple_button_ctr("iraa_temple_b6", 6); + iraa_temple_button_ctr("iraa_temple_b7", 7); + iraa_temple_button_ctr("iraa_temple_b8", 8); + }; + way = { + kh_vroom("Наверх", "iraa_temple_hidden_stairs"):disable(); + kh_vroom("Вниз", "iraa_temple_hidden_storage"):disable(); + }; + check = function(s, index) + s.pressed_buttons[index] = not s.pressed_buttons[index]; + + for i = 1, #s.active_parts do + s.active_parts[i] = false; + end; + + for i = 1, #s.pressed_buttons do + if (s.pressed_buttons[i]) then + for j = 1, #s.buttons[i] do + s.active_parts[s.buttons[i][j]] = not s.active_parts[s.buttons[i][j]]; + end; + end; + end; + + s.solved = true; + for i = 1, #s.active_parts do + if (not s.active_parts[i]) then + s.solved = false; + break; + end; + end; + + if (s.solved) then + path("Наверх"):enable(); + path("Вниз"):enable(); + end; + + return s.solved; + end; +}; + +iraa_temple_hidden_storage = room { + nam = "iraa_temple_hidden_storage"; + disp = [[Храм Ираафаанотра, хранилище]]; + underwater = true; + dsc = function(s) + if me() == player_learr then + return [[Леарр находится в небольшой круглой комнате. Стены комнаты, как и в других скрытых помещенях храма, излучают слабый свет. ]]; + else + return [[Стены этой небольшой комнаты излучают слабый свет. ]]; + end; + end; + way = { + kh_vroom("Наверх", "iraa_temple_hidden_hall"); + }; + obj = { + "iraa_temple_hidden_pedestal" + }; +}; + +iraa_temple_hidden_pedestal = obj { + var { + state = 0; + }; + nam = "iraa_temple_hidden_pedestal"; + dsc = function(s) + if s.state == 0 then + return [[В центре установлен металлический пьедестал, на котором лежит металлическая {табличка}. ]]; + else + return [[В центре установлен металлический {пьедестал}. ]]; + end; + end; + act = function(s) + if s.state == 0 then + s.state = 1; + item_lse_map.state = item_lse_map.state + 1; + return [[Вы забираете металлическую табличку себе. ]]; + else + return [[Вьедестал пуст. ]]; + end; + end; +}; diff --git a/atlantis_iyhehevjiarr.lua b/atlantis_iyhehevjiarr.lua --- a/atlantis_iyhehevjiarr.lua +++ b/atlantis_iyhehevjiarr.lua @@ -17,13 +17,9 @@ char_aikerjarr_lev = obj { disp = "Аикерьярр"; dsc = function(s) if (stead.nameof(where(s)) == s.home) then - return [[ - {Аикерьярр} стоит перед иллюминатором. ^ - ]]; + return [[{Аикерьярр} стоит перед иллюминатором. ]]; else - return [[ - {Аикерьярр} смотрит на вас. ^ - ]]; + return [[{Аикерьярр} смотрит на вас. ]]; end; end; home = "leviathan_wheelhouse"; @@ -47,18 +43,12 @@ char_aikerjarr_lev = obj { end; act = function(s) if (not where(pl).leviathan) then - return [[ - Вы не можете говорить с ним сейчас. - ]]; + return [[Вы не можете говорить с ним сейчас.]]; end; if (atl_iyh_shockfish_dead) then - return [[ - Аикерьярр молчит. - ]]; + return [[Аикерьярр молчит. ]]; else - return [[ - "Вы что-нужно-делайте. Я наблюдаю". - ]]; + return [[Аикерьярр недовольно рычит: "Ты-хевьяр что-нужно-делай". ]]; end; end; }; @@ -77,7 +67,7 @@ iyh_far_from_entrance_foot = room { Через иллюминаторы вы видите вдалеке высокую скалу, простирающуюся на многие километры в обе стороны. Прямо перед вами, в скале вы видите массивные каменные двери храма, застывшие в открытом состоянии. Над дверьми вы видите небольшой козырек, поддерживаемый массивными колоннами. ]]; way = { - kh_vroom("В Левиафан", "leviathan_airlock"); + kh_vroom("В Левиафан", "leviathan_airlock"); }; }; @@ -90,12 +80,11 @@ iyh_far_from_entrance = dlg { ]]; nam = "Левиафан, рубка"; hideinv = true; + leviathan = true; entered = function(s) - atl_iyh_state = 7; if (not s.visited) then - return [[ - Вы прибываете на место. - ]]; + atl_iyh_state = 7; + return [[Вы прибываете на место. ]]; end; end; dsc = function(s) @@ -112,18 +101,31 @@ iyh_far_from_entrance = dlg { end; end; phr = { - {tag="advance", always=true, "[Подойти ближе]", [[Послушные вашей воле, двигатели Левиафана приводят субмарину в движение и вы плавно приближаетесь ко входу в храм. ]], code [[ walk('iyh_near_temple'); ]]}; + {tag="advance", always=true, "[Подойти ближе]", [[Послушные вашей воле, двигатели Левиафана приводят субмарину в движение и вы плавно приближаетесь ко входу в храм. ]], code [[ + move(submarine_leviathan, "iyh_near_temple_foot"); + walk('iyh_near_temple'); + ]]}; {tag="wait", "[Ждать]", [[Вы решаете подождать до наступления ночи и это правдывает себя. Как только последние лучи солнца перестают пробиваться сквозь толщу воды, скат выбирается из своего логова и отправляется на охоту. ]], code [[ lifeon(iyh_far_from_entrance); atl_iyh_shockfish_away = 30; ]]}; - {tag="light_temple", always=true, "[Осветить вход в храм]", [[Мощный луч света падает на вход в храм. Вы видите внутри какое-то движение и изнутри выплывает огромный скат. ]], code [[ iyh_fight.distance = 1000; walk('iyh_fight'); ]]}; + {tag="light_temple", always=true, "[Осветить вход в храм]", function(s) + if (atl_iyh_shockfish_away == 0 and not atl_iyh_shockfish_dead and not atl_iyh_shockfish_left) then + iyh_fight.distance = 1000; walk('iyh_fight'); + return [[Мощный луч света падает на вход в храм. Вы видите внутри какое-то движение и изнутри выплывает огромный скат. ]]; + else + return [[Мощный луч света падает на вход в храм. Ничего не происходит. ]]; + end; + end}; {tag="light_wall_r", "[Осветить скалы справа от храма]", [[Мощный луч света освещает скалы по правую сторону от храма. Он плавно скользит по поверхности скалы, пока вы не натыкаетесь на то, что отсюда кажется вам каким-то ущельем. Возможно следует изучить его? ]], code [[ iyh_near_temple:pon('ravine'); pon('ravine'); ]]}; {tag="light_wall_l", "[Осветить скалы слева от храма]", [[Мощный луч света освещает скалы по левую сторону от храма. Он плавно скользит по поверхности скалы, однако так и не натыкается ни на что интересное. ]]}; - {tag="ravine", false, always=true, "[Подойти ко входу в ущелье]", [[Вы поворачиваете штурвал и включаете двигатели Левиафана. Через несколько минут вы оказываетесь у входа в ущелье. ]], code [[ walk('iyh_ravine_entry'); ]]}; + {tag="ravine", false, always=true, "[Подойти ко входу в ущелье]", [[Вы поворачиваете штурвал и включаете двигатели Левиафана. Через несколько минут вы оказываетесь у входа в ущелье. ]], code [[ + move(submarine_leviathan, "iyh_ravine_entry_foot"); + walk('iyh_ravine_entry'); + ]]}; {tag="away", always=true, "[Отойти от штурвала]", code = [[ walk('leviathan_wheelhouse'); ]]}; @@ -275,7 +277,18 @@ iyh_fight_torpedo_temple = obj { return [[Цель слишком далеко. ]]; else atl_iyh_entrance_destroyed = true; - return [[Торпеда попадает в аккурат над храмом и вход оказывается завален тяжелыми глыбами. ]]; + + pr [[Торпеда попадает в аккурат над храмом и вход оказывается завален тяжелыми глыбами. ]]; + if (ArrayUtils.indexOf(pl.party, 'learr') ~= 0) then + pr [[Леарр в ярости поднимается в рубку и кричит на вас: "Что ты делаешь?!"^Она с неприязнью смотрит на вас и удаляется к себе в каюту. ]]; + rel_learr = rel_learr - 1; + char_learr.home = "leviathan_cabin_3"; + leviathan_cabin_3.lock = true; + elseif (ArrayUtils.indexOf(pl.party, 'aikerjarr') ~= 0) then + pr [[Аикерьярр отворачивается от иллюминатора и со злобой смотрит на вас: "Ты за-это-ответишь he'rr". ]]; + atl_rep_iraa = atl_rep_iraa - 1; + atl_rep_dyp = atl_rep_dyp - 1; + end; end; end; }; @@ -304,18 +317,23 @@ iyh_fight_torpedo = obj { pr "Вы стреляете торпедой в ската. Торпеда взрывается достигнув цели и разрывает ската. Вода краснеет от крови, а вы теперь можете безопасно приблизиться к храму. "; if (ArrayUtils.indexOf(pl.party, 'learr') ~= 0) then - pr [[Леарр в ярости поднимается в рубку и кричит на вас: "Что ты делаешь ненавистный-a'rr?!" ]]; + pr [[Леарр в ярости поднимается в рубку и кричит на вас: "Что ты делаешь ненавистный-a'rr?!"^Она с неприязнью смотрит на вас и удаляется к себе в каюту. ]]; + rel_learr = -99; + atl_rep_iraa = atl_rep_iraa - 1; + atl_rep_dyp = atl_rep_dyp - 1; + char_learr.home = "leviathan_cabin_3"; + leviathan_cabin_3.lock = true; elseif (ArrayUtils.indexOf(pl.party, 'aikerjarr') ~= 0) then pr [[Аикерьярр отворачивается от иллюминатора и со злобой смотрит на вас: "Ты за-это-ответишь he'rr". ]]; end; - - if (math.abs(iyh_fight.temple_distance) < 100) then + walk("preview_unavailable_rayfish"); + --[[if (math.abs(iyh_fight.temple_distance) < 100) then walk("iyh_near_temple"); else walk("iyh_far_from_entrance"); end; - return; + return;]] end; return iyh_fight:maketurn(); end; @@ -346,7 +364,7 @@ iyh_fight_recharge = obj { nam = "iyh_fight_torpedo"; dsc = "{Перезарядить торпеды}^"; act = function(s) - --Если в партии нет никого кроме Леарр/Аикерьярра, то игрок перезаряжает торопеды сам, иначе - отдает преказ + --Если в партии нет никого кроме Леарр/Аикерьярра, то игрок перезаряжает торопеды сам, иначе -- отдает приказ if (ArrayUtils.indexOf(pl.party, 'wright') ~= 0 or ArrayUtils.indexOf(pl.party, 'radcliffe') ~= 0) then pr "Вы отдаете по телефону приказ перезарядить торпедные аппараты. "; else @@ -497,6 +515,7 @@ iyh_ravine_entry = room { ]]; dsc = [[Левиафан находится у входа в ущелье. Вдалеке по левому борту, на юго-западе, вы видите вход в навьярский храм. ]]; hideinv = true; + leviathan = true; way = { kh_vroom("Отойти от штурвала", function(s) return "leviathan_wheelhouse"; @@ -506,9 +525,26 @@ iyh_ravine_entry = room { iyh_labyrinth.direction = 1; return "iyh_labyrinth"; end); - kh_vroom("Ко входу в храм", "iyh_near_temple"); - kh_vroom("Отойти назад", "iyh_far_from_entrance"); + kh_vroom("Ко входу в храм", function(s) + move(submarine_leviathan, "iyh_near_temple_foot"); + return "iyh_near_temple"; + end); + kh_vroom("Отойти назад", function(s) + move(submarine_leviathan, "iyh_far_from_entrance_foot"); + return "iyh_far_from_entrance"; + end); }; + entered = function(s) + move(submarine_leviathan, iyh_ravine_entry_foot); + end; +}; + +iyh_ravine_entry_foot = room { + nam = "Ущелье"; + no_exit = [[ + Нет смысла покидать Левиафан здесь. + ]]; + view = [[Левиафан находится у входа в ущелье. Вдалеке по левому борту, на юго-западе, вы видите вход в навьярский храм. ]]; }; --[[ @@ -527,7 +563,7 @@ iyh_labyrinth_template = { [3]= {[1]={l={5, 1}, f={4,1}}, [2]={f={2,2}}}; [4]= {[1]={}, [2]={f={3,2}}}; [5]= {[1]={l={37, 1}, f={6,1} }, [2]={f={3,2}}}; - [6]= {[1]={l={7,1}, r={33, 1}}, [2]={f={5,2}}}; + [6]= {[1]={l={33, 1}, r={7,1}}, [2]={f={5,2}}}; [7]= {[1]={l={12,1}, f={11,1}, r={8,1}}, [2]={f={6,2}}}; [8]= {[1]={l={10,1}, r={9,1}}, [2]={f={7,2}}}; [9]= {[1]={}, [2]={f={8,2}}}; @@ -563,31 +599,49 @@ iyh_labyrinth_template = { iyh_labyrinth = room { var { - location = 1; + position = 1; direction = 1; }; no_exit = [[Нет смысла покидать Левиафан здесь. ]]; nam = "Штурвал Левиафана"; + leviathan = true; + forcedsc = true; + entered = function(s) + s:update(); + end; dsc = function(s) pr [[Вы находитесь в глубоком и узком ущелье. ]]; - if (iyh_labyrinth_template[s.location]["f"]) then + if (iyh_labyrinth_template[s.position][s.direction]["f"]) then pr [[Ущелье продолжается вперед. ]]; end; - if (iyh_labyrinth_template[s.location]["l"] and iyh_labyrinth_template[s.location]["r"]) then + if (iyh_labyrinth_template[s.position][s.direction]["l"] and iyh_labyrinth_template[s.position][s.direction]["r"]) then pr [[Влево и вправо уходят ответвления. ]]; - elseif (iyh_labyrinth_template[s.location]["l"]) then + elseif (iyh_labyrinth_template[s.position][s.direction]["l"]) then pr [[Влево уходит ответвление. ]]; - elseif (iyh_labyrinth_template[s.location]["r"]) then + elseif (iyh_labyrinth_template[s.position][s.direction]["r"]) then pr [[Вправо уходит ответвление. ]]; - elseif (not iyh_labyrinth_template[s.location]["f"]) then + elseif (not iyh_labyrinth_template[s.position][s.direction]["f"]) then pr [[Дальше пути нет. ]]; end; end; update = function(s) + print(s.position, s.direction); + iyh_lab_forward:disable(); + iyh_lab_left:disable(); + iyh_lab_right:disable(); + if (iyh_labyrinth_template[s.position][s.direction]["f"]) then + iyh_lab_forward:enable(); + end; + if (iyh_labyrinth_template[s.position][s.direction]["l"]) then + iyh_lab_left:enable(); + end; + if (iyh_labyrinth_template[s.position][s.direction]["r"]) then + iyh_lab_right:enable(); + end; end; obj = { + "iyh_lab_left", "iyh_lab_forward", - "iyh_lab_left", "iyh_lab_right", "iyh_lab_turn" }; @@ -601,8 +655,8 @@ iyh_lab_forward = obj { local p = iyh_labyrinth.position; local d = iyh_labyrinth.direction; - if (type(iyh_labyrinth_template[p][d]) == 'string') then - walk(iyh_labyrinth_template[p][d]); + if (type(iyh_labyrinth_template[p][d]["f"]) == 'string') then + walk(iyh_labyrinth_template[p][d]["f"]); else iyh_labyrinth.position = iyh_labyrinth_template[p][d]["f"][1]; iyh_labyrinth.direction = iyh_labyrinth_template[p][d]["f"][2]; @@ -620,8 +674,8 @@ iyh_lab_left = obj { local p = iyh_labyrinth.position; local d = iyh_labyrinth.direction; - if (type(iyh_labyrinth_template[p][d]) == 'string') then - walk(iyh_labyrinth_template[p][d]); + if (type(iyh_labyrinth_template[p][d]["l"]) == 'string') then + walk(iyh_labyrinth_template[p][d]["l"]); else iyh_labyrinth.position = iyh_labyrinth_template[p][d]["l"][1]; iyh_labyrinth.direction = iyh_labyrinth_template[p][d]["l"][2]; @@ -639,8 +693,8 @@ iyh_lab_right = obj { local p = iyh_labyrinth.position; local d = iyh_labyrinth.direction; - if (type(iyh_labyrinth_template[p][d]) == 'string') then - walk(iyh_labyrinth_template[p][d]); + if (type(iyh_labyrinth_template[p][d]["r"]) == 'string') then + walk(iyh_labyrinth_template[p][d]["r"]); else iyh_labyrinth.position = iyh_labyrinth_template[p][d]["r"][1]; iyh_labyrinth.direction = iyh_labyrinth_template[p][d]["r"][2]; @@ -667,11 +721,10 @@ iyh_lab_turn = obj { iyh_rear_entrance = room { nam = "Левиафан"; - dsc = [[ - Вы находитесь в конце ущелья. Луч прожектора освещает небольшой проход в скале. - ]]; + leviathan = true; + dsc = [[Вы находитесь в конце ущелья. Луч прожектора освещает небольшой проход в скале. ]]; way = { - kh_vroom("Отойти от штурвала", "iyh_rear_entrance_foot"); + kh_vroom("Отойти от штурвала", "leviathan_wheelhouse"); kh_vroom("В ущелье", function(s) iyh_labyrinth.position = 23; iyh_labyrinth.direction = 2; @@ -685,27 +738,30 @@ iyh_rear_entrance = room { iyh_rear_entrance_foot = room { nam = "Ущелье"; - dsc = [[ - Узкое глубокое ущелье. Вы находитесь в одном из его концов. В скале вы видите небольшой проход явно искусственного происхождения. - ]]; + dsc = [[Узкое глубокое ущелье. Вы находитесь в одном из его концов. В скале вы видите небольшой проход явно искусственного происхождения. ]]; + view = [[Левиафан находится в одном из тупиков изкого глубокого ущелья. В скале перед субмариной виден небольшой проход искусственного происхождения. Преактически неприметный проем сейчас освещен ярким лучом прожектора вашей субмарины. ]]; + underwater = true; + handwheel_room = "iyh_rear_entrance"; way = { - kh_vroom("В Левиафан", "leviathan_airlock"); - kh_vroom("Внутрь", "iyh_temple_rear_corridor_entry"); + kh_vroom("В Левиафан", function(s) + if atl_iyh_state >= 8 then + return "leviathan_airlock"; + else + p [[Стоит осмотреть храм полностью перед тем, как возвращаться. ]]; + return false; + end; + end); + kh_vroom("В проход", "iyh_temple_rear_corridor_entry"); }; entered = function(s) - if (ArrayUtils.indexOf(pl.party, 'learr') ~= 0 and not char_learr.accompany) then - pr [[ - Леарр входит в шлюз вслед за вами: "Я вместе-с-тобой-пойду". - ]]; - + if (ArrayUtils.indexOf(pl.party, 'learr') ~= 0 and not char_learr.follow) then + pr [[Леарр входит в шлюз вслед за вами: "Я вместе-с-тобой-пойду". ]]; char_learr:accompany(true); char_radcliffe:accompany(false); char_wright:accompany(false); char_anna:accompany(false); - elseif (ArrayUtils.indexOf(pl.party, 'aikerjarr') ~= 0 and not char_aikerjarr_lev.accompany) then - pr [[ - Аикерьярр входит в шлюз вслед за вами: "Я вместе-с-тобой-пойду". - ]]; + elseif (ArrayUtils.indexOf(pl.party, 'aikerjarr') ~= 0 and not char_aikerjarr_lev.follow) then + pr [[Аикерьярр входит в шлюз вслед за вами: "Я с-тобой-пойду". ]]; char_aikerjarr_lev:accompany(true); char_radcliffe:accompany(false); char_wright:accompany(false); @@ -724,6 +780,7 @@ iyh_temple_rear_corridor_entry = room { dsc = [[ Темный узкий и невысокий коридор. По обе стороны коридора вы видите дверные проемы. ]]; + underwater = true; way = { kh_vroom("Выйти", "iyh_rear_entrance_foot"); kh_vroom("В левую комнату", "iyh_left_room_1"); @@ -734,24 +791,22 @@ iyh_temple_rear_corridor_entry = room { iyh_temple_rear_corridor_middle = room { nam = "Коридор"; - dsc = [[ - Темный узкий и невысокий коридор. По обе стороны коридора вы видите дверные проемы. - ]]; + dsc = [[Темный узкий и невысокий коридор. По обе стороны коридора вы видите дверные проемы. ]]; + underwater = true; way = { - kh_vroom("К выходу", "iyh_temple_rear_corridor_entry"); + kh_vroom("К задней двери", "iyh_temple_rear_corridor_entry"); kh_vroom("В левую комнату", "iyh_left_room_2"); kh_vroom("В правую комнату", "iyh_right_room_2"); - kh_vroom("Пройти дальше", "iyh_temple_rear_corridor_end"); + kh_vroom("К главному залу", "iyh_temple_rear_corridor_end"); }; }; iyh_temple_rear_corridor_end = room { nam = "Коридор"; - dsc = [[ - Темный узкий и невысокий коридор. По обе стороны коридора вы видите дверные проемы. - ]]; + dsc = [[Темный узкий и невысокий коридор. По обе стороны коридора вы видите дверные проемы. Перед вами расположен проход, ведущий в основное помещение храма. ]]; + underwater = true; way = { - kh_vroom("К выходу", "iyh_temple_rear_corridor_middle"); + kh_vroom("К задней двери", "iyh_temple_rear_corridor_middle"); kh_vroom("В левую комнату", "iyh_left_room_3"); kh_vroom("В правую комнату", "iyh_right_room_3"); kh_vroom("В главный зал", "iyh_temple_main_hall_end"); @@ -760,17 +815,16 @@ iyh_temple_rear_corridor_end = room { iyh_left_room_1 = room { nam = "Комната"; + underwater = true; dsc = [[Небольшая комната, вытесанная в скале. Внутри почти ничего не сохранилось, кроме каменного пъедестала в центре. Единственный дверной проем ведет в коридор. В стенах слева и справа от входа сделано несколько глубоких ниш. ]]; way = { kh_vroom("В коридор", "iyh_temple_rear_corridor_entry"); }; - obj = { - --"item_navjiarr_chart_2" - }; }; iyh_right_room_1 = room { nam = "Комната"; + underwater = true; dsc = [[Небольшая комната, вытесанная в скале. Внутри почти ничего не сохранилось, кроме каменного пъедестала в центре. Единственный дверной проем ведет в коридор. В стенах слева и справа от входа сделано несколько глубоких ниш. ]]; way = { kh_vroom("В коридор", "iyh_temple_rear_corridor_entry"); @@ -782,17 +836,16 @@ iyh_right_room_1 = room { iyh_left_room_2 = room { nam = "Комната"; + underwater = true; dsc = [[Небольшая комната, вытесанная в скале. Внутри почти ничего не сохранилось, кроме каменного пъедестала в центре. Единственный дверной проем ведет в коридор. В стенах слева и справа от входа сделано несколько глубоких ниш. ]]; way = { kh_vroom("В коридор", "iyh_temple_rear_corridor_middle"); }; - obj = { - --"item_navjiarr_chart_3" - }; }; iyh_right_room_2 = room { nam = "Комната"; + underwater = true; dsc = [[Небольшая комната, вытесанная в скале. Внутри почти ничего не сохранилось, кроме каменного пъедестала в центре. Единственный дверной проем ведет в коридор. В стенах слева и справа от входа сделано несколько глубоких ниш. ]]; way = { kh_vroom("В коридор", "iyh_temple_rear_corridor_middle"); @@ -804,14 +857,14 @@ iyh_right_room_2 = room { iyh_left_room_3 = room { nam = "Комната"; + underwater = true; dsc = [[Небольшая комната, вытесанная в скале. Внутри почти ничего не сохранилось, кроме каменного пъедестала в центре. Единственный дверной проем ведет в коридор. ]]; way = { kh_vroom("В коридор", "iyh_temple_rear_corridor_end"); kh_vroom("В скрытый проход", "iyh_temple_hidden_room_1"):disable(); }; obj = { - --"item_navjiarr_chart_1" - "iyh_old_navjiarr_body", + "iyh_old_navjiarr_body", "iyh_item_record", "iyh_room_wall", "iyh_room_wall_gap" @@ -843,7 +896,7 @@ iyh_item_record = obj { inv = function(s) --Написать исходный навьярский вариант таблички if (language_known) then - return [[Табличка гласит: "Те, кто найдут это, пусть знают, что здесь покоится истинный глаз Дипатреанотра, служащий разгадкой этого храма. Знайте, читающие это, что реликвию я взял для способствования осуществления пророчества о спящем в глубине. Для открытия храма, взгляните истинным глазом напротив моего ложа. Другие фрагменты карты, ведущей к цели лежат в двух близлежащих городах. Еще два - в далеких землях, в местах известных как Венаэданотр и Нлейисланотр". Чуть ниже дописано: "Если Вилрьярр еще здесь, отпустите его. Ему незачем оставаться здесь". ]]; + return [[Табличка гласит: "Те, кто найдут это, пусть знают, что здесь покоится истинный глаз Дипатреанотра, служащий разгадкой этого храма. Знайте, читающие это, что реликвию я взял для способствования осуществления пророчества о спящем в глубине. Для открытия храма, взгляните истинным глазом напротив моего ложа. Другие фрагменты карты, ведущей к цели лежат в двух близлежащих городах. Еще два -- в далеких землях, в местах известных как Венаэданотр и Нлейисланотр". Чуть ниже дописано: "Если Вилрьярр еще здесь, отпустите его. Ему незачем оставаться здесь". ]]; else return [[Табличка содержит навьярские письмена, которые вы не понимаете. ]]; end; @@ -858,8 +911,20 @@ iyh_item_amulet = obj { iyh_room_wall = obj { nam = "iyh_room_wall"; - dsc = [[{Стена} слева от входа не содержит ниш, в отличие от стен в других комнатах. ]]; - act = [[Гладкая каменная стена. Глубокая трещина от потолка до пола пересекает ее посередине. Вы не видите ничего необычного. ]]; + dsc = function(s) + if disabled(iyh_room_wall_gap) then + return [[Одна из стен комнаты раздвинулась в стороны, открывая проход в скрытое помещение храма. ]]; + else + return [[{Стена} слева от входа не содержит ниш, в отличие от стен в других комнатах. ]]; + end; + end; + act = function(s) + if disabled(iyh_room_wall_gap) then + return [[Гладкая каменная стена раздвинулась в стороны, открывая проход в скрытое помещение храма. ]]; + else + return [[Гладкая каменная стена. Глубокая трещина от потолка до пола пересекает ее посередине. Вы не видите ничего необычного. ]]; + end; + end; }; iyh_room_wall_gap = obj { @@ -868,6 +933,7 @@ iyh_room_wall_gap = obj { act = function(s) if (iyh_looking_glass.seen) then path('В скрытый проход'):enable(); + s:disable(); return [[Вы осторожно нащупываете скрытую внутри трещины кнопку и нажимаете ее. Каменные плиты отодвигаются в стороны, образуя проход в скрытое помещение храма. ]]; else return [[Просто трещина, ничего интересного. ]]; @@ -886,13 +952,14 @@ iyh_looking_glass = obj { use = function(s, o) if (o == iyh_room_wall or o == iyh_room_wall_gap) then s.seen = true; - return "Через трубу стена выглядит совсем иначе - картинка странным образом искажается, позволяя видеть детали, скрытые от обычного взора. Стоя прямо напротив трещины и глядя внутрь, вы замечаете небольшой прямоугольный выступ, примерно на уровне шеи. "; + return "Через трубу стена выглядит совсем иначе -- картинка странным образом искажается, позволяя видеть детали, скрытые от обычного взора. Стоя прямо напротив трещины и глядя внутрь, вы замечаете небольшой прямоугольный выступ, примерно на уровне шеи. "; end; end; }; iyh_right_room_3 = room { nam = "Комната"; + underwater = true; dsc = [[Небольшая комната, вытесанная в скале. Внутри почти ничего не сохранилось, кроме каменного пъедестала в центре. Единственный дверной проем ведет в коридор. В стенах слева и справа от входа сделано несколько глубоких ниш. ]]; way = { kh_vroom("В коридор", "iyh_temple_rear_corridor_end"); @@ -905,6 +972,7 @@ iyh_right_room_3 = room { iyh_temple_hidden_room_1 = room { nam = "iyh_temple_hidden_room_1"; + underwater = true; disp = "Скрытая комната"; dsc = [[Небольшая комната, вытесанная в скале. Надежно спрятанная от посторонних глаз, она хранила свои тайны многие столетия, пока вы не открыли ее. Сейчас одна из стен ее раскрылась, открывая проход внутрь. ]]; way = { @@ -949,6 +1017,7 @@ iyh_temple_hidden_wall_1 = obj { iyh_temple_hidden_room_2 = room { nam = "iyh_temple_hidden_room_2"; + underwater = true; disp = "Скрытая комната"; dsc = [[Небольшая комната, вытесанная в скале. Надежно спрятанная от посторонних глаз, она хранила свои тайны многие столетия, пока вы не открыли ее. ]]; way = { @@ -1026,13 +1095,10 @@ iyh_shockfish = obj { iyh_temple_main_hall_enter = function(s) remove(iyh_shockfish, here()); - print("forfag"); if (atl_iyh_shockfish_away == 0 and atl_iyh_shockfish_away and not atl_iyh_shockfish_dead and not atl_iyh_shockfish_left) then if have(iyh_item_amulet) then - print("forfag1"); put(iyh_shockfish, here()); else - print("forfag2"); walk("game_over_shockfish_2"); end; end; @@ -1040,6 +1106,7 @@ end; iyh_temple_main_hall_end = room { nam = "Храм"; + underwater = true; dsc = [[Главный зал древнего навьярского святилища. В стенах слева и справа вырезаны небольшие углубления, на которых некогда покоились ценные реликвии. Сейчас большинство из них пусты. Потолок находится на высоте нескольких десятков метров, но ни лестниц, ни уступов нет. Вы находитесь в дальнем конце зала. Массивная дверь ведет в задние помещения храма. ]]; enter = iyh_temple_main_hall_enter; way = { @@ -1050,6 +1117,7 @@ iyh_temple_main_hall_end = room { iyh_temple_main_hall_middle = room { nam = "Храм"; + underwater = true; dsc = [[ Главный зал древнего навьярского святилища. В стенах слева и справа вырезаны небольшие углубления, на которых некогда покоились ценные реликвии. Сейчас большинство из них пусты. Потолок находится на высоте нескольких десятков метров, но ни лестниц, ни уступов нет. Слева и справа от вас вы видите небольшие проемы, ведущие в боковые помещения. ]]; @@ -1058,7 +1126,7 @@ iyh_temple_main_hall_middle = room { }; enter = iyh_temple_main_hall_enter; way = { - kh_vroom("К выходу", "iyh_temple_main_hall_entry"); + kh_vroom("К выходу из храма", "iyh_temple_main_hall_entry"); kh_vroom("В конец зала", "iyh_temple_main_hall_end"); kh_vroom("Налево", "iyh_temple_left_hall"); kh_vroom("Направо", "iyh_temple_right_hall"); @@ -1067,6 +1135,7 @@ iyh_temple_main_hall_middle = room { iyh_temple_main_hall_entry = room { nam = "Храм"; + underwater = true; dsc = [[ Главный зал древнего навьярского святилища. В стенах слева и справа вырезаны небольшие углубления, на которых некогда покоились ценные реликвии. Сейчас большинство из них пусты. Потолок находится на высоте нескольких десятков метров, но ни лестниц, ни уступов нет. Вы находитесь у входа в зал. ]]; @@ -1077,8 +1146,8 @@ iyh_temple_main_hall_entry = room { end; end; way = { - kh_vroom("Выйти", "iyh_near_temple_foot"); - kh_vroom("Пройти дальше", "iyh_temple_main_hall_middle"); + kh_vroom("Выйти из храма", "iyh_near_temple_foot"); + kh_vroom("В центр зала", "iyh_temple_main_hall_middle"); }; obj = { "item_temple_disk" @@ -1087,7 +1156,8 @@ iyh_temple_main_hall_entry = room { iyh_temple_left_hall = room { nam = "Храм"; - dsc = [[Вы находитесь в одной из боковых комнат храма. Небольшое помещение - не более десятка метров в ширину. ]]; + underwater = true; + dsc = [[Вы находитесь в одной из боковых комнат храма. Небольшое помещение -- не более десятка метров в ширину. ]]; way = { kh_vroom("В главный зал", "iyh_temple_main_hall_middle"); kh_vroom("В скрытое помещение", "iyh_temple_hidden_room_1"):disable(); @@ -1102,8 +1172,9 @@ iyh_temple_left_hall = room { iyh_temple_right_hall = room { nam = "Храм"; + underwater = true; dsc = [[ - Вы находитесь в одной из боковых комнат храма. Небольшое помещение - не более десятка метров в ширину. + Вы находитесь в одной из боковых комнат храма. Небольшое помещение -- не более десятка метров в ширину. ]]; checkCoder = function(s, phrase) if (phrase == "aed'rr") then @@ -1151,6 +1222,7 @@ iyh_temple_answer_hall_plaque = obj { iyh_temple_descent_l = darkroom { nam = "Храм, спуск"; + underwater = true; dsc_halflit = [[Вы идете по длинной крутой лестнице, вырезанной в толще скалы. Она уходит куда-то вглубь земли, под храм. ]]; dsc_dark = [[Вы идете по длинной крутой лестнице, вырезанной в толще скалы. Она уходит куда-то вглубь земли, под храм. В темноте вы ничего не видите. ]]; way = { @@ -1162,6 +1234,7 @@ iyh_temple_descent_l = darkroom { iyh_temple_descent_r = darkroom { nam = "Храм, спуск"; + underwater = true; dsc_halflit = [[Вы идете по длинной крутой лестнице, вырезанной в толще скалы. Она уходит куда-то вглубь земли, под храм. ]]; dsc_dark = [[Вы идете по длинной крутой лестнице, вырезанной в толще скалы. Она уходит куда-то вглубь земли, под храм. В темноте вы ничего не видите. ]]; way = { @@ -1172,17 +1245,19 @@ iyh_temple_descent_r = darkroom { iyh_temple_under_corridor_1 = darkroom { nam = "Под храмом"; + underwater = true; dsc_halflit = [[Темный коридор, расположенный под храмом. Скрытый от посторонних глаз, он простоял нетронутым сотни, если не тысячи лет, храня древние тайны навьяров. Слева и справа вы видите проходы, ведущие к лестницам наверх. ]]; dsc_dark = [[Темный коридор, расположенный под храмом. Скрытый от посторонних глаз, он простоял нетронутым сотни, если не тысячи лет, храня древние тайны навьяров. В темноте вы различаете едва уловимое свечение откуда-то в конце коридора. ]]; way = { - kh_vroom("На лестницу слева", "iyh_temple_right_hall", 1); - kh_vroom("На лестницу справа", "iyh_temple_right_hall", 1); + kh_vroom("На лестницу слева", "iyh_temple_descent_l", 1); + kh_vroom("На лестницу справа", "iyh_temple_descent_r", 1); kh_vroom("Дальше по коридору", "iyh_temple_under_corridor_2", 2); }; }; iyh_temple_under_corridor_2 = darkroom { nam = "Под храмом"; + underwater = true; dsc_halflit = [[Темный коридор, расположенный под храмом. Скрытый от посторонних глаз, он простоял нетронутым сотни, если не тысячи лет, храня древние тайны навьяров. ]]; dsc_dark = [[Темный коридор, расположенный под храмом. Скрытый от посторонних глаз, он простоял нетронутым сотни, если не тысячи лет, храня древние тайны навьяров. ]]; obj = { @@ -1207,7 +1282,7 @@ iyh_temple_under_plaque = obj { nam = "iyh_temple_under_plaque"; seen_level = 2; dsc = function(s) - if (pl.has_light) then + if (me().has_light) then return [[Проход дальше закрывает массивная каменная дверь. Вы не видите никаких способов открыть ее. На двери расположена небольшая черная {табличка} из неизвестного материала. ]]; elseif (language_known) then return [[Проход дальше закрывает массивная каменная дверь. Вы не видите никаких способов открыть ее. На двери расположена небольшая {табличка} из неизвестного материала. В темноте вы видите на табличке едва заметные светящиеся полосы -- очевидно они утратили свою яркость от времени. Надпись гласит: "Назови себя и ты войдешь". ]]; @@ -1220,11 +1295,15 @@ iyh_temple_under_plaque = obj { iyh_temple_under_room = darkroom { nam = "iyh_temple_under_room"; + underwater = true; disp = "Под храмом"; dsc_halflit = [[Небольшая темная комната, скрытая в глубинах древнего навьярского храма. Вы первые, кто потревожил ее за долгие столетия. В центре находится каменный пьедестал. ]]; dsc_dark = [[Небольшая темная комната, скрытая в глубинах древнего навьярского храма. В темноте вы с трудом различаете очертания предметов. ]]; obj = { - "item_lse_map" + "item_lse_map"; + }; + way = { + kh_vroom("Назад, в коридор", "iyh_temple_under_corridor_2", 1); }; }; @@ -1312,21 +1391,20 @@ iyh_pedestal = obj { else s.taken = true; take(iyh_looking_glass); - return [[Вы поднимаете покоящуюся на пьедестале подзорную трубу. ]]; + p [[Вы поднимаете покоящуюся на пьедестале подзорную трубу. ]]; + if ArrayUtils.indexOf(pl.party, 'aikerjarr') then + + end; end; end; }; iyh_near_temple = dlg { nam = "Штурвал Левиафана"; - dsc = [[ - Через иллюминаторы вы видите прямо перед собой массивные каменные двери, вытесанные в скале, возвышающейся далеко над вами. Над ними вы видите небольшой козырек, поддерживаемый массивными колоннами. Древний камень все еще хранит орнамент, выгравированный на дверях, колоннах и ступенях лестницы. - ]]; + dsc = [[Через иллюминаторы вы видите прямо перед собой массивные каменные двери, вытесанные в скале, возвышающейся далеко над вами. Над ними вы видите небольшой козырек, поддерживаемый массивными колоннами. Древний камень все еще хранит орнамент, выгравированный на дверях, колоннах и ступенях лестницы. ]]; enter = function(s) if (atl_iyh_shockfish_away == 0 and not atl_iyh_shockfish_dead and not atl_iyh_shockfish_left) then - pr [[ - Как только вы приближаетесь, скат выплывает из свого жилища, чтобы прогнать посмевших приблизиться к нему. - ]]; + pr [[Как только вы приближаетесь, скат выплывает из свого жилища, чтобы прогнать посмевших приблизиться к нему. ]]; iyh_fight.temple_distance = 50; iyh_fight.distance = 50; walk(iyh_fight); @@ -1338,11 +1416,15 @@ iyh_near_temple = dlg { phr = { {tag="ravine", false, always=true, "[Ко входу в ущелье]", [[ Вы поворачиваете штурвал и включаете двигатели Левиафана. Через несколько минут вы оказываетесь у входа в ущелье. - ]], code [[ walk('iyh_ravine_entry'); ]]}; - {tag="away", always=true, "[Отойти от штурвала]", code = [[ + ]], code [[ + move(submarine_leviathan, "iyh_ravine_entry_foot"); + walk('iyh_ravine_entry'); + ]]}; + {tag="away", always=true, "[Отойти от штурвала]", code = [[ walk('leviathan_wheelhouse'); ]]}; {tag="back", always=true, "[Вернуться к исходной позиции]", code = [[ + move(submarine_leviathan, "iyh_far_from_entrance_foot"); walk('iyh_far_from_entrance'); ]]}; }; @@ -1350,11 +1432,32 @@ iyh_near_temple = dlg { iyh_near_temple_foot = room { nam = "Вход в храм"; - dsc = [[ - Прямо перед собой вы видите массивные каменные двери, вытесанные в скале, возвышающейся далеко над вами. Над ними вы видите небольшой козырек, поддерживаемый массивными колоннами. Древний камень все еще хранит орнамент, выгравированный на дверях, колоннах и ступенях лестницы. - ]]; + underwater = true; + dsc = [[Прямо перед собой вы видите массивные каменные двери, вытесанные в скале, возвышающейся над вами. Над ними вы видите небольшой козырек, поддерживаемый массивными колоннами. Древний камень все еще хранит орнамент, выгравированный на дверях, колоннах и ступенях лестницы. ]]; + view = [[Прямо перед собой вы видите массивные каменные двери, вытесанные в скале, возвышающейся над вами. Над ними вы видите небольшой козырек, поддерживаемый массивными колоннами. Древний камень все еще хранит орнамент, выгравированный на дверях, колоннах и ступенях лестницы. ]]; + entered = function(s) + if (ArrayUtils.indexOf(pl.party, 'aikerjarr') ~= 0 and not char_aikerjarr_lev.follow) then + pr [[Аикерьярр входит в шлюз вслед за вами: "Я с-тобой-пойду". ]]; + char_aikerjarr_lev:accompany(true); + char_radcliffe:accompany(false); + char_wright:accompany(false); + char_anna:accompany(false); + end; + + path("В Левиафан"):disable(); + if (where(submarine_leviathan) == here()) then + path("В Левиафан"):enable(); + end; + end; way = { - kh_vroom("В Левиафан", "leviathan_airlock"); + kh_vroom("В Левиафан", function(s) + if atl_iyh_state >= 8 then + return "leviathan_airlock"; + else + p [[Стоит осмотреть храм полностью перед тем, как возвращаться. ]]; + return false; + end; + end); kh_vroom("В храм", "iyh_temple_main_hall_entry"); }; }; @@ -1362,170 +1465,163 @@ iyh_near_temple_foot = room { iyh_outro_svetlova = room { nam = "Атлантида, док Левиафана"; dsc = function(s) - pr [[ - При выходе из Левиафана, вас встречает Екатерина Светлова. Вы рассказываете ей обо всем произошедшем. - ]]; + pr [[При выходе из Левиафана, вас встречает Екатерина Светлова. Вы рассказываете ей обо всем произошедшем. ]]; if (atl_iyh_shockfish_dead) then - pr [[ - Она забирает у вас артефакты для изучения, но крайне недовольна убийством ската: "Артефакты, конечно будут полезны, но то что вы сделали ставит под угрозу дальнейшее существование станции. Хвала небесам, что рыбни об этом не знают и может быть, не узнают о произошедшем".^ - ]]; + pr [[Она забирает у вас артефакты для изучения, но крайне недовольна убийством ската: "Артефакты, конечно, будут полезны, но то что вы сделали ставит под угрозу дальнейшее существование станции. Хвала небесам, что рыбни об этом не знают и может быть, не узнают о произошедшем".^ ]]; elseif (atl_iyh_entrance_destroyed) then - pr [[ - Она забирает у вас артефакты для изучения, но огорчена разрушением святилища: "Очень жаль, что пришлось разрушить храм - там наверняка было еще много интересного".^ - ]]; + pr [[Она забирает у вас артефакты для изучения, но огорчена разрушением святилища: "Очень жаль, что пришлось разрушить храм -- там наверняка было еще много интересного".^ ]]; else - pr [[ - Она забирает у вас артефакты для изучения и благодарит вас: "Отлично, вы оказали нам неоценимую услугу. Скоро я верну реликвию в Дипатреанотр и ситуация будет исчерпана".^ - ]]; + pr [[Она забирает у вас артефакты для изучения и благодарит вас: "Отлично, вы оказали нам неоценимую услугу. Скоро я верну реликвию в Дипатреанотр и ситуация будет исчерпана".^ ]]; end; - --[[pr [ [ - Вы отправляетесь в свою комнату, чтобы отдохнуть. Утром, к вам входит Екатерина и отдает часть табличек, найденных вами: "Это вам понадобится в поисках отца. Эти таблички помогут вам проследовать путем Уильяма. Я уже говорила, что он отправился на поиски древнего навьярского города, Лсэрианотра. Должно быть, он сделал копии этих диаграмм. Но здесь не все просто - это лишь фрагменты карт и чтобы воспользоваться ими, вам придется найти недостающие части. К сожалению, я не знаю, где их можно найти. Но, скорее всего, знают навьяры. - ] ]; - if (not atl_iof_learr_dead) then - pr [ [ - Вам следует начать с Ираафаанотра - родного города Леарр. Наверняка, она согласится отправиться туда с вами". - ] ]; - else - pr [ [ - Рядом с нами расположено два города - Дипатреанотр и Ираафаанотр, и я советую вам их посетить". - ] ]; - end;]] - pr [[ - Вы отправляетесь в свою комнату, чтобы отдохнуть. Утром, вас вызывает по телефону Екатерина Светлова: "Дрейк, пройдите ко мне. У меня есть кое что для вас". - ]]; + pr [[Вы отправляетесь в свою комнату, чтобы отдохнуть. Утром, вас вызывает по телефону Екатерина Светлова: "Дрейк, пройдите ко мне. У меня есть кое-что для вас". ]]; end; entered = function(s) atl_iyh_artifacts_on_atlantis = true; - remove(item_statuette); - remove(item_temple_disk); - remove(item_legend_of_temple); - remove(item_legend_of_dark_source); - remove(item_legend_of_first_city); - remove(item_legend_of_hunter); - remove(item_navjiarr_chart_1); - remove(item_navjiarr_chart_2); - remove(item_navjiarr_chart_3); + remove(item_statuette, pl); + remove(item_temple_disk, pl); + remove(item_legend_of_temple, pl); + remove(item_legend_of_dark_source, pl); + remove(item_legend_of_first_city, pl); + remove(item_legend_of_hunter, pl); + end; obj = { - vroom("Продолжить", "atl_luna_drake_room"); + vway("Продолжить", "{Продолжить}", "atl_luna_drake_room"); }; }; iyh_outro_aikerrjarr = room { nam = "Атлантида, док Левиафана"; dsc = function(s) - pr [[ - При выходе из Левиафана, вас встречает Екатерина Светлова. Аикерьярр сразу же требует: "Ты мне-отдашь взятое-тобой-в-храме-все". На что Светлова просит его: "Позвольте кратко взглянуть на все". Аикерьярр с явным недовольством соглашается. Пока Екатерина осматривает реликвии, вы рассказываете ей обо всем произошедшем. Как только вы заканчиваете рассказ, - ]]; - + pr [[При выходе из Левиафана, вас встречает Екатерина Светлова. Аикерьярр сразу же требует: "Ты мне-отдашь взятое-тобой-в-храме-все". На что Светлова просит его: "Позвольте кратко взглянуть на все". Аикерьярр с явным недовольством соглашается. Пока Екатерина осматривает реликвии, вы рассказываете ей обо всем произошедшем. Как только вы заканчиваете рассказ, ]]; if (atl_iyh_shockfish_dead) then - pr [[ - она недовольно восклицает: "Зачем вы это сделали?!", - После чего, уже спокойнее добавляет: "Впрочем, можете не отвечать. Что сделано то сделано".^ - ]]; + pr [[она лишь тяжело вздыхает глядя на вас, после чего уходит, махнув рукой.^ ]]; elseif (atl_iyh_entrance_destroyed) then - pr [[ - она огорченно комментирует: "Очень жаль, что пришлось разрушить храм - там наверняка было еще много интересного".^ - ]]; + pr [[она огорченно комментирует: "Очень жаль, что пришлось разрушить храм -- там наверняка было еще много интересного".^ ]]; else - pr [[ - она благодарит вас: "Отлично, вы оказали нам неоценимую услугу. Скоро я верну реликвию в Дипатреанотр и ситуация будет исчерпана".^ - ]]; + pr [[она благодарит вас: "Отлично, вы оказали нам неоценимую услугу. Скоро я верну реликвию в Дипатреанотр и ситуация будет исчерпана".^ ]]; end; - pr [[ - Вы отправляетесь в свою комнату, чтобы отдохнуть. Утром, вас вызывает по телефону Екатерина Светлова: "Дрейк, пройдите ко мне. У меня есть кое что для вас". - ]]; + pr [[Вы отправляетесь в свою комнату, чтобы отдохнуть. Утром, вас вызывает по телефону Екатерина Светлова: "Дрейк, пройдите ко мне. У меня есть кое-что для вас". ]]; end; hideinv = true; entered = function(s) - remove(item_statuette); - remove(item_temple_disk); - remove(item_legend_of_temple); - remove(item_legend_of_dark_source); - remove(item_legend_of_first_city); - remove(item_legend_of_hunter); - remove(item_navjiarr_chart_1); - remove(item_navjiarr_chart_2); - remove(item_navjiarr_chart_3); + for i in #pl.party do + if pl.party[i] == 'aikerjarr' then + table.remove(pl.party, i); + break; + end; + end; + remove(char_aikerjarr_lev, where(char_aikerjarr_lev)); + remove(item_statuette, pl); + remove(item_temple_disk, pl); + remove(item_legend_of_temple, pl); + remove(item_legend_of_dark_source, pl); + remove(item_legend_of_first_city, pl); + remove(item_legend_of_hunter, pl); end; obj = { - vroom("Продолжить", "atl_luna_drake_room"); + vway("Продолжить", "{Продолжить}", "atl_luna_drake_room"); }; }; +iyh_outro_learr_shockfish_dead = room { + nam = "Атлантида, док Левиафана"; + dsc = function(s) + return [[При выходе из Левиафана, вас встречает Екатерина Светлова. Леарр, вышедшая за вами следом, объявляет: "Я забираю-артефакты-в-Ираафаанотр". Светлова спрашивает: "Вы не разрешите нам оставить их на несколько дней для изучения?"^ Леарр отрезает: "Нет", -- и выходит из дока. Светлова вопросительно смотрит на вас и вы пересказываете ей произошедшее. Она лишь тяжело вздыхает глядя на вас, после чего уходит, махнув рукой.^Вы отправляетесь в свою комнату, чтобы отдохнуть. Утром, вас вызывает по телефону Екатерина Светлова: "Дрейк, пройдите ко мне. У меня есть кое-что для вас". ]]; + end; + hideinv = true; + entered = function(s) + for i in #pl.party do + if pl.party[i] == 'learr' then + table.remove(pl.party, i); + break; + end; + end; + leviathan_cabin_3.lock = false; + + remove(char_learr, where(char_learr)); + remove(item_statuette, pl); + remove(item_temple_disk, pl); + remove(item_legend_of_temple, pl); + remove(item_legend_of_dark_source, pl); + remove(item_legend_of_first_city, pl); + remove(item_legend_of_hunter, pl); + end; + obj = { + vway("Продолжить", "{Продолжить}", "atl_luna_drake_room"); + }; +}; + +iyh_outro_learr_temple_destroyed = room { + nam = "Атлантида, док Левиафана"; + dsc = function(s) + return [[При выходе из Левиафана, вас встречает Екатерина Светлова. Леарр, вышедшая за вами следом, объявляет: "Я забираю-артефакты-в-Ираафаанотр". Светлова спрашивает: "Вы не разрешите нам оставить их на несколько дней для изучения?"^ Леарр отрезает: "Нет", -- и выходит из дока. Светлова вопросительно смотрит на вас и вы пересказываете ей произошедшее. Она задумчиво чешет подбородок и сообщает: "Я поговорю с Леарр, отправляйтесь в свою комнату. Думаю, мне удастся все уладить".^Вы следуете ее совету и отправляетесь к себе. Утром, она выывает вас по телефону: "Дрейк, пройдите ко мне. У меня есть кое-что для вас". ]]; + end; + hideinv = true; + entered = function(s) + for i in #pl.party do + if pl.party[i] == 'learr' then + table.remove(pl.party, i); + break; + end; + end; + move(char_learr_atlantis, atl_oculus_lab_a); + leviathan_cabin_3.lock = false; + + char_learr.home = "leviathan_wardroom"; + remove(item_statuette); + remove(item_temple_disk); + remove(item_legend_of_temple); + remove(item_legend_of_dark_source); + remove(item_legend_of_first_city); + remove(item_legend_of_hunter); + end; + obj = { + vway("Продолжить", "{Продолжить}", "atl_luna_drake_room"); + }; +}; + iyh_outro_learr = dlg { nam = "Атлантида, док Левиафана"; entered = function(s) if (rel_learr > 0) then psub('rel_ok'); - return [[ - При выходе из Левиафана, вас встречает Екатерина Светлова. Леарр сразу же просит: "Ты мне-отдашь взятое-в-храме".^ - На что Светлова просит ее: "Может вы разрешите нам оставить реликвии на некоторое время?"^ - Леарр не слишком уверенно отвечает: "Старейшина это-не-одобрит. Другой-выход есть?" - - ]]; - else + else psub('rel_not_ok'); - return [[ - При выходе из Левиафана, вас встречает Екатерина Светлова. Леарр сразу же просит: "Ты мне-отдашь взятое-в-храме".^ - На что Светлова просит ее: "Может вы разрешите нам оставить реликвии на некоторое время?"^ - Леарр не слишком уверенно отвечает: "Старейшина это-не-одобрит. Другой-выход есть?" - ]]; end; + + remove(item_statuette, pl); + remove(item_temple_disk, pl); + remove(item_legend_of_temple, pl); + remove(item_legend_of_dark_source, pl); + remove(item_legend_of_first_city, pl); + remove(item_legend_of_hunter, pl); + + return [[При выходе из Левиафана, вас встречает Екатерина Светлова. Леарр сразу же просит: "Ты мне-отдашь взятое-в-храме".^ В ответ Светлова просит ее: "Может, вы разрешите нам оставить реликвии на некоторое время?"^ Леарр не слишком уверенно отвечает: "Старейшина это-не-одобрит. Другой-выход есть?" ]]; end; phr = { {tag="rel_ok"}; - {"Это очень поможет нам в поисках Уильяма", [[ - Леарр все еще неуверенно: "Я что-смогу-сделаю. Вы пока-все-оставьте". - ]], code [[ + {"Это очень поможет нам в поисках Уильяма.", [[Леарр все еще неуверенно: "Я что-смогу-сделаю. Вы пока-все-оставьте". ]], code [[ + artifacts_returned = false; atl_iyh_artifacts_on_atlantis = true; atl_rep_svetlova = atl_rep_svetlova + 1; walk("iyh_outro_learr_2"); ]]}; - {"Хорошо, забирайте реликвии", [[ - Леарр благодарит вас: "Вы можете-наш-город-посетить и реликвии-смотреть". - ]], code [[ + {"Хорошо, забирайте реликвии.", [[Леарр благодарит вас: "Вы можете-наш-город-посетить и реликвии-смотреть". ]], code [[ rel_learr = rel_learr + 1; - remove(item_statuette); - remove(item_temple_disk); - remove(item_legend_of_temple); - remove(item_legend_of_dark_source); - remove(item_legend_of_first_city); - remove(item_legend_of_hunter); - remove(item_navjiarr_chart_1); - remove(item_navjiarr_chart_2); - remove(item_navjiarr_chart_3); + artifacts_returned = true; walk("iyh_outro_learr_2"); ]]}; {tag="rel_not_ok"}; - {"Это очень поможет нам в поисках Уильяма", [[ - Леарр отвечает: "Я с-вами-не-говорю. Не позволю-реликвии-оставить. Вы можете-наш-город-посетить и реликвии-смотреть". - ]], code [[ - remove(item_statuette); - remove(item_temple_disk); - remove(item_legend_of_temple); - remove(item_legend_of_dark_source); - remove(item_legend_of_first_city); - remove(item_legend_of_hunter); - remove(item_navjiarr_chart_1); - remove(item_navjiarr_chart_2); - remove(item_navjiarr_chart_3); + {"Это очень поможет нам в поисках Уильяма.", [[Леарр отвечает: "Я не-позволю-реликвии-оставить. Вы не-надейтесь-даже". ]], code [[ + artifacts_returned = true; walk("iyh_outro_learr_2"); ]]}; - {"Хорошо, забирайте реликвии", [[ - Леарр отвечает: "Я с-вами-не-говорю. Не позволю-реликвии-оставить. Вы можете-наш-город-посетить и реликвии-смотреть". - ]], code [[ + {"Хорошо, забирайте реликвии.", [[Леарр благодарит вас: "Вы можете-наш-город-посетить и реликвии-смотреть". ]], code [[ + artifacts_returned = true; rel_learr = rel_learr + 1; - remove(item_statuette); - remove(item_temple_disk); - remove(item_legend_of_temple); - remove(item_legend_of_dark_source); - remove(item_legend_of_first_city); - remove(item_legend_of_hunter); - remove(item_navjiarr_chart_1); - remove(item_navjiarr_chart_2); - remove(item_navjiarr_chart_3); walk("iyh_outro_learr_2"); ]]}; }; @@ -1533,10 +1629,8 @@ iyh_outro_learr = dlg { iyh_outro_learr_2 = room { nam = "Атлантида"; - dsc = [[ - Вы отправляетесь в свою комнату, чтобы отдохнуть. Утром, вас вызывает по телефону Екатерина Светлова: "Дрейк, пройдите ко мне. У меня есть кое что для вас". - ]]; + dsc = [[Вы отправляетесь в свою комнату, чтобы отдохнуть. Утром, вас вызывает по телефону Екатерина Светлова: "Дрейк, пройдите ко мне. У меня есть кое-что для вас". ]]; obj = { - vroom("Продолжить", "atl_luna_drake_room"); + vway("Продолжить", "{Продолжить}", "atl_luna_drake_room"); }; }; \ No newline at end of file diff --git a/atlantis_looking_for_clues.lua b/atlantis_looking_for_clues.lua --- a/atlantis_looking_for_clues.lua +++ b/atlantis_looking_for_clues.lua @@ -17,18 +17,23 @@ atl_lfc_darkstar_dlg = dlg { }; nam = "Винсент Даркстар"; disp = "Винсент Даркстар"; - entered = function(s) + enter = function(s) psub("q1"); + if char_darkstar_dlg.state == 0 then + + char_darkstar_dlg.state = 1; + + end; s.limit = 3; q2_states = 0; - if (atl_lfc_electric) then + if (atl_lfc_electric == 1) then pon('electric'); end; - if (atl_lfc_board) then + if (atl_lfc_board == 1) then pon('board'); end; - if (atl_lfc_hallrooms) then - pon('hallrooms'); + if (atl_lfc_hallrooms == 1) then + pon('halldoors'); end; if (atl_jack_in_party) then pon("random_lie", "wright_said"); @@ -37,22 +42,13 @@ atl_lfc_darkstar_dlg = dlg { poff("random_lie", "wright_said"); pon("random_true"); end; - return [[ - Винсент Даркстар сидит за столом в своем кабинете. Он приглашает вас сесть напротив, а охранников просит покинуть помещение. ^ - Как только они выходят, Даркстар достает из под стола папку с какими-то бумагами и начинает спрашивать вас: "Где вы были, когда начался пожар?" - ]]; + return [[Винсент Даркстар сидит за столом в своем кабинете. Он приглашает вас сесть напротив, а охранников просит покинуть помещение. ^Как только они выходят, Даркстар достает из под стола папку с какими-то бумагами и начинает спрашивать вас: "Где вы были, когда начался пожар?" ]]; end; phr = { {tag="q1"}; - {"Вы меня подозреваете?", [[ - "Отвечайте на поставленный вопрос. Это не имеет значения". - ]]}; - {always=true,"Мы с Леарр разговаривали в зале А", [[ - "Хорошо. Дальше. Заметили ли вы что-то необычное в секции?" - ]], code [[ psub("q2"); ]]}; - {always=true,"Я не хочу отвечать", [[ - "Нет проблем. Следующий вопрос. Заметили ли вы что-то необычное в секции?" - ]], code [[ + {"Вы меня подозреваете?", [[Даркстар приказывает: "Отвечайте на поставленный вопрос. Это не имеет значения". ]]}; + {always=true, "Мы с Леарр разговаривали в зале А.", [[Даркстар кивает: "Хорошо. Дальше. Заметили ли вы что-то необычное в секции?" ]], code [[ psub("q2"); ]]}; + {always=true, "Я не хочу отвечать.", [[Даркстар разводит руками: "Нет проблем. Следующий вопрос. Заметили ли вы что-то необычное в секции?" ]], code [[ atl_lfc_darkstar_dlg.limit = atl_lfc_darkstar_dlg.limit - 1; psub("q2"); ]]}; @@ -61,104 +57,72 @@ atl_lfc_darkstar_dlg = dlg { if (atl_lfc_darkstar_dlg.q2_states < 2) then atl_lfc_darkstar_dlg.limit = atl_lfc_darkstar_dlg.limit - 1; end; - pr [[ - "Хорошо, идем дальше. - ]]; + pr [[Даркстар кивает: "Хорошо, идем дальше. ]]; if (atl_jack_in_party) then psub("q3_1"); - return [[ - Что делал в это время ваш друг, Джек?" - ]]; + pr [[Что делал в это время ваш друг, Джек?" ]]; else psub("q3_2"); - return [[ - Кроме вас кто-нибудь еще был в секции?" - ]]; + pr [[Кроме вас кто-нибудь еще был в секции?" ]]; end; end}; - {tag="halldoors", false, always=true,"Двери в другие залы не работали.", [[ - "Техники..." - ]], code [[ + {tag="halldoors", false, "Двери в другие залы не работали.", [[Даркстар вздыхает: "Техники..." ]], code [[ atl_lfc_darkstar_dlg.q2_states = atl_lfc_darkstar_dlg.q2_states + 1; ]]}; - {tag="board", false, always=true,"Один из электрощитов не был закрыт.", [[ - "Обычное дело на Атлантиде. Наши техники порой позволяют себе невероятную неаккуратность". - ]], code [[ + {tag="board", false, "Один из электрощитов не был закрыт.", [[Даркстар вздыхает: "Обычное дело на Атлантиде. Наши техники порой позволяют себе невероятную неаккуратность". ]], code [[ atl_lfc_darkstar_dlg.q2_states = atl_lfc_darkstar_dlg.q2_states + 1; ]]}; - {tag="electric", false, always=true,"В зале А не работали электроприборы.", [[ - "Это уже совсем ни в какие ворота не лезет". - ]], code [[ + {tag="electric", false, "В зале А не работали электроприборы.", [[Даркстар недовольно качает головой: "Это уже совсем ни в какие ворота не лезет". ]], code [[ atl_lfc_darkstar_dlg.q2_states = atl_lfc_darkstar_dlg.q2_states + 1; ]]}; {tag="q3_1"};--Что делал в это время ваш друг, Джек? - {always=true,"Он вышел в главный зал, чтобы не мешать нам", function(s) + {always=true,"Он вышел в главный зал, чтобы не мешать нам.", function(s) if (atl_lfc_darkstar_dlg.limit < 2) then psub("i1"); - return [[ - "Вы в Игнис с какой целью пришли?" - ]]; + return [[Даркстар спрашивает: "Вы в Игнис с какой целью пришли?" ]]; else walk("atl_lfc_darkstar_interlude"); - return [[ - "Хорошо. Больше у меня вопросов нет. Но я хочу вам кое-что рассказать". - ]]; + return [[Даркстар кивает: "Хорошо. Больше у меня вопросов нет. Но я хочу вам кое-что рассказать". ]]; end; end}; - {always=true,"Он был с нами", function(s) + {always=true,"Он был с нами.", function(s) if (atl_lfc_darkstar_dlg.limit < 2) then psub("i1"); - return [[ - "Вы в Игнис с какой целью пришли?" - ]]; + return [[Даркстар спрашивает: "Вы в Игнис с какой целью пришли?" ]]; else walk("atl_lfc_darkstar_interlude"); - return [[ - "Хорошо. Больше у меня вопросов нет. Но я хочу вам кое-что рассказать". - ]]; + return [[Даркстар кивает: "Хорошо. Больше у меня вопросов нет. Но я хочу вам кое-что рассказать". ]]; end; end}; - {always=true,"Не помню", function(s) + {always=true,"Не помню.", function(s) atl_lfc_darkstar_dlg.limit = atl_lfc_darkstar_dlg.limit - 1; if (atl_lfc_darkstar_dlg.limit < 2) then psub("i1"); - return [[ - "Вы в Игнис с какой целью пришли?" - ]]; + return [[Даркстар спрашивает: "Вы в Игнис с какой целью пришли?" ]]; else walk("atl_lfc_darkstar_interlude"); - return [[ - "Хорошо. Больше у меня вопросов нет. Но я хочу вам кое-что рассказать". - ]]; + return [[Даркстар кивает: "Хорошо. Больше у меня вопросов нет. Но я хочу вам кое-что рассказать". ]]; end; end}; {tag="q3_2"};--Кроме вас с Леарр кто-нибудь еще был в секции? - {always=true,"Я никого не видел", function(s) + {always=true,"Я никого не видел.", function(s) if (atl_lfc_darkstar_dlg.limit < 2) then psub("i1"); - return [[ - "Вы в Игнис с какой целью пришли?" - ]]; + return [[Даркстар спрашивает: "Вы в Игнис с какой целью пришли?" ]]; else walk("atl_lfc_darkstar_interlude"); - return [[ - "Хорошо. Больше у меня вопросов нет. Но я хочу вам кое-что рассказать". - ]]; + return [[Даркстар кивает: "Хорошо. Больше у меня вопросов нет. Но я хочу вам кое-что рассказать". ]]; end; end}; - {always=true,"Не помню", function(s) + {always=true,"Не помню.", function(s) atl_lfc_darkstar_dlg.limit = atl_lfc_darkstar_dlg.limit - 1; if (atl_lfc_darkstar_dlg.limit < 2) then psub("i1"); - return [[ - "Вы в Игнис с какой целью пришли?" - ]]; + return [[Даркстар спрашивает: "Вы в Игнис с какой целью пришли?" ]]; else walk("atl_lfc_darkstar_interlude"); - return [[ - "Хорошо. Больше у меня вопросов нет. Но я хочу вам кое-что рассказать". - ]]; + return [[Даркстар кивает: "Хорошо. Больше у меня вопросов нет. Но я хочу вам кое-что рассказать". ]]; end; end}; {tag="i1"}; @@ -166,93 +130,61 @@ atl_lfc_darkstar_dlg = dlg { if (atl_iof_learr_dead) then if (atl_lfc_darkstar_dlg.total_limit > 1) then psub("i2_1"); - return [[ - "Почему вы оставили Леарр там?" - ]]; + return [[Даркстар смотрит вам прямо в глаза и спрашивает: "Почему вы оставили Леарр там?" ]]; else psub("i3"); - return [[ - "Откуда вы узнали про скафандры?" - ]]; + return [[Даркстар спрашивает: "Откуда вы узнали про скафандры?" ]]; end; else psub("i2_2"); - return [[ - "Почему вы спасли Леарр?" - ]]; + return [[Даркстар спрашивает: "Почему вы спасли Леарр?" ]]; end; end;}; - {always=true,"Посмотреть Игнис.", [[ - "Вы знали, что Леарр там?" - ]], code [[ psub("i2_3"); ]]}; - {always=true,"Это имеет значение?", [[ - Даркстар угрожающе поднимается, опирается на стол и недовольно говорит: "Все имеет значение. Раз вы не хотите сотрудничать, придется вас изолировать до окончания расследования". - ]], code = [[ + {always=true,"Посмотреть Игнис.", [[Даркстар спрашивает: "Вы знали, что Леарр там?" ]], code [[ psub("i2_3"); ]]}; + {always=true,"Это имеет значение?", [[Даркстар угрожающе поднимается, опирается на стол и недовольно говорит: "Все имеет значение. Раз вы не хотите сотрудничать, придется вас изолировать до окончания расследования". ]], code = [[ atl_lfc_darkstar_dlg.total_limit = atl_lfc_darkstar_dlg.total_limit - 1; walk('atl_lfc_non_coop'); ]]}; {tag="i2_1"}; - {always=true,"У меня не было выбора", [[ - Даркстар угрожающе поднимается, опирается на стол и недовольно говорит: "Вам стоит еще подумать". - ]], code = [[ + {always=true,"У меня не было выбора", [[Даркстар угрожающе поднимается, опирается на стол и недовольно говорит: "Вам стоит еще подумать". ]], code = [[ atl_lfc_darkstar_dlg.total_limit = atl_lfc_darkstar_dlg.total_limit - 1; walk('atl_lfc_non_coop'); ]]}; - {always=true,"Я рассчитывал вернуться за ней позже", [[ - "Вы идиот", - Даркстар встает из-за стола и начинает ходить по комнате. Вы явно вывели его из себя. Через некоторое время он успокаивается и садится на место. - ]], code = [[ + {always=true,"Я рассчитывал вернуться за ней позже.", [["Вы идиот", -- Даркстар встает из-за стола и начинает ходить по комнате. Вы явно вывели его из себя. Через некоторое время он успокаивается и садится на место. ]], code = [[ atl_lfc_darkstar_dlg.total_limit = atl_lfc_darkstar_dlg.total_limit - 1; walk('atl_lfc_non_coop'); ]]}; - {always=true,"С чего я должен был думать об этом чудище?", [[ - _"Выкинуть бы вас за борт. Без скафандра. Жаль, что мы не ,,чудища'', как вы выражаетесь"_, - Даркстар встает из-за стола и начинает ходить по комнате. Вы явно вывели его из себя. Через некоторое время он успокаивается и садится на место. - ]], code = [[ + {always=true,"С чего я должен был думать об этом чудище?", [[_"Выкинуть бы вас за борт. Без скафандра. Жаль, что мы не ,,чудища'', как вы выражаетесь"_, -- Даркстар встает из-за стола и начинает ходить по комнате. Вы явно вывели его из себя. Через некоторое время он успокаивается и садится на место. ]], code = [[ atl_lfc_darkstar_dlg.total_limit = atl_lfc_darkstar_dlg.total_limit - 3; walk('atl_lfc_non_coop'); ]]}; {tag="i2_2"}; - {always=true,"Я не мог оставить ее умирать", [[ - "Откуда вы узнали про скафандры?" - ]], code [[ + {always=true,"Я не мог оставить ее умирать.", [[Даркстар спрашивает: "Откуда вы узнали про скафандры?"]], code [[ psub("i3"); ]]}; {tag="i2_3"}; - {always=true,"Светлова говорила, что она может быть в Игнисе", [[ - "Откуда вы узнали про скафандры?" - ]], code [[ + {always=true,"Светлова говорила, что она может быть в Игнисе.", [[Даркстар спрашивает: "Откуда вы узнали про скафандры?"]], code [[ psub("i3"); ]]}; - {always=true,"Нет", [[ - "Откуда вы узнали про скафандры?" - ]], code [[ + {always=true,"Нет.", [[Даркстар спрашивает: "Откуда вы узнали про скафандры?"]], code [[ psub("i3"); ]]}; - {always=true,"Это имеет значение?", [[ - Даркстар угрожающе поднимается, опирается на стол и недовольно говорит: "Все имеет значение. Раз вы не хотите сотрудничать, придется вас изолировать до окончания расследования". - ]], code [[ + {always=true,"Это имеет значение?", [[Даркстар угрожающе поднимается, опирается на стол и недовольно говорит: "Все имеет значение. Раз вы не хотите сотрудничать, придется вас изолировать до окончания расследования". ]], code [[ psub("i3"); ]]}; {tag = "i3"}; - {always=true,tag="wright_said", "Джек Райт сказал", [[ - "Хорошо. Больше у меня вопросов нет. Но я хочу вам кое-что рассказать". - ]], code = [[ + {always=true,tag="wright_said", "Джек Райт сказал.", [[Даркстар кивает: "Хорошо. Больше у меня вопросов нет. Но я хочу вам кое-что рассказать". ]], code = [[ walk("atl_lfc_darkstar_interlude"); ]]}; - {always=true,"Леарр сказала", [[ - "Она не могла этого знать", - Даркстар угрожающе поднимается, опирается на стол и недовольно говорит: "А я терпеть не могу, когда мне врут". - ]], code = [[ + {always=true,"Леарр сказала.", [["Она не могла этого знать", -- Даркстар угрожающе поднимается, опирается на стол и недовольно говорит: "А я терпеть не могу, когда мне врут". ]], code = [[ atl_lfc_darkstar_dlg.total_limit = atl_lfc_darkstar_dlg.total_limit - 1; walk('atl_lfc_non_coop'); ]]}; - {always=true,tag="random_lie", "Я случайно наткнулся", [[ - Даркстар угрожающе поднимается, опирается на стол и недовольно говорит: "Я думаю вам стоит еще подумать". - ]], code = [[ + {always=true,tag="random_lie", "Я случайно наткнулся.", [[Даркстар угрожающе поднимается, опирается на стол и недовольно говорит: "Я думаю вам стоит еще подумать". ]], code = [[ atl_lfc_darkstar_dlg.total_limit = atl_lfc_darkstar_dlg.total_limit - 1; walk('atl_lfc_non_coop'); ]]}; - {always=true,tag="random_true", "Я случайно наткнулся", [[ - "Хорошо. Больше у меня вопросов нет. Но я хочу вам кое-что рассказать". - ]], code = [[ + {always=true,tag="random_true", "Я случайно наткнулся.", [["Хорошо. Больше у меня вопросов нет. Но я хочу вам кое-что рассказать". ]], code = [[ walk("atl_lfc_darkstar_interlude"); ]]}; @@ -261,23 +193,27 @@ atl_lfc_darkstar_dlg = dlg { atl_lfc_darkstar_interlude = room { nam = "Винсент Даркстар"; - dsc = [[ - Винсент раскрывает папку лежающую на столе и раскладывает перед собой несколько бумаг: _"У нас есть основания полагать, что события в Игнисе - следствие саботажа. Мы считаем, что саботажник не рассчитывал, что в секции в момент пожара будет кто-либо - обычно в это время в Игнисе никого нет. Должен сказать, на станции уже давно некоторые выступают за сворачивание проекта и возвращение на поверхность. Вы прекрасно понимаете, что мы не можем просто так отправить их на поверхность - их слишком много, и если они начнут болтать - существование станции будет раскрыто. А нам этого не хотелось бы"_. Внезапно раздается звонок. Даркстар поднимает трубку телефона и отрывисто бросает туда: "Сейчас буду". Он встает и направляется к выходу, при этом просит вас: "Ждите здесь, я не надолго". - ]]; + dsc = [[Винсент раскрывает папку лежающую на столе и раскладывает перед собой несколько бумаг: _"У нас есть основания полагать, что события в Игнисе -- следствие саботажа. Мы считаем, что саботажник не рассчитывал, что в секции в момент пожара будет кто-либо -- обычно в это время в Игнисе никого нет. Должен сказать, на станции уже давно некоторые выступают за сворачивание проекта и возвращение на поверхность. Вы прекрасно понимаете, что мы не можем просто так отправить их на поверхность -- их слишком много, и если они начнут болтать -- существование станции будет раскрыто. А нам этого не хотелось бы"_. Внезапно раздается звонок. Даркстар поднимает трубку телефона и отрывисто бросает туда: "Сейчас буду". Он встает и направляется к выходу, при этом просит вас: "Ждите здесь, я ненадолго". ]]; obj = { vway("Продолжить", "{Продолжить}", "atl_lfc_darkstar_office"); }; }; +atl_lfc_office_timeout = function() + timer:stop(); + walk("atl_lfc_darkstar_interlude_2") +end; + atl_lfc_darkstar_office = room { nam = "Атлантида, Доминус, кабинет начальника СБ"; - dsc = [[ - Кабинет начальника службы безопасности почти пуст - здесь нет ничего кроме массивного металлического стола(судя по всему - бронированного) в центре и кресла перед ним. - ]]; - entered = function() + dsc = [[Кабинет начальника службы безопасности почти пуст -- здесь нет ничего кроме массивного металлического стола(судя по всему, бронированного) в центре и кресла перед ним. ]]; + entered = function(s) + game.timer = atl_lfc_office_timeout; + timer:set(5000); end; - life = function() - end; + left = function(s) + timer:stop(); + end; way = { kh_vroom("В коридор", function() pr("Дверь заперта"); @@ -295,19 +231,15 @@ atl_darkstar_papers = obj { На столе лежит оставленная Винсентом {папка с бумагами}. ]]; act = function(s) + timer:stop(); walk("atl_lfc_darkstar_interlude_2") - return [[ - Вы просматриваете бумаги - это список подозреваемых в саботаже. Здесь присутствует большая часть обитателей Атлантиды. На отдельном листе записаны несколько моментов: во-первых, Даркстар не подозревает никого из руководства, поскольку каждый из них напрямую заинтересован в развитии станции. Во-вторых, к вашему удивлению, он не подозревает вас, поскольку саботажник, судя по всему, был хорошо знаком с устройством системы электроснабжения Игниса. Основными подозреваемыми он считает Мишеля Леруа, Леонарда Голдмана и Чарльза Джонса. Все они сторонники закрытия проекта и обладают достаточными знаниями, чтобы устроить подобный саботаж. ^ - Вы слышите звук открывающегося замка и поспешно возвращаете папку в ее изначальное положение. - ]]; + return [[Вы просматриваете бумаги. Это список подозреваемых в саботаже. Здесь присутствует большая часть обитателей Атлантиды. На отдельном листе записаны несколько моментов: во-первых, Даркстар не подозревает никого из руководства, поскольку каждый из них напрямую заинтересован в развитии станции. Во-вторых, к вашему удивлению, он не подозревает вас, поскольку саботажник, судя по всему, был хорошо знаком с устройством системы электроснабжения Игниса. Основными подозреваемыми он считает Мишеля Леруа, Леонарда Голдмана и Чарльза Джонса. Все они сторонники закрытия проекта и обладают достаточными знаниями, чтобы устроить подобный саботаж. ^Вы слышите звук открывающегося замка и поспешно возвращаете папку в ее изначальное положение. ]]; end; }; atl_lfc_darkstar_interlude_2 = room { nam = "Винсент Даркстар"; - dsc = [[ - В комнату входит Винсент Даркстар и садится на свое место. Вам он говорит: "С учетом цели саботажника, я предполагаю, что следующая атака будет направлена на вывод из строя субмарин. В любом случае - я прошу вас никому не говорить о том, что я вам тут рассказал. В случае необходимости я вас вызову. Вы свободны". - ]]; + dsc = [[В комнату входит Винсент Даркстар и садится на свое место. Вам он говорит: "С учетом цели саботажника, я предполагаю, что следующая атака будет направлена на вывод из строя субмарин. В любом случае, я прошу вас никому не говорить о том, что я вам тут рассказал. В случае необходимости я вас вызову. Вы свободны". ]]; obj = { vway("Продолжить", "{Продолжить}", "atl_dom_security_office"); }; @@ -315,10 +247,7 @@ atl_lfc_darkstar_interlude_2 = room { atl_lfc_non_coop = room { nam = "Винсент Даркстар"; - dsc = [[ - После этого он снимает телефонную трубку и отдает туда приказ: "Заберите Дрейка". ^ - В комнату входят два стражника и сопровождают вас в вашу комнату. - ]]; + dsc = [[После этого он снимает телефонную трубку и отдает туда приказ: "Заберите его". ^В комнату входят два стражника и сопровождают вас в вашу комнату. ]]; obj = { kh_vway("Продолжить", "{Продолжить}", function() if (atl_lfc_darkstar_dlg.total_limit < 1) then @@ -333,41 +262,17 @@ atl_lfc_non_coop = room { atl_lfc_game_over = room { nam = "Игра окончена"; disp = "Игра окончена"; - dsc = [[ - Охранники уходят и запирают за собой дверь. Вы остаетесь один, запертый в собственной каюте. Через некоторое время вы слышите голос Даркстара по радио: "Вы останетесь под стражей до тех пор, пока мы не найдем саботажника. После этого, мы решим, что делать с вами".^ - Вам ничего не остается, кроме как ждать. Через несколько дней стражники сопровождают вас на Левиафан. Там вас запирают в одной из кают. Несколько недель Левиафан полным ходом движется в неизвестном направлении. Наконец, вас выпускают из каюты. Один из охранников сообщает вам: "В нескольких милях к северу вдоль побережья находится небольшой городок. Оттуда вы сможете добраться куда вам угодно. Мы дадим вам немного еды и достаточно денег, чтобы вы могли добраться домой".^ - Вы забираете переданные вам вещи и через несколько мгновений Левиафан скрывается под поверхностью воды. Никаких средств для возвращения на Атлантиду у вас не остается и, скорее всего, вы никогда не узнаете что стало с вашим отцом. - ]]; + dsc = [[Охранники уходят и запирают за собой дверь. Вы остаетесь один, запертый в собственной каюте. Через некоторое время вы слышите голос Даркстара по радио: "Вы останетесь под стражей до тех пор, пока мы не найдем саботажника. После этого, мы решим, что делать с вами". ^Вам ничего не остается, кроме как ждать. Через несколько дней стражники сопровождают вас на Левиафан. Там вас запирают в одной из кают. Несколько недель Левиафан полным ходом движется в неизвестном направлении. Наконец, вас выпускают из каюты. Один из охранников сообщает вам: "В нескольких милях к северу вдоль побережья находится небольшой городок. Оттуда вы сможете добраться куда вам будет угодно. Мы дадим вам немного еды и достаточно денег, чтобы вы могли добраться домой". ^Вы забираете переданные вам вещи и через несколько мгновений Левиафан скрывается под поверхностью воды. Никаких средств для возвращения на Атлантиду у вас не остается и, скорее всего, вы никогда не узнаете что стало с вашим отцом. ]]; }; atl_lfc_waiting = room { nam = "Атлантида, Луна, ваша комната"; - dsc = [[ - Охранники уходят и запирают за собой дверь. Вы остаетесь один, запертый в собственной каюте. Через некоторое время вы слышите голос Даркстара по радио: "Отдохните. Завтра мы попробуем поговорить еще раз". - ]]; + dsc = [[Охранники уходят и запирают за собой дверь. Вы остаетесь один, запертый в собственной каюте. Через некоторое время вы слышите голос Даркстара по радио: "Отдохните. Завтра мы попробуем поговорить еще раз". ]]; obj = { vway("Продолжить", "{Продолжить}", "atl_lfc_waiting"); }; }; -atl_lfc_dock_s = room { - nam = "Атлантида, Аква, док Наутилуса, у входа"; - dsc = [[ - Просторное помещение, предназнавенное для размещения субмарин, прибывающих на станцию. В настоящий момент в этом доке расположен Наутилус. Снизу, под водой, расположен огромный люк, закрывающий доступ внутрь дока. Несколько легких мостиков сконструированы таким образом, чтобы их расположение легко можно было изменить для удобства работы и обслуживания субмарин. У западной стены вы видите пульт управления краном. У северной стены составлены какие-то ящики. - ]]; - way = { - kh_vroom("В коридор A", "atl_aqua_corridor_a"); - kh_vroom("По часовой стрелке", "atl_lfc_dock_w"); - kh_vroom("Против часовой стрелки", "atl_lfc_dock_e"); - kh_vroom("На мостик", "atl_lfc_dock_sb"); - - }; - obj = { - "atl_nd_crane"; - "atl_nd_barrel"; - }; -}; - atl_nd_crane = obj { var { px = 2; @@ -375,64 +280,210 @@ atl_nd_crane = obj { }; nam = "Кран"; dsc = function(s) - local r = [[ - Под потолком расположен {кран}, прикрепленный к балкам, служащим направляющими для его движения. - ]]; - if px == 2 and py == 2 then - r = r .. "Сейчас кран висит в центре комнаты над Наутилусом."; + local r = [[Под потолком расположен {кран}, прикрепленный к балкам, служащим направляющими для его движения. ]]; + if s.px == 1 and s.py == 1 then + r = r .. "Сейчас кран висит в северо-западной части комнаты. "; + elseif s.px == 2 and s.py == 1 then + r = r .. "Сейчас кран висит в северной части комнаты. "; + elseif s.px == 3 and s.py == 1 then + r = r .. "Сейчас кран висит в северо-восточной части комнаты. "; + elseif s.px == 1 and s.py == 2 then + r = r .. "Сейчас кран висит над мостиком в западной части комнаты. "; + elseif s.px == 2 and s.py == 2 then + r = r .. "Сейчас кран висит в центре комнаты над Наутилусом. "; + elseif s.px == 3 and s.py == 2 then + r = r .. "Сейчас кран висит над мостиком в восточной части комнаты. "; + elseif s.px == 1 and s.py == 3 then + r = r .. "Сейчас кран висит в юго-западной части комнаты. "; + elseif s.px == 2 and s.py == 3 then + r = r .. "Сейчас кран висит над мостиком в южной части комнаты. "; + elseif s.px == 3 and s.py == 3 then + r = r .. "Сейчас кран висит в юго-восточной части комнаты. "; end; return r; end; - act = [[ - Скорее всего, вы можете управлять краном с пульта управления в этой комнате. - ]]; + act = [[Скорее всего, вы можете управлять краном с пульта управления в этой комнате. ]]; +}; + +atl_lfc_crane_control_obj = obj { + nam = "atl_lfc_crane_control_obj"; + dsc = "Рядом с вами расположен пульт управления краном. "; + act = function(s) + walkin("atl_lfc_crane_control_obj"); + end; +}; + +atl_lfc_crane_control = room { + nam = "atl_lfc_crane_control"; + disp = "Атлантида, Аква, док Наутилуса, западная часть"; + hideinv = true; + way = { + kh_vroom("Отойти от пульта", "atl_lfc_dock_w"); + }; + dsc = [[Вы стоите у панели управления краном. Перед вами три рычага: два из них, отмеченные как в<->з и c<->ю установлены в среднее положение, третий, отмеченный как "верх-низ", установлен в верхнее положение. ]]; + obj = { + "atl_nd_crane"; + "atl_nd_barrel"; + "atl_lfc_crane_ew_dec"; + "atl_lfc_crane_ew_inc"; + "atl_lfc_crane_ns_dec"; + "atl_lfc_crane_ns_inc"; + "atl_lfc_crane_ud_tgl"; + }; +}; + +atl_lfc_crane_ew_dec = obj { + nam = "atl_lfc_crane_ew_dec"; + dsc = "^^{Сдвинуть рычаг \"в<->з\" влево}^"; + act = function(s) + if atl_nd_crane.px == 1 then + return [[Рычаг заклинило. ]]; + end; + atl_nd_crane.px = atl_nd_crane.px - 1; + return "Кран сдвигается на запад. "; + end; +}; + +atl_lfc_crane_ew_inc = obj { + nam = "atl_lfc_crane_ew_inc"; + dsc = "{Сдвинуть рычаг \"в<->з\" вправо}^"; + act = function(s) + if atl_nd_crane.px == 3 then + return [[Рычаг заклинило. ]]; + end; + atl_nd_crane.px = atl_nd_crane.px + 1; + return "Кран сдвигается на восток. "; + end; +}; + +atl_lfc_crane_ns_dec = obj { + nam = "atl_lfc_crane_ns_dec"; + dsc = "^{Сдвинуть рычаг \"с<->ю\" влево}^"; + act = function(s) + if atl_nd_crane.px == 1 then + return [[Рычаг заклинило. ]]; + end; + atl_nd_crane.py = atl_nd_crane.py - 1; + return "Кран сдвигается на север. "; + end; +}; + +atl_lfc_crane_ns_inc = obj { + nam = "atl_lfc_crane_ns_inc"; + dsc = "{Сдвинуть рычаг \"с<->ю\" вправо}^"; + act = function(s) + if atl_nd_crane.px == 3 then + return [[Рычаг заклинило. ]]; + end; + atl_nd_crane.py = atl_nd_crane.py + 1; + return "Кран сдвигается на юг. "; + end; +}; + +atl_lfc_crane_ud_tgl = obj { + nam = "atl_lfc_crane_ud_tgl"; + dsc = "^{Повернуть рычаг \"Верх-низ\"}"; + act = "Вам это сейчас не нужно. "; }; atl_nd_barrel = obj { nam = "Бочка"; - dsc = [[ - На крюке крана висит {бочка}, судя по всему -- пустая. - ]]; + dsc = [[На крюке крана висит {бочка}, судя по всему -- пустая. ]]; + disp2 = "бочку"; canshoot = function(s) - return atl_lfc_sab_active and where(atl_lfc_sab) == atl_lfc_bridge_w and atl_nd_crane.px == 1 and atl_nd_crane.py == 2; + return where(atl_lfc_sab) == atl_lfc_bridge_w and atl_nd_crane.px == 1 and atl_nd_crane.py == 2; end; onshoot = function(s) remove(atl_nd_barrel); remove(char_leroy, where('char_leroy')); remove(char_goldman, where('char_goldman')); - atl_lfc_sab_alive = true; walkin(atl_lfc_dock_end_barreled); end; }; +atl_lfc_dock_s = room { + nam = "Атлантида, Аква, док Наутилуса, южная часть, у входа"; + dsc = [[Просторное помещение, предназнавенное для размещения субмарин, прибывающих на станцию. В настоящий момент в этом доке расположен Наутилус. Снизу, под водой, расположен огромный люк, закрывающий доступ внутрь дока. Несколько легких мостиков сконструированы таким образом, чтобы их расположение легко можно было изменить для удобства работы и обслуживания субмарин. У западной стены вы видите пульт управления краном. У северной стены составлены какие-то ящики. ]]; + way = { + kh_vroom("В коридор A", "atl_aqua_corridor_a"); + kh_vroom("К западной стене", "atl_lfc_dock_w"); + kh_vroom("К восточной стене", "atl_lfc_dock_e"); + kh_vroom("На мостик", "atl_lfc_bridge_s"); + + }; + obj = { + "atl_nd_crane"; + "atl_nd_barrel"; + }; +}; + atl_lfc_dock_w = room { nam = "Атлантида, Аква, док Наутилуса, западная часть"; - dsc = [[ - Просторное помещение, предназнавенное для размещения субмарин, прибывающих на станцию. В настоящий момент в этом доке расположен Наутилус. Снизу, под водой, расположен огромный люк, закрывающий доступ внутрь дока. Несколько легких мостиков сконструированы таким образом, чтобы их расположение легко можно было изменить для удобства работы и обслуживания субмарин. Вы находитесь у западной стороны. На небольшом расстоянии от вас вы видите пульт управления краном. У северной стены дока составлено несколько ящиков. - ]]; + dsc = [[Просторное помещение, предназнавенное для размещения субмарин, прибывающих на станцию. В настоящий момент в этом доке расположен Наутилус. Снизу, под водой, расположен огромный люк, закрывающий доступ внутрь дока. Несколько легких мостиков сконструированы таким образом, чтобы их расположение легко можно было изменить для удобства работы и обслуживания субмарин. Вы находитесь у западной стороны. На небольшом расстоянии от вас вы видите пульт управления краном. У северной стены дока составлено несколько ящиков. ]]; way = { - kh_vroom("По часовой стрелке", "atl_lfc_dock_n"); - kh_vroom("Против часовой стрелки", "atl_lfc_dock_s"); - kh_vroom("На мостик", "atl_lfc_dock_wb"); - kh_vroom("К пульту управления", "atl_lfc_control"); + kh_vroom("К северной стене", "atl_lfc_dock_n"); + kh_vroom("К южной стене", "atl_lfc_dock_s"); + kh_vroom("На мостик", "atl_lfc_bridge_w"); + kh_vroom("К пульту управления", "atl_lfc_crane_control"); }; + obj = { + "atl_nd_crane"; + "atl_nd_barrel"; + }; }; atl_lfc_dock_n = room { nam = "Атлантида, Аква, док Наутилуса, северная часть"; - dsc = [[ - Просторное помещение, предназнавенное для размещения субмарин, прибывающих на станцию. В настоящий момент в этом доке расположен Наутилус. Снизу, под водой, расположен огромный люк, закрывающий доступ внутрь дока. Несколько легких мостиков сконструированы таким образом, чтобы их расположение легко можно было изменить для удобства работы и обслуживания субмарин. Вы находитесь в северной части помещения. У западной стены вы видите пульт управления краном. - ]]; + dsc = [[Просторное помещение, предназнавенное для размещения субмарин, прибывающих на станцию. В настоящий момент в этом доке расположен Наутилус. Снизу, под водой, расположен огромный люк, закрывающий доступ внутрь дока. Несколько легких мостиков сконструированы таким образом, чтобы их расположение легко можно было изменить для удобства работы и обслуживания субмарин. Вы находитесь в северной части помещения. У западной стены вы видите пульт управления краном. ]]; way = { - kh_vroom("По часовой стрелке", "atl_lfc_dock_e"); - kh_vroom("Против часовой стрелки", "atl_lfc_dock_w"); + kh_vroom("К восточной стене", "atl_lfc_dock_e"); + kh_vroom("К западной стене", "atl_lfc_dock_w"); }; obj = { + "atl_nd_crane"; + "atl_nd_barrel"; "atl_lfc_boxes"; }; }; +atl_lfc_dock_e = room { + nam = "Атлантида, Аква, док Наутилуса, восточная стена"; + dsc = [[Просторное помещение, предназнавенное для размещения субмарин, прибывающих на станцию. В настоящий момент в этом доке расположен Наутилус. Снизу, под водой, расположен огромный люк, закрывающий доступ внутрь дока. Несколько легких мостиков сконструированы таким образом, чтобы их расположение легко можно было изменить для удобства работы и обслуживания субмарин. Вы находитесь в восточной части помещения. ]]; + way = { + kh_vroom("К южной стене", "atl_lfc_dock_s"); + kh_vroom("К северной стене", "atl_lfc_dock_n"); + kh_vroom("На мостик", "atl_lfc_bridge_s"); + }; + obj = { + "atl_nd_crane"; + "atl_nd_barrel"; + }; +}; + +atl_lfc_behind_boxes = room { + nam = "Ящики"; + nosave = true; + noautosave = true; + dsc = function(s) + local f = [[Док хорошо просматривается из вашего укрытия. ]]; + + end; + way = { + kh_vroom("Выйти из укрытия", function(s) + if (where(atl_lfc_sab) == atl_lfc_dock_s) or (where(atl_lfc_sab) == atl_lfc_dock_w) then + return 'game_over_lfc_shot'; + else + return 'atl_lfc_dock_n'; + end; + end); + }; + obj = { + "atl_nd_crane"; + "atl_nd_barrel"; + }; +}; + atl_lfc_boxes = obj { var { state = 0; @@ -440,102 +491,111 @@ atl_lfc_boxes = obj { nam = "Ящики"; dsc = function(s) if (s.state == 0) then - return [[ - У стены составлено несколько {ящиков}. - ]]; + return [[У стены составлено несколько {ящиков}. ]]; elseif (s.state == 1) then - return [[ - У стены составлено несколько {ящиков}, за которыми вы сможете спрятаться, поджидая саботажника. - ]]; + return [[У стены составлено несколько {ящиков}, за которыми вы сможете спрятаться, поджидая саботажника. ]]; elseif (s.state == 2) then - return [[ - У стены составлено несколько {ящиков}. - ]]; + return [[У стены составлено несколько {ящиков}. ]]; end; end; act = function(s) if (s.state == 0) then s.state = 1; - return [[ - За этими ящиками можно спрятаться! - ]]; + return [[За этими ящиками можно спрятаться! ]]; elseif (s.state == 1) then s.state = 2; walk("atl_lfc_behind_boxes"); - return [[ - Вы прячетесь за ящиками. Через некоторое время дверь дока открывается и кто-то входит. В полумраке издалека вы не можете разглядеть кто это, но скорее всего, это саботажник. - ]]; + move("atl_lfc_sab", "atl_lfc_dock_s"); + lifeon("atl_lfc_sab"); + return [[Вы прячетесь за ящиками. Через некоторое время дверь дока открывается и кто-то входит. В полумраке издалека вы не можете разглядеть кто это, но скорее всего, это саботажник. ]]; else - return [[ - Вам это больше не нужно. - ]]; + return [[Вам это больше не нужно. ]]; end; end; }; -atl_lfc_bridge_s = obj { - nam = "Атлантида, Аква, док Наутилуса, мостик"; - dsc = [[ - Просторное помещение, предназнавенное для размещения субмарин, прибывающих на станцию. В настоящий момент в этом доке расположен Наутилус. Снизу, под водой, расположен огромный люк, закрывающий доступ внутрь дока. Несколько легких мостиков сконструированы таким образом, чтобы их расположение легко можно было изменить для удобства работы и обслуживания субмарин. Вы находитесь на одном из этих мостиков, в южной части дока. - ]]; +atl_lfc_bridge_s = room { + nam = "Атлантида, Аква, док Наутилуса, южная часть, мостик"; + dsc = [[Просторное помещение, предназнавенное для размещения субмарин, прибывающих на станцию. В настоящий момент в этом доке расположен Наутилус. Снизу, под водой, расположен огромный люк, закрывающий доступ внутрь дока. Несколько легких мостиков сконструированы таким образом, чтобы их расположение легко можно было изменить для удобства работы и обслуживания субмарин. Вы находитесь на одном из этих мостиков, в южной части дока. ]]; way = { kh_vroom("Ко входу", "atl_lfc_dock_s"); kh_vroom("На соседний мостик", "atl_lfc_bridge_e"); }; + obj = { + "atl_nd_crane"; + "atl_nd_barrel"; + }; }; -atl_lfc_bridge_e = obj { - nam = "Атлантида, Аква, док Наутилуса, мостик"; - dsc = [[ - Просторное помещение, предназнавенное для размещения субмарин, прибывающих на станцию. В настоящий момент в этом доке расположен Наутилус. Снизу, под водой, расположен огромный люк, закрывающий доступ внутрь дока. Несколько легких мостиков сконструированы таким образом, чтобы их расположение легко можно было изменить для удобства работы и обслуживания субмарин. Вы находитесь на одном из этих мостиков, в восточной части дока. - ]]; +atl_lfc_bridge_e = room { + nam = "Атлантида, Аква, док Наутилуса, восточная часть, мостик"; + dsc = [[Просторное помещение, предназнавенное для размещения субмарин, прибывающих на станцию. В настоящий момент в этом доке расположен Наутилус. Снизу, под водой, расположен огромный люк, закрывающий доступ внутрь дока. Несколько легких мостиков сконструированы таким образом, чтобы их расположение легко можно было изменить для удобства работы и обслуживания субмарин. Вы находитесь на одном из этих мостиков, в восточной части дока. ]]; way = { - kh_vroom("К стене", "atl_lfc_dock_w"); + kh_vroom("К стене", "atl_lfc_dock_e"); kh_vroom("На соседний мостик", "atl_lfc_bridge_s"); }; + obj = { + "atl_nd_crane"; + "atl_nd_barrel"; + }; }; -atl_lfc_bridge_w = obj { - nam = "Атлантида, Аква, док Наутилуса, мостик"; - dsc = [[ - Просторное помещение, предназнавенное для размещения субмарин, прибывающих на станцию. В настоящий момент в этом доке расположен Наутилус. Снизу, под водой, расположен огромный люк, закрывающий доступ внутрь дока. Несколько легких мостиков сконструированы таким образом, чтобы их расположение легко можно было изменить для удобства работы и обслуживания субмарин. Вы находитесь на одном из этих мостиков, в западной части дока. - ]]; +atl_lfc_bridge_w = room { + nam = "Атлантида, Аква, док Наутилуса, западная часть, мостик"; + dsc = [[Просторное помещение, предназнавенное для размещения субмарин, прибывающих на станцию. В настоящий момент в этом доке расположен Наутилус. Снизу, под водой, расположен огромный люк, закрывающий доступ внутрь дока. Несколько легких мостиков сконструированы таким образом, чтобы их расположение легко можно было изменить для удобства работы и обслуживания субмарин. Вы находитесь на одном из этих мостиков, в западной части дока. ]]; way = { - kh_vroom("К стене", "atl_lfc_dock_e"); + kh_vroom("К стене", "atl_lfc_dock_w"); kh_vroom("К субмарине", function(s) - pr [[ - Мне там нечего делать - ]]; + pr [[Вам там нечего делать. ]]; return false; end); }; + obj = { + "atl_nd_crane"; + "atl_nd_barrel"; + }; }; atl_lfc_sab = obj { var { - tick = 1; + tick = 3; }; nam = "Мишель Леруа"; + disp2 = "Мишеля Леруа"; canshoot = true; - dsc = [[ - В нескольких метрах от вас стоит {Мишель Леруа}. Он обращен к вам спиной и не видит вас. - ]]; + dsc = function(s) + if (where(s) == where(pl)) then + return [[В нескольких метрах от вас стоит {Мишель Леруа}. Он обращен к вам спиной и не видит вас. ]]; + else + return [[{Мишель Леруа} стоит около Наутилуса. ]]; + end; + end; + onshoot = function(s) + remove(char_leroy, where('char_leroy')); + walk("atl_lfc_dock_end_shot"); + lifeoff(atl_lfc_sab); + return [[Вы стреляете в Мишеля Леруа, и убиваете его. Тело падает в воду. ]]; + end; act = function(s) walkin("atl_lfc_sab_dlg"); end; life = function(s) + if where(atl_lfc_sab_vis) ~= where(pl) and where(pl) ~= where(s) then + move(atl_lfc_sab_vis, where(pl)); + end; if (s.tick > 0) then s.tick = s.tick - 1; else - s.tick = 1; - pr("Вы видите, как Мишель медленно крадется по доку."); + s.tick = 3; + pr("Вы видите, как Мишель медленно крадется по доку "); if (where(s) == atl_lfc_dock_s) then + pr("вдоль западной стены. "); move(s, atl_lfc_dock_w); elseif (where(s) == atl_lfc_dock_w) then + pr("и поднимается на мостик в его западной части. Он не смотрит в вашу сторону. "); move(s, atl_lfc_bridge_w); elseif (where(s) == atl_lfc_bridge_w) then - pr("Леруа подходит к субмарине и забирается на нее, открывает люк и исчезает внутри. "); - remove(s, where(s)); + pr("Леруа что-то делает рядом с субмариной. "); end; end; end; @@ -546,61 +606,41 @@ atl_lfc_sab_vis = obj { shot = 0; }; nam = "Мишель Леруа"; + disp2 = "Мишеля Леруа"; canshoot = true; onshoot = function(s) if (s.shot == 0) then s.shot = 1; - return [[ - Вы стреляете в силуэт, но промахиваетесь. Через мгновение, где-то рядом пролетает пуля. - ]]; + return [[Вы стреляете в силуэт, но промахиваетесь. Через мгновение, где-то рядом пролетает пуля. ]]; else remove(char_leroy, where('char_leroy')); walk("atl_lfc_dock_end_shot"); - return [[ - Вы повторно стреляете в саботажника и, судя по всему, попадаете. Леруа хватается за грудь и медленно падает на пол. - ]]; + lifeoff(atl_lfc_sab); + return [[Вы повторно стреляете в саботажника и, судя по всему, попадаете. Леруа хватается за грудь и медленно оседает на пол. ]]; end; end; dsc = function(s) if (where(pl) == atl_lfc_behind_boxes and where(atl_lfc_sab) == atl_lfc_bridge_w) then - return [[ - Вы видите {Мишеля Леруа}, идущего по мостику, ведущему к Наутилусу. - ]]; + return [[Вы видите {Мишеля Леруа}, идущего по мостику, ведущему к Наутилусу. ]]; elseif (where(pl) == atl_lfc_behind_boxes and where(atl_lfc_sab) == atl_lfc_dock_w) then - return [[ - Вы видите {Мишеля Леруа}, идущего вдоль западной стены дока. - ]]; + return [[Вы видите {Мишеля Леруа}, идущего вдоль западной стены дока. ]]; + elseif (where(pl) == atl_lfc_behind_boxes and where(atl_lfc_sab) == atl_lfc_dock_s) then + return [[Вы видите {Мишеля Леруа}, идущего вдоль южной стены дока. ]]; elseif (where(atl_lfc_sab) == atl_lfc_bridge_w) then - return [[ - Вы видите {Мишеля Леруа}, идущего по мостику в западной части дока. Он не видит вас. - ]]; - end; - end; - life = function(s) - if (where(s) ~= where(pl)) then - move(s, where(pl)); + return [[Вы видите {Мишеля Леруа}, идущего по мостику в западной части дока. Он не видит вас. ]]; end; end; }; atl_lfc_sab_dlg = dlg { nam = "Мишель Леруа"; - dsc = [[ - Мишель Леруа стоит спиной к вам и не видит вашего приближения. Вы можете воспользоваться этим. - ]]; + dsc = [[Мишель Леруа стоит спиной к вам и не видит вашего приближения. Вы можете воспользоваться этим. ]]; phr = { - {"Застрелить его", [[ - Вы стреляете саботажнику в спину и, не успев понять, что произошло, он падает в воду, пронзенный пулей. - ]], code [[ + {"Застрелить его", [[Вы стреляете саботажнику в спину и, не успев понять, что произошло, он падает в воду, пронзенный пулей. ]], code [[ remove(char_leroy, where('char_leroy')); walk("atl_lfc_dock_end_shot"); ]]}; - {"Попытаться оглушить его", [[ - Вы оглушаете саботажника. - ]], code [[ - remove(char_leroy, where('char_leroy')); - remove(char_goldman, where('char_goldman')); - atl_lfc_sab_alive = true; + {"Попытаться оглушить его", [[Вы оглушаете саботажника. ]], code [[ walk("atl_lfc_dock_end_ko"); ]]}; }; @@ -608,47 +648,428 @@ atl_lfc_sab_dlg = dlg { atl_lfc_dock_end_shot = room { nam = "Атлантида, Аква, док Наутилуса"; - dsc = [[ - Через несколько минут в помещение входит охрана станции во главе с Винсентом Даркстаром. Винсент отдает приказ охранникам унести тело, а сам обращается к вам: "Хорошая работа. Вскоре мы сообщим о том, когда вы сможете забрать Левиафан".^ - Вы возвращаетесь в свою комнату, чтобы отдохнуть после тяжелой ночи... Проснувшись днем, вы слышите по радио голос Моро: "Дрейк, подойдите в мой кабинет. Нам надо поговорить". - ]]; + obj = { + vway("Продолжить", "{Продолжить}", "atl_luna_drake_room"); + }; + entered = function(s) + leroy_state = 4; + remove(char_leroy, where('char_leroy')); + if (atl_lfc_goldman_exposed) then + atl_lfc_state = 3; + remove(char_goldman, where('char_goldman')); + else + atl_lfc_state = 5; + return [[Через несколько минут в помещение входит охрана станции во главе с Винсентом Даркстаром. Винсент отдает приказ охранникам унести тело, а сам обращается к вам: "Хорошая работа. Вскоре мы сообщим о том, когда вы сможете забрать Левиафан". ^Вы возвращаетесь в свою комнату, чтобы отдохнуть после тяжелой ночи.^Вы просыпаетесь от телефонного звонка. Подняв трубку вы слышите голос Моро: "Дрейк, жду вас в моем кабинете". ]]; + end; + end; + dsc = function(s) + if (atl_lfc_goldman_exposed) then + return [[Через несколько минут в помещение входит охрана станции во главе с Винсентом Даркстаром. Винсент отдает приказ охранникам унести тело, а сам обращается к вам: "Хорошая работа. Вскоре мы сообщим о том, когда вы сможете забрать Левиафан". ^Вы возвращаетесь в свою комнату, чтобы отдохнуть после тяжелой ночи.^Вы просыпаетесь от телефонного звонка. Подняв трубку вы слышите голос Даркстара: "Дрейк, зайдите ко мне". ]]; + else + return [[Через несколько минут в помещение входит охрана станции во главе с Винсентом Даркстаром. Винсент отдает приказ охранникам унести тело, а сам обращается к вам: "Хорошая работа. Вскоре мы сообщим о том, когда вы сможете забрать Левиафан". ^Вы возвращаетесь в свою комнату, чтобы отдохнуть после тяжелой ночи.^Вы просыпаетесь от телефонного звонка. Подняв трубку вы слышите голос Моро: "Дрейк, жду вас в моем кабинете". ]]; + end; + end; +}; + +atl_lfc_dock_end_barreled = room { + nam = "Атлантида, Аква, док Наутилуса"; + dsc = [[Вы попадаете в один из тросов, на который крепилась бочка и она с грохотом катится вниз, сбивая с ног саботажника. Тот падает в воду. Он не успевает придти в себя, как в помещение входит охрана станции, привлеченная шумом, во главе с Винсентом Даркстаром. Винсент отдает приказ охранникам увести Мишеля, а сам обращается к вам: "Хорошая работа. Нам надо будет немного поработать с ним". ^Вы возвращаетесь в свою комнату и сразу же засыпаете. ^Вы просыпаетесь от телефонного звонка. Подняв трубку вы слышите голос Даркстара: "Дрейк, зайдите ко мне". ]]; + obj = { + vway("Продолжить", "{Продолжить}", "atl_luna_drake_room"); + }; + entered = function(s) + atl_lfc_state = 3; + atl_lfc_leroy_goldman = true; + atl_lfc_goldman_exposed = true; + remove(char_leroy, where('char_leroy')); + remove(char_goldman, where('char_goldman')); + end; +}; + +atl_lfc_dock_end_ko = room { + nam = "Атлантида, Аква, док Наутилуса"; + dsc = [[Вы оглушаете саботажника и ждете, когда в помещение придут охранники. ^Они приходят через несколько минут вместе с Винсентом Даркстаром. Охранники уносят неподвижного Леруа, а Даркстар обращается к вам: "Хорошая работа. Нам надо будет немного поработать с ним". ^Вы возвращаетесь в свою комнату и сразу же засыпаете. ^Вы просыпаетесь от телефонного звонка. Подняв трубку вы слышите голос Даркстара: "Дрейк, зайдите ко мне". ]]; obj = { vway("Продолжить", "{Продолжить}", "atl_luna_drake_room"); }; entered = function(s) atl_lfc_state = 3; - if (atl_lfc_goldman_exposed) then - remove(char_goldman, where('char_goldman')); - end; + atl_lfc_goldman_exposed = true; + atl_lfc_leroy_goldman = true; + remove(char_leroy, where('char_leroy')); + remove(char_goldman, where('char_goldman')); end; }; -atl_lfc_dock_end_barreled = room { - nam = "Атлантида, Аква, док Наутилуса"; - dsc = [[ - Вы попадаете в один из тросов, на который крепилась бочка и она с грохотом катится вниз, сбивая с ног саботажника. Тот падает в воду. Он не успевает придти в себя, как в помещение входит охрана станции, привлеченная шумом, во главе с Винсентом Даркстаром. Винсент отдает приказ охранникам увести Мишеля, а сам обращается к вам: "Хорошая работа. Нам надо будет немного поработать с ним. Если нам потребуется ваша помощь, мы сообщим".^ - Прошло около недели, прежде чем вы услышали по радио голос Моро: "Дрейк, подойдите в мой кабинет. Нам надо поговорить". - ]]; - obj = { - vway("Продолжить", "{Продолжить}", "atl_luna_drake_room"); - }; - entered = function(s) - atl_lfc_state = 3; - end; +atl_lfc_outro_expose = cutscene("Атлантида", "Атлантида", [[Даркстар поднимает трубку телефона и отдает приказ: "Приведите ко мне Леруа и Голдмана". Вас он просит отойти в угол комнаты и ждать там. ^Допрос продолжался недолго. Сперва Леруа упирался, но подельник сдал его с потрохами и в итоге ему осталось только признать свою вину. ^Подозреваемых заперли в их комнатах, а вас Даркстар отпустил отдыхать. Придя в свою комнату, вы тут же ложитесь спать. ^Вы просыпаетесь от телефонного звонка. Подняв трубку вы слышите голос Даркстара: "Дрейк, зайдите ко мне". ]], "atl_luna_drake_room", function(s) + atl_lfc_state = 3; + atl_rep_moreau = atl_rep_moreau + 1; + atl_rep_darkstar = atl_rep_darkstar + 1; + rel_walter = rel_walter + 1; + remove(char_leroy, where('char_leroy')); + remove(char_goldman, where('char_goldman')); +end); + +atl_lfc_court = dlg { + var { + goldman = 0; + leroy = 0; + }; + nam = "Атлантида"; + entered = function(s) + if atl_lfc_goldman_exposed then + p([[В комнату входят руководители станции. Даркстар встает из-за стола и сообщает: "Дорогие друзья, сегодня мы обсуждаем важный вопрос. Как вы все знаете, мы поймали саботажников -- ими оказались Леонард Голдман и Мишель Леруа. Мы будем следовать обычной процедуры, однако, решено, что в этом заседании будет участвовать Дэвид Дрейк, оказавший неоценимую помощь в поимке преступников. ]]); + else + p([[В комнату входят руководители станции. Даркстар встает из-за стола и сообщает: "Дорогие друзья, сегодня мы обсуждаем важный вопрос. Как вы все знаете, мы поймали саботажника -- им оказался Мишель Леруа. Мы будем следовать обычной процедуры, однако, решено, что в этом заседании будет участвовать Дэвид Дрейк, оказавший неоценимую помощь в поимке преступников. ]]); + end; + p([[Фредерик Моро, вам слово". ^Фредерик Моро начинает говорить: "Ситуация экстраординарная и требует экстраординарных мер]]); + --[[ + lfc_goldman_execute = 0; + lfc_goldman_imprison = 0; + lfc_goldman_banish = 1; + lfc_leroy_execute = 0; + lfc_leroy_imprison = 0; + lfc_leroy_banish = 1; + ]] + if atl_lfc_goldman_exposed then + if char_moreau_dlg.lfc_goldman_imprison > 0 then + p([[, к которым мы пока не готовы. Я считаю, что Леонарда Голдмана следует посадить под арест, как минимум до того времени, как не вернется экспедиция Уильяма. ]]); + if leroy_state ~= 4 then + if char_moreau_dlg.lfc_leroy_imprison > 0 then + p([[Что касается Мишеля Леруа, то его так же следует взять под стражу. ]]); + else + p([[Мишеля Леруа же слишком опасно держать здесь. Стоит высадить его где-нибудь на побережье Северной Америки. ]]); + end; + end; + else + p([[. Единственным разумным решением, на мой взгляд, будет изгнать Леонарда Голдмана с Атлантиды. Высадить его где-нибудь неподалеку от какого-нибудь городка. ]]); + if leroy_state ~= 4 then + if char_moreau_dlg.lfc_leroy_imprison > 0 then + p([[Что касается Мишеля Леруа, то его следует взять под стражу. Такого как он отпускать на поверхность слишком опасно. ]]); + else + p([[Мишеля Леруа следует отправить вместе с ним. Преступникам не место на станции. ]]); + end; + end; + end; + else + if char_moreau_dlg.lfc_leroy_imprison > 0 then + p([[, к которым мы пока не готовы. Я считаю, что Мишеля Леруа следует посадить под арест, как минимум до того времени, как не вернется экспедиция Уильяма.]]); + else + p([[. Мишеля Леруа же слишком опасно держать здесь. Стоит высадить его где-нибудь на побережье Северной Америки. ]]); + end; + end; + p([[ У меня все". ^Даркстар передает слово Екатерине Светловой и она предлагает свое решение:"]]); + if atl_lfc_goldman_exposed then + if leroy_state == 4 then + if char_svetlova_dlg.lfc_goldman_banish > 0 then + p([[Я считаю, что Голдмана стоит выслать отсюда. Увезти куда подальше, только и всего. ]]); + else + p([[Голдману стоит посидеть немного взаперти и подумать. Думаю, он не до конца потерян. ]]); + end; + else + if char_svetlova_dlg.lfc_goldman_banish > 0 then + if char_svetlova_dlg.lfc_leroy_banish > 0 then + p([[Я считаю, что обоих стоит выслать отсюда. Увезти куда подальше, только и всего. ]]); + else + p([[Голдмана можно просто выслать на поверхность, но Леруа слишком опасен. Этот пусть остается здесь, под надзором. ]]); + end; + else + if char_svetlova_dlg.lfc_leroy_banish > 0 then + p([[Голдману стоит посидеть немного взаперти и подумать. Думаю, он не до конца потерян. А вот Леруа не место на Атлантиде. ]]); + else + p([[Я считаю, что обоих нужно запереть и держать так, пока они не поймут свою ошибку. ]]); + end; + end; + end; + else + if char_svetlova_dlg.lfc_leroy_banish > 0 then + p([[Леруа не место на Атлантиде. ]]); + else + p([[Пусть Леруа немного посидит взаперти, а потом посмотрим. ]]); + end; + end; + p([[Это все". ^Даркстар передает слово Майклу Райту и он говорит следующее: "]]); + if atl_lfc_goldman_exposed then + if leroy_state == 4 then + if char_michael_wright_dlg.lfc_goldman_banish > 0 then + p([[Голдману не место на Атлантиде. ]]); + else + p([[Голдмана следует изолировать. ]]); + end; + else + if char_michael_wright_dlg.lfc_goldman_banish > 0 then + if char_michael_wright_dlg.lfc_leroy_banish > 0 then + p([[Им не место на Атлантиде. ]]); + else + p([[Голдману не место на Атлантиде, а Леруа следует изолировать. ]]); + end; + else + if char_michael_wright_dlg.lfc_leroy_banish > 0 then + p([[Голдмана следует изолировать, а вот Леруа не место на Атлантиде. ]]); + else + p([[Их следует изолировать. ]]); + end; + end; + end; + else + if char_michael_wright_dlg.lfc_leroy_banish > 0 then + p([[Леруа не место на Атлантиде. ]]); + else + p([[Леруа следует изолировать. ]]); + end; + end; + p([[Я закончил". ^Теперь Даркстар передает слово вам. ]]); + if atl_lfc_goldman_exposed then + psub("goldman"); + else + psub("leroy"); + end; + end; + decision = function(s) + local banish_g = 0; + local execut_g = 1; + local prison_g = 0; + local banish_l = 0; + local execut_l = 1; + local prison_l = 0; + + if atl_lfc_court.goldman == 1 then + execut_g = execut_g + 1; + elseif atl_lfc_court.goldman == 2 then + banish_g = banish_g + 1; + elseif atl_lfc_court.goldman == 3 then + prison_g = prison_g + 1; + end; + + if atl_lfc_court.leroy == 1 then + execut_l = execut_l + 1; + elseif atl_lfc_court.leroy == 2 then + execut_l = execut_l + 1; + elseif atl_lfc_court.leroy == 3 then + execut_l = execut_l + 1; + end; + + if char_moreau_dlg.lfc_goldman_banish >= char_moreau_dlg.lfc_goldman_imprison then + banish_g = banish_g + 1; + else + prison_g = prison_g + 1; + end; + + if atl_lfc_court.goldman == 1 then + atl_rep_moreau = atl_rep_moreau - 1; + end; + + if char_svetlova_dlg.lfc_goldman_banish >= char_svetlova_dlg.lfc_goldman_imprison and char_svetlova_dlg.lfc_goldman_banish >= char_svetlova_dlg.lfc_goldman_execute then + banish_g = banish_g + 1; + if atl_lfc_court.goldman == 1 then + atl_rep_svetlova = atl_rep_svetlova - 1; + end; + elseif char_svetlova_dlg.lfc_goldman_imprison >= char_svetlova_dlg.lfc_goldman_execute then + prison_g = prison_g + 1; + if atl_lfc_court.goldman == 1 then + atl_rep_svetlova = atl_rep_svetlova - 1; + end; + else + execut_g = execut_g + 1; + end; + + if char_michael_wright_dlg.lfc_goldman_banish >= char_michael_wright_dlg.lfc_goldman_imprison and char_michael_wright_dlg.lfc_goldman_banish >= char_michael_wright_dlg.lfc_goldman_execute then + banish_g = banish_g + 1; + if atl_lfc_court.goldman == 1 then + atl_rep_wright = atl_rep_wright - 1; + end; + elseif char_michael_wright_dlg.lfc_goldman_imprison >= char_michael_wright_dlg.lfc_goldman_execute then + prison_g = prison_g + 1; + if atl_lfc_court.goldman == 1 then + atl_rep_wright = atl_rep_wright - 1; + end; + else + execut_g = execut_g + 1; + end; + + if char_moreau_dlg.lfc_leroy_banish >= char_moreau_dlg.lfc_leroy_imprison then + banish_l = banish_l + 1; + else + prison_l = prison_l + 1; + end; + + if atl_lfc_court.leroy == 1 then + atl_rep_moreau = atl_rep_moreau - 1; + end; + + if char_svetlova_dlg.lfc_leroy_banish >= char_svetlova_dlg.lfc_leroy_imprison and char_svetlova_dlg.lfc_leroy_banish >= char_svetlova_dlg.lfc_leroy_execute then + banish_l = banish_l + 1; + if atl_lfc_court.leroy == 1 then + atl_rep_svetlova = atl_rep_svetlova - 1; + end; + elseif char_svetlova_dlg.lfc_leroy_imprison >= char_svetlova_dlg.lfc_leroy_execute then + prison_l = prison_l + 1; + if atl_lfc_court.leroy == 1 then + atl_rep_svetlova = atl_rep_svetlova - 1; + end; + else + execut_l = execut_l + 1; + end; + + if char_michael_wright_dlg.lfc_leroy_banish >= char_michael_wright_dlg.lfc_leroy_imprison and char_michael_wright_dlg.lfc_leroy_banish >= char_michael_wright_dlg.lfc_leroy_execute then + banish_l = banish_l + 1; + if atl_lfc_court.leroy == 1 then + atl_rep_wright = atl_rep_wright - 1; + end; + elseif char_michael_wright_dlg.lfc_leroy_imprison >= char_michael_wright_dlg.lfc_leroy_execute then + prison_l = prison_l + 1; + if atl_lfc_court.leroy == 1 then + atl_rep_wright = atl_rep_wright - 1; + end; + else + execut_l = execut_l + 1; + end; + + local r = [[Даркстар забирает листы с решениями всех участников совета и, просмотрев их, оглашает вердикт: "]]; + + if atl_lfc_goldman_exposed then + if banish_g >= prison_g and banish_g >=execut_g then + goldman_state = 3; + r = r .. [[Леонард Голдман будет изгнан с Атлантиды. ]]; + elseif prison_g >= execut_g then + goldman_state = 2; + r = r .. [[Леонард Голдман будет содержаться в заключении. ]]; + else + goldman_state = 1; + r = r .. [[Леонард Голдман будет казнен. ]]; + end; + end; + + if leroy_state ~= 4 then + if banish_l >= prison_l and banish_l >=execut_l then + leroy_state = 3; + r = r .. [[Мишель Леруа будет изгнан с Атлантиды. ]]; + elseif prison_g >= execut_g then + leroy_state = 2; + r = r .. [[Мишель Леруа будет содержаться в заключении. ]]; + else + leroy_state = 1; + r = r .. [[Мишель Леруа будет казнен. ]]; + end; + end; + psub("leave"); + return r .. [[Решение принято, все свободны". ]]; + end; + phr = { + {tag="goldman"}; + {"Голдман -- просто жертва. Леруа задурил ему мозги. Пусть посидить в камере и подумает. ", function(s) + char_moreau_dlg.lfc_goldman_imprison = char_moreau_dlg.lfc_goldman_imprison + 1; + char_svetlova_dlg.lfc_goldman_imprison = char_svetlova_dlg.lfc_goldman_imprison + 1; + char_michael_wright_dlg.lfc_goldman_imprison = char_michael_wright_dlg.lfc_goldman_imprison + 1; + if leroy_state == 4 then + psub("final_goldman"); + return [[Даркстар продолжает: "Теперь каждый напишет свое решение, после чего я посчитаю и оглашу результат". ]]; + else + psub("leroy"); + return ""; + end; + end}; + {"Голдману не место на Атлантиде. ", function(s) + char_moreau_dlg.lfc_goldman_banish = char_moreau_dlg.lfc_goldman_banish + 1; + char_svetlova_dlg.lfc_goldman_banish = char_svetlova_dlg.lfc_goldman_banish + 1; + char_michael_wright_dlg.lfc_goldman_banish = char_michael_wright_dlg.lfc_goldman_banish + 1; + if leroy_state == 4 then + psub("final_goldman"); + return [[Даркстар продолжает: "Теперь каждый напишет свое решение, после чего я посчитаю и оглашу результат". ]]; + else + psub("leroy"); + return ""; + end; + end}; + {"Голдман подверг опасности всю станцию. Его следует казнить. ", function(s) + char_svetlova_dlg.lfc_goldman_execute = char_svetlova_dlg.lfc_goldman_execute + 1; + char_michael_wright_dlg.lfc_goldman_execute = char_michael_wright_dlg.lfc_goldman_execute + 1; + if leroy_state == 4 then + psub("final_goldman"); + return [[Даркстар продолжает: "Теперь каждый напишет свое решение, после чего я посчитаю и оглашу результат". ]]; + else + psub("leroy"); + return ""; + end; + end}; + {tag="leroy"}; + {"Нельзя давать Леруа то, ради чего он затеял все это. Держать его на станции также слишком опасно. Остается единственный способ избавиться от него. ", function(s) + char_svetlova_dlg.lfc_leroy_execute = char_svetlova_dlg.lfc_leroy_execute + 1; + char_michael_wright_dlg.lfc_leroy_execute = char_michael_wright_dlg.lfc_leroy_execute + 1; + if atl_lfc_goldman_exposed then + psub("final_goldman"); + else + psub("final_leroy"); + end; + return [[Даркстар продолжает: "Теперь каждый напишет свое решение, после чего я посчитаю и оглашу результат". ]]; + end}; + {"Лучшим решением будет отослать Леруа. У нас нет возможности содержать его на станции, не говоря уж о повышенной опасности этого. ", function(s) + char_moreau_dlg.lfc_leroy_banish = char_moreau_dlg.lfc_leroy_banish + 1; + char_svetlova_dlg.lfc_leroy_banish = char_svetlova_dlg.lfc_leroy_banish + 1; + char_michael_wright_dlg.lfc_leroy_banish = char_michael_wright_dlg.lfc_leroy_banish + 1; + if atl_lfc_goldman_exposed then + psub("final_goldman"); + else + psub("final_leroy"); + end; + return [[Даркстар продолжает: "Теперь каждый напишет свое решение, после чего я посчитаю и оглашу результат". ]]; + end}; + {"Нельзя давать Леруа то, ради чего он затеял все это. Нужно изолировать его. ", function(s) + char_moreau_dlg.lfc_leroy_imprison = char_moreau_dlg.lfc_leroy_imprison + 1; + char_svetlova_dlg.lfc_leroy_imprison = char_svetlova_dlg.lfc_leroy_imprison + 1; + char_michael_wright_dlg.lfc_leroy_imprison = char_michael_wright_dlg.lfc_leroy_imprison + 1; + if atl_lfc_goldman_exposed then + psub("final_goldman"); + else + psub("final_leroy"); + end; + return [[Даркстар продолжает: "Теперь каждый напишет свое решение, после чего я посчитаю и оглашу результат". ]]; + end}; + {tag="final_goldman"}; + {"[Казнить Голдмана]", function(s) + atl_lfc_court.goldman = 1; + if leroy_state == 4 then + return atl_lfc_court:decision(); + else + psub("final_leroy"); + end; + end}; + {"[Изгнать Голдмана]", function(s) + atl_lfc_court.goldman = 2; + if leroy_state == 4 then + return atl_lfc_court:decision(); + else + psub("final_leroy"); + end; + end}; + {"[Заключить Голдмана]", function(s) + atl_lfc_court.goldman = 3; + if leroy_state == 4 then + return atl_lfc_court:decision(); + else + psub("final_leroy"); + end; + end}; + {tag="final_leroy"}; + {"[Казнить Леруа]", function(s) + atl_lfc_court.leroy = 1; + return atl_lfc_court:decision(); + end}; + {"[Изгнать Леруа]", function(s) + atl_lfc_court.leroy = 2; + return atl_lfc_court:decision(); + end}; + {"[Заключить Леруа]", function(s) + atl_lfc_court.leroy = 3; + return atl_lfc_court:decision(); + end}; + {tag="leave"}; + {"[Уйти]", function(s) + walkin("atl_lfc_outro_court"); + end}; + }; }; -atl_lfc_dock_end_ko = room { - nam = "Атлантида, Аква, док Наутилуса"; - dsc = [[ - Вы оглушаете саботажника и ждете, когда в помещение придут охранники.^ - Они приходят через несколько минут вместе с Винсентом Даркстером. Охранники уносят неподвижного Леруа, а Даркстар обращается к вам: "Хорошая работа. Нам надо будет немного поработать с ним. Если нам потребуется ваша помощь, мы сообщим".^ - Прошло около недели, прежде чем вы услышали по радио голос Моро: "Дрейк, подойдите в мой кабинет. Нам надо поговорить". - ]]; - obj = { - vway("Продолжить", "{Продолжить}", "atl_luna_drake_room"); - }; - entered = function(s) - atl_lfc_state = 3; - end; -}; - +atl_lfc_outro_court = cutscene("atl_lfc_outro_court", "Атлантида", [[Вы возвращаетесь в свою комнату. Вскоре, раздается звонок телефона. вы поднимаете трубку и слышите голос Моро: "Дрейк, жду вас в моем кабинете". ]], "atl_luna_drake_room", function(s) + atl_lfc_state = 5; +end); \ No newline at end of file diff --git a/atlantis_navjiarr.lua b/atlantis_navjiarr.lua deleted file mode 100644 --- a/atlantis_navjiarr.lua +++ /dev/null @@ -1,1710 +0,0 @@ ---[[ -Файл содержит локации навьярских поселений для главы Атлантида. -]] - ---[[ -Дипатреанотр -]] - -dyp_temple_guard = room { - nam = "ctt_dyp_temple_guard"; - dsc = function(s) - if (dyp_temple_guard_dlg.state == 0) then - return [[У ворот стоят два навьяра, вооруженные копьями. При вашем приближении они начинают нервничать -- переглянувшись, они перехватывают копья, готовясь при необходимости прогнать вас. По плавникам одного из них бегут цветные полосы: темно-фиолетовая, зеленая, оранжевая -- шире чем остальные, серая, ярко-розовая, желтая -- снова широкая, салатовая, снова широкая желтая и, наконец, широкая бледно-оранжевая. После небольшой паузы, полосы появляются снова. ]]; - else - return [[У ворот стоят два навьяра, вооруженные копьями. Они никак не реагируют на вас. ]]; - end; - end; - dlg = "dyp_temple_guard_dlg"; -}; - -dyp_temple_guard_dlg = dlg { - var { - state = 0; - }; - nam = "Страж храма"; - entered = function(s) - if (s.state == 0) then - return [[Стражники загораживают вам проход. По плавникам одного из них бегут цветные полосы. ]]; - else - back(); - return [[Стражник не реагирует на вас. ]]; - end; - end; - phr = { - --TODO заменить название токена - {tag="test", false, "[Передать <токен>]", [[Стражи, согласно ритуалу, молча открывают ворота, пропуская вас внутрь. ]], code [[ dyp_temple_guard_dlg.state = 1; back(); ]]}; - {always=true, "[использовать кодировщик]I'rr Vee'nn"}; - }; -}; - -dyp_temple_carving_look = room { - nam = "Храм Дипатреанотра, вход"; - pic ="images/iyh_navjiarr_map.png"; - dsc = [[Над входом в храм вырезана схема, состоящая из нескольких концентрических кругов. ]]; - obj = { - vway("continue", "{Продолжить}", "dyp_temple_entrance"); - }; -}; - -dyp_temple_carving = obj { - nam = "dyp_temple_carving"; - dsc = [[Над входом в храм вырезано {изображение} состоящее из нескольких кругов и еще каких-то символов. Часть изображения стерлась от времени, однако остальная часть все еще читаема. ]]; - act = function(s) - walkin("dyp_temple_carving_look"); - end; -}; - -dyp_temple_entrance = room { - nam = "Храм Дипатреанотра, вход"; - dsc = [[Перед вами находится вырезанный в скале вход в навьярский храм. Массивные каменные ступени ведут к громадным двустворчатым дверям, украшенных полустершимися орнаментами. Некогда яркие краски потускнели -- осторожные навьяры не решаются их обновить. ^Скала продолжается на восток и на юго-запад от храма. Вдалеке на севере видны длинные, вытянувшиеся на несколько метров вверх водоросли. К западу заметен обелиск из камней. ]]; - underwater = true; - entered = function(s) - --char_learr:accompany(false); - --char_radcliffe:accompany(false); - --char_wright:accompany(false); - --char_anna:accompany(false); - - --if ArrayUtils.indexOf(pl.party, 'learr') ~= 0 then - -- return [[ - -- Вы слышите по радио голос Леарр: "Ты-Дрейк один-пойдешь. Другим нельзя-в-храм-войти". - -- ]]; - --elseif ArrayUtils.indexOf(pl.party, 'anna') ~= 0 then - -- return [[ - -- Вы слышите по радио голос Анны: "Дрейк, тебе придется идти одному - испытание можно пройти лишь в одиночку. Удачи". - -- ]]; - --end; - end; - obj = { - "dyp_temple_guard"; - "dyp_temple_carving"; - }; - way = { - kh_vroom("В храм", function(s) - pr('Охранники не колеблясь убьют вас, если вы попытаетесь войти. '); - return false; - --ctt_dyp_temple_l1.px = 1; - --ctt_dyp_temple_l1.py = 0; - --return "ctt_dyp_temple_l1"; - end):disable(); - kh_vroom("В Левиафан", "leviathan_airlock"); - }; -}; - -dyp_temple_east = room { - nam = "Океан"; - no_exit = [[Нет смысла покидать Левиафан здесь. ]]; - view = [[Вы находитесь у подножья скалы, протянувшейся на многие километры на восток от вас. На западе она сворачивает к югу. ]]; -}; - -dyp_temple_south_west = room { - nam = "Океан"; - no_exit = [[Нет смысла покидать Левиафан здесь. ]]; - view = [[Вы находитесь у подножья скалы. К юго востоку скала сворачивает на юг и тянется на многие километры. К северо-востоку вы видите храм Дипатреанотра. ]]; -}; - -dyp_temple_south_far = room { - nam = "Океан"; - no_exit = [[Нет смысла покидать Левиафан здесь. ]]; - view = [[Вы находитесь у подножья скалы, протянувшейся на многие километры на юг. На севере скала сворачивает к востоку. ]]; -}; - -dyp_temple_north_west = room { - nam = "Океан"; - no_exit = [[Нет смысла покидать Левиафан здесь. ]]; - view = [[Перед вами возвышается массивный каменный обелиск. Некогда он был украшен резными орнаментами, но сейчас все они практически полностью стерлись. К юго-востоку от вас возвышается отвесная скала, протянувшаяся на многие километры с юга на восток. Вдалеке на западе вы видите каменные строения навьярского города -- Дипатреанотра. ]]; -}; - -dyp_temple_north = room { - nam = "Океан"; - no_exit = [[Нет смысла покидать Левиафан здесь. ]]; - view = [[Левиафан застыл над высокими стеблями водорослей, едва заметно колышущимися в спокойной воде. ]]; -}; - -dyp_temple_crevice_middle = room { - nam = "Океан"; - no_exit = [[Нет смысла покидать Левиафан здесь. ]]; - view = [[Левиафан застыл над неглубоким ущельем, протянувшимся с востока на запад. ]]; -}; - -dyp_temple_crevice_east = room { - nam = "Океан"; - no_exit = [[Нет смысла покидать Левиафан здесь. ]]; - view = [[Левиафан застыл над неглубоким ущельем, протянувшимся с востока на запад. ]]; -}; - -dyp_temple_crevice_far_east = room { - nam = "Океан"; - no_exit = [[Нет смысла покидать Левиафан здесь. ]]; - view = [[Левиафан застыл над неглубоким ущельем, протянувшимся с востока на запад. ]]; -}; - -dyp_temple_crevice_west = room { - nam = "Океан"; - no_exit = [[Нет смысла покидать Левиафан здесь. ]]; - view = [[Левиафан застыл над неглубоким ущельем, протянувшимся с востока на запад. ]]; -}; - -dyp_temple_crevice_far_west = room { - nam = "Океан"; - no_exit = [[Нет смысла покидать Левиафан здесь. ]]; - view = [[Левиафан застыл над неглубоким ущельем, протянувшимся с востока на запад. ]]; -}; - -dyp_temple_warning = room { - nam = "Океан"; - no_exit = [[Нет смысла покидать Левиафан здесь. ]]; - view = [[Перед вами возвышается массивный каменный обелиск. Большая часть изображенного на нем стерлась. ]]; -}; - -dyp_temple_cliff_1 = room { - nam = "Океан"; - no_exit = [[Нет смысла покидать Левиафан здесь. ]]; - view = [[Вы находитесь к югу от высокой скалы, протянувшейся с востока на запад. ]] -}; - -dyp_temple_cliff_2 = room { - nam = "Океан"; - no_exit = [[Нет смысла покидать Левиафан здесь. ]]; - view = [[Вы находитесь к югу от высокой скалы, протянувшейся с востока на запад. ]] -}; - -dyp_temple_cliff_3 = room { - nam = "Океан"; - no_exit = [[Нет смысла покидать Левиафан здесь. ]]; - view = [[Вы находитесь к югу от высокой скалы, протянувшейся с востока на запад. ]] -}; - -dyp_temple_cliff_4 = room { - nam = "Океан"; - no_exit = [[Нет смысла покидать Левиафан здесь. ]]; - view = [[Вы находитесь к югу от высокой скалы, протянувшейся с востока на запад. ]] -}; - -dyp_temple_cliff_5 = room { - nam = "Океан"; - no_exit = [[Нет смысла покидать Левиафан здесь. ]]; - view = [[Вы находитесь к югу от высокой скалы, протянувшейся с востока на запад. ]] -}; - -dyp_temple_whale = room { - nam = "Океан"; - no_exit = [[Нет смысла покидать Левиафан здесь. ]]; - view = [[Рядом с вами покоится скелет громадного кита. Древние кости занесены илом, однако все еще прекрасно видны с большого расстояния. ]]; -}; - -dyp_temple_navigation = dlg { - nam = "Штурвал Левиафана"; - entered = function(s) - - end; - phr = { - {tag="dyp_temple_entrance"}; - {always=true, "[На восток, вдоль скалы]", function() - move(submarine_leviathan, "dyp_temple_east"); - psub("dyp_temple_east"); - end}; - {always=true, "[На северо-восток, к зарослям]", function() - move(submarine_leviathan, "dyp_temple_north"); - psub("dyp_temple_north"); - end}; - {always=true, "[На северо-запад, к обелиску]", function() - move(submarine_leviathan, "dyp_temple_north_west"); - psub("dyp_temple_north_west"); - end}; - {always=true, "[На юго-запад, вдоль скалы]", function() - move(submarine_leviathan, "dyp_temple_south_west"); - psub("dyp_temple_south_west"); - end}; - {always=true, "[Отойти от штурвала]", code = [[ - walk('leviathan_wheelhouse'); - ]]}; - {always=true, "[Отправиться в другое место]", code = [[ - walk('leviathan_dlg'); - ]]}; - - {tag="dyp_temple_east"}; - {always=true, "[На запад, вдоль скалы]", function() - move(submarine_leviathan, "dyp_temple_entrance"); - psub("dyp_temple_entrance"); - end}; - {always=true, "[На север, к зарослям]", function() - move(submarine_leviathan, "dyp_temple_north"); - psub("dyp_temple_north"); - end}; - {always=true, "[Отойти от штурвала]", code = [[ - walk('leviathan_wheelhouse'); - ]]}; - {always=true, "[Отправиться в другое место]", code = [[ - walk('leviathan_dlg'); - ]]}; - - {tag="dyp_temple_south_west"}; - {always=true, "[На северо-восток, вдоль скалы]", function() - move(submarine_leviathan, "dyp_temple_entrance"); - psub("dyp_temple_entrance"); - end}; - {always=true, "[На юг, вдоль скалы]", function() - move(submarine_leviathan, "dyp_temple_south_far"); - psub("dyp_temple_south_far"); - end}; - {always=true, "[Отойти от штурвала]", code = [[ - walk('leviathan_wheelhouse'); - ]]}; - {always=true, "[Отправиться в другое место]", code = [[ - walk('leviathan_dlg'); - ]]}; - - {tag="dyp_temple_south_far"}; - {always=true, "[На север, вдоль скалы]", function() - move(submarine_leviathan, "dyp_temple_south_west"); - psub("dyp_temple_south_west"); - end}; - {always=true, "[Отойти от штурвала]", code = [[ - walk('leviathan_wheelhouse'); - ]]}; - {always=true, "[Отправиться в другое место]", code = [[ - walk('leviathan_dlg'); - ]]}; - - {tag="dyp_temple_north_west"}; - {always=true, "[На юго-восток, к храму]", function() - move(submarine_leviathan, "dyp_temple_entrance"); - psub("dyp_temple_entrance"); - end}; - {always=true, "[На запад, в Дипатреанотр]", function() - move(submarine_leviathan, "dyp_city_east"); - psub("dyp_city_east"); - --TODO enter the city - end}; - {always=true, "[Отойти от штурвала]", code = [[ - walk('leviathan_wheelhouse'); - ]]}; - {always=true, "[Отправиться в другое место]", code = [[ - walk('leviathan_dlg'); - ]]}; - - {tag="dyp_temple_north"}; - {always=true, "[На юго-запад, к храму]", function() - move(submarine_leviathan, "dyp_temple_entrance"); - psub("dyp_temple_entrance"); - end}; - {always=true, "[На юг, к скале]", function() - move(submarine_leviathan, "dyp_temple_east"); - psub("dyp_temple_east"); - end}; - {always=true, "[На север, к ущелью]", function() - move(submarine_leviathan, "dyp_temple_crevice_middle"); - psub("dyp_temple_crevice_middle"); - end}; - {always=true, "[Отойти от штурвала]", code = [[ - walk('leviathan_wheelhouse'); - ]]}; - {always=true, "[Отправиться в другое место]", code = [[ - walk('leviathan_dlg'); - ]]}; - - {tag="dyp_temple_crevice_middle"}; - {always=true, "[На юг, к зарослям]", function() - move(submarine_leviathan, "dyp_temple_north"); - psub("dyp_temple_north"); - end}; - {always=true, "[На восток, вдоль ущелья]", function() - move(submarine_leviathan, "dyp_temple_crevice_east"); - psub("dyp_temple_crevice_east"); - end}; - {always=true, "[На север, к скале]", function() - move(submarine_leviathan, "dyp_temple_cliff_4"); - psub("dyp_temple_cliff_4"); - end}; - {always=true, "[На запад, вдоль ущелья]", function() - move(submarine_leviathan, "dyp_temple_crevice_west"); - psub("dyp_temple_crevice_west"); - end}; - {always=true, "[Отойти от штурвала]", code = [[ - walk('leviathan_wheelhouse'); - ]]}; - {always=true, "[Отправиться в другое место]", code = [[ - walk('leviathan_dlg'); - ]]}; - - {tag="dyp_temple_crevice_east"}; - {always=true, "[На юго-запад, к зарослям]", function() - move(submarine_leviathan, "dyp_temple_north"); - psub("dyp_temple_north"); - end}; - {always=true, "[На восток, вдоль ущелья]", function() - move(submarine_leviathan, "dyp_temple_crevice_far_east"); - psub("dyp_temple_crevice_far_east"); - end}; - {always=true, "[На северо-восток, к костям]", function() - move(submarine_leviathan, "dyp_temple_whale"); - psub("dyp_temple_whale"); - end}; - {always=true, "[На север, к скале]", function() - move(submarine_leviathan, "dyp_temple_cliff_5"); - psub("dyp_temple_cliff_5"); - end}; - {always=true, "[На запад, вдоль ущелья]", function() - move(submarine_leviathan, "dyp_temple_crevice_middle"); - psub("dyp_temple_crevice_middle"); - end}; - {always=true, "[Отойти от штурвала]", code = [[ - walk('leviathan_wheelhouse'); - ]]}; - {always=true, "[Отправиться в другое место]", code = [[ - walk('leviathan_dlg'); - ]]}; - - {tag="dyp_temple_crevice_far_east"}; - {always=true, "[На север, к костям]", function() - move(submarine_leviathan, "dyp_temple_whale"); - psub("dyp_temple_whale"); - end}; - {always=true, "[На запад, вдоль ущелья]", function() - move(submarine_leviathan, "dyp_temple_crevice_east"); - psub("dyp_temple_crevice_east"); - end}; - {always=true, "[Отойти от штурвала]", code = [[ - walk('leviathan_wheelhouse'); - ]]}; - {always=true, "[Отправиться в другое место]", code = [[ - walk('leviathan_dlg'); - ]]}; - - {tag="dyp_temple_crevice_west"}; - {always=true, "[На север, к скале]", function() - move(submarine_leviathan, "dyp_temple_cliff_3"); - psub("dyp_temple_cliff_3"); - end}; - {always=true, "[На восток, вдоль ущелья]", function() - move(submarine_leviathan, "dyp_temple_crevice_middle"); - psub("dyp_temple_crevice_middle"); - end}; - {always=true, "[На юго-восток, к зарослям]", function() - move(submarine_leviathan, "dyp_temple_north"); - psub("dyp_temple_north"); - end}; - {always=true, "[На запад, вдоль ущелья]", function() - move(submarine_leviathan, "dyp_temple_crevice_far_west"); - psub("dyp_temple_crevice_far_west"); - end}; - {always=true, "[На северо-запад, к обелиску]", function() - move(submarine_leviathan, "dyp_temple_warning"); - psub("dyp_temple_warning"); - end}; - {always=true, "[Отойти от штурвала]", code = [[ - walk('leviathan_wheelhouse'); - ]]}; - {always=true, "[Отправиться в другое место]", code = [[ - walk('leviathan_dlg'); - ]]}; - - {tag="dyp_temple_crevice_far_west"}; - {always=true, "[На север, к обелиску]", function() - move(submarine_leviathan, "dyp_temple_warning"); - psub("dyp_temple_warning"); - end}; - {always=true, "[На восток, вдоль ущелья]", function() - move(submarine_leviathan, "dyp_temple_crevice_west"); - psub("dyp_temple_crevice_west"); - end}; - {always=true, "[На юг, к обелиску]", function() - move(submarine_leviathan, "dyp_temple_north_west"); - psub("dyp_temple_north_west"); - end}; - {always=true, "[Отойти от штурвала]", code = [[ - walk('leviathan_wheelhouse'); - ]]}; - {always=true, "[Отправиться в другое место]", code = [[ - walk('leviathan_dlg'); - ]]}; - - {tag="dyp_temple_warning"}; - {always=true, "[На север, к скале]", function() - move(submarine_leviathan, "dyp_temple_cliff_2"); - psub("dyp_temple_cliff_2"); - end}; - {always=true, "[На юг, к ущелью]", function() - move(submarine_leviathan, "dyp_temple_crevice_far_west"); - psub("dyp_temple_crevice_far_west"); - end}; - {always=true, "[Отойти от штурвала]", code = [[ - walk('leviathan_wheelhouse'); - ]]}; - {always=true, "[Отправиться в другое место]", code = [[ - walk('leviathan_dlg'); - ]]}; - - {tag="dyp_temple_cliff_1"}; - {always=true, "[На восток, вдоль скалы]", function() - move(submarine_leviathan, "dyp_temple_cliff_2"); - psub("dyp_temple_cliff_2"); - end}; - {always=true, "[На юго-восток, к обелиску]", function() - move(submarine_leviathan, "dyp_temple_warning"); - psub("dyp_temple_warning"); - end}; - {always=true, "[Отойти от штурвала]", code = [[ - walk('leviathan_wheelhouse'); - ]]}; - {always=true, "[Отправиться в другое место]", code = [[ - walk('leviathan_dlg'); - ]]}; - - {tag="dyp_temple_cliff_2"}; - {always=true, "[На восток, вдоль скалы]", function() - move(submarine_leviathan, "dyp_temple_cliff_3"); - psub("dyp_temple_cliff_3"); - end}; - {always=true, "[На юг, к обелиску]", function() - move(submarine_leviathan, "dyp_temple_warning"); - psub("dyp_temple_warning"); - end}; - {always=true, "[На запад, вдоль скалы]", function() - move(submarine_leviathan, "dyp_temple_cliff_1"); - psub("dyp_temple_cliff_1"); - end}; - {always=true, "[Отойти от штурвала]", code = [[ - walk('leviathan_wheelhouse'); - ]]}; - {always=true, "[Отправиться в другое место]", code = [[ - walk('leviathan_dlg'); - ]]}; - - {tag="dyp_temple_cliff_3"}; - {always=true, "[На восток, вдоль скалы]", function() - move(submarine_leviathan, "dyp_temple_cliff_4"); - psub("dyp_temple_cliff_4"); - end}; - {always=true, "[На юг, к ущелью]", function() - move(submarine_leviathan, "dyp_temple_crevice_west"); - psub("dyp_temple_crevice_west"); - end}; - {always=true, "[На юго-запад, к обелиску]", function() - move(submarine_leviathan, "dyp_temple_warning"); - psub("dyp_temple_warning"); - end}; - {always=true, "[На запад, вдоль скалы]", function() - move(submarine_leviathan, "dyp_temple_cliff_2"); - psub("dyp_temple_cliff_2"); - end}; - {always=true, "[Отойти от штурвала]", code = [[ - walk('leviathan_wheelhouse'); - ]]}; - {always=true, "[Отправиться в другое место]", code = [[ - walk('leviathan_dlg'); - ]]}; - - {tag="dyp_temple_cliff_4"}; - {always=true, "[На восток, вдоль скалы]", function() - move(submarine_leviathan, "dyp_temple_cliff_5"); - psub("dyp_temple_cliff_5"); - end}; - {always=true, "[На юг, к ущелью]", function() - move(submarine_leviathan, "dyp_temple_crevice_middle"); - psub("dyp_temple_crevice_middle"); - end}; - {always=true, "[На запад, вдоль скалы]", function() - move(submarine_leviathan, "dyp_temple_cliff_3"); - psub("dyp_temple_cliff_3"); - end}; - {always=true, "[Отойти от штурвала]", code = [[ - walk('leviathan_wheelhouse'); - ]]}; - {always=true, "[Отправиться в другое место]", code = [[ - walk('leviathan_dlg'); - ]]}; - - {tag="dyp_temple_cliff_5"}; - {always=true, "[На восток, вдоль скалы]", function() - temple_found = true; - move(submarine_leviathan, "iyh_far_from_entrance_foot"); - walk("iyh_far_from_entrance"); - --TODO катсцена при первом прибытии - end}; - {always=true, "[На юго-восток, к костям]", function() - move(submarine_leviathan, "dyp_temple_whale"); - psub("dyp_temple_whale"); - end}; - {always=true, "[На юг, к ущелью]", function() - move(submarine_leviathan, "dyp_temple_crevice_east"); - psub("dyp_temple_crevice_east"); - end}; - {always=true, "[На запад, вдоль скалы]", function() - move(submarine_leviathan, "dyp_temple_cliff_4"); - psub("dyp_temple_cliff_4"); - end}; - {always=true, "[Отойти от штурвала]", code = [[ - walk('leviathan_wheelhouse'); - ]]}; - {always=true, "[Отправиться в другое место]", code = [[ - walk('leviathan_dlg'); - ]]}; - - {tag="dyp_temple_whale"}; - {always=true, "[На север, к храму]", function() - temple_found = true; - move(submarine_leviathan, "iyh_far_from_entrance_foot"); - walk("iyh_far_from_entrance"); - --TODO катсцена при первом прибытии - end}; - {always=true, "[На юг, к ущелью]", function() - move(submarine_leviathan, "dyp_temple_crevice_far_east"); - psub("dyp_temple_crevice_far_east"); - end}; - {always=true, "[Отойти от штурвала]", code = [[ - walk('leviathan_wheelhouse'); - ]]}; - {always=true, "[Отправиться в другое место]", code = [[ - walk('leviathan_dlg'); - ]]}; - }; -}; - ---[[ -Ираафаанотр -]] - ---[[ -Ираафаанотр.Город -]] - -iraa_near_city_west = room { - nam = "iraa_near_city_west"; - disp = [[Ираафаанотр, у города]]; - dsc = [[Ровное илистое плато простирается вокруг насколько хватает взгляда. Вы находитесь на западной окраине Ираафаанотра -- небольшого навьярского поселения. Невысокие каменные здания, раскиданные в кажущемся беспорядке служат жилищем для многих из них. В центре городка возвышается каменный обелиск, с нанесенными на него изображениями. ]]; - view = [[Ровное илистое плато простирается вокруг насколько хватает взгляда. Вы находитесь на западной окраине Ираафаанотра -- небольшого навьярского поселения. Невысокие каменные здания, раскиданные в кажущемся беспорядке служат жилищем для многих из них. В центре городка возвышается каменный обелиск, с нанесенными на него изображениями. ]]; - obj = { - "iraa_city_west_guard" - }; - way = { - kh_vroom("В левиафан", "leviathan_airlock"); - kh_vroom("На восток, к центру Ираафаанотра", "iraa_city_west"); - }; -}; - -iraa_city_west = room { - nam = "iraa_city_west"; - disp = "Ираафаанотр, улица"; - dsc = [[Широкая мощеная улица, пересекающая город с востока на запад. К северу вы видите обширные поля, обрабатываемые десятками рук и дающие пищу жителям селения. К востоку вы видите каменный обелиск, возвышающийся над центральной площадью Ираафаанотра. ]]; - way = { - kh_vroom("На запад", "iraa_near_city_west"); - kh_vroom("На восток, к центру Ираафаанотра", "iraa_city_center"); - }; -}; - -iraa_city_center = room { - nam = "iraa_city_center"; - disp = "Ираафаанотр, центральная площадь"; - dsc = [[Центральная площадь Ираафаанотра практически пуста. Лишь несколько зевак с интересом разглядывает вас, осторожно выглядывая из дверей библиотеки -- крупного здания, расположенного к северу от вас. Напротив библиотеки расположен дом вождя, не уступающий размерами библиотеке. ]]; - obj = { - "iraa_obelisk"; - }; - way = { - kh_vroom("На запад", "iraa_city_west"); - kh_vroom("На восток", "iraa_city_east"); - kh_vroom("В библиотеку", "iraa_city_library"); - kh_vroom("В дом вождя", "iraa_city_chief_house"); - }; -}; - -iraa_obelisk = obj { - nam = "iraa_obelisk"; - dsc = [[В центре площади стоит большой каменный {обелиск}, с нанесенными на него символами. ]]; - act = function(s) - iraaphaanotrr_temple_found = true; - return [[На обелиске, традиционно для навьяров, начертано название города и вырезана карта, указывающая путь к храму. ]]; - end; -}; - -iraa_city_east = room { - var { - state = 0; - }; - nam = "iraa_city_east"; - disp = "Ираафаанотр, улица"; - dsc = [[Широкая мощеная улица, пересекающая город с востока на запад. К северу вы видите обширные поля, обрабатываемые десятками рук и дающие пищу жителям селения. К западу вы видите каменный обелиск, возвышающийся над центральной площадью Ираафаанотра. ]]; - entered = function(s) - if (state == 0 and char_learr.follow) then - path("На юг, к саду"):enable(); - if language_known then - return [[Здесь Леарр неожиданно останавливается. Она смотрит на юг, а по ее головным плавникам бегут цветные полосы -- она говорит, что здесь, за домом вождя есть небольшой сад, а сразу за ним находится ее дом. Она просит вас пойти туда вместе с ней. ]]; - else - return [[Здесь Леарр неожиданно останавливается. Она смотрит на юг, а по ее головным плавникам бегут цветные полосы. Вы не понимаете, что она пытается вам сказать, но она хватает вас за руку и пытается вести за собой на юг. ]]; - end; - end; - end; - way = { - kh_vroom("На восток", "iraa_near_city_east"); - kh_vroom("На юг, к саду", "iraa_garden"):disable(); - kh_vroom("На запад, к центру Ираафаанотра", "iraa_city_center"); - }; -}; - -iraa_garden = room { - nam = "iraa_garden"; - disp = "Ираафаанотр, сад"; - dsc = [[Небольшой сад, расположенный за домом вождя. ]]; - way = { - kh_vroom("На север, к главной улице", "iraa_near_city_east"); - kh_vroom("На юг, к дому Леарр", "iraa_learr_house_near"); - }; -}; - -iraa_learr_house_near = room { - nam = "iraa_learr_house_near"; - disp = "Ираафаанотр, у дома Леарр"; -}; - -iraa_near_city_east = room { - nam = "iraa_near_city_east"; - disp = [[Ираафаанотр, у города]]; - dsc = [[Ровное илистое плато простирается вокруг насколько хватает взгляда. Вы находитесь на восточной окраине Ираафаанотра -- небольшого навьярского поселения. Невысокие каменные здания, раскиданные в кажущемся беспорядке служат жилищем для многих из них. В центре городка возвышается каменный обелиск, с нанесенными на него изображениями. ]]; - obj = { - "iraa_city_east_guard"; - }; - way = { - kh_vroom("К центру Ираафаанотра", "iraa_city_east"); - }; -}; - -iraa_city_west_guard = npc { - nam = "iraa_city_west_guard"; - dsc = [[По обе стороны дороги стоят двое навьярских {стражникиов}. ]]; - phrases = function(s) - if (language_known) then - if (atl_rep_iraa >= 0) then - return { - "Стражники указывают вам на дом вождя. По головным плавникам стражников бегут цветные полосы -- они просят вас говорить с вождем. ", - "По головным плавникам стражников бегут цветные полосы -- они приветствуют вас" - }; - else - return { - "Стражники указывают вам на дом вождя. По их головным плавникам бегут цветные полосы -- они просят вас говорить с вождем. " - }; - end; - else - return { - "Стражники указывают вам на дом вождя. По головным плавникам стражников бегут цветные полосы, но вы не понимаете, что они значат. " - }; - end; - end; -}; - -iraa_city_east_guard = npc { - nam = "iraa_city_east_guard"; - dsc = [[По обе стороны дороги стоят двое навьярских {стражникиов}. ]]; - phrases = function(s) - if (language_known) then - if (atl_rep_iraa >= 0) then - return { - "Стражники указывают вам на дом вождя. По головным плавникам стражников бегут цветные полосы -- они просят вас говорить с вождем. ", - "По головным плавникам стражников бегут цветные полосы -- они приветствуют вас" - }; - else - return { - "Стражники указывают вам на дом вождя. По их головным плавникам бегут цветные полосы -- они просят вас говорить с вождем. " - }; - end; - else - return { - "Стражники указывают вам на дом вождя. По головным плавникам стражников бегут цветные полосы, но вы не понимаете, что они значат. " - }; - end; - end; -}; - -iraa_city_chief_house = room { - nam = "iraa_chief_house"; - dsc = [[Приемная дома вождя представляет собой огромый зал. Несколько массивных колонн, не слишком искусно сделанных, поддерживают тяжелую каменную крышу здания. В дальнем конце зала установлен каменный трон. Перед троном установлен громадный, каменный же стол, вокруг которого расставлено множество стульев. ]]; - way = { - kh_vroom("На площадь", "iraa_city_center"); - }; - obj = { - "iraa_chief" - }; -}; - -iraa_chief = npc { - nam = "iraa_chief"; - dsc = [[{Вождь Ираафаанотра} сидит на троне, внимательно наблюдая за вами своими серыми глазами. Руки его неподвижно лежат на подлокотниках. Серебристая чешуя, слегка синеватая потускнела за долгие годы жизни. Одет он в плотный облегающий костюм из водорослей, не стесняющий движения, как принято у всех, даже самых высокопоставленных навьяров. ]]; - dlg = "iraa_chief_dlg"; -}; - -iraa_chief_dlg = dlg { - var { - ask_temple = false; - }; - nam = "iraa_chief_dlg"; - disp = "Вождь Ираафаанотра"; - entered = function(s) - if (language_known) then - psub("greet"); - if (s.ask_temple) then - s.ask_temple = false; - pon("temple"); - end; - return [[Вы подходите к каменному столу, чтобы предстать перед вождем Ираафаанотра -- немолодым уже навьяром. Длинные руки, покрытые тусклой серебристой чешуей, с едва заметным синеватым отливом, покоятся на подлокотниках трона. Не поднимаясь, он начинает говорить. По головным плавникам вождя бегут цветные полосы -- вождь прииглашает вас сесть напротив него и открыть цель вашего визита. В скафандре у вас с трудом получается это сделать, но вы не решаетесь оскорбить вождя и остаться стоять перед ним. ]]; - else - psub("no_speech"); - return [[]]; - end; - end; - phr = { - {tag="no_speech"}; - {"[Уйти]", code [[ back(); ]]}; - {tag="greet"}; - {"[Кодировщик]Приветствую. Мы ищем фрагмент карты пути к Лсэрианотру, который находится у вас. ", [[Вождь задумчиво смотрит на вас. Через некоторое время он отвечает: "У нас нет ничего подобного. Я не знаю, о чем вы говорите". ]], code [[psub("more_info");]]}; - {tag="temple", false, "[Кодировщик]Мы просим разрешения посетить храм Ираафаанотра. ", [[Вождь отрицательно качает головой: "Это исключено, хевьяр. "]]}; - {"[Кодировщик]Мы ищем Венаэданотр. Вы знаете где это?", [[Вождь кивает: "Далеко отсюда. Спросите у Ритларра. "]]}; - {"[Кодировщик]Мы ищем Нлейисланотр. Вы знаете где это?", [[Вождь кивает: "Далеко отсюда. Спросите у Ритларра. "]]}; - {"[Уйти]", code [[ back(); ]]}; - {tag="more_info"}; - {"[Кодировщик]Один из фрагментов карты должен быть у вас[Передать табличку, найденную в храме]. ", [[Вождь отвечает: "Я не знаю ни о чем подобном. вам стоит спросить у Ритларра в библиотеке. "]]}; - {"[Уйти]", code [[ back(); ]]}; - }; -}; - -iraa_city_library = room { - nam = "iraa_city_library"; - dsc = [[Огромный зал библиотеки Ираафаанотра практичски пусто. ]]; - obj = { - "iraa_rytlarr", - "iraa_shelves" - }; -}; - -iraa_shelves = obj { - nam = "iraa_shelves"; - dsc = [[Вдоль стен стоят многочисленные {стеллажи} с древними и новыми записями. Большинство из них сделаны на металлических табличках и явно очень стары. Вперемешку с ними стоят и каменные -- более современные, и даже сделанные на водорослях -- те, что еще не успели переписать на что-то более долговечное. ]]; - act = [[Вам потребуются десятилетия, чтобы изучить все, находящиеся здесь записи. ]]; -}; - -iraa_rytlarr = npc { - nam = "iraa_rytlarr"; - dsc = [[По залу неспешно расхаживает молодой {навьяр}. Зеленые глаза внимательно рассматривают полки. Зеленовато-серая чешуя поблескивает на свету. Время от времени он останавливается возле одной из полок, чтобы перенести те или иные записи с места на место]]; - dlg = "iraa_rytlarr_dlg"; -}; - -iraa_rytlarr_dlg = dlg { - nam = "iraa_rytlarr_dlg"; - disp = [[Ритларр]]; - entered = function(s) - if (language_known) then - psub("generic"); - return [[Навьяр обращается к вам: "Ритларр приветствует тебя, хевьяр". ]]; - else - psub("no_speech"); - return [[По головным плавникам навьяра бегут цветные полосы, но вы не понимаете, что он пытается сказать вам. ]]; - end; - end; - phr = { - {tag="no_speech"}; - {"[Уйти]", code [[ back(); ]]}; - {tag="generic"}; - {"[Кодировщик]Я ищу часть карты, ведущей в Лсэрианотр.", [[Навьяр некоторое время стоит, задумавшись. Потом он начинает ходить от полки к полке. Наконец, он сообщает: "Я не уверен, что она у нас есть. Но если вы уверены -- она должна быть в храме. Спросите у вождя. Быть может он позволит вам войти внутрь по такому случаю". ]], code [[ iraa_chief_dlg.ask_temple = true; ]]}; - {"[Кодировщик]Ты знаешь, где находится Венаэданотр?", [[Навьяр кивает: "Мы знаем путь туда". Он ведет вас к одной из полок в дальнем конце зала. Ритларр достает одну из металлических пластин и протягивает вам со словами: "Вернете, когда сделаете копию у себя". ]], code [[ ]]}; - {"[Кодировщик]Ты знаешь, где находится Нлейисланотр?", [[Навьяр отрицательно качает головой: "У нас нет карты пути к этому месту. Быть может, путь знают в Дипатреанотре. "]]}; - {"[Уйти]", code [[ back(); ]]}; - }; -}; - ---[[ -Ираафаанотр.Храм -]] - -iraa_temple_entrance = room { - var { - state = 0; - }; - nam = "Храм Ираафаанотра, вход"; - underwater = true; - dsc = [[Перед вами возвышаются массивные двустворчатые ворота храма, вытесанные из камня. Над ними вы видите тщательно поддерживаемую в порядке карту, указывающую путь к Ираафаанотру. Скала тянется с севера на юг насколько хватает глаз. ]]; - view = [[Через иллюминаторы видны массивные ворота вытесанного в скале храма. Над входом расположен символ храма -- карта пути к самому Ираафаанотру отсюда. ]]; - entered = function(s) - if (char_anna.follow and s.state == 0) then - pr [[В динамике скафандра вы слышите голос Анны Рэдклифф: "Этот символ - ни что иное, как карта, указывающая путь к городу. В отличие от самого города, здесь я не вижу указаний ни на одно место, кроме храма и Ираафаанотра". ]]; - end; - s.state = 1; - end; - obj = { - "iraa_temple_guardians"; - }; - way = { - kh_vroom("Войти", function(s) - return [[Стражники не пропустят вас. ]]; - end); - kh_vroom("Вдоль скалы на север", "iraa_temple_north_1"); - kh_vroom("Вдоль скалы на юг", "iraa_temple_south"); - kh_vroom("В Левиафан", "leviathan_airlock"); - }; -}; - -iraa_temple_guardians = npc { - nam = "iraa_temple_guardians"; - dsc = [[У входа в храм стоят двое {стражников} -- обычный дозор. ]]; - phrases = function(s) - if language_known then - return { - "В вашем присутствии стражники заметно нервничают. "; - "Стражники осторожно переглядываются. "; - "По головным плавникам одного из стражников бегут цветные полосы: \"Уходите, вам здесь не место\". "; - }; - else - return { - "В вашем присутствии стражники заметно нервничают. "; - "Стражники осторожно переглядываются. "; - "По головным плавникам одного из стражников бегут цветные полосы, но вы не понимаете, что он хочет вам сказать. "; - }; - end; - end; -}; - -iraa_temple_south = room { - nam = "iraa_temple_south"; - disp = "У скалы"; - dsc = [[На востоке от вас возвышаетеся скала, протянувшаяся на многие километры с севера на юг. Вдалеке на севере вы видите Левиафан -- вашу субмарину и вход в храм Ираафаанотра, охраняемый двумя вооруженными навьярами. ]]; - way = { - kh_vroom("Вдоль скалы на север", "iraa_temple_entrance"); - }; -}; - -iraa_temple_north_1 = room { - nam = "iraa_temple_north_1"; - disp = "У скалы"; - dsc = [[На востоке от вас возвышаетеся скала, протянувшаяся на многие километры с севера на юг. Вдалеке на юге вы видите Левиафан -- вашу субмарину и вход в храм Ираафаанотра, охраняемый двумя вооруженными навьярами. ]]; - way = { - kh_vroom("Вдоль скалы на север", "iraa_temple_north_2"); - kh_vroom("Вдоль скалы на юг", "iraa_temple_entrance"); - }; -}; - -iraa_temple_north_2 = room { - nam = "iraa_temple_north_2"; - disp = "У скалы"; - dsc = [[На востоке от вас возвышаетеся скала, протянувшаяся на многие километры с севера на юг. Вдалеке на юге вы едва различаете Левиафан -- вашу субмарину. ]]; - way = { - kh_vroom("Вдоль скалы на север", "iraa_temple_north_3"); - kh_vroom("Вдоль скалы на юг", "iraa_temple_north_1"); - }; -}; - -iraa_temple_north_3 = room { - nam = "iraa_temple_north_3"; - disp = "У входа в ущелье"; - dsc = [[К востоку от вас возвышается скала, протянувшаяся на многие километры ссевера на юг. Рядом с вами в скале имеется узкое ущелье -- настолько незаметное, что проплывай вы мимо на Левиафане, вы не обратили бы на него никакого внимания. ]]; - way = { - kh_vroom("В ущелье", "iraa_temple_ravine_1"); - kh_vroom("Вдоль скалы на юг", "iraa_temple_north_2"); - }; - entered = function(s) - lifeoff(iraa_temple_shark); - end; -}; - -iraa_temple_shark = room { - var { - alive = true; - position = 1; - wait = 0; - }; - cycle = {2,6,7,8,9,4.3}; - nam = "iraa_temple_shark"; - life = function(s) - s.wait = s.wait + 1; - if (s.wait < 3) then - return; - end; - s.wait = 0; - s.position = s.position + 1; - if (s.position > #s.cycle) then - s.position = 1; - end; - if s.position == here().index then - walk("game_over_eaten_by_shark"); - end; - end; - canshoot = true; - onshoot = function(s) - s.alive = false; - lifeoff(s); - s:disable(); - return [[Пронзенная метким выстрелом гарпуна, акула умирает. ]]; - end; - dsc = function(s) - if s.alive then - if here().index == 1 then - if s.cycle[s.position] == 2 then - return [[На востоке от вас вы видите {акулу}, она движется на север. ]]; - end; - elseif here().index == 5 then - if s.cycle[s.position] == 4 then - return [[На западе от вас вы видите {акулу}, она движется на запад. ]]; - end; - elseif here().index == 10 then - if s.cycle[s.position] == 7 then - return [[На юге от вас вы видите {акулу}, она движется на восток. ]]; - end; - elseif here().index == 2 then - if s.cycle[s.position] == 3 then - return [[С востока к вам приближается {акула}. ]]; - elseif s.cycle[s.position] == 6 then - return [[К северу от вас вы видите {акулу}. Она не видит вас и продолжает движение от вас. ]]; - end; - elseif here().index == 6 then - if s.cycle[s.position] == 2 then - return [[С юга к вам приближается {акула}. ]]; - elseif s.cycle[s.position] == 7 then - return [[К северу от вас вы видите {акулу}. Она не видит вас и продолжает движение от вас. ]]; - end; - elseif here().index == 7 then - if s.cycle[s.position] == 6 then - return [[С юга к вам приближается {акула}. ]]; - elseif s.cycle[s.position] == 8 then - return [[На востоке вы видите {акулу}, удаляющуюся от вас. ]]; - end; - elseif here().index == 8 then - if s.cycle[s.position] == 7 then - return [[С запада к вам приближается {акула}. ]]; - elseif s.cycle[s.position] == 9 then - return [[На востоке вы видите {акулу}, удаляющуюся от вас. ]]; - end; - elseif here().index == 9 then - if s.cycle[s.position] == 8 then - return [[С запада к вам приближается {акула}. ]]; - elseif s.cycle[s.position] == 4 then - return [[На юге вы видите {акулу}, удаляющуюся от вас. ]]; - end; - elseif here().index == 4 then - if s.cycle[s.position] == 9 then - return [[С севера к вам приближается {акула}. ]]; - elseif s.cycle[s.position] == 3 then - return [[На западе вы видите {акулу}, удаляющуюся от вас. ]]; - end; - elseif here().index == 3 then - if s.cycle[s.position] == 4 then - return [[С востока к вам приближается {акула}. ]]; - elseif s.cycle[s.position] == 2 then - return [[На западе вы видите {акулу}, удаляющуюся от вас. ]]; - end; - end; - end; - end; -}; - -iraa_temple_ravine_1 = room { - index = 1; - nam = "iraa_temple_ravine_1"; - disp = "Ущелье"; - dsc = [[Глубокое узкое ущелье. Стены его почти отвесные и очен неровные, но вы бы не рискнули пытаться карабкаться по ним -- порода очень мягкая и может легко обрушиться под вшим весом. ]]; - way = { - kh_vroom("На запад", "iraa_temple_north_3"); - kh_vroom("На восток", "iraa_temple_ravine_2"); - }; - entered = function(s) - if iraa_temple_shark.alive then - lifeon(iraa_temple_shark); - end; - end; - obj = { - "iraa_temple_shark" - }; -}; - -iraa_temple_ravine_2 = room { - index = 2; - nam = "iraa_temple_ravine_2"; - disp = "Ущелье"; - dsc = [[Глубокое узкое ущелье. Стены его почти отвесные и очен неровные, но вы бы не рискнули пытаться карабкаться по ним -- порода очень мягкая и может легко обрушиться под вшим весом. ]]; - way = { - kh_vroom("На запад", "iraa_temple_ravine_1"); - kh_vroom("На север", "iraa_temple_ravine_6"); - kh_vroom("На восток", "iraa_temple_ravine_3"); - }; - obj = { - "iraa_temple_shark" - }; -}; - -iraa_temple_ravine_3 = room { - index = 3; - nam = "iraa_temple_ravine_3"; - disp = "Ущелье"; - dsc = [[Глубокое узкое ущелье. Стены его почти отвесные и очен неровные, но вы бы не рискнули пытаться карабкаться по ним -- порода очень мягкая и может легко обрушиться под вшим весом. ]]; - way = { - kh_vroom("На запад", "iraa_temple_ravine_2"); - kh_vroom("На восток", "iraa_temple_ravine_4"); - }; - obj = { - "iraa_temple_shark" - }; -}; - -iraa_temple_ravine_4 = room { - index = 4; - nam = "iraa_temple_ravine_4"; - disp = "Ущелье"; - dsc = [[Глубокое узкое ущелье. Стены его почти отвесные и очен неровные, но вы бы не рискнули пытаться карабкаться по ним -- порода очень мягкая и может легко обрушиться под вшим весом. ]]; - way = { - kh_vroom("На запад", "iraa_temple_ravine_3"); - kh_vroom("На север", "iraa_temple_ravine_9"); - kh_vroom("На восток", "iraa_temple_ravine_5"); - }; - obj = { - "iraa_temple_shark" - }; -}; - -iraa_temple_ravine_5 = room { - index = 5; - nam = "iraa_temple_ravine_5"; - disp = "Ущелье"; - dsc = [[Глубокое узкое ущелье. Стены его почти отвесные и очен неровные, но вы бы не рискнули пытаться карабкаться по ним -- порода очень мягкая и может легко обрушиться под вшим весом. ]]; - way = { - kh_vroom("На запад", "iraa_temple_ravine_4"); - kh_vroom("В трещину", "iraa_temple_crevice"); - }; - obj = { - "iraa_temple_shark" - }; - entered = function(s) - lifeoff(iraa_temple_guardian); - end; -}; - -iraa_temple_ravine_6 = room { - index = 6; - nam = "iraa_temple_ravine_6"; - disp = "Ущелье"; - dsc = [[Глубокое узкое ущелье. Стены его почти отвесные и очен неровные, но вы бы не рискнули пытаться карабкаться по ним -- порода очень мягкая и может легко обрушиться под вшим весом. ]]; - way = { - kh_vroom("На юг", "iraa_temple_ravine_2"); - kh_vroom("На север", "iraa_temple_ravine_7"); - }; - obj = { - "iraa_temple_shark" - }; -}; - -iraa_temple_ravine_7 = room { - index = 7; - nam = "iraa_temple_ravine_7"; - disp = "Ущелье"; - dsc = [[Глубокое узкое ущелье. Стены его почти отвесные и очен неровные, но вы бы не рискнули пытаться карабкаться по ним -- порода очень мягкая и может легко обрушиться под вшим весом. ]]; - way = { - kh_vroom("На юг", "iraa_temple_ravine_6"); - kh_vroom("На восток", "iraa_temple_ravine_8"); - kh_vroom("На север", "iraa_temple_ravine_10"); - }; - obj = { - "iraa_temple_shark" - }; -}; - -iraa_temple_ravine_8 = room { - index = 8; - nam = "iraa_temple_ravine_8"; - disp = "Ущелье"; - dsc = [[Глубокое узкое ущелье. Стены его почти отвесные и очен неровные, но вы бы не рискнули пытаться карабкаться по ним -- порода очень мягкая и может легко обрушиться под вшим весом. ]]; - way = { - kh_vroom("На запад", "iraa_temple_ravine_7"); - kh_vroom("На север", "iraa_temple_ravine_10"); - kh_vroom("На восток", "iraa_temple_ravine_9"); - }; - obj = { - "iraa_temple_shark" - }; -}; - -iraa_temple_ravine_9 = room { - index = 9; - nam = "iraa_temple_ravine_9"; - disp = "Ущелье"; - dsc = [[Глубокое узкое ущелье. Стены его почти отвесные и очен неровные, но вы бы не рискнули пытаться карабкаться по ним -- порода очень мягкая и может легко обрушиться под вшим весом. ]]; - way = { - kh_vroom("На запад", "iraa_temple_ravine_8"); - kh_vroom("На юг", "iraa_temple_ravine_4"); - }; - obj = { - "iraa_temple_shark" - }; -}; - -iraa_temple_ravine_10 = room { - index = 10; - nam = "iraa_temple_ravine_10"; - disp = "Ущелье"; - dsc = [[Глубокое узкое ущелье. Стены его почти отвесные и очен неровные, но вы бы не рискнули пытаться карабкаться по ним -- порода очень мягкая и может легко обрушиться под вшим весом. ]]; - way = { - kh_vroom("На север", "iraa_temple_ravine_11"); - kh_vroom("На восток", "iraa_temple_ravine_8"); - kh_vroom("На юг", "iraa_temple_ravine_7"); - }; - obj = { - "iraa_temple_shark" - }; -}; - -iraa_temple_ravine_11 = room { - nam = "iraa_temple_ravine_11"; - disp = "Ущелье"; - dsc = [[Глубокое узкое ущелье. Стены его почти отвесные и очен неровные, но вы бы не рискнули пытаться карабкаться по ним -- порода очень мягкая и может легко обрушиться под вшим весом. ]]; - way = { - kh_vroom("На север", "iraa_temple_ravine_11"); - kh_vroom("На восток", "iraa_temple_ravine_8"); - kh_vroom("На юг", "iraa_temple_ravine_7"); - }; -}; - -iraa_temple_crack = room { - index = 7; - nam = "iraa_temple_crack"; - disp = "Трещина в скале"; - dsc = [[Небольшая узкая трещина в скале. Вы с огромным трудом перемещаетесь внутри. С одной стороны вы видите ущелье, ерез которое вы проникли сюда. С другой стороны -- какой-то хорошо освещенный коридор. ]]; - way = { - kh_vroom("В коридор", "iraa_temple_corridor_6"); - kh_vroom("В ущелье", "iraa_temple_ravine_5"); - }; - entered = function(s) - lifeon(iraa_temple_guardian); - end; -}; - -iraa_temple_guardian = room { - var { - position = 1; - direction = 1; - wait = 0; - }; - nam = "iraa_temple_guardian"; - dsc = function(s) - - end; - life = function(s) - s.wait = s.wait + 1; - if (s.wait < 3) then - return; - end; - s.wait = 0; - if (s.direction == 1) then - if (s.position < 3) then - s.position = s.position + 1; - if (here().index >= s.position) then - pr [[Вы слышите шаги приближащегося стражника. ]]; - else - pr [[Вы слышите шаги удаляющегося стражника. ]]; - end; - else - s.direction = 2; - end; - elseif (s.direction == 2) then - if (s.position < 6) then - s.position = s.position + 1; - if (here().index >= s.position) then - pr [[Вы слышите шаги приближащегося стражника. ]]; - else - pr [[Вы слышите шаги удаляющегося стражника. ]]; - end; - else - s.direction = 2; - end; - elseif (s.direction == -2) then - if (s.position > 3) then - s.position = s.position - 1; - if (here().index <= s.position) then - pr [[Вы слышите шаги приближащегося стражника. ]]; - else - pr [[Вы слышите шаги удаляющегося стражника. ]]; - end; - else - s.direction = -1; - end; - elseif (s.direction == -1) then - if (s.position > 1) then - s.position = s.position - 1; - if (here().index <= s.position) then - pr [[Вы слышите шаги приближащегося стражника. ]]; - else - pr [[Вы слышите шаги удаляющегося стражника. ]]; - end; - else - s.direction = 1; - end; - end; - if here().index > 6 or here().index < 1 then - return; - end; - if s.direction == 1 and here().index < 4 and here().index >= s.position or - s.direction == 2 and here().index >= s.position or - s.direction == -2 and here().index > 2 and here().index <= s.position or - s.direction == -1 and here().index <= s.position then - walk("game_over_caught_iraa"); - end; - end; - dsc = function(s) - if s.direction == 1 then - - elseif s.direction == 2 then - elseif s.direction == -2 then - elseif s.direction == -1 then - end; - end; -}; - -iraa_temple_corridor_6 = room { - index = 6; - nam = "iraa_temple_corridor_6"; - disp = "Храм Ираафаанотра, коридор"; - dsc = [[Вы стоите в самом конце коридора в храме Ираафаанотра. Вокруг -- ровные камееные стены. В одной из них вы видите глубокую, трещину, через которую вы с трудом протиснулись сюда. Еще в одной из стен вы видите небольшой дверной проем, за которым скрывается маленькая комнатка. ]]; - way = { - kh_vroom("В трещину", "iraa_temple_crack"); - kh_vroom("В комнату", "iraa_temple_room_0"); - kh_vroom("По коридору, на юг", "iraa_temple_corridor_5"); - }; -}; - -iraa_temple_corridor_5 = room { - index = 5; - nam = "iraa_temple_corridor_5"; - disp = "Храм Ираафаанотра, коридор"; - dsc = [[Вы стоите в коридоре в храме Ираафаанотра. В одной из ровных каменных стен, расположенных по сторонам от вас, имеется небольшой дверной проем, за которым скрывается маленькая комнатка. ]]; - way = { - kh_vroom("В комнату", "iraa_temple_room_2"); - kh_vroom("По коридору, на север", "iraa_temple_corridor_6"); - kh_vroom("По коридору, на юг", "iraa_temple_corridor_4"); - }; -}; - -iraa_temple_corridor_4 = room { - index = 4; - nam = "iraa_temple_corridor_4"; - disp = "Храм Ираафаанотра, коридор"; - dsc = [[Вы стоите в коридоре в храме Ираафаанотра. Вокруг -- ровные каменные стены. ]]; - way = { - kh_vroom("По коридору, на север", "iraa_temple_corridor_5"); - kh_vroom("По коридору, на юг", "iraa_temple_corridor_3"); - }; -}; - -iraa_temple_corridor_3 = room { - index = 3; - nam = "iraa_temple_corridor_3"; - disp = "Храм Ираафаанотра, коридор"; - dsc = [[Вы стоите в коридоре в храме Ираафаанотра. Вокруг -- ровные каменные стены. Здесь коридор сворачивает под прямым углом к северу. В конце коридора на западе вы видите массивную каменную дверь, которая сейчас открыта. На севере коридор заканчивается тупиком. К востоку от вас массивная каменная дверь, но она заперта. ]]; - way = { - kh_vroom("По коридору, на север", "iraa_temple_corridor_4"); - kh_vroom("В комнату", "iraa_temple_room_5"); - kh_vroom("По коридору, на запад", "iraa_temple_corridor_2"); - }; -}; - -iraa_temple_corridor_2 = room { - index = 2; - nam = "iraa_temple_corridor_2"; - disp = "Храм Ираафаанотра, коридор"; - dsc = [[Вы стоите в коридоре в храме Ираафаанотра. Вокруг -- ровные каменные стены. ]]; - way = { - kh_vroom("По коридору, на восток", "iraa_temple_corridor_3"); - kh_vroom("В комнату в северной стене", "iraa_temple_room_3"); - kh_vroom("В комнату в южной стене", "iraa_temple_room_6"); - kh_vroom("По коридору, на запад", "iraa_temple_corridor_1"); - }; -}; - -iraa_temple_corridor_1 = room { - index = 1; - nam = "iraa_temple_corridor_1"; - disp = "Храм Ираафаанотра, коридор"; - dsc = [[Вы стоите в коридоре в храме Ираафаанотра. Вокруг -- ровные каменные стены. Прямо перед вами находится дверь, ведущая в основное помещение храма. Отсюда вы видите, что в нем никого нет. ]]; - way = { - kh_vroom("По коридору, на запад", "iraa_temple_corridor_2"); - kh_vroom("В комнату в северной стене", "iraa_temple_room_7"); - kh_vroom("В комнату в южной стене", "iraa_temple_room_1"); - kh_vroom("В главный зал", "iraa_temple_main_3"); - }; -}; - -iraa_temple_main_3 = room { - nam = "iraa_temple_main_3"; - disp = "Храм Ираафаанотра, главный зал"; - dsc = [[Вы находитесь в конце главного зала храма Ираафаанотра. В стенах проделаны многочисленые ниши, в которых покоятся священные реликвии навьяров. Массивная каменная дверь ведет в задние помещения. ]]; - way = { - kh_vroom("в дверь", "iraa_temple_corridor_1"); - kh_vroom("К центру зала", "iraa_temple_main_2"); - }; -}; - -iraa_temple_main_2 = room { - nam = "iraa_temple_main_2"; - disp = "Храм Ираафаанотра, главный зал"; - dsc = [[Вы находитесь в центре главного зала храма Ираафаанотра. Рядом с вами находится пустой пьедестал, на котором должна покоиться важнейшая реликвия храма, однако сейчас она отсутствует. Слева и справа от вас находятся залы, именуемые залами Ответа и Вопроса. ]]; - way = { - kh_vroom("В конец зала", "iraa_temple_main_3"); - kh_vroom("В зал Вопроса", "iraa_temple_qhall"); - kh_vroom("В зал Ответа", "iraa_temple_ahall"); - kh_vroom("К главному входу", "iraa_temple_main_1"); - }; - obj = { - "iraa_temple_lever_4" - }; -}; - -iraa_temple_main_1 = room { - nam = "iraa_temple_main_1"; - disp = "Храм Ираафаанотра, главный зал"; - dsc = [[Вы находитесь в главном зале храма Ираафаанотра. В многочисленных нишах в стенах покоятся древние реликвии. Перед вами возвышаются массивные ворота храма, за которыми наверняка стоит обычная стража -- двое вооруженных навьяров. ]]; - way = { - kh_vroom("В ворота", function(s) - pr("Не стоит делать этого. Стража вас схватит. "); - return false; - end); - kh_vroom("К центру зала", "iraa_temple_main_2"); - }; -}; - -iraa_temple_question = obj { - nam = "iraa_temple_question"; - dsc = [[На стене напротив входа нанесены какие-то {письмена}. Видно, что навьяры раз за разом тщательно обновляют их, сохраняя их в первозданном виде. ]]; - act = [[Письмена гласят: "Ищи число". ]]; -}; - -iraa_temple_qhall = room { - nam = "iraa_temple_qhall"; - disp = "Храм Ираафаанотра, Зал Вопроса"; - dsc = [[Небольшой боковой зал. ]]; - way = { - kh_vroom("В главный зал", "iraa_temple_main_2"); - }; - obj = { - "iraa_temple_question"; - }; -}; - -iraa_temple_answer = obj { - nam = "iraa_temple_answer"; - dsc = [[Вы видите вырезанное в стене изображение {спрута}. ]]; - act = [[Традиционное для навьяров схематичное изображение спрута. Вам бросается в глаза наличие у существа шестнадцати щупалец. ]]; -}; - -iraa_temple_ahall = room { - nam = "iraa_temple_ahall"; - disp = "Храм Ираафаанотра, Зал Ответа"; - dsc = [[Небольшой боковой зал. ]]; - way = { - kh_vroom("В главный зал", "iraa_temple_main_2"); - }; - obj = { - "iraa_temple_answer"; - }; -}; - -iraa_temple_room_0 = room { - var { - state = false; - }; - nam = "iraa_temple_room_0"; - disp = "Храм Ираафаанотра, комната"; - dsc = [[Небольшая, хорошо освещенная светящимися водорослями, комната. Ниши в стенах пустуют. ]]; - way = { - kh_vroom("В коридор", "iraa_temple_corridor_6"); - kh_vroom("В скрытый проход", "iraa_temple_hidden_stairs"); - }; - obj = { - "iraa_temple_lever_0" - }; - open = function(s) - s.state = true; - path("В скрытый проход", s):enable(); - if here() == s then - pr("Вы видите, как одна из стен раздвигается, открывая скрытый проход куда-то в глубь скалы. "); - else - pr("Вы слышите где-то поблизости скрежет каменных плит. "); - end; - end; - close = function(s) - if s.state then - s.state = false; - path("В скрытый проход", s):disable(); - if here() == s then - pr("Вы видите, как одна из стен cдвигается, вновь закрывая потайной проход. "); - else - pr("Вы слышите где-то поблизости скрежет каменных плит. "); - end; - end; - end; -}; - -iraa_temple_room_1 = room { - nam = "iraa_temple_room_1"; - disp = "Храм Ираафаанотра, комната"; - dsc = [[Небольшая, хорошо освещенная светящимися водорослями, комната. Ниши в стенах пустуют. ]]; - way = { - kh_vroom("В коридор", "iraa_temple_corridor_1"); - }; - obj = { - "iraa_temple_lever_1" - }; -}; - -iraa_temple_room_2 = room { - nam = "iraa_temple_room_2"; - disp = "Храм Ираафаанотра, комната"; - dsc = [[Небольшая, хорошо освещенная светящимися водорослями, комната. Ниши в стенах пустуют. ]]; - way = { - kh_vroom("В коридор", "iraa_temple_corridor_5"); - }; - obj = { - "iraa_temple_lever_2" - }; -}; - -iraa_temple_room_3 = room { - nam = "iraa_temple_room_3"; - disp = "Храм Ираафаанотра, комната"; - dsc = [[Небольшая, хорошо освещенная светящимися водорослями, комната. Ниши в стенах пустуют. ]]; - way = { - kh_vroom("В коридор", "iraa_temple_corridor_2"); - }; - obj = { - "iraa_temple_lever_3" - }; -}; - -iraa_temple_room_5 = room { - nam = "iraa_temple_room_5"; - disp = "Храм Ираафаанотра, комната"; - dsc = [[Небольшая, хорошо освещенная светящимися водорослями, комната. Ниши в стенах пустуют. ]]; - way = { - kh_vroom("В коридор", "iraa_temple_corridor_3"); - }; - obj = { - "iraa_temple_lever_5" - }; -}; - -iraa_temple_room_6 = room { - nam = "iraa_temple_room_6"; - disp = "Храм Ираафаанотра, комната"; - dsc = [[Небольшая, хорошо освещенная светящимися водорослями, комната. Ниши в стенах пустуют. ]]; - way = { - kh_vroom("В коридор", "iraa_temple_corridor_2"); - }; -}; - -iraa_temple_room_7 = room { - nam = "iraa_temple_room_7"; - disp = "Храм Ираафаанотра, комната"; - dsc = [[Небольшая, хорошо освещенная светящимися водорослями, комната. Ниши в стенах пустуют. ]]; - way = { - kh_vroom("В коридор", "iraa_temple_corridor_1"); - }; -}; - -iraa_temple_switch = obj { - nam = "iraa_temple_switch"; - var { - state = {false,false,false,false,false,false}; - }; - switch = function(s, index) - if index < 7 and index > 0 then - s.state[index] = not s.state[index]; - end; - if not state[1] and not state[2] and state[3] and not state[4] and state[5] and not state[6] then - -- A valid state - iraa_temple_room_0:open(); - else - -- An invalid state - iraa_temple_room_0:close(); - end; - end; -}; - -iraa_temple_lever_0 = obj { - nam = "iraa_temple_lever_0"; - dsc = [[Рядом со входом расположен едва заметный {рычаг} с отметкой фиолетового цвета]]; - act = function(s) - iraa_temple_switch(1); - end; -}; - -iraa_temple_lever_1 = obj { - nam = "iraa_temple_lever_0"; - dsc = [[Рядом со входом расположен едва заметный {рычаг} с отметкой синего цвета]]; - act = function(s) - iraa_temple_switch(2); - end; -}; - -iraa_temple_lever_2 = obj { - nam = "iraa_temple_lever_0"; - dsc = [[Рядом со входом расположен едва заметный {рычаг} с отметкой зеленого цвета]]; - act = function(s) - iraa_temple_switch(3); - end; -}; - -iraa_temple_lever_3 = obj { - nam = "iraa_temple_lever_0"; - dsc = [[Рядом со входом расположен едва заметный {рычаг} с отметкой желтого цвета]]; - act = function(s) - iraa_temple_switch(4); - end; -}; - -iraa_temple_lever_4 = obj { - nam = "iraa_temple_lever_0"; - dsc = [[Под пьедесталом расположен едва заметный {рычаг} с отметкой оранжевого цвета]]; - act = function(s) - iraa_temple_switch(5); - end; -}; - -iraa_temple_lever_5 = obj { - nam = "iraa_temple_lever_0"; - dsc = [[Рядом со входом расположен едва заметный {рычаг} с отметкой красного цвета]]; - act = function(s) - iraa_temple_switch(6); - end; -}; - -iraa_temple_hidden_stairs = darkroom { - nam = "iraa_temple_hidden_stairs"; - dsc_dark = [[]]; - dsc_halflit = [[]]; - way = { - kh_vroom("Наверх", "iraa_temple_room_0", 1); - kh_vroom("Вниз", "iraa_temple_room_0", 1); - }; -}; - -iraa_temple_button_ctr = function(nam, index) - return obj { - nam = nam; - dsc = function(s) - local im = "images/dyp_bg.png"; - for i = 1, #iraa_temple_hidden_hall.buttons[index] do - im = im .. ";images/dyp_" .. tostring(iraa_temple_hidden_hall.buttons[index][i]) .. ".png"; - end; - if (iraa_temple_hidden_hall.pressed_buttons[index]) then - return "{Рычаг с символами " .. img(im) .."} включен.^"; - else - return "{Рычаг с символами " .. img(im) .."} выключен.^"; - end; - end; - act = function(s) - iraa_temple_hidden_hall:check(index); - return [[ - Вы переключаете рычаг и узор на полу комнаты меняется - ]]; - end; - }; -end; - -iraa_temple_hidden_hall = room { - var { - active_parts = {false, false, false, false, false, false, false, false, false, false, false, false}; - pressed_buttons = {false, false, false, false, false, false, false, false}; - solved = false; - }; - buttons = { - {1, 5, 9, 11, 12}; - {1, 2, 3, 4}; - {4, 8, 10, 11, 12}; - {2, 4, 5, 6}; - {1, 5, 7, 9, 10, 11, 12}; - {2, 6, 9, 10, 12}; - {1, 3, 7, 8}; - {3, 7, 9, 10, 11}; - }; - pic = function(s) - local pic = 'images/dyp_bg.png'; - local cnt = 0; - for i = 1, #s.active_parts do - if (s.active_parts[i]) then - cnt = cnt + 1; - pic = pic .. ";images/dyp_" .. tostring(i) .. ".png"; - end; - end; - if (cnt > 0) then - return pic; - else - return nil; - end; - end; - nam = "Храм Ираафаанотра, потайной зал"; - dsc = [[Большой круглый плохо освещенный зал. В центре зала расположено восемь рычагов, рядом с которыми нанесены какие-то символы. ]]; - obj = { - iraa_temple_button_ctr("iraa_temple_b1", 1); - iraa_temple_button_ctr("iraa_temple_b2", 2); - iraa_temple_button_ctr("iraa_temple_b3", 3); - iraa_temple_button_ctr("iraa_temple_b4", 4); - iraa_temple_button_ctr("iraa_temple_b5", 5); - iraa_temple_button_ctr("iraa_temple_b6", 6); - iraa_temple_button_ctr("iraa_temple_b7", 7); - iraa_temple_button_ctr("iraa_temple_b8", 8); - }; - way = { - kh_vroom("Наверх", "iraa_temple_hidden_stairs"):disable(); - kh_vroom("Вниз", "iraa_temple_hidden_storage"):disable(); - }; - check = function(s, index) - s.pressed_buttons[index] = not s.pressed_buttons[index]; - - for i = 1, #s.active_parts do - s.active_parts[i] = false; - end; - - for i = 1, #s.pressed_buttons do - if (s.pressed_buttons[i]) then - for j = 1, #s.buttons[i] do - s.active_parts[s.buttons[i][j]] = not s.active_parts[s.buttons[i][j]]; - end; - end; - end; - - s.solved = true; - for i = 1, #s.active_parts do - if (not s.active_parts[i]) then - s.solved = false; - break; - end; - end; - - if (s.solved) then - path("Наверх"):enable(); - path("Вниз"):enable(); - end; - end; -}; - -iraa_temple_hidden_storage = room { - nam = "iraa_temple_hidden_storage"; - disp = [[Храм Ираафаанотра, хранилище]]; - dsc = [[Стены этой небольшой комнаты излучают слабый свет. ]]; - obj = { - "iraa_temple_hidden_pedestal" - }; -}; - -iraa_temple_hidden_pedestal = obj { - var { - state = 0; - }; - nam = "iraa_temple_hidden_pedestal"; - dsc = function(s) - if s.state == 0 then - return [[В центре установлен металлический пьедестал, на котором лежит металлическая {табличка}. ]]; - else - return [[В центре установлен металлический {пьедестал}. ]]; - end; - end; - act = function(s) - if s.state == 0 then - item_lse_map.state = item_lse_map.state + 1; - return [[Вы забираете металлическую табличку себе. ]]; - else - return [[Вьедестал пуст. ]]; - end; - end; -}; diff --git a/battlefield.lua b/battlefield.lua --- a/battlefield.lua +++ b/battlefield.lua @@ -119,9 +119,20 @@ end; end; end; +hp_indicator = obj { + nam = "hp_indicator"; + disp = function(s) + return "Здоровье:" .. pl.hp .. "/10"; + end; +}; + +hp_indicator:disable(); + + battlefield = function(tab) local make_turn = tab.make_turn; - + tab.nosave = true; + tab.noautosave = true; tab.isPassable = function(s, x, y) if (x < 1 or x > 7 or y < 1 or y > 7 or tab.map[y][x] > 0) then return false; @@ -244,12 +255,17 @@ battlefield = function(tab) tab.entered = function(s) s:check_walk(); + hp_indicator:enable(); if (type(entered) == 'function') then return entered(s); else return entered; end; end; + + tab.left = function(s) + hp_indicator:disable(); + end; tab.onreload = function(s) here():make_turn(); diff --git a/dock2.lua b/dock2.lua --- a/dock2.lua +++ b/dock2.lua @@ -47,14 +47,12 @@ dock_gate = obj { return false; end; end; - }; dock_inside = room { nam = "dock_inside"; disp = "Док"; dsc = [[На территории дока повсюду раскиданы обломки дерева, железа, какие-то мешки. Ржавые ворота в заборе застыли в приоткрытом состоянии. Вдалеке, у причала, стоит старый грузовой кран. До вас доносятся завывания ветра и скрип ржавого металла. ]]; - --dsc = [[Вы находитесь на территории дока, принадлежавшего компании "Вестхейвен Трансоушен", о чем свидетельствует оставшаяся позади табличка. Вдалеке, у причала стоит старый грузовой кран. Вы не слышите ничего, кроме завываний ветра и скрипа ржавого металла. ]]; way = { vroom("На улицу", "dock_2"); vroom("К причалу", "dock_mooring"); @@ -66,18 +64,20 @@ dock_inside = room { dock_boxes = obj { var { - searched = false; + searched = 0; }; nam = "dock_boxes"; disp = "Ящики"; dsc = [[Ровными рядами вокруг расположены старые грузовые {контейнеры}. Краска на большинстве из них повреждена настолько, что не осталось никаких опознавательных знаков об их происхождении и содержимом. ]]; act = function(s) - if (not s.searched) then - s.searched = true; + if s.searched == 0 then + s.searched = 1; put(item_pump_broken, pl); - return [[ - В одном из ящиков вы находите неисправный ручной насос. - ]]; + return [[В одном из ящиков вы находите неисправный ручной насос. ]]; + elseif s.searched == 1 then + s.searched = 2; + pl.money = pl.money + 5; + return [[В одном из ящиков кто-то оставил монету в пять шиллингов. ]]; end; end; }; @@ -97,7 +97,7 @@ leviathan_entry = room { dock_mooring = room { nam = "dock_inside"; disp = "Причал"; - dsc = [[У причала пусто, не считая нескольких кучек мусора - старых гнилых деревяшек, каких-то ржавых металлических трубок, мешков с неизвестным содержимым. Вы не слышите ничего, кроме шума мутной воды, завываний ветра и скрипа ржавого металла. ]]; + dsc = [[У причала пусто, не считая нескольких кучек мусора: старых гнилых деревяшек, каких-то ржавых металлических трубок, мешков с неизвестным содержимым. Вы не слышите ничего, кроме шума мутной воды, завываний ветра и скрипа ржавого металла. ]]; view = [[Левиафан находится в доке. ]]; way = { vroom("К воротам", "dock_inside"); @@ -106,14 +106,15 @@ dock_mooring = room { }; obj = { "dock_leviathan", - "dock_crane" + "dock_crane", + "money_dock" }; }; dock_leviathan = obj { var { submerged = true; - pump_state = 0; -- 0 в отсеке вода; 1 - в отсеке нет воды + pump_state = 0; -- 0 в отсеке вода; 1 в отсеке нет воды open = false; }; nam = "dock_leviathan"; @@ -123,9 +124,9 @@ dock_leviathan = obj { return "Под поверхностью воды виден какой-то большой металлический {объект}. "; else if (s.open) then - return [[На тросах подвешена странная машина. В верхней части торпедообразного корпуса расположен открытый {люк}. В задней видно два гребных винта. Иллюминаторы, частично показавшиеся на поверхности, покрыты грязью. В передней части на борту прикреплена слегка поржавевшая табличка с надписью "А04 - Левиафан". ]]; + return [[На тросах подвешена странная машина. В верхней части торпедообразного корпуса расположен открытый {люк}. В задней видно два гребных винта. Иллюминаторы, частично показавшиеся на поверхности, покрыты грязью. В передней части на борту прикреплена слегка поржавевшая табличка с надписью "А04 -- Левиафан". ]]; else - return [[На тросах подвешена странная машина. В верхней части торпедообразного корпуса расположен наглухо задраенный {люк}. В задней видно два гребных винта. Иллюминаторы, частично показавшиеся на поверхности, покрыты грязью. В передней части на борту прикреплена слегка поржавевшая табличка с надписью "А04 - Левиафан". ]]; + return [[На тросах подвешена странная машина. В верхней части торпедообразного корпуса расположен наглухо задраенный {люк}. В задней видно два гребных винта. Иллюминаторы, частично показавшиеся на поверхности, покрыты грязью. В передней части на борту прикреплена слегка поржавевшая табличка с надписью "А04 -- Левиафан". ]]; end; end; end; @@ -168,7 +169,7 @@ dock_crane = obj { if (s.state == 0) then return "Чуть в стороне от вас огромный металлический кран нависает над водой. {Тросы} сейчас подняты. Возле одной из опор крана установлена небольшая кабинка, в которой по-видимому расположены механизмы для управления краном. "; elseif (s.state == 1) then - return "Чуть в стороне от вас огромный металлический кран нависает над водой. {Тросы} опущены насколько это возможно - они почти полностью погружены в грязную воду. Возле одной из опор крана установлена небольшая кабинка, в которой по-видимому расположены механизмы для управления краном. "; + return "Чуть в стороне от вас огромный металлический кран нависает над водой. {Тросы} опущены насколько это возможно -- они почти полностью погружены в грязную воду. Возле одной из опор крана установлена небольшая кабинка, в которой по-видимому расположены механизмы для управления краном. "; elseif (s.state == 2) then return "Чуть в стороне от вас огромный металлический кран нависает над водой. {Тросы} подцеплены к предмету, скрывающемуся под водой. Возле одной из опор крана установлена небольшая кабинка, в которой по-видимому расположены механизмы для управления краном. "; else diff --git a/engineering.lua b/engineering.lua deleted file mode 100644 --- a/engineering.lua +++ /dev/null @@ -1,123 +0,0 @@ -first_city_engineering_door = obj { - nam = "first_city_engineering_door"; - dsc = function(s) - if (first_city_engineering.open) then - return [[]]; - else - return [[{Двери}, ведущие в зал обслуживания заблокированы. ]]; - end; - end; -}; - -first_city_engineering_door_inside = obj { - nam = "first_city_engineering_door_inside"; -}; - -first_city_engineering = room { - nam = "first_city_engineering"; - disp = "Лсэрианотр, зал обслуживания"; - dsc = [[ - Вы находитесь в одном из залов обслуживания Лсэрианотра. Двери в помещение заблокированы и разблокировать их не представляется возможным. - ]]; - entered = function(s) - service_tunnels.position = "24"; - end; - obj = { - "first_city_door_control", - "first_city_door_control_cardreader", - "item_keys" - }; - way = { - kh_vroom("В сервиcный тоннель", "service_tunnels"); - }; -}; - -item_keys = obj { - nam = "item_keys"; - disp = "Ключи"; - dsc = "На столе лежат несколько {металлических пластин}. "; - act = function(s) - take(item_middle_rim_key); - take(item_airlock_key); - take(item_engineering_key); - take(item_blank_key); - disable(s); - return "Вы берете пластины себе"; - end; -}; - ---TODO (публичная демо-версия) сделать картинки ключей ---TODO (приватная демо-версия) сделать случайную генерацию ключей - -item_airlock_key = obj { - nam = "item_airlock_key"; - disp = "Ключ-карта"; - inv = [[Небольшая металлическая пластина около 6 см в ширину и 10 см в длину. На ней нет никаких символов, кроме трех цилиндров заключенных в квадрат. ]]; -}; - -item_middle_rim_key = obj { - nam = "item_middle_rim_key"; - disp = "Ключ-карта с отверстиями"; - inv = [[Небольшая металлическая пластина около 3 см в ширину и 10 см в длину, на ней в ряд через равные промежутки присутствуют отверстия или нарисованные круги: круг, отверстие, круг, отверстие, круг, отверстие, отверстие, круг ]]; -- 01010110 = 172 -}; - -item_engineering_key = obj { - nam = "item_engineering_key"; - disp = "Ключ-карта с отверстиями"; - inv = [[Небольшая металлическая пластина около 3 см в ширину и 10 см в длину, на ней в ряд через равные промежутки присутствуют отверстия или нарисованные круги: круг, отверстие, круг, круг, отверстие, круг, круг, круг ]]; -- 01001000 = 144 -}; - -item_blank_key = obj { - nam = "item_blank_key"; - disp = "Ключ-карта без отверстий"; - inv = [[Небольшая металлическая пластина около 3 см в ширину и 10 см в длину с восемью кругами, нарисованными на ней в ряд ]]; -- 00000000 = 0 -}; - -first_city_door_control_cardreader = obj { - nam = "first_city_door_control_cardreader"; - state = 0; - dsc = function(s) - if (s.state == 0 or s.state == 2) then - return "В терминале вы видите небольшую {щель}, около 3 сантиметров шириной."; - else - return "В терминале вы видите небольшую {щель}, около 3 сантиметров шириной. В ней застряла одна из ключ-карт"; - end; - end; - act = function(s) - if (s.state == 0 or s.state == 2) then - return "Очевидно, сюда что-то вставляется. "; - else - return "Ключ-карта застряла. Вы не сможете вытащить ее руками. "; - end; - end; - used = function(s, o) - if (s.state == 0) then - if (o == item_middle_rim_key) then - s.state = s.state + 1; - remove(item_middle_rim_key, pl); - first_city_middle_south.open(first_city_middle_south); - return "Аппарат начинает считывать карту. Вы слышите громкий щелчок. Вы слышите откуда-то издалека звук открывающихся огромных ворот. Карта остается в разъеме. "; - elseif (o == item_engineering_key) then - s.state = s.state + 1; - remove(item_engineering_key, pl); - return "Аппарат начинает считывать карту. Вы слышите громкий щелчок. Двери в комнату слегка приоткрываются. После чего с громким стуком захлопываются. Карта остается в разъеме. "; - elseif (o == item_blank_key) then - s.state = s.state + 1; - remove(item_blank_key, pl); - return "Аппарат начинает считывать карту. Вы слышите громкий щелчок. Карта остается в разъеме. "; - else - return "Это сюда не подойдет"; - end; - elseif (s.state == 1 and o == item_umbrella) then - s.state = 0; - return "Острым наконечником зонта вы поддеваете ключ и вытягиваете его из разъема. К сожалению, он более непригоден к использованию - вы видите, что он погнут"; - else - return "Прежде чем вставлять что-то еще, нужно извлечь ключ. "; - end; - end; -}; - -first_city_door_control = obj { - nam = "first_city_door_control"; - dsc = "Возле одной из стен стоит терминал."; -}; \ No newline at end of file diff --git a/final_battle.lua b/final_battle.lua deleted file mode 100644 --- a/final_battle.lua +++ /dev/null @@ -1,692 +0,0 @@ -fb_naethvjirr = obj { - nam = "fb_naethvjirr"; - disp2 = "Наэтвьирра"; - position = 4; - throw = 0; -- оставшиеся ходы до возможности применения (раз в 4 хода) - charge = 0; -- оставшиеся ходы до возможности применения (раз в 3 хода) - shield = true; -- активность щита - shieldRecharge = false; -- О, как я люблю эти маленькие костыли. Это нужно, чтобы щит не восстанавливался сразу после выстрела - canshoot = function(s) - return not s.shield; - end; - canhit = function(s) - return not s.shield; - end; - nohitmsg = "Это бессмысленно, пока он закрыт щитом"; - noshootmsg = "Это бессмысленно, пока он закрыт щитом"; - hitpoints = 3; - passturn = function(s) - if (s.hitpoints > 0) then - local gens = 0; - for i = 0, #final_battle.generators do - if (final_battle.generators[i] == 4) then - gens = gens + 1; - s.charge = s.charge - 1; - elseif (final_battle.generators[i] == 3) then - gens = gens + 1; - s.throw = s.throw - 1; - elseif (final_battle.generators[i] == 2) then - gens = gens + 1; - if (not s.shield) then - if (s.shieldRecharge) then - s.shield = true; - s.shieldRecharge = false; - p("Щит вокруг Наэтвьирра восстановлен и он снова защищен от ваших атак. "); - else - s.shieldRecharge = true; - end; - end; - end; - end; - - if (gens == 0) then - p("Глаза Наэтвьирра гаснут, и конструкт бессильно падает на пол. "); - s.hitpoints = 0; - return true; - end; - - if (s.charge <= 0) then - -- Пускаем разряд в игрока - s.charge = 3; - p("Наэтвьирр отправляет в вас электрический разряд. Вы не можете пошевелиться. "); - if (rnd(4) < 2) then - -- Отбросить игрока в сторону - p("Разряд отбрасывает вас в сторону. "); - fb_throwAway(pl); - end; - - if (rnd(4) < 2) then -- 25% - p("Вы чувствуете, что атака не прошла для вас бесследно. "); - pl.hitpoints = pl.hitpoints - 1; - if (pl.hitpoints <= 0) then - walk(game_over_naethvjirr); - return; - end; - end; - - final_battle.passturn(final_battle); - p("Вы оправились от атаки Наэтвьирра и снова можете действовать. "); - elseif (s.throw <= 0) then - -- Отбрасываем игрока - s.throw = 4; - fb_throwAway(pl); - p("Наэтвьирр отправляет в вас мощную волну воздуха, которая отбрасывает вас в сторону. "); - - if (rnd(4) > 1) then -- 75% - pl.hitpoints = pl.hitpoints - 1; - p("Вы чувствуете, что атака не прошла для вас бесследно. "); - if (pl.hitpoints <= 0) then - walk(game_over_naethvjirr); - return; - end; - end; - end; - end; - end; - onhit = function(s) - local result = ""; - - s.hitpoints = s.hitpoints - 1; - if (s.hitpoints == 2) then - result = "Сильный удар повреждает Наэтвьирра, но вы не замечаете, сказалось ли это на его работоспособности. "; - elseif (s.hitpoints == 1) then - result = "Наэтвьирр пошатнулся от вашего удара, давая понять, что попадание не прошло бесследно. "; - elseif (s.hitpoints == 0) then - result = "После вашего удара глаза Наэтвьирра гаснут и конструкт с грохотом падает рядом со своим троном. "; - end; - p(result); - final_battle.passturn(final_battle); - end; - onshoot = function(s) - local hit = false; - if (pl.position[1] == 1 and pl.position[2] == 1) then - hit = (rnd(4) > 1); - else - hit = (rnd(2) > 1); - end; - - local result = ""; - if (hit) then - s.hitpoints = s.hitpoints - 1; - if (s.hitpoints == 2) then - result = "Ваш выстрел повреждает Наэтвьирра, но вы не замечаете, сказалось ли это на его работоспособности. "; - elseif (s.hitpoints == 1) then - result = "Глаза Наэтвьирра на мгновение моргают, давая понять, что попадание не прошло бесследно. "; - elseif (s.hitpoints == 0) then - result = "Глаза Наэтвьирра гаснут и конструкт с грохотом падает рядом со своим троном. "; - end; - else - result = "Пуля пролетает мимо конструкта, не причинив ему никакого вреда. "; - end; - pn(result); - final_battle.passturn(final_battle); - end; - dsc = function(s) - if (s.hitpoints > 0) then - local shield = ""; - if (s.shield) then - shield = "Вокруг него едва заметно силовое поле, защищающее его от физических повреждений. "; - end; - return "В центре зала перед массивной конструкцией, напоминающей трон, стоит {навьяр}. Конструкт выглядит совершенно как живой, сияющие красноватым светом глаза внимательно следят за вашими действиями. ".. shield .."^"; - else - --return "В центре зала рядом с массивной конструкцией, напоминающей трон, лежит сильно поврежденный {навьяр-конструкт}. ^"; - return ""; - end; - end; -}; - -fb_black = obj { - nam = "fb_black"; - position = 4; - bullets = 6; -- потребуется перезарядка, если потратит все 6 патронов. Скорее всего до этого никогда не дойдет, но предусмотреть стоит - hitpoints = 1; - disp2 = "Блэка"; - canshoot = function(s) - if (pl.position[1] == 1 and pl.position[2] == 1) then - return true; - else - return false; - end; - end; - noshootmsg = "Вы не попадете в него. "; - nohitmsg = "Для этого до него еще надо добраться. "; - dsc = function(s) - if (s.hitpoints > 0) then - return "{Адриан Блэк} укрылся от вас за троном. ^"; - end; - end; - onshoot = function(s) - if (rnd(2) > 1) then--50% - s.hitpoints = 0; - p("Вы раните Блэка в плечо, он роняет пистолет и скрывается за троном. Более он не опасен. "); - else - p("Ваша пуля пролетает мимо, не причинив Блэку никакого вреда. "); - end; - final_battle.passturn(final_battle); - end; - passturn = function(s) - if (s.hitpoints > 0) then - if (s.bullets > 0) then - if (pl.position[1] == 1 and pl.position[2] == 1) then - -- Стреляем в игрока - p("Блэк стреляет в вас. "); - if (rnd(4) > 1) then--75% - pl.hitpoints = pl.hitpoints - 1; - if (pl.hitpoints > 0) then - p("Пуля лишь слегка задевает вас, практически не нанеся урона. "); - else - walk(game_over_shot_fb); - end; - end; - end; - else - -- Перезаряжаем - s.bullets = 6; - p("Адриан Блэк перезаряжает револьвер. "); - end; - end; - end; -}; - -fb_pylons = obj { - nam = "fb_pylons"; - position = "с"; - state = 2;--Количество активных пилонов - charging = 0; - canhit = true; - noshootmsg = "Вы не попадете в них"; - onhit = function(s) - if (s.state > 0) then - if (pl.position[1] == 1 and pl.position[2] == 1) then - s.state = s.state - 1; - if (s.state == 0) then - -- Если оба пилона уничтожены, нет смысла передавать им энергию. - for i = 0, #final_battle.generators do - if (final_battle.generators[i] == 5) then - final_battle.generators[i] = 1; - end; - end; - end; - p("Ударом по металлическому стержню, вы выводите из строя один из пилонов"); - final_battle.passturn(final_battle); - else - return "Пилоны слишком далеко от вас"; - end; - else - return "Оба пилона уже выведены из строя"; - end; - end; - passturn = function(s) - for i = 1, #final_battle.generators do - if (final_battle.generators[i] == 5) then - s.charging = s.charging + 1; - end; - end; - if (s.charging >= 10) then - pl.hitpoints = 0; - walk(game_over_pylon); - end; - end; - dsc = function(s) - if (s.state == 2) then - return "В центральной части комнаты расположены два {пилона} высотой около метра. На вершине их установлены сверкающие металлические стержни.^"; - elseif (s.state == 1) then - return "В центральной части комнаты расположены два {пилона} высотой около метра. На вершине одного из пилонов установлен сверкающий металлический стержень. Стержень на втором пилоне сильно погнут и выведен из строя.^"; - elseif (s.state == 0) then - return "В центральной части комнаты расположены два пилона высотой около метра. Металлические стержни, установленные в их вершине сильно повреждены.^"; - end; - end; -}; - -fb_throwAway = function(target) - local positions = {}; - if (target.position[1] - 1 >= 0) then - if (target.position[2] - 1 >= 0) then - positions[#positions + 1] = {target.position[1] - 1, target.position[2] - 1}; - end; - positions[#positions + 1] = {target.position[1] - 1, target.position[2]}; - if (target.position[2] + 1 <= 2) then - positions[#positions + 1] = {target.position[1] - 1, target.position[2] + 1}; - end; - end; - - if (target.position[2] - 1 >= 0) then - positions[#positions + 1] = {target.position[1], target.position[2] - 1}; - end; - if (target.position[2] + 1 <= 2) then - positions[#positions + 1] = {target.position[1], target.position[2] + 1}; - end; - - if (target.position[1] + 1 <= 2) then - if (target.position[2] - 1 >= 0) then - positions[#positions + 1] = {target.position[1] + 1, target.position[2] - 1}; - end; - positions[#positions + 1] = {target.position[1] + 1, target.position[2]}; - if (target.position[2] + 1 <= 2) then - positions[#positions + 1] = {target.position[1] + 1, target.position[2] + 1}; - end; - end; - - target.position = positions[rnd(#positions)]; -end; - -fb_getGeneratorIcon = function(value) - if (value == 0) then - return "images/fb_inactive.png"; - elseif (value == 1) then - return "images/fb_awake.png"; - elseif (value == 2) then - return "images/fb_shield.png"; - elseif (value == 3) then - return "images/fb_throw.png"; - elseif (value == 4) then - return "images/fb_charge.png"; - elseif (value == 5) then - return "images/fb_pylon.png"; - end; -end; - -final_battle = room { - nam = "final_battle"; - pic = function(s) - local image = 'images/fb_bcg.png'; - image = image .. ";" .. fb_getGeneratorIcon(s.generators[1]) .. "@48,0"; - image = image .. ";" .. fb_getGeneratorIcon(s.generators[2]) .. "@96,0"; - image = image .. ";" .. fb_getGeneratorIcon(s.generators[3]) .. "@96,48"; - image = image .. ";" .. fb_getGeneratorIcon(s.generators[4]) .. "@96,96"; - image = image .. ";" .. fb_getGeneratorIcon(s.generators[5]) .. "@48,96"; - image = image .. ";" .. fb_getGeneratorIcon(s.generators[6]) .. "@0,96"; - image = image .. ";" .. fb_getGeneratorIcon(s.generators[7]) .. "@0,48"; - image = image .. ";" .. fb_getGeneratorIcon(s.generators[8]) .. "@0,0"; - if (fb_naethvjirr.hitpoints > 0) then - image = image .. ";images/fb_naethvjirr.png@64,80"; - end; - if (fb_black.hitpoints > 0) then - image = image .. ";images/fb_black.png@80,80"; - end; - image = image .. ";images/fb_player.png@"..tostring(pl.position[1] * 48 + 16)..","..tostring((2 - pl.position[2]) * 48 + 16); - if (fb_pylons.state > 1) then - image = image .. ";images/fb_pylon.png@48,64"; - else - image = image .. ";images/fb_inactive.png@48,64"; - end; - if (fb_pylons.state > 0) then - image = image .. ";images/fb_pylon.png@80,64"; - else - image = image .. ";images/fb_inactive.png@80,64"; - end; - return image; - end; - disp = "Лсэрианотр, центральный зал"; - awakening = 300; - dsc = function(s) - local temp = ""; - if (pl.position[1] == 1 and pl.position[2] == 2) then - temp = "северной"; - elseif (pl.position[1] == 2 and pl.position[2] == 2) then - temp = "северо-восточной"; - elseif (pl.position[1] == 2 and pl.position[2] == 1) then - temp = "восточной"; - elseif (pl.position[1] == 2 and pl.position[2] == 0) then - temp = "юго-восточной"; - elseif (pl.position[1] == 1 and pl.position[2] == 0) then - temp = "южной"; - elseif (pl.position[1] == 0 and pl.position[2] == 0) then - temp = "юго-западной"; - elseif (pl.position[1] == 0 and pl.position[2] == 1) then - temp = "западной"; - elseif (pl.position[1] == 0 and pl.position[2] == 2) then - temp = "северо-западной"; - elseif (pl.position[1] == 1 and pl.position[2] == 1) then - temp = "центральной"; - end; - - local debug_str = tostring(s.awakening) .. " "; - debug_str = debug_str .. tostring(fb_pylons.charging) .. " "; - - return "Вы находитесь в " .. temp .. " части главного зала древнего города Навьяр. На схеме приведено расположение важных объектов в комнате, включая символы, изображенные на генераторах" .. debug_str; - --Вдоль стен стоят огромные металлические шкафы, из которых тысячи проводом тянутся к громадной конструкции в центре зала. Мягкий свет льется сверху, практически ослепляя вас после полумрака остальной части мертвого города. " - --]]; - end; - left = function(s) - lifeoff(s); - end; - entered = function(s) - -- Здесь будем собирать все необходимое для начала финальной битвы: сопартийцы отыграют свою роль, после чего начнется битва не на жизнь, а на смерть. - s.entered = nil; -- Должно отработать не более одного раза - - pl.position = {1,2}; - local throw = rnd(8); - while (s.generators[throw] ~= 1) do - throw = rnd(8); - end; - s.generators[throw] = 3; - - local shield = rnd(8); - while (s.generators[shield] ~= 1) do - shield = rnd(8); - end; - s.generators[shield] = 2; - - local charge = rnd(8); - while (s.generators[charge] ~= 1) do - charge = rnd(8); - end; - s.generators[charge] = 4; - - local pylon = rnd(8); - while (s.generators[pylon] ~= 1) do - pylon = rnd(8); - end; - s.generators[pylon] = 5; - - --[[for i = 1, #pl.party do - if (pl.party[i] == "phaetlarr") - elseif (pl.party[i] == "learr") - elseif (pl.party[i] == "radcliffe") - elseif (pl.party[i] == "wright") - end; - end;]] - - lifeon(s); - end; - life = function(s) - fb_north:enable(); - fb_northeast:enable(); - fb_east:enable(); - fb_southeast:enable(); - fb_south:enable(); - fb_southwest:enable(); - fb_west:enable(); - fb_northwest:enable(); - - if (pl.position[2] == 2) then - fb_north:disable(); - fb_northeast:disable(); - fb_northwest:disable(); - elseif (pl.position[2] == 0) then - fb_south:disable(); - fb_southeast:disable(); - fb_southwest:disable(); - end; - - if (pl.position[1] == 2) then - fb_east:disable(); - fb_northeast:disable(); - fb_southeast:disable(); - elseif (pl.position[1] == 0) then - fb_west:disable(); - fb_northwest:disable(); - fb_southwest:disable(); - end; - - fb_generator:enable(); - if (pl.position[1] == 1 and pl.position[2] == 2) then - fb_generator.index = 1; - elseif (pl.position[1] == 2 and pl.position[2] == 2) then - fb_generator.index = 2; - elseif (pl.position[1] == 2 and pl.position[2] == 1) then - fb_generator.index = 3; - elseif (pl.position[1] == 2 and pl.position[2] == 0) then - fb_generator.index = 4; - elseif (pl.position[1] == 1 and pl.position[2] == 0) then - fb_generator.index = 5; - elseif (pl.position[1] == 0 and pl.position[2] == 0) then - fb_generator.index = 6; - elseif (pl.position[1] == 0 and pl.position[2] == 1) then - fb_generator.index = 7; - elseif (pl.position[1] == 0 and pl.position[2] == 2) then - fb_generator.index = 8; - elseif (pl.position[1] == 1 and pl.position[2] == 1) then - fb_generator:disable(); - end; - - local activeGens = false; - for i = 1, #s.generators do - if (s.generators[i] ~= 0) then - activeGens = true; - end; - end; - - if (not activeGens) then - walk(game_over_victory); - end; - end; - passturn = function(s) - -- реальный расчет боевых действий будет в этой функции - for i = 1,#s.generators do - if (s.generators[i] == 1) then - s.awakening = s.awakening - 10; - end; - end; - for i = 1,#s.obj do - if (s.obj[i].passturn) then - s.obj[i].passturn(s.obj[i]); - end; - end; - if (s.awakening <= 0) then - walk(game_over_awakening); - end; - end; - generators = { - 1, 1, 1, 1, 1, 1, 1, 1 - -- В этот массив заносятся состояния генераторов: a - active, i - inactive, t - throw, s - shield, c - charge, p - pylon - -- Состояния генераторов записываются цифрами по приоритету от минимального до максимального(чем больше цифра, тем больше приоритет) - -- 0 - inactive, 1 - active, 2 - shield, 3 - throw, 4 - charge, 5 - pylon - }; - obj = { - 'fb_pylons', - 'fb_naethvjirr', - 'fb_black', - 'fb_generator', - - 'fb_north', - 'fb_northeast', - 'fb_east', - 'fb_southeast', - 'fb_south', - 'fb_southwest', - 'fb_west', - 'fb_northwest' - }; -}; - -fb_generator = obj { - nam = "fb_generator", - dsc = function(s) - if (final_battle.generators[s.index] == 0) then - return "Рядом с вами расположен огромный металлический {шкаф}, искореженный несколькими ударами кирки. Судя по всему этот генератор выведен из строя. ^"; - else - return "Рядом с вами расположен огромный металлический {шкаф}, расположенный рядом с вами издает негромкий гул. На его передней стенке виден светящийся символ. Конструкция соединена толстыми проводами с троном Наэтвьирра, в центре зала. ^"; - end; - end; - index = 0; - act = "Вы ничего не сможете сделать с генератором без дополнительных приспособлений"; - noshootmsg = "Это бесполезно"; - canhit = true; - onhit = function(s) - --[[ - Модули питания могут быть назначены на одну из нескольких подсистем. - Для питания каждой подсистемы требуется минимум один источник ее питания. Всего подсистемы следующие: пилоны, щит, разряд, разброс и пробуждение. - Приоритеты распределения таковы: - Всегда должна быть активна минимум одна атакующая подсистема, в порядке эффективности: пилоны, разряд, разброс. - Если для атакующих подсистем достаточно энергии, то активен и щит. - Наименьшим приоритетом обладает пробуждение. - Также учитывается возможность и целесообразность применения защитных и атакующих подсистем: - Если аватар уничтожен, нет смысла поддерживать щит, разброс и разряд. - ]] - local gen = final_battle.generators[s.index]; - final_battle.generators[s.index] = 0; - local moreInfo = ""; - if (gen == 5) then - --Как самая эффективная система атаки, пилоны всегда заряжаются, независимо от обстоятельств - fb_pylons.charging = fb_pylons.charging - 4; - if (fb_pylons.charging < 0) then - fb_pylons.charging = 0; - end; - local priorityToReplace = 4; - local activeCount = 0; - for i = 1,#final_battle.generators do - if (final_battle.generators[i] ~= 0 and final_battle.generators[i] <= priorityToReplace) then - activeCount = activeCount + 1; - if (final_battle.generators[i] < priorityToReplace) then - priorityToReplace = final_battle.generators[i]; - end; - end; - end; - if (activeCount > 0) then - local replacementIndex = rnd(8); - while (final_battle.generators[replacementIndex] ~= priorityToReplace) do - replacementIndex = rnd(8); - end; - final_battle.generators[replacementIndex] = gen; - end; - elseif (gen == 4) then - fb_naethvjirr.charge = fb_naethvjirr.charge + 1; - local priorityToReplace = 3; - local activeCount = 0; - for i = 1,#final_battle.generators do - if (final_battle.generators[i] ~= 0 and final_battle.generators[i] <= priorityToReplace) then - activeCount = activeCount + 1; - if (final_battle.generators[i] < priorityToReplace) then - priorityToReplace = final_battle.generators[i]; - end; - end; - end; - if (activeCount > 0) then - local replacementIndex = rnd(8); - while (final_battle.generators[replacementIndex] ~= priorityToReplace) do - replacementIndex = rnd(8); - end; - final_battle.generators[replacementIndex] = gen; - end; - elseif (gen == 3) then - fb_naethvjirr.throw = fb_naethvjirr.throw + 1; - local priorityToReplace = 2; - local activeCount = 0; - for i = 1,#final_battle.generators do - if (final_battle.generators[i] ~= 0 and final_battle.generators[i] <= priorityToReplace) then - activeCount = activeCount + 1; - if (final_battle.generators[i] < priorityToReplace) then - priorityToReplace = final_battle.generators[i]; - end; - end; - end; - if (activeCount > 0) then - local replacementIndex = rnd(8); - while (final_battle.generators[replacementIndex] ~= priorityToReplace) do - replacementIndex = rnd(8); - end; - final_battle.generators[replacementIndex] = gen; - end; - elseif (gen == 2) then - fb_naethvjirr.shield = false; - moreInfo = "Щит вокруг Наэтвьирра растворяется, оставляя конструкта открытым для ваших атак. "; - local priorityToReplace = 1; - local activeCount = 0; - for i = 1,#final_battle.generators do - if (final_battle.generators[i] ~= 0 and final_battle.generators[i] <= priorityToReplace) then - activeCount = activeCount + 1; - if (final_battle.generators[i] < priorityToReplace) then - priorityToReplace = final_battle.generators[i]; - end; - end; - end; - if (activeCount > 0) then - local replacementIndex = rnd(8); - while (final_battle.generators[replacementIndex] ~= priorityToReplace) do - replacementIndex = rnd(8); - end; - final_battle.generators[replacementIndex] = gen; - end; - elseif (gen == 0) then - return "Генератор итак выведен из строя, незачем его дальше колотить. "; - end; - p("После нескольких сильных ударов генератор затихает. ".. moreInfo); - final_battle.passturn(final_battle); - end; -}; - -fb_north = obj { - nam = "north", - dsc = "{На север}", - act = function(s) - pl.position[2] = pl.position[2] + 1; - p("Вы идете на север"); - final_battle.passturn(final_battle); - end; -}; - -fb_northeast = obj { - nam = "northeast", - dsc = "{На северо-восток}", - act = function(s) - pl.position[1] = pl.position[1] + 1; - pl.position[2] = pl.position[2] + 1; - p("Вы идете на северо-восток."); - final_battle.passturn(final_battle); - end; -}; - -fb_east = obj { - nam = "east", - dsc = "{На восток}", - act = function(s) - pl.position[1] = pl.position[1] + 1; - p("Вы идете на восток."); - final_battle.passturn(final_battle); - end; -}; - -fb_southeast = obj { - nam = "southeast", - dsc = "{На юго-восток}", - act = function(s) - pl.position[1] = pl.position[1] + 1; - pl.position[2] = pl.position[2] - 1; - p("Вы идете на юго-восток."); - final_battle.passturn(final_battle); - end; -}; - -fb_south = obj { - nam = "south", - dsc = "{На юг}", - act = function(s) - pl.position[2] = pl.position[2] - 1; - p("Вы идете на юг."); - final_battle.passturn(final_battle); - end; -}; - -fb_southwest = obj { - nam = "southwest", - dsc = "{На юго-запад}", - act = function(s) - pl.position[1] = pl.position[1] - 1; - pl.position[2] = pl.position[2] - 1; - p("Вы идете на юго-запад."); - final_battle.passturn(final_battle); - end; -}; - -fb_west = obj { - nam = "west", - dsc = "{На запад}", - act = function(s) - pl.position[1] = pl.position[1] - 1; - p("Вы идете на запад."); - final_battle.passturn(final_battle); - end; -}; - -fb_northwest = obj { - nam = "northwest", - dsc = "{На северо-запад}", - act = function(s) - pl.position[1] = pl.position[1] - 1; - pl.position[2] = pl.position[2] + 1; - p("Вы идете на северо-запад."); - final_battle.passturn(final_battle); - end; -}; \ No newline at end of file diff --git a/final_scene.lua b/final_scene.lua deleted file mode 100644 --- a/final_scene.lua +++ /dev/null @@ -1,228 +0,0 @@ -adrian_helper = obj { - nam = "adrian_helper"; - life = function(s) - if (char_adrian.state > 1 and char_adrian.state < 5) then - char_adrian.state = char_adrian.state + 1; - elseif (char_adrian.state == 5) then - char_naethvjirr.active = true; - p([[ - Адриан что-то делает с пультом управления и Наэтвьирр оживает - ]]); - lifeoff(s); - walk("pre_battle_scene_normal"); - end; - end; -}; - -char_adrian = obj { - nam = "adrian"; - disp = "Adrian"; - state = 1; - dsc = function(s) - if (char_naethvjirr.active) then - return [[ - Вы видите {Адриана Блэка}, стоящего рядом с автоматоном. ^ - ]]; - else - if (s.state == 1) then - return [[ - Вы видите {Адриана Блэка}, стоящего рядом с автоматоном. Он что-то делает с ним. ^ - ]]; - elseif (s.state < 6) then - return [[ - {Адриан Блэк} собирается включить Наэтвьирра. ^ - ]]; - end; - end; - end; - life = function(s) - if (s.state < 5) then - s.state = s.state + 1; - elseif (s.state == 5) then - char_naethvjirr.active = true; - p([[ - Адриан что-то делает с пультом управления и Наэтвьирр оживает - ]]); - lifeoff(s); - walk("pre_battle_scene_normal"); - end; - end; - act = function(s) - if (s.state == 1) then - walkin "adrian_dlg"; - elseif (s.state < 5) then - return "Надо как-то остановить его, но как?"; - else - -- TODO: Вы сбиваете Адриана с ног - end; - end; -}; - -adrian_dlg = dlg { - nam = "adrian_dlg"; - disp = "Адриан Блэк"; - hideinv = true; - entered = [[ - Блэк поворачивается к вам. Его лицо выражает крайнюю степень удивления: - "Кто вы, черт возьми, такие?!". Он отвлекся от работы с Наэтвьирром. Кажется, он не рад вас видеть. - ]]; - phr = { - {"Адриан Блэк?", [[ - "Предположим. " - ]]}, - {"Что здесь происходит?", [[ - "Завершаю то, что должно было закончиться тысячелетия назад. Эта машина, Наэтвьирр - спящий разум глубин, как его называют Навьяры, или если точнее - Эйлеслвьихенарр - вечный разум глубин и поверхности. Он таит знания тысяч поколений Навьяр - они не должны скрываться под толщей воды, они должны быть открыты нам! " - ]], [[ pstart 'more_naethvjirr' ]]}, - { - tag="more_naethvjirr" - }, - {"Что вы знаете о Наэтвьирре?", [[ - "Согласно легендам, собранным мной в разных поселениях навьяров, Наэтвьирр был построен в глубокой древности навьярами, которые тогда господствовали как под водой, так и на суше. Единственной целью существования Наэтвьирра было стать "вечным мудрецом" - "эйлеслэйлайхевьирр", как его называют до сих пор в некоторых местах. Имена менялись, как всегда было у навьяров, но всегда отражали суть - частично или полностью - мыслящая, всезнающая машина, способная ответить на многие вопросы и помочь принять многие трудные решения. Только по чудовищному недоразумению он не был активирован раньше. " - ]]}, - {"Вы понимаете, насколько опасно включать эту машину, как бы она ни называлась?", [[ - "Во-первых, не тебе учить меня. Во-вторых, я все предусмотрел - в случае опасности я смогу отключить его." - ]], [[ pstart 'halt_naethvjirr' ]]}, - { - tag="halt_naethvjirr", - empty = function() - char_adrian.state = 2; - p("^^С этими словами, Адриан подходит к рубильнику. У вас есть несколько мгновений, чтобы отреагировать"); - walk("final_scene"); - char_naethvjirr.canshoot = true; - lifeon(adrian_helper); - end - }, - {"Как вы собираетесь управлять им, если ключ утерян? *Вы показываете Адриану табличку со схемой работы Наэтвьирра*", [[ - Адриан показывает вам серебристую пластинку небольшого размера(около 20х15см), на которой отсвечивают красноватые круги и линии. - "Я все предусмотрел. Без этой деталюшки Наэтвьирр будет серьезно ограничен в возможностях - это тот самый компонент, который должен блокироваться или разблокироваться ключом. " - ]]} - }; -}; - -char_naethvjirr = obj { - nam = "naethvjirr"; - disp = "Наэтвьирр"; - disp2 = "Наэтвьирра"; - canshoot = false; - dsc = function(s) - if (s.active) then - return [[ - В центре зала перед массивной конструкцией, напоминающей трон, стоит {автоматон навьяр}. Конструкт выглядит совершенно как живой, сияющие белым светом глаза оглядывают помещение и вас в ожидании ваших действий. Тысячи проводов тянутся от "трона" к стенам, подобно щупальцам. ^ - ]]; - else - return [[ - В центре зала на массивной конструкции, напоминающей трон, сидит {навьяр}. Конструкт выглядит совершенно как живой, однако он абсолютно неподвижен. Покрытые серебристой чешуей, его руки покоятся на коленях. Тысячи проводов тянутся от "трона" и фигуры к стенам, подобно щупальцам. Глаза навьяра закрыты. ^ - ]]; - end; - end; - act = [[ - Я пока не знаю, что с этим делать - ]]; - noshootmsg = "Я не знаю, к чему это приведет, пока лучше этого не делать"; - nohitmsg = "Я не знаю, к чему это приведет, пока лучше этого не делать"; - onshoot = function(s) - p("^^Ваш выстрел повреждает Наэтвьирра, но вы не замечаете, сказалось ли это на его работоспособности"); - fb_naethvjirr.hitpoints = 2; - char_adrian.state = 6; - -- TODO Адриан стреляет в одного из членов партии - if (#pl.party ~= 0) then - local chosen_one; - local chosen_one_index = rnd(#pl.party); - local chosen_one_name = pl.party[chosen_one_index]; - if (chosen_one_name == "learr") then - chosen_one = char_learr_fb; - elseif (chosen_one_name == "phaetlarr") then - chosen_one = char_phaetlarr_fb; - elseif (chosen_one_name == "radcliffe") then - chosen_one = char_radcliffe_fb; - else - chosen_one = char_wright_fb; - end; - table.remove(pl.party, chosen_one_index); - p("^^Адриан вскидывает пистолет и стреляет в вашу сторону. " .. chosen_one.disp .. " падает замертво"); - - walk("pre_battle_scene_fight"); - else - -- TODO Адриан стреляет в вас - walk("game_over_shot"); - end; - end; -}; - -char_learr_fb = obj { - nam = "learr_fb"; - disp = "Леарр"; - dsc = function() - return [[ - {Леарр} смотрит попеременно то на вас, то на Адриана ^ - ]]; - end; -}; - -char_phaetlarr_fb = obj { - nam = "phaetlarr_fb"; - disp = "Фаэтларр"; - dsc = function() - return [[ - {Фаэтларр} оглядывает зал ^ - ]]; - end; -}; - -char_radcliffe_fb = obj { - nam = "radcliffe_fb"; - disp = "Уолтер Рэдклифф"; - dsc = function() - return [[ - {Уолтер Рэдклифф} с интересом разглядывает Наэтвьирра ^ - ]]; - end; -}; - -char_wright_fb = obj { - nam = "wright_fb"; - disp = "Джек Райт"; - dsc = function() - return [[ - {Джек Райт} ждет ваших действий ^ - ]]; - end; -}; - -final_scene= room { - nam = "final_scene"; - disp = "Лсэрианотр, центральный зал"; - dsc = [[ - Вы находитесь в центральном зале древнего города Навьяр. Вдоль стен стоят огромные металлические шкафы, из которых тысячи проводом тянутся к громадной конструкции в центре зала. Мягкий свет льется сверху, практически ослепляя вас после полумрака остальной части мертвого города. - ]]; - obj = { - "char_naethvjirr", - "char_adrian", - "adrian_helper", - "char_learr_fb", - "char_phaetlarr_fb", - "char_radcliffe_fb", - "char_wright_fb" - }; -}; - -pre_battle_scene_fight = room { - nam = "pre_battle_scene_fight"; - disp = "Лсэрианотр, центральный зал"; - dsc = [[ - Вы не успеваете опомниться, как Блэк снова стоит у пульта, а Наэтвьирр открывает глаза и оглядывает помещение. Адриан тут же издает приказ, указывая на вас:"Убей их" - ]]; - obj = { - vway("Продолжить", "{Продолжить}", 'final_battle') - }; -}; - -pre_battle_scene_normal = room { - nam = "pre_battle_scene_normal"; - disp = "Лсэрианотр, центральный зал"; - dsc = [[ - В глазах автоматона зажигается мягкий синий свет и он поворачивается к Адриану. Какое-то время он молчит, видимо, пытаясь подобрать наиболее подходящий язык для общения. В итоге по головным плавникам Навьяра побежали цветные полосы - ставший уже столь привычным для вас, способ общения среди Навьяров. Он "говорит" быстро, и вы успеваете понять лишь отдельные слова: "время", "пробуждение", "повелитель". Вы понимаете, что у вас есть еще немного времени, чтобы остановить его. Едва вы достаете оружие, как из пола перед троном поднимаются два небольших пилона. Очевидно, что город будет защищать своего хозяина. - ]]; - obj = { - vway("Продолжить", "{Продолжить}", 'final_battle') - }; -}; \ No newline at end of file diff --git a/first_city_inner_rim.lua b/first_city_inner_rim.lua deleted file mode 100644 --- a/first_city_inner_rim.lua +++ /dev/null @@ -1,163 +0,0 @@ --- TODO (приват) добавить описание шлюза --- TODO (приват) картинка с дисплея терминала --- TODO (приват) вменяемое описание цели данного паззла, тексты на навьярском или реалистичное объяснение их понятности персонажу -first_city_airlock_control = room { - nam = "first_city_airlock"; - disp = "Комната управления шлюзом центрального зала"; - dsc = function (s) - return "Вы находитесь в небольшой комнате. Перед вами расположен дисплей, на котором расположены три вертикальные полосы разной длины. " .. tostring(s.tanks[1]) .. "/" .. tostring(s.tanks[2]) .. "/" .. tostring(s.tanks[3]); - end; - tanks = {10, 0, 0}; - tanks_capacity = {10, 7, 3}; - selected_source = nil; - selected_target = nil; - detect = function(s) - if (tanks[2] == 5) then - return true; - else - return false; - end; - end; - obj = { - "first_city_transfer", - "first_city_select_s", - "first_city_select_p", - "first_city_select_a" - }; -}; - -first_city_transfer = obj { - nam = "first_city_transfer"; - dsc = "{Выполнить} ^"; - act = function(s) - if (first_city_airlock_control.selected_source and first_city_airlock_control.selected_target) then - local tmp = math.min(first_city_airlock_control.tanks[first_city_airlock_control.selected_source], first_city_airlock_control.tanks_capacity[first_city_airlock_control.selected_target] - first_city_airlock_control.tanks[first_city_airlock_control.selected_target]); - first_city_airlock_control.tanks[first_city_airlock_control.selected_source] = first_city_airlock_control.tanks[first_city_airlock_control.selected_source] - tmp; - first_city_airlock_control.tanks[first_city_airlock_control.selected_target] = first_city_airlock_control.tanks[first_city_airlock_control.selected_target] + tmp; - first_city_airlock_control.selected_source = nil; - first_city_airlock_control.selected_target = nil; - return "Выполнено"; - else - return "Невозможно выполнить"; - end; - end; -}; - -first_city_select_s = obj { - nam = "first_city_select_s"; - dsc = "{Выбрать первый баллон} ^"; - act = function(s) - if (not first_city_airlock_control.selected_source) then - first_city_airlock_control.selected_source = 1; - else - first_city_airlock_control.selected_target = 1; - end; - - return ""; - end; -}; - -first_city_select_p = obj { - nam = "first_city_select_p"; - dsc = "{Выбрать второй баллон} ^"; - act = function(s) - if (not first_city_airlock_control.selected_source) then - first_city_airlock_control.selected_source = 2; - else - first_city_airlock_control.selected_target = 2; - end; - - return ""; - end; -}; - -first_city_select_a = obj { - nam = "first_city_select_a"; - dsc = "{Выбрать третий баллон} ^"; - act = function(s) - if (not first_city_airlock_control.selected_source) then - first_city_airlock_control.selected_source = 3; - else - first_city_airlock_control.selected_target = 3; - end; - - return ""; - end; -}; - -first_city_inner_south = room { - nam = "first_city_inner_south"; - disp = "Лсэрианотр, внутреннее кольцо, юг"; - gate = "first_city_middle_south"; - east = "first_city_inner_east"; - west = "first_city_inner_west"; - navigatable = true; - dsc = [[ - Вы находитесь в южной части внутреннего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; - view = [[ - Вы находитесь в южной части внутреннего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; -}; - -first_city_inner_east = room { - nam = "first_city_inner_east"; - disp = "Лсэрианотр, внутреннее кольцо, восток"; - south = "first_city_inner_south"; - north = "first_city_inner_north"; - navigatable = true; - dsc = [[ - Вы находитесь в восточной части внутреннего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; - view = [[ - Вы находитесь в восточной части внутреннего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; -}; - -first_city_inner_west = room { - nam = "first_city_inner_west"; - disp = "Лсэрианотр, внутреннее кольцо, запад"; - south = "first_city_inner_south"; - north = "first_city_inner_north"; - navigatable = true; - dsc = [[ - Вы находитесь в западной части внутреннего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; - view = [[ - Вы находитесь в западной части внутреннего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; -}; - -first_city_inner_north = room { - nam = "first_city_inner_north"; - disp = "Лсэрианотр, внутреннее кольцо, север"; - east = "first_city_inner_east"; - west = "first_city_inner_west"; - navigatable = true; - entered = function(s) - if (first_city_airlock_control.detect(first_city_airlock_control)) then - path("first_city_to_center"):enable(); - end; - end; - dsc = [[ - Вы находитесь в северной части внутреннего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; - view = [[ - Вы находитесь в северной части внутреннего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; - way = { - kh_vroom("Центр города", "first_city_central_room_entrance", "first_city_to_center"):disable(); - kh_vroom("Левиафан", "leviathan_airlock"); - }; -}; - -first_city_central_room_entrance = room { - nam = "first_city_central_room_entrance"; - disp = "Лсэрианотр, Вход в центральный зал"; - dsc = [[ - Вы находитесь у входа в центральный зал Лсэрианотра. Входная дверь закрывается и вода быстро откачивается из помещения. Вы снимаете скафандр и готовитесь к встрече с Уильямом. Отсюда пути назад уже нет. - ]]; - obj = { - vway("Центральный зал", "{Вперед}", "final_scene_before_battle"); - }; -}; \ No newline at end of file diff --git a/first_city_middle_rim.lua b/first_city_middle_rim.lua deleted file mode 100644 --- a/first_city_middle_rim.lua +++ /dev/null @@ -1,71 +0,0 @@ --- dependencies -dofile "powerplant.lua"; -dofile "engineering.lua"; - --- TODO (приватная бета-версия) добавить описания ворот открытых и закрытых --- TODO (приватная бета-версия) пометить описание инженерного зала в западный сектор - -first_city_middle_south = room { - nam = "first_city_middle_south"; - disp = "Лсэрианотр, среднее кольцо, юг"; - east = "first_city_middle_east"; - west = "first_city_middle_west"; - navigatable = true; - open = function(s) - s.gate = "first_city_inner_south"; - end; - dsc = [[ - Вы находитесь в южной части среднего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; - view = [[ - Вы находитесь в южной части среднего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; -}; - -first_city_middle_east = room { - nam = "first_city_middle_east"; - disp = "Лсэрианотр, среднее кольцо, восток"; - south = "first_city_middle_south"; - north = "first_city_middle_north"; - navigatable = true; - dsc = [[ - Вы находитесь в восточной части среднего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - Вы видите огромное здание, стоящее поодаль от других. Над огромными двойными дверями расположен символ, недвусмысленно намекающий на назначение этого здания даже незнакомым с языком Навьяр - три молнии, исходящие из круга в центре. Вы чувствуете слабую вибрацию, исходящую из этого здания. - ]]; - view = [[ - Вы находитесь в восточной части среднего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - Вы видите огромное здание, стоящее поодаль от других. Над огромными двойными дверями расположен символ, недвусмысленно намекающий на назначение этого здания даже незнакомым с языком Навьяр - три молнии, исходящие из круга в центре. Вы чувствуете слабую вибрацию, исходящую из этого здания. - ]]; - way = { - kh_vroom("В здание", "first_city_powerplant", "to_powerplant"):disable(); - }; -}; - -first_city_middle_west = room { - nam = "first_city_middle_west"; - disp = "Лсэрианотр, среднее кольцо, запад"; - south = "first_city_middle_south"; - north = "first_city_middle_north"; - navigatable = true; - dsc = [[ - Вы находитесь в западной части среднего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; - view = [[ - Вы находитесь в западной части среднего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; -}; - -first_city_middle_north = room { - nam = "first_city_middle_north"; - disp = "Лсэрианотр, среднее кольцо, север"; - gate = "first_city_outer_north"; - east = "first_city_middle_east"; - west = "first_city_middle_west"; - navigatable = true; - dsc = [[ - Вы находитесь в северной части среднего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; - view = [[ - Вы находитесь в северной части среднего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; -}; \ No newline at end of file diff --git a/first_city_outer_rim.lua b/first_city_outer_rim.lua deleted file mode 100644 --- a/first_city_outer_rim.lua +++ /dev/null @@ -1,221 +0,0 @@ ---dependencies -dofile "service_tunnels.lua"; -dofile "hope.lua"; -dofile "hope_cutscene.lua"; - --- TODO (приватная бета-версия) добавить описания ворот открытых и закрытых - -char_first_city_guardian = obj { - nam = "first_city_guardian"; - disp = "Страж"; - dsc = [[ - Вы видите фигуру {Навьяра}, стоящего около ворот. Приглядевшись внимательнее, вы понимаете, что это автоматон.^ - ]]; - act = function() - return [[ - Автоматон выглядит намного совершеннее тех, что вам доводилось видеть на Атлантиде. Его тело покрыто чешуей, как и тело живых Навьяр. Его выдают лишь стеклянные немигающие глаза и полная неподвижность. - Головные плавники автоматона плавно меняют цвета, но даже если бы вы понимали, что это значит, вы не смогли бы ему ответить. - ]]; - end -}; - -first_city_entrance = room { - nam = "first_city_entrance"; - disp = "Лсэрианотр, врата"; - dsc = function(s) - if (not s.open) then - return [[ - Вы находитесь на глубине нескольких километров под водой. Прожектор вашего скафандра с трудом пробивает непроглядную толщу воды. - Почти вплотную перед вами расположены огромные ворота из неизвестного материала. - ]]; - else - return [[ - Вы находитесь на глубине нескольких километров под водой. Прожектор вашего скафандра с трудом пробивает непроглядную толщу воды. - Огромные ворота открыты и Левиафан легко пройдет в них. - ]]; - end; - end; - view = function(s) - if (not s.open) then - return [[ - "Левиафан" находится на глубине нескольких километров под водой. Мощный прожектор субмарины с трудом пробивает непроглядную толщу воды. - Огромные ворота из неизвестного материала преграждают вам путь внутрь. - ]]; - else - return [[ - "Левиафан" находится на глубине нескольких километров под водой. Мощный прожектор субмарины с трудом пробивает непроглядную толщу воды. - Огромные ворота открыты и Левиафан легко пройдет в них. - ]]; - end; - end; - obj = { - "char_first_city_guardian"; - }; - way = { - vroom("Левиафан", "leviathan_airlock"); - }; -}; - -first_city_outer_south = room { - nam = "first_city_outer_south"; - disp = "Лсэрианотр, внешнее кольцо, юг"; - gate = "first_city_entrance"; - east = "first_city_outer_east"; - west = "first_city_outer_west"; - navigatable = true; - entered = function(s) - s.entered = nil; - -- Должно выполняться только один раз: - -- 1. Генерируем сервисные тоннели - -- 2. Генерируем табличку сервисных тоннелей для библиотеки - -- 3. Генерируем ссылки на документы на Надежде - end; - dsc = [[ - Вы находитесь в южной части внешнего кольца Лсэрианотра. Это огромный коридор, опоясывающий город по периметру. - Высоко над головой виден прозрачный купол, не дающий проникнуть в город минуя ворота. - ]]; - view = [[ - Вы находитесь в южной части внешнего кольца Лсэрианотра. Это огромный коридор, опоясывающий город по периметру. - Высоко над головой виден прозрачный купол, не дающий проникнуть в город минуя ворота. - ]]; - way = { - vroom("Левиафан", "leviathan_airlock"); - }; -}; - -first_city_outer_east = room { - nam = "first_city_outer_east"; - disp = "Лсэрианотр, внешнее кольцо, восток"; - south = "first_city_outer_south"; - north = "first_city_outer_north"; - navigatable = true; - dsc = [[ - Вы находитесь в восточной части внешнего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. На востоке вы видите огромное здание с большим количеством труб, идущих до самого купола. Скорее всего, это какая-то древняя фабрика. - ]]; - view = [[ - Вы находитесь в восточной части внешнего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; - way = { - vroom("Левиафан", "leviathan_airlock"); - vroom("В здание", "first_city_factory"); - }; -}; - -first_city_outer_west = room { - nam = "first_city_outer_west"; - disp = "Лсэрианотр, внешнее кольцо, запад"; - south = "first_city_outer_south"; - north = "first_city_outer_north"; - navigatable = true; - dsc = [[ - Вы находитесь в западной части внешнего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; - view = [[ - Вы находитесь в западной части внешнего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; - way = { - vroom("Левиафан", "leviathan_airlock"); - vroom("В здание", "first_city_library"); - }; -}; - -first_city_outer_north = room { - nam = "first_city_outer_north"; - disp = "Лсэрианотр, внешнее кольцо, север"; - gate = "first_city_middle_north"; - east = "first_city_outer_east"; - west = "first_city_outer_west"; - navigatable = true; - dsc = [[ - Вы находитесь в северной части внешнего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; - view = [[ - Вы находитесь в северной части внешнего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; - obj = { - "submarine_hope" - }; - way = { - vroom("Левиафан", "leviathan_airlock"); - vroom("Надежда", "hope_airlock"); - }; -}; - -path_first_city_tunnel = vroom("В сервисный тоннель", "service_tunnels"); - -first_city_factory = room { - nam = "first_city_factory"; - disp = "Лсэрианотр, внешнее кольцо, завод"; - entered = function(s) - service_tunnels.position = "3"; - end; - dsc = [[ - Помещение, в котором вы находитесь, очевидно, некогда было заводом. Конвейеры, странные механизмы, разбросанные инструменты, долгие тысячелетия лежавшие без движения. - ]]; - obj = { - "item_pickaxe", - "first_city_crack" - }; - way = { - disable(path_first_city_tunnel); - }; -}; - -first_city_crack = obj { - nam = "first_city_crack"; - dsc = "В дальней стене вы видите {трещину}. Сквозь нее пробивается слабый свет, очевидно там какое-то помещение."; - act = function(s) - if (s.wide) then - return [[ - Вы видите за щелью какие-то тоннели. Вы сможете пролезть туда. - ]]; - else - return [[ - Нужно чем-то расширить эту щель, если вы хотите туда попасть - ]]; - end; - end; - canhit = true; - onhit = function(s) - if (s.wide) then - return "Трещина уже достаточно большая для вас, нет смысла еще что-то с ней делать." - else - s.wide = true; - enable(path_first_city_tunnel); - return "Несколькими осторожными ударами кирки вы расширяете трещину достаточно, чтобы пролезть внутрь." - end; - end; - -}; - -first_city_library = room { - nam = "first_city_library"; - disp = "Лсэрианотр, внешнее кольцо, библиотека"; - dsc = [[ - В здании вы видите огромные стеллажи, заполненные табличками из неизвестного материала. Таблички исписаны письменами Навьяров и потускнели от времени. - ]]; - obj = { - 'first_city_index', - 'first_city_maintenance_info' - }; -}; - -first_city_index = obj { - nam = "first_city_index"; - dsc = "На стене возле входа висит большая {табличка}. "; - act = function(s) - end; -}; - -first_city_maintenance_info = obj { - nam = "first_city_index"; - dsc = "Один из {стеллажей} рядом со входом содержит информацию об обслуживании Лсэрианотра. Вероятно, там вы найдете то, что поможет вам отключить охранную систему города. "; - act = function(s) - if (s.taken) then - return "Врядли вы найдете здесь что-то еще полезное. "; - else - take("item_service_info") - return "Вы просматриваете тысячи записей и уже почти теряете всякую надежду когда натыкаетесь на табличку, описывающую сервисные тоннели города. "; - end; - end; -}; \ No newline at end of file diff --git a/game_over.lua b/game_over.lua --- a/game_over.lua +++ b/game_over.lua @@ -1,3 +1,7 @@ +game_over_lfc_shot = game_over("game_over_lfc_shot", [[Саботажник замечает вас и делает выстрел. Пуля попадает вам в грудь и вы умираете. ]]); + +game_over_crab_cave = game_over("game_over_crab_cave", [[Мощный удар острой клешни пробивает стекло скафандра. Захлебываясь холодной соленой водой океана, вы умираете. ]]); + game_over_caught_iraa = game_over("game_over_caught_iraa", [[Стражник замечает вас и поднимает тревогу. Теперь, даже если вам удастся одолеть его и добыть фрагмент карты, вы ничего не сможете сделать -- на Атлантиде вас немедленно посадят под арест, а навьяры тепеь точно нестанут вам помогать. ]]); game_over_banished_lfc = game_over("game_over_banished_lfc", [[Как только вы оказываетесь в межсекционном коридоре, вас окружают стражники Атлантиды. Они просят вас проследовать за ними и вы понимаете, что сопротивление бесполезно. Вас проводят в кабинет Винсента Даркстара. Когда стражники выходят, начальник службы безопасности поднимается из-за стола и начинает вас отчитывать:"Господин Дрейк. Вы крайне разочаровали меня. Мало того! Вы поставили под угрозу дальнейшую работу станции", -- впервые вы слышите, как Даркстар практически срывается на крик -- до этого он всегда говорил спокойно и уверенно, -- "Отныне, вы лишены всяческих привилегий и при первой возможности будете депортированы". Когда вы выходите из кабинета, охранники сопроваждают вас в вашу каюту и запирают там. Несколько месяцев вы проводите взаперти. Уильям и Адриан Блэк так и не вернулись из своей экспедиции.^Вскоре вас в запертой каюте Левиафана, мало отличающейся от каюты на станции, высылают на поверхность. Вас высаживают возле одного из небольшихэ прибрежных городков соединенных штатов, откуда вы без проблем доберетесь куда угодно. Однако, путь на Атлантиду потерян для вас навсегда. ]]); @@ -16,11 +20,11 @@ game_over_za_temple = game_over("game_over_za_temple", [[Развернув субмарину вы подставили винт под удары ваших противников. Несколько попаданий в винт выводят его из строя и Левиафан оказывается обездвижен. Теперь вы совершенно беззащитны перед атаками противника. ]]); game_over_kraken = game_over("game_over_kraken", [[От сильных ударов корпус субмарины начал расходиться по швам. В помещения хлынула вода. Озверевший кракен продолжает хлестать Левиафан своими щупальцами. Наконец, чудовище хватает подлодку и отправляется вместе с ней в бездну. К этому времени на борту уже не осталось никого живого, кроме, быть может, навьяров. ]]); -game_over_za_fight = game_over("game_over_za_fight", [[Стражники навьяров - опасные противники. Очередной удар копья проделывает дыру в вашем скафандре и он наполняется водой. Вскоре вы задыхаетесь. ]]); +game_over_za_fight = game_over("game_over_za_fight", [[Стражники навьяров -- опасные противники. Очередной удар копья проделывает дыру в вашем скафандре и он наполняется водой. Вскоре вы задыхаетесь. ]]); -game_over_za_learr = game_over("game_over_za_learr", [[Леарр пытается оттолкнуть вас от штурвала и остановить Левиафан. Вы делаете резкий поворот и субмарина кренится на бок. Леарр, не удержавшись на ногах, падает. Навьярка кричит в бессильной ярости, когда вы пролетаете над воротами Нлейисланотра. Вы берете курс к центру города, а вокруг вас начинают появляться целые отряды вооруженных навьяров. Восседая на белых акулах, всадники несутся наперерез Левиафану. Поначалу, копья отскакивают от металлической обшивки субмарины, не насося ей ущерба, а выстрелы из звуковой пушки выкашивают огромные прорехи в рядах противника. Однако, вскоре, несколько копий попадает в уязвимые места: на приборной панели загораются тревожные лампочки, сообщающие о поломках. Еще через мгновение винт останавливается. Вы чувствуете запах дыма, заполняющий помещение. Вы пытаетесь использовать звуковую пушку, однако она не работает. Вы пытаетесь запустить торпеды, но мощный взрыв сотрясает подлодку - отверстия торпедных аппаратов были заблокированы и торпеды взорвались находясь еще внутри Левиафана. Свет гаснет, а отсеки начинает заполнять вода. Вы наглухо задраиваете люк рубки, но вас это уже не спасет. ]]); +game_over_za_learr = game_over("game_over_za_learr", [[Леарр пытается оттолкнуть вас от штурвала и остановить Левиафан. Вы делаете резкий поворот и субмарина кренится на бок. Леарр, не удержавшись на ногах, падает. Навьярка кричит в бессильной ярости, когда вы пролетаете над воротами Нлейисланотра. Вы берете курс к центру города, а вокруг вас начинают появляться целые отряды вооруженных навьяров. Восседая на белых акулах, всадники несутся наперерез Левиафану. Поначалу, копья отскакивают от металлической обшивки субмарины, не насося ей ущерба, а выстрелы из звуковой пушки выкашивают огромные прорехи в рядах противника. Однако, вскоре, несколько копий попадает в уязвимые места: на приборной панели загораются тревожные лампочки, сообщающие о поломках. Еще через мгновение винт останавливается. Вы чувствуете запах дыма, заполняющий помещение. Вы пытаетесь использовать звуковую пушку, однако она не работает. Вы пытаетесь запустить торпеды, но мощный взрыв сотрясает подлодку -- отверстия торпедных аппаратов были заблокированы и торпеды взорвались находясь еще внутри Левиафана. Свет гаснет, а отсеки начинает заполнять вода. Вы наглухо задраиваете люк рубки, но вас это уже не спасет. ]]); -game_over_za_anna = game_over("game_over_za_learr", [[Вы берете курс к центру города, а вокруг вас начинают появляться целые отряды вооруженных навьяров. Восседая на белых акулах, всадники несутся наперерез Левиафану. Поначалу, копья отскакивают от металлической обшивки субмарины, не насося ей ущерба, а выстрелы из звуковой пушки выкашивают огромные прорехи в рядах противника. Однако, вскоре, несколько копий попадает в уязвимые места: на приборной панели загораются тревожные лампочки, сообщающие о поломках. Вы слышите едва различимый среди шума двигателей голос Анны: "Это была плохая идея". Через мгновение винт останавливается. Вы чувствуете запах дыма, заполняющий помещение. Вы пытаетесь использовать звуковую пушку, однако она не работает. Вы пытаетесь запустить торпеды, но мощный взрыв сотрясает подлодку - отверстия торпедных аппаратов были заблокированы и торпеды взорвались находясь еще внутри Левиафана. Свет гаснет, а отсеки начинает заполнять вода. Вы наглухо задраиваете люк рубки, но вас это уже не спасет. ]]); +game_over_za_anna = game_over("game_over_za_learr", [[Вы берете курс к центру города, а вокруг вас начинают появляться целые отряды вооруженных навьяров. Восседая на белых акулах, всадники несутся наперерез Левиафану. Поначалу, копья отскакивают от металлической обшивки субмарины, не насося ей ущерба, а выстрелы из звуковой пушки выкашивают огромные прорехи в рядах противника. Однако, вскоре, несколько копий попадает в уязвимые места: на приборной панели загораются тревожные лампочки, сообщающие о поломках. Вы слышите едва различимый среди шума двигателей голос Анны: "Это была плохая идея". Через мгновение винт останавливается. Вы чувствуете запах дыма, заполняющий помещение. Вы пытаетесь использовать звуковую пушку, однако она не работает. Вы пытаетесь запустить торпеды, но мощный взрыв сотрясает подлодку -- отверстия торпедных аппаратов были заблокированы и торпеды взорвались находясь еще внутри Левиафана. Свет гаснет, а отсеки начинает заполнять вода. Вы наглухо задраиваете люк рубки, но вас это уже не спасет. ]]); game_over_eaten_by_octopus = game_over("game_over_eaten_by_octopus", [[Гигантский спрут мгновенно опутывает вас своими щупальцами. Вы не можете вырваться из стальной хватки чудовища. Металл скафандра скрипит, не выдерживая давления и вы понимаете, что ваши дни сочтены. ]]); diff --git a/hope.lua b/hope.lua deleted file mode 100644 --- a/hope.lua +++ /dev/null @@ -1,140 +0,0 @@ ---[[ -Субмарина Уильяма. Она серьезно пострадала, и врядли экипаж цел. -]] - -submarine_hope = obj { - nam = "submarine_hope"; - disp = "Надежда"; - dsc = [[ - Вы видите "{Надежду}" - субмарину Уильяма Дрейка, первую построенную им. Она заметно пострадала в результате выстрелов из расположенной у входа турели, однако, экипаж в последний момент успел увести подлодку на безопасное расстояние. Люк субмарины разбит и вы сможете заплыть внутрь. - ]]; - act = [[ Субмарина сильно повреждена, герметичность корпуса очевидно нарушена. Врядли в ней остался кто-то живой, однако не помешает это проверить. Надпись на борту гласит "А00 - Надежда" ]]; - -- function() - -- walk "leviathan_airlock"; - -- return "Оказавшись внутри, вы закрываете за собой люк"; - --end; -}; - -hope_airlock = room { - nam = "hope_airlock"; - disp = "Надежда, шлюз"; - dsc = [[ - Вы находитесь в шлюзовой камере "Надежды". Она практически идентична шлюзовой камере Левиафана. Сейчас она не функционирует - камера заполнена водой и оба люка открыты. - ]]; - way = { - vroom("Наружу", "first_city_outer_north"); - vroom("В рубку", "hope_wheelhouse"); - }; -}; - -hope_cargo_door = obj { - nam = "hope_cargo_door"; - disp = "Люк в грузовой отсек"; - dsc = function(s) - if (s.state == 2) then - return [[ - {Люк} в грузовой отсек открыт. - ]]; - else - return [[ - {Люк} в грузовой отсек задраен. - ]]; - end; - end; - state = 0; - act = function(s) - if (s.state == 0) then - if (char_learr.follow) then - pn([[Вы пытаетесь открыть люк, однако, похоже, он заблокирован с другой стороны. В смотровом люке вы видите голову навьяра, смотрящего на вас. В темноте вы с трудом различаете цветные полосы на его головных плавниках. Полосы бегут нарочито медленно, чтобы вы успели его понять. Леарр мягко отодвигает вас от смотрового отверстия. тем же способом, она что-то говорит навьяру, находящемуся по ту сторону люка. Через несколько минут подобного общения Леарр кивает вам, показывая на дверь. ]]); - s.state = 1; - else - pn([[Вы пытаетесь открыть люк, однако, похоже, он заблокирован с другой стороны. В смотровом люке вы видите голову навьяра, смотрящего на вас. В темноте вы с трудом различаете цветные полосы на его головных плавниках. Полосы бегут нарочито медленно, чтобы вы успели его понять. Вы с трудом переводите цвета в символы: "Eyle'yhe'he'vji'a'rr vee'nn vtre'e'ran'rr" ]]); - end; - elseif (s.state == 1) then - pn([[Вы начинаете открывать люк и огромное количество пузырей воздуха просачивается через образовавшуюся щель. Леарр жестом показывает вам, чтобы вы продолжали. Вы ждете, когда вода заполнит отсек, после чего открываете люк до конца. ]]); - hope_airlock_pass:enable(); - s.state = 2; - elseif (s.state == 2) then - pn("Люк уже открыт"); - end; - return true; - end; -}; - -hope_airlock_pass = vroom("В грузовой отсек", "hope_cargo_hold"); - -hope_wheelhouse = room { - nam = "hope_wheelhouse"; - disp = "Надежда, рубка"; - dsc = [[ - Вы находитесь в рубке "Надежды". По размерам она заметно больше, чем рубка на Левиафане. Помещение заполнено водой. Люки в машинное отделение и пассажирский отсек открыты. - ]]; - obj = { - hope_cargo_door - }; - way = { - vroom("В машинное отделение", "hope_engines"); - hope_airlock_pass:disable(); - vroom("В помещение экипажа", "hope_dormitory"); - }; -}; - -hope_engines = room { - nam = "hope_engines"; - disp = "Надежда, машинное отделение"; - dsc = [[ - Вы находитесь в машинном отделении "Надежды". Попадание воды вызвало короткое замыкание в электрической цепи субмарины. Вам нечего здесь делать. - ]]; - way = { - vroom("В рубку", "hope_wheelhouse"); - }; -}; - -hope_cargo_hold = room { - nam = "hope_cargo_hold"; - disp = "Надежда, грузовой отсек"; - dsc = [[ - Вы находитесь в грузовом отсеке "Надежды". Герметичные контейнеры сохранили большую часть груза в целости и сохранности, однако на "Левиафане" достаточно собственных припасов, так что вам придется оставить все это здесь. - ]]; - way = { - vroom("В рубку", "hope_wheelhouse"); - }; - obj = { - "char_phaetlarr_hope"; - }; -}; - -hope_dormitory = room { - nam = "hope_dormitory"; - disp = "Надежда, помещение для экипажа"; - dsc = [[ - Шесть коек расположены вдоль трех стен помещения в два яруса. Вам нечего здесь делать. - ]]; - way = { - vroom("В рубку", "hope_wheelhouse"); - }; -}; - -char_phaetlarr_hope = obj { - nam = "char_phaetlarr_hope"; - disp = "Фаэтларр"; - dsc = "Рядом с люком, скрестив руки на груди, стоит {навьяр}. Он, кажется, серьезно удивлен вашим появлением. ^"; - act = function(s) - walkin(phaetlarr_hope_dlg); - end; -}; - -phaetlarr_hope_dlg = dlg { - nam = "phaetlarr_hope_dlg"; - disp = "Навьяр"; - entered = [[ - Навьяр выглядит удивленным и напуганным, однако, судя по всему, он готов вас выслушать. К сожалению, здесь с ним не получится нормально общаться. Цветные полосы на головных плавниках навьяра складываются в слово "Pha'e'tla'rr" - сияющий. - ]]; - phr = { - {"Указать на навьяра левой рукой, правой указать на себя, затем на дверь", "Навьяр кивает головой. \"I'rr vee'nn\"", function() - -- Все втроем вы возвращаетесь на Левиафан - walk("cutscene_hope"); - return false; - end;}; - }; -}; \ No newline at end of file diff --git a/hope_cutscene.lua b/hope_cutscene.lua deleted file mode 100644 --- a/hope_cutscene.lua +++ /dev/null @@ -1,117 +0,0 @@ --- TODO переписать диалоги с сопартийцами. -cutscene_learr_dlg = dlg { - nam = "cutscene_learr_dlg"; - disp = "Леарр"; - entered = [[ - Леарр с интересом рассматривает Фаэтларра. Она почти не обращает на вас внимания - ]]; - phr = { - {"Что скажешь?", [[ - Леарр отрывает взгляд от Фаэтларра и поворачивается к вам: "Никогда не думала, что твой отец водится с такими людьми, как Адриан. " - ]], [[ pstart("adrian") ]]}; - {"*поговорить с кем-то другим*", [[Вы решаете не беспокоить Леарр]], [[ back() ]]}; - {tag = "adrian"}; - {"Он не был таким изначально. Уильям знал его достаточно хорошо. Думал, что знал. ", [[ - Леарр пожимает плечами: "Возможно, ты прав. Все равно, нам нужно остановить его" - ]], [[ back() ]]}; - {"Без Адриана он не дошел бы так далеко ", [[ - "Без Адриана, он остался бы жив!" - Леарр отворачивается от вас, снова погружаясь в свои мысли. - ]], [[ back() ]]}; - {"Если честно, я и сам удивлен", [[ - Леарр молча смотрит на вас. Вскоре она отворачивается от вас, погружаясь в свои мысли. - ]], [[ back() ]]}; - }; -}; - -cutscene_phaetlarr_dlg = dlg { - nam = "cutscene_phaetlarr_dlg"; - disp = "Фаэтларр"; - entered = [[ - Фаэтларр с недоверием смотрит на вас и на остальных присутствующих. - ]]; - phr = { - {"Успокойся, ты можешь доверять нам. Мое имя Дэвид Дрейк", [[ - Фаэтларр вопросительно смотрит на Леарр. Она отвечает на вашем языке "Все в порядке. Мы не хотим навредить ни тебе ни твоему городу. Наша цель - предотвратить пробуждение Наэтвьирра". Потом Фаэтларр отвечает: "Я готов помогать вам". Его акцент гораздо сильнее, чем у Леарр, которая провела в обществе людей несравненно дольше. - ]], [[ pstart 'ch1' ]]}; --TODO пофиксить фразу, если кроме Леарр никого в партии нет - {tag = "ch1"}; - {"Что произошло на \"Надежде\"?", [[ - "Я мало знаю, что происходило в последние дни. Когда Адриан вернулся из Илерьяанотлекра, он запер меня на складе. Не уверен, сколько дней прошло, достаточно много, я думаю, когда наш корабль сильно сотрясло. Как оказалось, я находился в единственном отсеке, куда не попала вода. Он долго пытался меня оттуда вытащить, только вот не учли пары вещей: Я уже достаточно хорошо знал многие особенности конструкции субмарины, в частности то, что отсек может быть заперт только с одной стороны одновременно. Это сделано специально, чтобы избеждать ряда неприятных ситуаций. Вобщем как только он разблокировал дверь со своей стороны, я заблокировал ее изнутри. Не знаю, почему он забыл об этой простой вещи, когда запирал меня. " - ]], [[ psub 'hope_qs' ]]}; - {"Ты знал Уильяма Дрейка?", [[ - "Знал... Знаю. Eylesl'hya'e'ava'nn Pte'rr. " - ]], [[ psub 'drake_qs' ]]}; - {tag = "hope_qs"}; - {"Расскажи, как ты оказался на \"Надежде\"", [[ - "Уильям пригласил меня в качестве навигатора. В то время я занимался изучением истории нашего народа - сопоставлял различные карты. Естественно, я уже знал о Наэтвьирре и даже примерно знал, где находится Лсэрианотр. Конечно, без Уильяма и, говоря честно, Адриана, я никогда не смог бы определить его точное местоположение. Поясню: из исторических источников и старых рассказов я смог определить расположение Илерьяанотлекра. Тогда я полагал, что этот город - и есть легендартный Лсэрианотр - первый город, древний центр нашей цивилизации. Я мало что знал о Наэтвьирре тогда. Если бы я только знал, чем все обернется..." - ]]}; - --[[{"Где сейчас Адриан?", [ - "Если он еще жив, то он либо пробирается к центру города, либо уже там. В любом случае вам стоит поторопиться. Вы позволите мне присоединиться к вам? " - ], [ psub 'join' ]};--]] - {"Где сейчас Адриан?", [[ - "Если он еще жив, то он либо пробирается к центру города, либо уже там. В любом случае вам стоит поторопиться. Я согласен помогать вам. " - ]]}; - {"Сколько всего человек было на борту?", [[ - "Когда я присоединился, нас было шестеро, включая меня: Уильям Дрейк командовал экспедицией. Собственно из-за него я и присоединился к экипажу. Тогда он хотел, чтобы Наэтвьирр послужил на благо всем - и навьярам и хевьярам. Тогда он предложил мне быть навигатором. С ним был Адриан Блэк - он сразу показался мне странным, не внушающим доверия. Однажды Уильям сказал мне, что когда все только начиналось, Адриан был совсем другим человеком. Я думаю, только так можно объяснить, почему они оказались на одном корабле. Винсент Даркстар - инженер - от него я узнал очень многое об устройстве субмарины. К сожалению, он погиб во время нападения на нас жителей Илерьяанотлекра. Тогда почти все и погибли - Сильвия, Винсент, Джон." - Фаэтларр тяжело вздохнул и добавил на своем языке: Eylesl'hya'e'ava'nn Eyle'pte'rr. - ]]}; - {tag = "drake_qs"}; - {"Что произошло с Уильямом?", [[ - "Последнее время Уильям всерьез задумывался о целесообразности возрождения Наэтвьирра. Он наджеялся найти больше ответов в Лсэрианотре, провести там столько времени, сколько потребуется прежде чем принимать решение. Блэк был недоволен этим - не хотел ждать. Мне кажется, он хотел единолично контроллировать Наэтвьирра. Не могу понять, почему Уильям доверял этому человеку. Не могу понять, почему он вообще взял его с собой." - ]]}; - {"Расскажи больше об Уильяме", [[ - "Он - искатель, как говорят у нас. Все время в дороге, читает, ищет, расспрашивает. Лсэрианотр - достойная цель, если ищет ее кто-то достойный. Уильям - такой. Он собрал вокруг себя отличную команду - Сильвия, ее не волнуют древние знания, забытые города и прочее... прошлое, она ищет друзей, помощников, сама готова помогать. Винсент - мне кажется, его ничего кроме корабля не интересует. Он многое мне рассказал об устройсте "Надежды". Джон - мало его знаю, он неразговорчив, однако Уильям безоговорочно доверяет ему. Я думаю, есть за что. Хотя с Адрианом он очень сильно ошибся. " - ]]}; - --[[{tag = "join"}; - {"Конечно, ты нам здорово поможешь", [ - "Замечательно, вместе мы остановим Адриана, а потом он предстанет перед судом Нарьяанотра. " - ]}; - {"Не думаю, что ты будешь полезен", [ - Лицо Фаэтларра снова принимает недоуменное, слегка испуганное выражение: "Значит, вы бросите меня здесь?" В разговор, внезапно, вмешивается Леарр: "Ты не сделаешь этого, Дэвид! Я уйду вместе с ним" - ]}; -- TODO решить, сделать "плохой" вариант сюжета, если будет время. Обрезать все концы, если его не будет - --]] - }; - exit = function(s) - table.remove(cutscene_hope.obj, 1); - PartyUtils.addToParty(char_phaetlarr); - put(vway("Леарр", "{Поговорить с Леарр. ^}", "cutscene_learr_dlg"), cutscene_hope); - put(vway("Райт", "{Поговорить с Райтом. ^}", "cutscene_wright_dlg"), cutscene_hope); - put(vway("Рэдклифф", "{Поговорить с Рэдклиффом. ^}", "cutscene_radcliffe_dlg"), cutscene_hope); - put(vway("Закончить собрание", "{Закончить собрание. ^}", "leviathan_wardroom"), cutscene_hope); - end; -}; - -cutscene_wright_dlg = dlg { - nam = "cutscene_wright_dlg"; - disp = "Райт"; - entered = [[ - Джек задумчиво смотрит на Фаэтларра. "А можем ли мы доверять ему?" - спрашивает он наконец. - ]]; - phr = { - {"Леарр доверяет ему, насколько я понял. Я доверяю ей. ", [[ - будь по-твоему - ]]} - }; -}; - -cutscene_radcliffe_dlg = dlg { - nam = "cutscene_radcliffe_dlg"; - entered = [[ - Уолтер задумчиво смотрит на Фаэтларра. "А можем ли мы доверять ему?" - спрашивает он наконец. - ]]; - phr = { - {"Леарр доверяет ему, насколько я понял. Я доверяю ей. ", [[ - будь по-твоему - ]]} - }; -}; - -cutscene_hope = room { - nam = "cutscene_hope"; - disp = "Левиафан, кают-компания"; - leviathan = true; - dsc = [[ - Вы возращаетесь на Левиафан. В кают-компании вас уже ждут остальные члены экипажа. Наконец-то вы можете расспросить Фаэтларра о произошедшем на "Надежде". - ]]; - obj = { - vway("Фаэтларр", "{Поговорить с Фаэтларром. ^}", "cutscene_phaetlarr_dlg"); - }; -}; \ No newline at end of file diff --git a/images/book_bones.png b/images/book_bones.png new file mode 100644 index 0000000000000000000000000000000000000000..f7a696c04b482057c3e047ed432032f2e2cb6d39 GIT binary patch literal 189 zc%17D@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYe6kC$Fy9>jA5L~c#`DCC7XMsm# zF#`j)FbFd;%$g$s6l5>)^mS!_$Ro~eBs=?}`AeXXWQl7;iF1B#Zfaf$gL6@8Vo7R> zLV0FMhJw4NZ$Nk>pEyvFs;7%%h{y5d1PNAWfj{a8g%LG4msdQWfYGCkm^>bP0l+XkKiw87z diff --git a/images/book_city.png b/images/book_city.png new file mode 100644 index 0000000000000000000000000000000000000000..0017a35a8798e5a94721bfaf29a247ed43e23737 GIT binary patch literal 204 zc%17D@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYe6kC$Fy9>jA5L~c#`DCC7XMsm# zF#`j)FbFd;%$g$s6l5>)^mS!_$Ro~e$nBzWu^K2OS>hT|;+&tGo0?a`;9QiNSdyBe zP@Y+mq2TW68xY>eCk|9(;_2cT;&D7VMM3t@am8~UZIL`aJWm+iymXefF|S~AlQnqN q5XjzRm2ib|F`vS6v&C7ZJPZeFnG_RbCGG?DGkCiCxvXjA5L~c#`DCC7XMsm# zF#`j)FbFd;%$g$s6l5>)^mS!_$Ro~eXrAr9_76}!MP|ku_QG` zp**uBL&4qCHz2%`PaLR7)zif>#N&8!f&}a01QCY={~I3}^KLoMeuuFqqA6XZrzy}O aoPptlFUMcLVw0~x4Gf;HelF{r5}E*i`ZKfu diff --git a/images/book_current.png b/images/book_current.png new file mode 100644 index 0000000000000000000000000000000000000000..3f058f28ba6bc4555e0613e6e6657235c192d9b3 GIT binary patch literal 203 zc%17D@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYe6kC$Fy9>jA5L~c#`DCC7XMsm# zF#`j)FbFd;%$g$s6l5>)^mS!_$Ro~eD5v?=bOKOFvcxr_#5q4VH#M(>!MP|ku_QG` zp**uBL&4qCHz2%`PaLSo*we)^#N&8!f&}a0ga$_Csb_!tulm_z@Tru p%LU%dCY?;P)D8t2aIwiSFr*f@9cH`o9G diff --git a/images/book_ravine.png b/images/book_ravine.png new file mode 100644 index 0000000000000000000000000000000000000000..f73c30fce45db50cadf58ac0480cd21cfb573535 GIT binary patch literal 184 zc%17D@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYe6kC$Fy9>jA5L~c#`DCC7XMsm# zF#`j)FbFd;%$g$s6l5>)^mS!_$Ro~es9o>&aWhazvcxr_#5q4VH#M(>!MP|ku_QG` zp**uBL&4qCHz2%`PaI^Qr;B5V$MNI@307tv2}ucwfBkHSH6&OUCu~uWVrAxJm^gun U(VpY}B%oRbPgg&ebxsLQ0N#Eq-v9sr diff --git a/images/book_stones.png b/images/book_stones.png new file mode 100644 index 0000000000000000000000000000000000000000..b8579de17e3a0b488940ddc44d2b36f033eaa5ee GIT binary patch literal 199 zc%17D@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYe6kC$Fy9>jA5L~c#`DCC7XMsm# zF#`j)FbFd;%$g$s6l5>)^mS!_$Ro~e#GbbK97vsHiEBiObAE1aYF-J0b5UwyNotBh zd1gt5g1e`0KzJjcI8c$kr;B5V$MNI@307rUgP;Z9?M2Tnx=|F9RI+(aj=KSGiIha? kfd=(MinDp$4}M@|xcrTSSs*7T6{wZL)78&qol`;+0EziF@c;k- diff --git a/images/book_temple.png b/images/book_temple.png new file mode 100644 index 0000000000000000000000000000000000000000..75e439ab08d680b124cf7029622df0ff7092b844 GIT binary patch literal 230 zc%17D@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYe6kC$Fy9>jA5L~c#`DCC7XMsm# zF#`j)FbFd;%$g$s6l5>)^mS!_$Ro~eVDad2qYh9=vcxr_#5q4VH#M(>!MP|ku_QG` zp**uBL&4qCHz2%`PaLSo&(p;*#N+tUsg7I>3LGqd|1V$eUGh0-tujaBr8O%;zozAc z_dK)VlNUdjs>9dctuRG;w}9|JUzRk+8M;SglFpdUt2k@$Q1|qYiv|zd_cFvCkbk%- S?&Ard$qb&ZelF{r5}E)u6G<`v diff --git a/images/book_weed.png b/images/book_weed.png new file mode 100644 index 0000000000000000000000000000000000000000..92c72e98b6a7c335183ed6f1c5de9c8c90333a86 GIT binary patch literal 195 zc%17D@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYe6kC$Fy9>jA5L~c#`DCC7XMsm# zF#`j)FbFd;%$g$s6l5>)^mS!_$Ro~eB*dMkRRI)|EOCt}an8@pP0cG|a4t$sEJ;mK zD9KY zK~zYIbyiJ}9JdjDRb+q9^zMu$XV<|v5MWpk*2&Gs$BPZW?tbO?}B6d*Ul zfP+o6*Z|5x@UA66{us?pcTaziEat%3p0KnjSxXeDUm=uPOk){QB!#amTE}rap=i zW6~u3!E}Y}Uxy@#`yPOEPALV@ci(?ko}R96Zca~5!k)i>^wEE=t~5OCb_?LQuV1B2 zLq(Ci-NbPOU>-6w%?S`*tD<;sy=G=2+N3Ffc~j%wz4>PIvy;=Nsb_#^&NiD!Ypt~E zwf^JzIeBDxrmD)tQKFPJCe-Dal}MT-gEhxh<(NezkM#Y%H^TtnxT=US)U^t1i2yLx za+YQ9uh#%rt6kdyfHBq>0+dqQ+bvmZt=(?7;sk&a(eQmgn7$v`^Bz+beE#AE0B+lM z_u+>CbQCG20Vt)kQXT+M9+k}Oy^oV*B7+nFh{9_*pL_48I=NUb^SWm5eSUpyjOn}1 zm>z)EY77g*IoEZE8mrswbah)*Lp2+)b_OCutsXcz_n0s)}z0GXHb{n3wp|A)_RZZIVR5HEGp zFtLcFX$m0E@{oAk@F8}-|0C|>0QDlsnrVxK{rKuCK+TTD# zirEZaL}a80>PVy$%)9-=4`5fKMMmgWa0 zh{~f9K;6^;ilPY6<#o;C#I)__Z@wiW@zS82fdv>v_os11yQ@(g@)?dj)*RnO91S> z7mf_lw0s$I++$<&P1K2f<2ewrWfLSS4T5Dzsb_#%*LhV{9IXDyn==wgWXuGYf*)wsmT#CrSuS2Ko z+TE_*S!+dn;EF&ZKHy-i#l)c$E2UHv>32-^c(EwEZZAFn);R!i98a4SfD;$a9UX4E zq?GFKJiv+#=zUQXa_>C`(5zNpo_+F8SokAA05dD4-XYU_&mg7sFbn}Vt+i$?PM)q- z(QH=NjSl3zoE7U|{QP(S`uFRjBja2&v5{5XxQ`$B%jW>Tzkk1L+pg=9BpI0qqg*Vr ztN;Gx?2MMnZB;R|W~PgaXCmJ0c3+hxyazL;MHV?;zCl?6K;Nqb?ZSk**%nGOBz9GDX}$bIq_f+7y)EB@eg>VeUPuvUuhk~NV13x zIDw(S$aoQHre#g^Kr{<7*Uh5X>`si-imYOty7%03Zc#jV@Bsg35D^Q(A@noM zQ3wLyy;n;0^Fjz_CL(5L<}|4e4-cQe_~-uBYei9z;Lv;T+H=&TvZhdesA&~0CnZ9x3t#m-L2n$`hHn177KlL z_Qn47kKVjF9u5zVkGtK|>EC`fe*ekzrS@8lZWJimD}UR;RPimJ(^X=(s%W95e8{~7hVCL#t>4eGiEptS0hHoHhKy(9Wzw23jccB?!hO7bU4$BX{R zrfCSok-c}`I|5Kum%3#ReLqY4t+VyIW&jXGluVdF!%j!+*wco=XXBqJrIpfz)KCBb z-uVzB0Hw4sWHdCNQb^*JGBSvS_g)BLt<5r%V$pr|hyb*0D}->~ zCD~nk|NSl}N$lIG0r(JN3~k%)(kBG8QUIiu*WSLind~x1a#l*YjnSA{%AJllC`$mX zw*b;YSq?X!b{_>7zWeug_|ag%d#^V}i~WWKU9VOEGPPCiVljt6F({m~LWsU$_N8O6 z$ua>Uc7Tl0!{LymJUBn6|8@31g$j# zL}IktQr;mSn`)E3y{q}eN_}A;vrWoSUqeoqI>opB>2=c2{)Vlvo zP)fC})kYJ951yIBdacTGmwmrlNvWb%MN#zK;y+5a0Y5^X@Y?_Y002ovPDHLkV1kf7 B?gjt= diff --git a/images/cavelock_1.png b/images/cavelock_1.png new file mode 100644 index 0000000000000000000000000000000000000000..5ebac81f680e861c9367a06dc7327b9e3c25882c GIT binary patch literal 1574 zc$@(y2HE+EP)5x4p@q;AmJz=j1=(z5BvoF1pmuYATn>^frmtS zKtdLYP#muW0YyRv0(REB>)p9`X1cqoc<6iYu9eWb4>i+0)u+xmU47~P{rii>0=q#3 zGXMlK7!jFSnaMeO??uEp2S8LDyJ?;l^#XvI5mDE5tJMmCi1@0i&@_)e`uz{*FF!x} z$-Uum2qC4kNf*-}oA3WjzRaSvA`~sfBw_MU&!A@b>>h@6ctqqAppp}&X?zlrop$3(fo3`OqZujq-HaR zS`&Z|rdwYzy0P%?hb&{e?0-wO-zS8AG*0um+P~yU#Vm%0~s%6C_eyu`En`4 zt9ss?KUvBks!JKZ7v`l5)%4<5M^9nV185%o?k&f?U*EY|g?u5z&Q#}_nQyh!H}$w4 zZ^*ftGBJRg+cia)s_l4nq3niXMa;v+dFRP+$fim_iYZtIOeC`j03W1q zR^Ewe7YFYFaND%yIn6T>iztBAdNofI%!sM%RDl1#G0l^yiO42Z&dkiiYA9b4(_*m@ z5hCi^4uGkdUf~7cJ%2N=bG)b*Agk&s=WMXI_zVCOD8^`JrZ&&>G)-n!2xaexc|){g z06FV72`PmVv1IYymns3U!M^(LPs@XuwQaj2lmJsLQ!1OF>^jeLO!4{#rdP#%p*I0= z(fv5~hX;q(mxd5@n-@Sz5rC1^b=@>g(>8TgZ{~;!tPNPEECPVlbh+HSTMf@opEped zfSCbwUAqI4C5KP}fFi4o_y(S{rwwJ?$!<-WU=UmgY07P;Xs+3bHf&u*FJNLGHZ5W6t)^)vJuS{)Y z$8p`X?Ui&YCnqN*zP!9tRS?wF%m{S18VJN@cKg4d9>*R4F^lA;X-aRZ>#Jtlw;h1J zhh(EsVM*vagK{(q6#3!L_{G}RTTitbJWfI z89?9nOawsH0NkyHHVmw)|9<1$DpW+oo_4@Rv|!IU1L(UhOIDQ_ucQMILX}b)hT)1> z;5hc{)H5@`{?CUStqf+ibA?DwDSGF3bd@@e4vt>V9ss!DufJR@7MrcQzT3Smxl&Hf z`Q0%wvz@n2PEW39X%-ED6t~@q0AQLX2GBO`G_Hwg|6sqWDgZwC;De};8Gw``5uKf# zT_LSQ2~=gA#?t!%uyZintp)(>eHf?lv#~R?)348Bj0Vdo7Y0(6LTITG01s5LD#D^xBi7 zcdAf(0B^i`=f&rL7+<;b_~``!<2c{jj|~2c>_c$38vZIbAox)?KYWfw)8?F<>+#Yh z0|0&1-NsV@>O25?|NY;*_uj9I2yGbFsW0o6&GerW+1uOO-8If_%y)g+^?1uZm%o<( Y1J%b%gFd#!a{vGU07*qoM6N<$f|)<#u>b%7 diff --git a/images/cavelock_1p.png b/images/cavelock_1p.png new file mode 100644 index 0000000000000000000000000000000000000000..c5ef842b3221cd0b96c7b3900e27189cced92b64 GIT binary patch literal 1522 zc$@+91r7R%P)=0}_7W8>}Fa@8d&2JjC+DBp{Nw z$+(dSBao&olJU&B)@}1pr_Zz}u%&*es#B}>UTa^Po<4m_M9hr;Z;@FF!OTiY??c*D zN?B_&t$i4GvMh7X`QW9H02Bd_9z6=d=S8`gFaG}JGXTz7on^}h@4r5O$&mq6Ri)o~ z_wu{5%oOGEPcOead++04y?FM=vQT&5|M=qUtAt*A`?FvE+S=jq;^tF;nBgy2aK0O#EC@o`<(I@8WN0G|w7qLHz(Dy5Vm zcmOAM`{i)#y%*j&00fd!0+>~0o|&S^g%A^`Aq1^;UDp7VGytTKL}=SK&x`a~2qEnQ z$S=NCN(lgq#ry@W(piYHw?m9EU64{6W74b1`o4{kLks}QvTW++Q1IRkeb;}8R{(_f z-fh2l$QJ;d8^r|>BhO|tAT~{tvSM&P#XbdOjFCzJAfmn>0BEK1B7Z?EDWwon>h(!k zR3XI0d>&%}U`)=;bzP@WcDsuhqtOb$_3NuCQ-@&yP!=UK=ebFnMD!u=2oQqEZBN^- zky3PhX9o+Q@4IxrEGhu^?%kU_B_T4UrYbPGX}fkJL`%)g8(R4gg!fLbPbLMl$(ODMgB!XiQ-udi81tz*!GKN=-!9*LA|pi$X~n z3Az01pEk5I#)MH^B1%6182SMKkzgJJ%5?VDa>d@)9y86}kz zVnZvTmx`IQJbTEyTZHONr);U4`i7j$)OBMrGuQz?GWX`D0ANi1`42jT2u7;fyeMMi zq+=Rj9GFNX#9O#A-h`V-AE6l-hW^RYN-1ItN!Y&YQU(G@Q-&ll$8dm>_!A_Bm^upF zzJQCe5K0IDe-n3gmf_}`|6y5XWUQFX-f~2)BX)v43yS5V{M!i0H$UE;m(QWLe zX@d8AD#xTG&@?e7JtK#r$V22ZFH;!{W_H`t4Xv1CmW_?#?%kDh9>A=cNu^Ssv~GlE zaEL)lb?5{G)>@_H>+36PhZv(EqU!OJlp$@~kdOc_E_S&wQc04S z)gkoMOSM*l1j3a7u-om%J4$if|2fhs_~52E*#?01LpN-6vH3IyjU&vTvWG*E0`n|$s=kW#pz(dK5n-C8F5 YFWM>V!jnqNxBvhE07*qoM6N<$f)i}lfdBvi diff --git a/images/cavelock_2.png b/images/cavelock_2.png new file mode 100644 index 0000000000000000000000000000000000000000..ad3eed222e037ab492db12f030d6e22027b1df75 GIT binary patch literal 1505 zc$@*@1s?i|P)|V!~z3LP7KG2q<_g=sRCJmq?0buEoeEg zbY}ymXzm`#-Ffw^6!gq+NxOqV_ilCdS6_WqB`z*5NRU+0IftDkgkWa;-xV1o02D>u zw%rp;YppS+>w5*@>#x7btCoW#+B-kLWQGuU@#5_K{4!ZjdnqY|n11=>ll7Z_{X5U~ zuI0Die86B}yIj5&7Z(>VUw-?ikA5)vz{hQHrYOP_lv2tN0syI0@ZLEeL&);XIa`*M z51u1iYndx!oDlf(%jd6Ny;53dQf`h8nP?R`WGbw04aw`OtTvl!KCb~V^L9H+djOkF zb?}=|*G3x?yq{Iusw!{a*4j8g#3-2mYpqkx^(QB5@0~HKDox$=`};jm7$cSH1=x9^ z6wl|ilo0?C?eA}xQO#By!9j)C-`+OWtm^wtDNPhlPS%%~86{AMhn1AUT3h4_fDg`E z%WR1#d7SU%N+|%|d!sb~jsPH}S6WLYLkLP~W)^}L&)0czPfF`7Gv9re6A1uK(*Q8q zq@?>0lDnpEy!Q#UeXJz_v#QcsPsimC2b=qXymSBf`$@vi%vo*##K?ds%QBfJyZ}hb zU5_M$R1!enTjyMiu_$r?i^W<>NlM90T`v}EW(XlTLP|=yZklFqZ}v#g;gNVEb8!CQ zC8FEAI{?e&Apr6|{N=Ab03im8q}*hBf4_YayWe3W&x`5W(a}L>OrGV5fDi(;U3YW+ z3xNMEy%+~c05DlLkh8;S*R>O4tJT}y_Q_rdvA=JrEb^azI@@tKge()SV%XTepKP2T zfERh;y_;^`+^n2;$$qmbh#Bv{fBEA3s_hy8L~^7hfLRIYoZCOxPx7#~S5k$M@ran2 z3`5#+e0;2xcFt*|V+aJ`pRdo(Kdg(qoG4BklNlcafc0vfL}E;KcYl`%1<-eWh;f(0 zJkJ4~{_Yo&lB~0DSL+moQW^k*6VcW>07N1^Mv4GbRW&(!(i)A?UDsh!2nqV|kJn)+ z4F`ZD3o*DW%Q6KEfI|eZTN*+L0NR*zOi%#)`Qr$Hx~>C;%W|Y*f|H6foziz|>!ViT ztQ~Jf07}cheMM!trP=JED403&Bko3Y4|^gJqsIs*)z>Z{XWiM^P1DS13e9Mp7bOXr zB>ZG0FEKKaD$7bKMMNP)=8*K0QY8fa{PS-C46c9t@g0()X=*%{aE!68w@uSnYXwM* z_?xEo-p3e~l0rzORMXUPR7>0T53Wy7ue#0xD9d6DJbkIEW@T9#V|?(;ECh<8G-^nl z_W?lNwe$HLKv5O|2vnBaNy6C(r%A~C*h!4h0J1zA2}RpBP1}a>(3r|BPo3xLKUYL_ zwzz4U*$|`c`!O8B3=%{lF&l4gRsgip0F)YPRcR@u8Xt>72&EN(XV0EVB?nz=qmzq? zDWxQjk|3hJy*+E)cDvPDr|_qhUu5G0NeI$+X0A?r{+a+92{wY0VwhUKq^@PMNw$2r}@$}4G@Va1Yg%p-P9Q89CJ)6 ztY$L+#LTZ>pDve2Q$Y_6+GOd0wr!nrX}%-|V&oX(kfgB`V~k=*Pk8zLVT^%<5Fyaj zRr&en$GbeH_w%Bdaxk0CQoV&?L`VQ;Y#{llu`j-O4}g?PG0?WH_wOpDfScv=Xlf|{ z7K`=e<#FWr{13O=?KY+U_a9uR&0?`$E)UZ;<@L>*Q}4xUb?uxJpMCaelB5t~KHqDa zI)qRZ8vso+15gy3uAA?+Pbp=V-KBraa$DDBqGDtwq=0?}{_h|#VB>A|00000NkvXX Hu0mjfi4VKB diff --git a/images/cavelock_2p.png b/images/cavelock_2p.png new file mode 100644 index 0000000000000000000000000000000000000000..08138c1bfd3bd80e26f7b79c30f5e248b3e29cca GIT binary patch literal 1521 zc$@+81rGX&P){~Vfsn%|Y!V>>5T$sM*;KDD`QktE;x^d7i3Sx_9rMh!8UXh=_>yKF@Oi z0Ej5YXsrz)X3mBfV@$>{fRvJY*)S6mAV5<$<*4ksC@ETEdgtwTPESwA<57yp^5wEW%>Ns319&LW+U;p^}-+v~6oy(o8s!B`QzxC_W7cT%D z9v<2hlZZ?vlb_uFpl!Q{AH8|!&Xbdq`Q8tHck-uOdwcIcc=+be-}`40VWNkB{N7^m zhohs#jn{GGbpY7i-8ns7Vr8Fw_WhzL`i_r}kN0oh4Bb~he*3RY+l;ricD}Q-e6cjv z#t>o*##nrdr4WpBMC5(zoFyU=A>tT+Go8*DK<55(`}Sj(x$)K(faQxNfVSRYTI`GY7ARzFV25I z92G^OO)>Xar5HmOm>57v0YH}L0Q4HI5DQ(f))>P~w7>sUV&oX(Wco|PMiVtnV~p9X zg^f{U)=jVhpx2@VWzSd>LcF}ZN+L)gCKi#d`#7cuKx9o600L>)3b9UK>Z;Zg5jdOm zmze>KMkCAi>9f5U;+n=7ld`4q0w9ph4)WX)z{~eNyv`0FrNm4M-KZRGx&$c7eiWH!Od#i+!b(g;)OD?<$n(swiLtM1 zR2Bg8JdZ2!D2(gWtMmE%IRM>Zak03r=|tdMh7E;aCF-hf0C?{Sgq2ta^fW}-)@)2f zMBM)lGZA!Wjz%L9i79SO3-a6*d10;7@&Txp2TC%V6=ew^r85?hEc@9IOhh^?DW=sB ziijv^-gk{}>bh5mwN{&}s_OFc5%|&x3>XUV}>r7nNO*Bu+9}lse}Ii7E^5Mrr%j@r-zRpzos;DSjlUHu6)>bBB^QW0fcWe?;9Nm zBEB_$27ndQgM~&(8tmd7%*^N!7`j%K%i>6@btM zY-$bIxwZqqt;DOJSDn|CQc9_9+v#))Aaj{WPwW>@-hhsbb9c*fqyo_TmS_E!bop}G zg%Cp2;Z_SV0*EoH@{BQE7uv2R>L+Ob=F>iP*L}QLTvr0Gt}g1jx&GbP0F1|DEtv=@ z_5W3zb#_B4S(deJ`#(%97T2ThYisZP@JC;3Ig{;4Sr)!+0fZQcxvHzAD>o$oUFZh! zs2OAMO&sU*=f)T|#t@N;H_Q6v+qE5lrfwvq$@aDi-}^?rQPQv;tbD4bl>8}(J z0r2S20RTyT0Bs^0;_kI;s(~JajVvL=)kCk~M~@B;4?h540RmwHKL7O2laC&}@$S2S2XJyS4yB)@mT2i`1t<)`v9887e#K2@&3ZvEqv36sBNzRIJb6n-K)BelgR{tbFQk+HogA^ XbIyy?{6kCp2Cg8Z(MVHm zV;Bn%UR1Q*OVz8lMYH^tUmv9H~Xso{M+`$ zlL>(3VmT=%Fzby!`P2J}DrU18Y0`s)fBfn$02vj7kx-~msNQn^Qyt#{@Z!nD+!?)i zGSS9-_w}Sv;fLSczYMETsQvx@P^hl!LZQ48P0HZa4++ktS#x!krgD4_r9ROnt09UxTKb@{dLd^W+d_Uta zrAUgZdZaRjHj)xobqQcpl>iFo)W+O2%be&|VhH#CdPUk0fM>^78OS1F;bys%TR;bZ zw(S9|x*ovg)kR92_2cmv0CNJ6cZ)GSeE8#Pk;oMVktqtdI}}!%kG3w$^62<5{~y(3 zt!Y~i06DT0SsP76Z{EBEKz%o3FS2^4+*BN81Gi1*i~1 zVnzmr0FbgM0hDF2^=#W#BF zOC-$S-D?0qt?QJ~y6Yn;|pINJ|>jFO3^Dr*3fPE%2o zFF#}TzXmRZkQtej0#FpC_d^Jgg;R_GVhSm7O6wBG6tSU!WtAw;=>GoxO|XUQhh88d z-kP-Q#dW6d3M7pl(t%(5q z14`ExWL6@}x?1ywi760$iM)9L(nL zezt%Ahbv?BFbvl}|HS?A)gjb})4Qu?b^q1X&<_`I?Qb_#%z~o Z`420y4%fDTBr^a2002ovPDHLkV1m`P?4bYv diff --git a/images/cavelock_3p.png b/images/cavelock_3p.png new file mode 100644 index 0000000000000000000000000000000000000000..ac9b046b9dc44f3232a1b9a45591aec77f5a4f6e GIT binary patch literal 1496 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 diff --git a/images/checkerwhiteq.png b/images/checkerwhiteq.png new file mode 100644 index 0000000000000000000000000000000000000000..757ab925745197fbc75e293213571fc3d1168d57 GIT binary patch literal 344 zc%17D@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjY)RhkE(~Wt@czMgDWC{vfk$L9 z0|U1(2s1Lwngi0qUgGKN%Kng(S%}Gewu5{(P)M@GHKN2hKQ}iuuY|$5C^fMpHASI3 zvm`^o-P1Q9ypc~FsOW&Fi(`n#@wZbB^0p`lxY|qi?PucJ(4={|NCSuxxE3&RFJOBA z?&Mv=i>_vKdfs#Gk$=YC(0=>zIkBR1+1(y4F{TH+g1r{#KSX*D5lL?4QVl*(V| zeru-kS~+WK+`9u}(Oy5Tf2bf1+)x em%QAsPi!8de#>4eHu(Vk!r? diff --git a/images/dyp15.png b/images/dyp15.png new file mode 100644 index 0000000000000000000000000000000000000000..ec59724fd50c1b6e9c0f475b114da373d7c05ffe GIT binary patch literal 44507 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 tx6|p6_q_C{4V5B2-^Xe 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 FV1n`>YQ_Kn diff --git a/images/dyp15_11.png b/images/dyp15_11.png new file mode 100644 index 0000000000000000000000000000000000000000..d9f9824fb4ffcd69f3c761e0a04f6a8de6e150b2 GIT binary patch literal 3271 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 FV1oCTHUj_v diff --git a/images/dyp15_12.png b/images/dyp15_12.png new file mode 100644 index 0000000000000000000000000000000000000000..88308cd2da261250a5fa8072a264c53005e75762 GIT binary patch literal 3063 zc$@+E3kdXyP)e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{01ID9L_t(o!;P3pbL7Z*hM!Dq z1r%x_i!5%hZPQuLapJjmti-X z#ht7TJ2HJh0#()34ha{sfJEZU{NC?<-!H{4fB6r(C`#%}N{Lbm%d#oUfo|AW1q-L;Rl zf)=;ew|w!%GhV+wU3>1>HrIDIgkc9;S^(_r@AK;AD~d8_v$siJ=6`Z=y393s(&FgoCjgAj&++{hov^bK zTv?{HS}hVY_wuzI96-O{1wfZ2vNY+PMYCpr=Xq>wZ*y~b)7`tc#{cDwm~ zeEbJI$3tsf&Eb03w$(hh+<-JrX?Y%j8>|JHCMl&-0Nme?7m%~;3J+lrGMg<{a({i@ z{C}{&kCdYMon;BHPR{_y^J8QYX4y|4$si#M+jqMA<_TzV}J zOG+H4TGX>2KVxTS7n!ChmSy1w0b#hlGTXL!cYcmi)y{;zkL$J;ICLBUZf`D{dpB2C z09@THG7tm-5Az3vfc@RwW~Zf=E8olWYEj>xe8=VG1=4k0cJ}s&qv+47)~lP_McS-I z3LV#>-|sV>M)Z2sP7SxVxVgPGIIGh3;~#y>_2t!KV@0_#Pkj}ILZgvF2rfsX=0TDq zNKY;eEShvAaYE1zmaLH`rRHu(B}CcU$DJ1 z1Yka&H}tanw_y>#g9x>b*a(#W%NFA{9&1h1kR~OY{q(I=hE~C*ENfMzo zSaJc)+1+G?sFN&1NlCBY<=Ky(8QgjR_`YXgky98Qu7N)qozZFsl>ba{FFRPSJDG;eRt1nI;GbOo8W~Mbi2I|rd4ZAJ6veItoSHoI-k=H0+do@ zNxGsG(>P{#xMR3aG}KTO1#uj+wY^nMX4?(Mwzh}t@9m?tGDW5=&_bNWY;F#)t*S_}G@;Y!pta`adUe;7DiLDg+T%3F zwr#R3r`PQvgs4(HomLVQh9L++tJUJ>`kEw32!fC(iU>Ty?{E=HF; z`RobXTie{--BOe}Q4$-4un7*lshKPASWht*rr36qDvD!|h$h5BDT-)Q~E`qr(Hf|L%l;{?$J%S@&wXy2q%m zfBlzVlO!3Q(e%1F>M?b1;(1;bU~M99@9!CGY?yu|;K|M&qstLd6!Z4oI}Q&H7(d(_ z;}9^OjaPhQP0C+?{WU^Y%;b6=93NMMj*j5?n7k-R(uB@md|5p^I>P$l2g)>sqa#$I z$e;g#^E|^YRf+Gnux+sh9mB1Z`;1nrg=5=re9SLSPMZ5)KmQ~4$qA(@v82V{@9tt-(n4v?bed3>MdLVJ z&m&7ywujqXUoGr^S(I3&*LeKsF>lV^G#K99e}rXQXr=g@moKTw;%|RAB?E$1Pz6-) zy5mrn$S+P#z_=RARQJ>Sd!*L7p$5ycv6|{jc^E&e1P3(10lYbT14~SCaehWwl%&7^ zmS6w$rxk}zr(}k}qa<3vVv(=5q;-FiE%{4Xzi{&M#867!NKU`kU)Uagb8bZih<^kHy=!r%i9HwdQ9(`5FK7U;mBkd#JK(Qe}Uj7m-q~q*f_K zp06KP$*QUD87EvU$BjhdI1XVLqLf|{{riWzy7bJ^MaJmz9a<~0#`^0IW@0=Un`XX} zHlf7|ht_GgENkHhfA{V0K-UydO_-MjD1|Z~S~j)aP7kd$^XVMhb?9&QjaV{hg zK|5^I>-0(Dm^g|NLg2nW1+D3HI@q?2XO2qp_jpe!go!4Y)liPi(u|^r$@3g3 zBnXJ2geZ#m-{1b0EXymGvvfWA=&%dYQRD@oDZ1Kq16-T4oIKAciUMg{HiKYbL_chbqw;4C!mM(* zGh{GWD9gp@lFf~cm9DMU&}bfESr&Pon?s{&)#;Li2}?4Y&(;p1n&(nt+jbR6lt=>=9_Q6(RrRVRkMNvW7(Bf zRfYelODSHwdc~(38$7L3Z%*u&ZPtnzDi;Ts?~l`3^MB!Es3n6Un)Uzy002ovPDHLk FV1k5%^l<e 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 diff --git a/images/dyp15_14.png b/images/dyp15_14.png new file mode 100644 index 0000000000000000000000000000000000000000..19e3a97aaf2130925cc74753447511e03d6bbd29 GIT binary patch literal 3372 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 JPDHLkV1l?8?_&S} diff --git a/images/dyp15_2.png b/images/dyp15_2.png new file mode 100644 index 0000000000000000000000000000000000000000..edda945dcc72396f545d4efef55188dff3b9f282 GIT binary patch literal 2895 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 XLDje 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 X)g!-mbZZbc00000NkvXXu0mjfupJeg diff --git a/images/dyp15_5.png b/images/dyp15_5.png new file mode 100644 index 0000000000000000000000000000000000000000..12b6b784bfcf256b40c576cb2ff4705f030fc16f GIT binary patch literal 3382 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 M07*qoM6N<$fe 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 W4bKG;#qALQ0000e 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 LNkvXXu0mjfPDT@1 diff --git a/images/dyp15_8.png b/images/dyp15_8.png new file mode 100644 index 0000000000000000000000000000000000000000..2101abce02c52267e16109adb7b139bc9aa57446 GIT binary patch literal 3071 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 N002ovPDHLkV1l%i4*LKA diff --git a/images/dyp15_9.png b/images/dyp15_9.png new file mode 100644 index 0000000000000000000000000000000000000000..92af73c7b2fbe0f60d084ac1f641f9acccc99676 GIT binary patch literal 3230 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 diff --git a/images/learr.png b/images/learr.png index 53f4a79fc9b54f0775736134f986490490257fbf..857affc9451eb1259a26f06f94c07248b283d0d2 GIT binary patch literal 728 zc$@*)0w?{6P)e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00KZsL_t(o!^KyxZ`(i={w{LK z)PTy0)S65Rxcvbxs98W%vQ#RXv_Bvj3CkaFGv8QATR2c!sf7bWize+@Nel)C>`9en z;7qF2N^iim<0cp9>^RFq_B-Fb@BO&DTvf~=!Nw}fW#?rb9d58$<5LL*t}vg z?9!XFudHa3AVI$L0RVvv005yEV*Gi`){a1t_o=wdWtMHNZCojnVV7>+A88enAVJQ^ zS?k8IWgu3i0fRR2z(|S~Qy_i>zTKCOf}v6treV-dJPsb<0g2)GDOu~ZlC=^*3~i{X zVJ}YJn>&l&Q~<)}a{3Cu--V+4@CA?&&@^U;c3Ony&MX2lnw@3uB>?g|-5L-iNM6Vn zy4$NCi{2CgNI~QQml3U5FlZA_EJCM6na6W2Tjz!}wmFED0K9Mt=3eWEEiJsd0B~~` zx{WBg4Mx2Hn0w87e1CQRg9j`WT`vE3S9eH&MsEp@9)b?+n(mNxkkmameua}b5B>w;@xfn?LnJ}{e0000< KMNUMnLSTX+ojo@I diff --git a/images/little_crab.png b/images/little_crab.png new file mode 100644 index 0000000000000000000000000000000000000000..dcbd87b44cf84aa4d3d32fdfbda9c36c286d072f GIT binary patch literal 1364 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 diff --git a/images/little_crab_7.png b/images/little_crab_7.png new file mode 100644 index 0000000000000000000000000000000000000000..5e82b446b0d9405532697ec78c6ab172f365c5a3 GIT binary patch literal 1387 zc$@)i1(f=UP)~sk?|P#3j}u5hc{R^u?IEVAW_!T&m)dJ}9CwO;4 ziiikZXx%f{1jz0{^K8Bp4*%aNzyvCnOjoZskf$ zg9f2Qy+$_=Yk)aTFt<@e379RfVe$&p_z7IE#|83OWn#GaiU4sOfHkjLZ3$=xACq+-AT zshT=fS{)7%5jnngt*ijapEQ{zt0z{WiUunLjw(sjW_@SoIrL(1&OJtG&M9(v~eS=Pn<9Wh}bp5 zb8>JWJV?OfK|gdT99&mbBp4(Z2;lemh&Gwc9bF5)upn3`^iVbB4Hq194ruMrA<(X29b05^XY} zdpvKQbp!VRe|z??O#=eJr^}a;L~NAZy+{Zdk3{I(d>&)2FlS z@L`6fryBwoj$)sxO54kqQkt156-SRsqst|M#zv`Fzh1rv`2pl-kli4gK{kOb2bmA@ zBEe5>liR<6vf-N5o@s+3J`G;*1vecq#ZlL z*NvAham#Au^Q%{xGj}fcqoOEL6dn*7K2y`v*?jXR4M&df`x|5T%bhzTg#bF(2h3x} z&?_}HeBJ!y2~NA6Ca050`}T2q#0UzDi>cOi=1-o?oc;T8RaD^jdU4m*hTj`HVFE+b z(jo#x{20A!T6sD57A>M#)99O-N#6wvF!%3|3iNU~`1AaE9$&nOHh3^Aii;UOapL>9 z?RX)1*SxoHOXb3a;w~$b3!_I%{q^hOymCd(q@;+gtV{~CvZS`GtTQg9Q!81Ikt0!^ zPSmq!`QrR}lJ*h{&*D&3dM77$#%1Re5D{svsgaWObnzAzhVT8ccdzV9 tOA}X3O=sOj-iSVwb@^KUKR}lQ`~#oc+ynbaJKO*O002ovPDHLkV1kF*nJEAO diff --git a/images/player.png b/images/player.png index 8d093c4ac947db6496c38dc16b6f1e9383568f1a..388ad11cb226affea5363df4bdb9645184729fce GIT binary patch literal 607 zc$@)W0-*hgP)9^I|mFyHq0*m)_gQg4V(+)0C2xIRU-b>k~;?|6+}2Uizo)~Kx@rJ zw3@qIh>5^N;LC*=Al4de3>eUR;gTqJz=H_*`~(2KY(ou-bKw2G1JP``*4<)15nzl4 za4m{==l~I|#%;?`D(pXiWn7blRaGzyyd<1bvjf-bFO{KtZm=vpZ;G!3=Ky1xl{2^7 zIYFnA@P2Prd);;0ce*Z=BLMV$gT6m5%Toem(@_db68hEqIX?!16GtMl0%WTN0Am6{ zOfG+cwZJ10Spl-Pi2!Rkx$@W@0C+rj(=Cexgmybew{}jbaSZz}MaZ#-7Xi%QVCDU+FB2aLC4ga3Jsq<~>y5sWs^W3rqB zZ+!#z^%PkmKq8euF_}!vh5Rj$?;$Hdx^PrV-U0a@5#U~)&%XfsNVn!)2b`IM#w+xz zx0Ye;_H^{`IJZv@oH&f=A8`BN6>$uI4oEz9NF}OoL_dXH0au$|MJ^|fa-~=R5bOu? zwSK1OR|`myrP^z5{znD)b3ZpwtS%agJMMVC@}+mWk{Z$Tv}azLJHae zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00C)9L_t(o!|j)$P6I&@hQB)j z4HY$@cnkzjfyH4__vfvz{LvoCa|@HT?a#fMMc8F&=gw(4j?dkgPo>52S-5_9!&|R z2xu~v%#T?QwgdOIfFcB~`>Jd$pQONbP=PZ|JP$s7KnH#rfZspE zraHkG0R#AX06w0>psmVT2?$&U;I~ugr!*!T0SCun<}c9GC~P(Y0uL2|73^yzUQHlH zLSR`Dc!CXWe`zIPsY0m#KgquG%cwxKiHD*6#zgGfUJfa?Hn*r0$0}hZV1CD%we}9A zVwY_hT z1Ba78!#lfLTefh0yE$(rtI4_73_oTbR7f%4kmPY<>&pI+Q%I1_@>6-GHc&{i#5JPCIX^cyHLrxhxhOTUBsE2$ zJhLQ2!QIn0AiR-JoPmK+!PCVtB;xSfX^wo&3IeYC+045N)1&<_xR%?xzprP$=zG~^ zm(sDkE<-IbMpd=BbNd=Uo_}t5Q2F$(AdWMv!c5;Sj!pX+Fm=ktQoEMt998E^KKFgksCMKC|7yz(ZjA44Gh022ebTU&>61uA;Q?2jLWPp6#g{+W@n;k&{G4_2 zOWuZO4J=)pliKBGJZ8A~u;Jyg<6j!I`7CC$$4t1u&E8in{^vR4^v?~~46n!<>@94_ f^4q>l<_ClSLAH~jZ-id~1C+tj)z4*}Q$iB})2^;1 diff --git a/images/wh32_guard.png b/images/wh32_guard.png new file mode 100644 index 0000000000000000000000000000000000000000..d6460865d66192c5143dc6a8265a97ba99374692 GIT binary patch literal 442 zc%17D@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&pI+Q;=JR=|kw_IY1%F64!_l=ltB<)VvY~=c3falGGH1 z^30M91$R&1fbd2>aRvrPB~KT}kch*{2@(khJf>)g-v6)h$9lHp%jXOwr=Px2{IXBT zZC9&<|4jQkg2!%c;_3Ssyh4o0XNiW{wP~_Dj$8_U_P_rBp*jDV=X3C0Qurbj@Aga0 zDdN##_LeJ>54HoPiD~%2I?CzA& z;^EnRrSO;D*XEP|pRPV<5Tq}z5bejH6FuR_{Tl&&i8q^${0}+bcBH{${ZF2tNq=}I z#(kD#JHlw9+rhS%S?RFPKmGgDPJDRt)4lEKZ6QgJK(M;F0OtbD|Mtwx%!hA&F0lJ6 z)9{2t%kALYvpqchd`>rj_!Nsx>VXq}EsOaiN)N1Hc9V739cH+tNzqyUtkZ-48#<>&pI+Q=Chi^Rnjp(?B7~64!_l=ltB<)VvY~=c3falGGH1 z^30M91$R&1fbd2>aiF5}o-U3d5r>l#BoYpIZ1WSn|G!|{99!nY`-I$nSu)%#;*xbN z<1k67J|LTzzwFQh3Hw%^%`@1ncqhDVXj^Ihz)tP@_bc8lJU~!x#$TYMa#^q^Wb+*b zUZ?dRQ)Onj{CKB!xZ!z|+~c1-wr?H(vzthZsjrt-e0re4a>2pB=5aso?R4asn5gEm zoLMaE*RwZ2-9bk2oDQFxxFpuHAx7-PP3Ir|e3N3OC&@FN5PPIG$F2C_3T8K1gI5iK t>=y+7v?s;X%xXJO&-7=aAZrLS!#M|&e|dg^tw66ac)I$ztaD0e0ssxQfLs6o diff --git a/images/wh32_guard_2.png b/images/wh32_guard_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a1153da739a8442b5f024c07771691b222c64a47 GIT binary patch literal 442 zc%17D@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&pI+Q%JyA>{sZU&p;u`64!_l=ltB<)VvY~=c3falGGH1 z^30M91$R&1fbd2>aRvrPB~KT}kch*{2@(khJf>)g-v6)h$9lHp%jXOwr=Px2{IXBT zZC9&<|4jQkg2!%c;_3Ssyh4o0XNiW{wP~_Dj$8_U_P_rBp*jDV=X3C0Qurbj@Aga0 zDdN##_LeJ>54HoPiD~%2I?CzA& z;^EnRrSO;D*XEP|pRPV<5Tq}z5bejH6FuR_{Tl&&i8q^${0}+bcBH{${ZF2tNq=}I z#(kD#JHlw9+rhS%S?RFPKmGgDPJDRt)4lEKZ6QgJK(M;F0OtbD|Mtwx%!hA&F0lJ6 z)9{2t%kALYvpqchd`>rj_!Nsx>VXq}EsOaiN)N1Hc9V739cH+tNzqyUtkZ-48#<>&pI+Q%Jzb#7u8a7*I&E#5JPCIX^cyHLrxhxhOTUBsE2$ zJhLQ2!QIn0AiR-JoPmK+#M8wwB;s&#f<(drk8OU-=l$mafqp)xALVAom(DY0n*U$? z;r`vG3)wZ2FU6SR&z1d6Pe@3xsC_EP3v;!(~R< zXZypuqj`AV=Q;iO?Uffhf{U;~1-dpjL@ zCdx0`xGKBgzwd099W_@a-GJg1V$pgVN*Y!tM>v+G8#}$Z=(uTB%BRZ*=ANDKX!;qY z3KQ`jtAs0zi}@r<8J0ec3s!hkt|pnQFHy3=9V&15N#H=kEswB7>)^pUXO@ GgeCy$xS|ID diff --git a/images/wh32_guard_4.png b/images/wh32_guard_4.png new file mode 100644 index 0000000000000000000000000000000000000000..dcbc6e2020ae8833643dd5bc946109a16c03f35b GIT binary patch literal 435 zc%17D@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&pI+Q%Jy=eZtc-j6fmD64!_l=ltB<)VvY~=c3falGGH1 z^30M91$R&1fbd2>aRvrPX-^l&kch*{2@(khJVGyr)cjxk;eAfplKISYsuZT#Tb*#| zQeGj&^jrMdAN%UBhI8UCZJoH_r_YtX;N;w!jlLluiT9eH|NH-Uk=P`e^s+VbihoP| zxw60M2?+@gGOxFA?Ah%ZA*^F4RKUXRxlbg>`NI1=!S@_qvIml5j!8(SeVU&bDw%hG z$=yHa3(}1zC133zY^wiFO#Hdcr41x-rG(*N%!Zn)l5T8lZU1?IApQK|pI?d@ zCMmO3O3he$u4B@7d0CZJ8gge@7xPJ!9$3NbChPFl=%4+{XT}#Vd|D{T%FM^GPA*h0 U>6TO^Ff187UHx3vIVCg!07^}(pa1{> diff --git a/images/wh32_mask.png b/images/wh32_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..bb98adc0f290a77b129580ae394fb643da42a283 GIT binary patch literal 22496 zc$@%EK(W7xP)e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{03ZNKL_t(|+U>pTa^pa=BZw;M z%$c2y*!O?d`OK>Q)9yp3G84!mCA+)H2#0Nnx=}0;K;9aFf!a1t+&>Gq4|Crnj~V8^ zY^yp@7pQ$6EPbXW`sZPu6T_Jh)`fs zR{+r|5MluIO7M9l@TlxYy=^4#bp#-kJ;xxQV-VoVK$N}T6-hN0KuD2bY_Vhvfw6}c zNUUrDcLH!t1TXd+E4NjBsdRR0h=qHiw1#uQawV2cZan<{N=0 zTI`CUI)(cytcQ6i8M7GykYu2kfll^WRVm5*u8LHCg%?!yZ@O?r?}Qa)VAPZ6j`odM zP8XO6S@5B^;k! zfUY*7TVg0H@<3rhku1vOP%nUz3Phbe2gK(;>pfMZSi1m(N=&E`FJXoGd7$vQW^^eCH9Tkhz8ZW~rlTyXXi<)${E9NC zBS2#NGmx6(eP%3YAWw{B$6Co9^0sQmd@sr})eFk}l}3D@o&c78yaFyvy0rwv7%OT7 zm=v(-C&B0CAjAOZ9pIDQ#`0v8D3ao}%mg^1`;TBT6L4T`XbOz$3?ouZeD+i)wgQUJR=AmRQpa4Y5?{N&1R+aK?R|TTw-iP@pz`d zcs!uV_8r1wv*)jZlmbEuIDHoYsbO?QUa_cG^y9IbPFPM8S&;f3kN{f6WPb-6I%Q6u z1)wXzM-7Rq%x4gvBm$q2csj@1N5XOwed z@KIz{#VnrSnZznE9RH61Xa=BUA3KxVh5#^%R8%5zaE_TGhpUoowE|x8D=IQXkvp0B z+=GRlF{n=Vjh>Hz8Dn%+b6b&XQNGsYAY=jPYVfHB$07E0*_~kw|URa zfJ>2t%m`P^Xyu}CR*KEwWS@f3>_yPJU_M8TK#@Ed@N}{d^NBnr)I~$PK@aOkOsHyb zd%q_EwNoH;1fcH%pQ`L)Kg^e5Ch#D@F#~4g-8K^mmw8GIl+;`zX2e&)=!^tYuCz*4 za3u@55nm=^F;!O6MJd+>cGd;IsbXX+a!i$EmwQ4P0G;W-qgJJl0_bFH0ix#ukB&A#U{VTW@*Y!(?kVz($=O$f z&=&w&4X>+N$`#4Q*bEC>k6;lGBEvE;@qlRv;5CUiG{pBAMa)Ja>bGh}w-X@bbrfW5 zh*gefnaR<8%qXsaM-Kq36DHLKpi}Qte4mb5CjeEFu?B3VaD4;tQ2-yHULsKepX_$U zd{&rC20kN^Vv~SWCi8ak+7&s5)ems{zP68JP^LM1L~&lNrz%AZ&yoWuTNje+F0`JVl@rvmFGKqo`JU z0SKj1?6K(kTm?QX^H&K+v&C8gij4IPBEi`H%6nGWlxoDYEN~D*+Pmnq7lTmLbud~; zYG!jwWK_n0M#5k|Z#(WYjqE%&dFyy?{C2$EMhm<19_)~V=G-^Tu^YknHXQJnhue>z zCHp-bi9MYtns?t5098DotHFmwup&98`aR628G$Uyz$bfL^csW6FZJ^<_QQNOC0I~p zL>0-U`ahpQv7=t@a9o&;gw?ILV;A9cz+#wvXYh9;kLwPoO!IlBd7s08)-<1O1_0-Q z(7XtQBH#%xUPlS0cs)v+)3e~?g}Wh|y{fEY01-WQ7g>?YqNeb^GA5+>L7r(1=q);~ zmRNtowzD&ihvA?&(e72y*WLOvcrOda=9uJZpz@lcARv_N@MgM*j!mg_g z->bD)l>*Ny_zV*9I_|e8Ue56`yK_GSqFn%)5t!-Bm{&vb3JY2Z$*<0-V%6-d*_RS3 zXW+CQuIAYyALcPLU`*3UsLkBh9Tw5aaT^C_XMcOF&&s6XcsH3$v!xl$VN90kC~|!Q zXpe;mScSe{1wNH1lp?hA z(8>v>RH#FcT~+X@NG=5600DTI)Y?U$8RT(FE>UJ!1H7h9Nz}~1h(1{FSk0o^jKEsi2pSN}Moo~TK$AZsvBwBNr-Eibr6@(y| z(~KEEMZuIVhM6z43O-ry9S?kVsJOk$o-^f(4e8ThGTd?jp;Vt5{fkUaAMS3w8R zyYHQCB*xeeE1$4zV{_P2cVv_Wjm-0b15ya0ZQWVe$JgJT_u2!`=+z+PoimYigX#gP zh9&FFw*o$j&!b4JBQSlK$M1$=e274!%CSM->x5Qkrpj0afGU;oS0^G?+J>%n8C2@E zqKK0PhLM1b7x9|T@9}HB9T)ND+<$z2E6KV!k3BiHJ2Ef>p_zb?=j#l_9S$;S7J5Kx z)QcI+N+z=cJ_%s~IhPQYbf1R+%(R?-O+6Q2bKvgp^< zp?Ht+>_QmcN{a}5m=vqlY0X5EwSWm7&18@DZ03E=fRT8N$MajJdF~@H4RgGE074dc zrwBp~c^149CHr#zJQ853_S&n(|W1)o8pRm@O60)hudI{~9T0J4GehPIN)y#hjt z{5o5TamIvJa)EXt!$tr`Q5l98lFmG!D4TgW3~4%S$@7V(k$9Hj3@3l+$bO<>kv);M zBkX4!=E%njiGE??bq%WhbgaIMyTbe4-4L zU`%RHdR0IO4(JUhSTLbyLsJua6r@*XcmjDcof6UVK!r)OjJPQ!RaUW5z*`(fYJ z(G%Jn@AU{WEde3s`6xb6xIK#O$Mbvuo@{sqd?J5kPh{6Fu$T;-BGB2zu>A`&Sk0Pr+oPGAh6Y}<%f-IZRk`>i@Fl97Q zWbm^z2_@rwIw##EKr>Nq$C|MqfREzws=qyu@?@B80=7BQEMi16U_Krb+7dRT_UZO+ z+YW%U8(`{YKM#a#ZQT)sHso2(UP?t5JfYtb>`aAwW;8SAqqN2tgyl?8PVI^OVz((q zw3775YSom;mpWIT`93Hxpo$!8Cm9ekq!IW&gG9hGAo9vACNZL|*W<}8Tlcj&1~eQw z=1DN`I~opig2Q^e(7YuSJ@CI66Y?T+QUc=V{*OY$D*_$1NTTq(TDa*M!yc=MSc?TJ zk0E6&sNxZ=st=^}9iDLrZAj*}2j|Vi_ z?aX8zA}~d4OesFiq*yij1>}PstHAThFnk4wqO|`EfLaoYAMjgk92Z-}fUL>v<@;&k{r8}Z(LMu_PO5K;*|M}`#u*~}bv`&c=`pBNhfcARo*u0=9o7sz2 zMJ6*G9|#F3ZBCTReh)Sj{|Q1{!h$T|L|N0GLEQxq%yNdp#$*q|ezGLPNP0z``xLX; zTfBR+(D%SV9-`FR1;d*Coq?#*hGU)pAwaKuuhxIP1AsCRVn#Fz&(Fa3vEbuHxF+J3 z8r@+zEYj#nts^K!7ym6`8Cg43>+5Vu=8?sNDmn9{4@>Zv>Gq?;;-UbM$+%@8T%OnlYc76BQeQPi7;1UNf?+XcfdK0)&>V zldvFGpX5cntk-KtnLc}5UKr~vjy+fZG9w+#oqoQ8qv%Ps#NG#r=?yAJXb`$t|-Mg%YM!Rk!>r{ z67#tc(D7QXG6s|x(35zw7C0V<&%Hax@Y55DWLR@p9UKp=1)=rn+?RdNZi3}6p&FF&|F|avuH?HdPsLi zf<+^4qFk5}M7g~0$O27IJRZwP)Z@Md;F1B;@&8STfLV6vfmRf9kBU@74`>p7s^s`& z3l7l69eXuYEYu#cq+K+ft0DN+BGhW~;hAc8)qGw7q7{IOq9H01n&9P&4s;Y$BpHp+_Q9;V{Zce4i)g^jJ7)2U!3^SYYZL zttbk%JF;s}SP^4E)x^YVGJfZ*2gJZ9OWmJBcs^r4JN(f- zY=T2i0Lbffm@(BT1DcgyAdp^r0zwu@vSQ$@tK@LJFt0tUSDKQsw%_dN5rB<%5C$9U$@(KiO=om&)xvc;;C7}F#0 zgnAM__l)H(9@9-YW_yuoMqL3iujshu;DAe3n&RC)5(yc8w~qv5vg&sP(XY&qj{K0F zgya=3rz*QtKS+s!ReC?KR=BHuovTr}Pqoqf>SACK9=T>HVLX{J&AcIRJkE3?Wj&B#p7${Ww!?-! zc+BVn=eFqhXW7yZv#u>Oie{~OD(UFExve`Mg_A2{KP;(krAIQ07>$$Q^O5*HSssv@ z@59C{UsYzI%C6OVud_02l7*m3vaG?CcYlN5H>d|-G>sf%(J>@{N8sc6sap~#sDhCF zJTnNR@9;}7yoi?t_z^?{Jr<;V=U>9`%vfeqH;3a5Ws5PAK}T?4>?M**A423yEl5?o zs4TCkBE4P>KJQ{bQTV;WlA`;WCzOHENEnf2J{J7E9H2=gSfm=Z;23`d$NjTQ!y^Hn zUHJZNiG~-ZZ-Lpo1_G}vGBtDQTQM`Phipk8(XSE}uGGBhh zc&?UOpy2mhX*ge<55&NUv78Ky7@P78+KJ~05gv0IftjluTZIWW$AI2R_`DIr+VgdW z6M~-(Bl7$o1Z&;%>>^Y8i%;|*CtlVMsM0!A?Fu-cWjJTx@==J2RU4F5%Ph|J_gM|I zUpZ*-tO?D)trZxP3Q{v*K#>;|4L1bxE{$21v>M#0Y#)I%QoyM>pw!`4!|wsh>4ChP ziC330-A7Rp0C@xYDR?}rx_zS7ljj3@4Ory)R5PEIam#1tda;mu)p%9`=V}mY;=Zl8 zAS*0rH8k%5P}Fc9iR5C(a8>&52aq_*vS#kL=?1$4F2`{`4~Ox2&C5LSirA3XSNaPJ zdXST}+7VIpMzZpS9r^q%FY{SRSgf)iHS1Xcpb1{a^4*@#l~U^!;Ij%+84w`=Bu|og zEC|7K_2O~KdUCP)uicSWd%%P~J)rJLvElq4&U0r*^n_ogk&fl5NH0%@Dc%nRsS?$E zv1t~A_&O}ZncZGBovX6TGxULTIX+j&t}DTziO(Np%vM25F}HiN?-1pfm1G$kioTzg z9HYoA-jo0Lz#BRO%|{@`j;v;LOzEfthF9_-NwG&Fy@0sAhL?nxWj$xUh*I`Y$pc!= zjIPM86~kG{9zO#-XF%r_K9FM2D(xFq7*o` z&?3p^o!iIf+`QwTWkQ35-&PAv_r%AU;GuHwX9`ScpdNx>O_+>oyCU|37XZ)|rt=lR zRPA>&7XaxBzlhb0dA`i57qoipS|HJy^Z#zZ!s`p|-M|~2q=K9RS0-GWr%_0+8@rg1|D4Q(G zfR`PI7I;7zKn{lmdD6<0bGsw86n2Be%iJ>7gP$@UeSAtWebw`y&&5OVYiE+CEKrN75o&mlSS!Sit?s!1cM7TU= zvj?Bg%aR8CydWhx5fAZ1&mvyRqVz!M13c4sWzJWY541YzqS{_Hl3%L;bk=NsM&-GqS6o!}iVQig{AZ&f01h92<`f?T8Z)Gh^BFaBL!?HyOj;ZzWfE&SS5ohg;Y8 zK;G^F&Y~I)TVff{9y2)t5tCOD%VEHjfmf6QP%Sh)lWfQU=#{eTJDAWc0uvikoQ-X+ z0Fja_oZ00xgyKC679OWnDo0O7-K$>XQTELS~aJSSMDf32o76d zEXYgXV;)ZwdOz;xfse=3Mk3AZdOY60CFibf)bAbN-_P+#B3=Nm0gFZpv)q|o0Gli` znlThLS14mPti^`S^0t!njOX)C;CUx2nhT&*?JccD$}%?8l7(Xzs2%GJM}lR2c817) zvO-g@Tw=#_{Z|JMwMUGo1&q%!B5$VrOr$OziTC3%7ZjNQlQr4&i>w(~rN8sUTAokE z|G9F8*DCP*M8LU9eyIkv3PhFn))8k>4@b5fU!yzsMQJZlv~LeQp_Z^84{UZkrx6^P zQcoC>SB^0dSIc`|(B?$Q!m&IfI8YTsHY-5gg~(R~ItpXTTBfQ!epcpqy}PjVPxgJT z0;CEMMI9Dr;u{T7I*x$ZRKoEih-%qTc$5w8h2Oiwh&%w@@mx7?0jR_8v}i;0P`#iB ziGF$Bjd$Q#s5Ez|JAvma@M;&lhbw?cjf|}_r{PGk zYCcd4jAzSyJkuBnGxE&of#Zd>nbis#LJ_b$5Ne2X=^*$)>fHOxfVSXa zvz(8BvIiz~hu>RzI+C;@ER?m%T$h;VgnE>lwt1RpiqsNU=(i zVP-_LaC>DWP!)h)1wQjH0-Y8B@wU@nAV;Tw1H;m#JLN?*BClN2ZF1iRv z&0#t{Fr8Zv37l4fApo3cKw)JZv6>;h6E?#lTRZfIVe0tjcSgLbQLpb}JXbV?{|P|! z9U$a+CC%}MBIXm#E^7hcSRfh!!|@Dd1Z&m{&wBvsjivV1OJk#%qfnt5u8u%PiI7#I zSrgjad8L8;2%>-4z`51x_MgalUY)?$UiiK%vP{XERzQe--eX>nWegs}um-gk8Dqm0 zM0&iUr7%aihk2tbP7r4tL7X0R2T2!Kg{!tgaJ+D#iNlq9eF*+wHfW}`9V=go?UEy=K&!xix9Ad5g;Km zc-5#>_5SGp9cx+4(E-b@a%aG2z6mh?lw`zrfRO47vEN>F&MQ{{v|*o7vSQ=|u~51- zk3B!g3!{6$;yw3;O>*c8!btEA)wJisrSEQ@cCiVh2P4HyHRY1Z8#`C+u=T8mI zs}=EA7}RG$$TOsyz;L6RF}iHKz^XNO;cv4KxQ?#LUG{l-g0qbcWm2-VSt5i_N zjN3IFc|jn@z^bU<`#+K|I10l*E_-IZ%;-%;}cbU zp(+z%vThP!%W{JNEgTZ^s+`zAwV%(Q;uW0*FLm^h>hCBL zz7lp<&ihILNAXlaeAP%AA_?03#+(PV9F+k-l*lT_mFn}XYMu=`RC_h6c@{X~`zR;s zpVmn1ZC%OoC9C26aAJCLUyob`QP1wQizpUaNR879QOdv-1<5^ZH1ly~vo zi))X~^Rs?%R80U9d?M$vZS{;N&Isu7CS$k(gE=iaV8Ml0V< zrNzq1IR}CL&j1vZmNRVKDTD!tBj(Y4_V3XX#GZupC@J5}Or8Y^#dNR|eOob`vn$$s z(FuNo&(8y)%0876jcOR4?V}c1SEAF^md32D&u`+Q)`CU#A4uL15;mo@Lsk5ps^6m| z7gnTK9GR1~!VZ`7Yn*2A}tW&=sb1#TdUTFQ_WV25L#e(f^(a9gz|D zFF25zSFUWY^nGsd`B@-Tef(8@QKm%cI zDe|jwaj*8vihQ3TDy!KEvME`@N?Q0_{Gin)VeINs?Myg}C+@%6KI309rmN?ITKb`0 zAVJot(!umh1^xi9B4CDenh6agD<#SYx=PORwd;2*cwEF!j zSx#hznlHC0gkztyUkOWk2^I!G9NoSkIse z3sQU`mJD2(AfJoyD^m9r|)0JZ4BDvM+0;tf7G2q{dN zB_gimr?Ixcs+9rgB~DRZ5SyHncGT#|r=P;1Q5J{>F>^h`8CWZs7^sCanW@a!&rkOw z?(NU{4pio?Trh$4XqaksKv-v4UQmV|upSWeHX>B5XjWi7oW9aB6-EC?p~cFvx`E~2 z0jf&0RAE67?Sd?=+Qoto>?Q6bvB6YF-}~x!^e5ehd>s3Ha#QiACw{cnZC`l2tFtrL|gzy_x5jrSA_*J zuS5YM;9L%!TE;Yl*HQ*rJgw`<15$t}DpX_rqet?=R%s=>;>^Vp;ATHJ3%cqYP}-DM zrtW5vNi8%5^hh%cwS!>BU>;CL7bjsbYCoNb&Oy|Y)!R`3BA{+o|76qi-ro1!TzRfk z8IdCKn91zbaVZ(vLs-`-8|=Xy8GZEF44~x&D0A4a@`Iw!Rh>&dUkph1_V)o5tB|jp zkCk&>HHLvW7cT>}0p5Z`@q>Q6jn9=ZuWD7%hiut zNla7%L8}HePz%|6SiykM`%Hr|ph4awz#EbQc}-ab;a3eh5GJIe^$jfdcGfdeFMudA zA+?{?*-ngbyd0)ps4VMZ$j7A{DOD?7G{_VqECQI} z=)r1Lf;+Ag6=pKtKFLFft@2IvZ)5@lM+m-Bjov4&%cZxxL$8L+v*<=*BCK&f&r&l78=(kDG?R>%~TeU2~l;=3qcR?IXn(UA2UQk;DV z?_qw^$#nzN4KS~Iyn23Di?Wr8IN7)z_IU>uOlW25T+QI0U% zOz0*uiOPVsDFTO@Afz7Rv=vxTKA8vNew z?cE@yBom(TlPDM@YcuL0w1N{~?&~KH+{#S#%7L$d3>%4im;LEJ);j>ir-tO&h0Iw^`J606QEUw>4KfPR|NPiW0P&B@`d;5m170=&!!J0a= zE~EE5un+<7#f81v;^JKu#rGuBd;1&Y)x79=)$u@A$gL$((hEHmX*vGemVDcZ$D9Du?zOA)x$eK zTbPKbywLo{5AT6nd+`@|Z};|2c67y>U?6ez8m{=OOYJ!B?cVO~=K*w8r|M{O0fN-tO(s-u?stx^s2z?cQzxa)IG*0EZjk?(JXN+Bdvb zI}1SbA3S*Xc5go&JXT3SyZAjd=eeiyI(^}dwG(gd6<^5w2Uyy@{kv?Wz2G^2%xCV- zLTwcaMIO)4JKDc}!+|}UFL7`8cC~tFKMgQ0Iu31x0W|_7RiIh{p{p5L`vXpZd;9xX zPJ1z9S6;K3pUPTS9@mTvb3a=rfTDtsMY*SQ@x9#=O<^!+mBGs6l~SygvaWD6GXtY4Wm71e3SL!@>54Do z2C{p5)w$7%0Ibkr!;l^6K*@m&C<2JYQd!gE#4sxqlF2diCt!rY*BZ57JfI^eOal}ZcF_c_sfPSO zKJ*n~`m6Q!z1`cZ&mYD6RHRl5NXSaMO*QxL%l^IafR3*@0F^h;h!4cjwxW-Jid4Em z>y}rq1f3><aQ;u~V4Ji5}nawLIhZ^Q~krc2QR@&sRyKL(C9;1X~&%Zl@gAt!tt-%?pm`ye|yDuxSDvY zGMOeaBPNmT?_PMnk{aoRN%SIv@qD8$NG{bBV^ zN~R_vw$zL7@e4+D)XZHqF9CtkrRr6tZyCe6s^vy|!-;rrf4Bd0#+PhZ%Nwd#77zff zoqTU0VX%y4iqxwmAj9s@{2%o|GE`q>HMb9RZ$H`pQCJLHPgRwXMa~o>+x|Txc~n8K z%0cO(t}K~XMZH-q_qYM%-rfmdDnqF-e#P!!>$wLKjDZYeX}{NgCvTi3^Q|zIo_sh4 zX07qH?m`RlZjcQg^=^>+f3Z1O_SvPCBxAsk7R*_%Xxn5m+ zUAXWw;OW8bP_RXSR&2Z?-1X^_%U_ z)^QgkT#7FpxdV>EVvWLYt6_8{H=*MDoC&$N8%S>ODSCsIi4$r#eq{}z@R*40^g!k* z>)$G^FR!`MgkCu~mc4WXA{{*XrAohw35Y=A$Me zddkXMQ%{MCy@=!;Ym!WL;m>+QD#`vG(G5a>H>j-ENk)%fVJp>(a9;qP%scAI zb3{GBJglJ}5S%CKj>pp-cH04aM+6=WbVpcTXLWX zIiA(g6Nb}+wd-L<*i9pP0}+y|v%D-Cs`RkJfB-$kz4B!;3Vk(D-5~Vm1J#-4@Rf^Z z69J1c9;HsRCH9FTAETB$-SdDd{dg)-EF>Seop_yI1g{kky`m`f2A02HdV$ES)pJgj zU)8mshTt<*l10Hfw2QmjkSs#jPV{L{C>^7Oo#;vRU{-*$%77}m{>+Jf1J-+h=SuLY z0@RtjwzC)Tj&m1&khQ`*7JJkf( zb`c1zDurs2Vh@N%OT6Q!&&rz4TeG?v(#s5Ig&m!Vj#Z87N^;n%rPvKZ-w!@lWV%-p zU@NUPl%&86h zN!6&18dtKOk(|#fYe`ic$^|-`l975sS$G=>g+k)}R6~J{pm7D|+3TRdlo;r&NU?Tu z5!~BrJ)g5Ihn*{G^y`W!vAV994;!u1$f&l~P731DjzC@~)a@G0UP~7Hv0k`?laMRl|!bQwOpW@`|F?n>oElcB$Xd%Gex*{j5f`G9PCP)=ri6 zWRLSou%hT#*jGMkIuyMDhzlAb70iGpVnG|~$yLf!RyBLGI)Du#fZZVUbHJyXlzJxg z4%AXvngcW$m~GI)@726J`+2h@2do1a$dih%2dZ^90562CG{L_m+0O(YoCF`G z`@-4$9cA%%VoGnpx>P}jwcwC*pP1q7c|cirLcnj$kx{$%L;kr+kRkF23}e;H*$%Hg z%!jn#b==RsZ*RcjG+^VI?GeCCXHhrNl>ROd`kR2Lz2SMzfKR2(ixS~dfJV(&u2!)} zX)$bQ1;A5W+?G8L=;`A20Pf(mE5{Etf`h#Mx-W}*dF*F6>}VPwQZhJ405sVNI|*3L zBCurp;vyjWlfbCG>3OP|>&$e%QhKTRK`e5$iLy=gfYdQs87uq^N)JL6E%mZMFwE^U z0GurMXF9jf1hhT@W^*Li@qGf%VR;yEnhqFQshNQghz!dZlnO#uu%SPN6}2}#*O>cp_AQr9K642P7wYXs=7@5@a+OT#aO@HIW!!c1al%6JHbYwjv zkxf==O+44Gj9`BYNFLyH#2L~N7)>L$JcJ&FE4Knd2>hX{Bzq@NtoldqP6;@}daB@a zRX^vdv{KVll={jHD5P%k-CI8}RLbGt8-J(U_0>1_%V&?fk)5x(I_)b|AERtT+ zc^^%XVTvTHgyvNcdKVk|X@K%7;JF%nu4)*swBBIq!2=Q|tFoeREJ`pCVE*C(dF;o6 zjpwnzFa-+^QC`n95wICV%$OXDjOfUKo`}QsM?WZ%Vd?@@Kqvx`2v8I@^e08R-T{Qw zIQj`Pqxwy7KUPa*03m_DE zLJeQT`m5pjO0wXYre@y-NbLoWt%TdF74ECxQw1Uq7+6A~1&~aVG2f{bI~m?hL?ZbD~{HJfJ8!(F2~STAp=M?C?7?GU=uizA8Y3 z3jm3+xwFr4C0L!!^8waNELOm$DxV@y*#dxhAnp_03t$vQz9OG1Vn~SO*|8YaGoW|m zjk{n>XqEX`nbr+k83D`b#(W-*v|^dj8(B~zK0zQ` zBY1qJN3`bwWu`P7=Hr>tHYK3CDd2NO!s4G26?;dheYLq*bY-tj`du}VTN2&c1UVMv z3vER|N==qT;sHJN1G1*`aG1>TO6*0pJj&@ss_gGbQaub~=?8lGVfKe3(-1_(K-iE6 zLY^OFLC0oiEA?U-AfYJBRK{~fnZbxrv@GaWcyE=- zGtrFr@K`nv1dA0&;IW|ZeM22--*I-PQWvgJs z7We!Hpm}Aa>q^5}Ei|ooJ54m2Gj_5CUQtheN4I64iOmFzJhU&z`4KDOj(rX$m~!0+*-RTlm7z^aQNgd{pv0h6_#NQ+P_6{?5)LQ%lCltV)Z)TsTu#Ris#LzKEji#w zuhlEN1tBXhN3v*UF*2sGphj5U6c+GzdqQn-pDSfoHR4t2*POAT4YlM!CF42rdOVh- zNVKSw1jvVyvhM{}f+4x`dO1G`z{RUlw`^zNxwLJ-ivh_)kX2g}@!FuzE30 z;~y2HdMC7HIXieS9wbpOk0Ds5WBnfwXzcqO1|%x%N0mfyyr%&_EZ- zPl<+|Z6Nl_XqQ@YpbpM#Vq}Zu>?mxA0S*h{X9Ej8nOTuyPq#-B%wDOZDHs!ZaVp@q z%dk=W?)QvK=g|3j4{n3a_^92D;d^jBVAWTyp&m5m3A6kh;k|W zZwbrV9NFge6axHCh}AL8Q9rG;BckV9jKJ5KMG!iosTX?R67zNolE2G6X@H#Ao$wWCl44gdh$eNdV>_-{( z!{(nw0i7?kUa(Agb^WM$V@Tol&JIo>u2!?M8B zh&S{KAX@c^2>{YA&9;- zV-9EDkH>-#criVRW_gl|-4@-y5(QHhj0aBB`Ai*tm&q(TrZlpz`a{aT^CXbGJKDvJ z&a=(rm5zqhtmh3{X+@TZ_;3J;nb0;@NFBu!u^%k>KCn@+i22Mwig_LnYu)PIKH#@h zJ({~KV6>5|c9bO@B??Akt4HDqMdPEbHx#iTW>TwR{0cC=TZUZ~>B@jdt#D^%Yqg8v ziuugIC%df`P3T4#)=DOH=KF-_)dO+pwj0mIg3lf-w4Rv5w&@Y@+#CAy^*@~ZRB50V znzBB?Be-uQOsE;a9?09rcIOyR0d$(ko?c~uR}&jw1wdEHF2;H)Nr%cLQU*T#g#Y8o zs|R^}G*do09te(y$ACicdWa{A4a0j;vF1d%8sd5F-lS8HEp35u>m??7SM!gASseYW z-Tcm|B$HvyG0Z(cn#7Qvs83d942tCxsnTs_9@o{r&sB5VRRNM0ZRqe(6A#aX+O4d5 zfESi#mA(#@2ESH=rj8{+Ij*)8T;7^i-Ikx zA%G7I*Z}d&136HF000*-NklRV^~jM&l^$Qlp61 z19?&ECd#&!yxtMqn6Jf(Xd_9>4E`qx7MY)3RLruVs4Z&*RtS8dEs0=F@d~|Nv{0H8 z`HPrP6qY|8&rt-R2#DB}3}xhx3QVs8AeINDGM}pSQo`*Fd|Dv6TJW1ysVg3j8lG47 zS4u1zVM8r2oEZb6?KnVAY$Qf>#EK9^yjW4GH{C+@DCUKWXgHE5GLlE|Iaq#>E#2_$ zZ{+U`jIIKktMZ4=cs+{bV!)$JE>)VzGv-qTpDcl}GV?3)qAG1eI+3JlqcQbD^nf3B zw^GbAq+!_4ae?iK^Mtw+_1Y1SV)h!7WsG4fE{c|TLlG15PT1Xi0n-5|%Z5CF$$*G~ z5DVQaQ#W4SFX+m`(hBnd;%_=^#s(3e1N#+s$@J{0IK)` z&GCYc0M&>o9kH2X75pyvRmw@eFYMQn$k(2PeMi8CyoUc3Aj&`pfv?1XMTw>e5lJwXc-V;lqmDa9TP1RT_Fuihug;L?J zW;=Uf>!=H1rF-ED_-ui(%nDFh?`IE;koZ7I0R3sLJ&N8yORlOd@PWKm8#X%_2fxMc zYZpd#p9(t7F_x7pZ^VkCTp%w)+6%=4TFscpVrC-6q86_Z{39#^(Q2EG6%eX=Kg`cq z1s?`NN_mCq`D}v!lkF2RIzUf4?85gUUGyK0fjk}WV+5i2=0vo1Jf~()M~dz6+iKL5^g`sfUJkX z8f~qVTzGOzF`>6Y7@m1bSG8tE0zNjho=r%F!3Eb>Q9OjmaJId2nzKKW=upIHvZO=R zbZ#WV$INGsK@G>C_CB{Yp%owk{5&ECMhXx`j41p5uMW+t#idGNqr!Xuy|+)L*;pr% zi!q{y2uRr!)M%o`1J4b{lmb*FpB(|pRs@k1U1>gFX*jc}moke=ndQ~Y zf@Q5XBIA|~3RL8m!h9Zy{CfnltRe2U*bW!<)38st42- z|6cKYAjmDH$B)|Ixq-LVV0l1ll3{ZqT^_4argOB!+sX2SRKUr;vnLNIGB_i8Y;%Ly ziDOM^Bp)o=HnJ$JALND4k%ZNEVbNF+Lc)+D|ED>Ivsb_xc|nRNGy`^v1e96Ys!^Ep#up=La9$Y-{z35e>vuMB`5j-1*Of5#iq9D$52L~SGj1_DxcA7m2DtLMrh zB;J&aDB*B8((CyD?l7ZDw5y3%VU{Cg3sXO(<8Dl9>-#9O%bL=Iu%Jr0#w6^A$+7D3 zUX@>0H5OZ`@v1f$%YcVP!MsKPC`QCO@qg^|_T;rY`7FxhiwL}tTrg7a?-78@adD|x z(#OX|lFTbmWeXxYp+6Q+esA3LZa~L|)3d19Za(+%x7WUefzDU}pcN2O0H`XzRzmSt z_i+aDjAzw&j(ni%;K0>!$*gmt2R;$tWVt`A*E5{IA%y4MsF(fjA0#hBt-m?^D#jFU-YFq?FX91{E z<5h`x!3htmr52TZpRC{WM*JXU#Ih2u&luGf7|v?+E1UER#7Tt^%xF56$LoX`X?t%p zvvyyzI4;5Y<-YY#xlD^syjm*oOw5wQ%28uYxN zS4P6F7^Sn4^Hc3^sDjW&jAxdF$flfb1#c;vWV(r;O|Ab@k`q}g)+Y}LghfP&fteKZ z>cjxQU58rbeq=qJgxjO{9XaxzTpWQMv%l?r-Gt`{xjh>7>@{vvLh_0PV`2C+GVIJ~ zoobUS7ItU1Wn*e0z-a_@7z1hx0Q3M)YGe~Glt`EgDlFNMc|%`3AhnN7lrifiEP5Hz z1Ag%;oX{QvAx}mfnNK@>z9^)=JF;v92kZzmpZnYJyakrXh(7)wfsZG{dLYSq!4pF8 zKLenvreai@%2(OXYO(2+2DHL}DlEt|m_1NpZ9%e3XO^A-0c@iCY2T-ZaPrub+}_Vj zX>TB*H^w;1n6@7zl3rdVyY+97uph77!h(Gx_C(*cFBZ#BDmB0O^6a z&olFWrYOhk!a{JxM*u#bw{HRnMF6V!JbS>BvIQ}mAFn&)FrJT>vM?NQju_Agq*xXW z%WhXB*nA@ZDKbo*->#U?7KAq94Q<2^%9u_on8wWaSp^@~kgSUg6U6VKsTB|8#h+|m zSafo>Amr@%K}ZixHU65g=LF6%ALZa9TP7bI{Pjg^fs*SmU%#GC%u-i zBd;jaE6=bXGvJqFWFKnBa~3oVFnm7O2mJC0d;jh{-ZP;+)->_l-^hADcApurAXR>K zhw1b{dR4>l^FsEc7|)r%a5mx4`&%)j)k4%RG9smfg8@#&a<-z(^uR}vvYzZxFEH&9 zfJ)|Gds8w1f2s!HcSSrd%4R@jI*exsj4PT_F@pE+Wi;FSJ#g9`ug8Ydz3TQ1fTsgM z13WJ%@_QzUj48iYna~yOHX`Oz>G9kV&#+P&%_~*ptRy4L#n}*-Qm9=PTM~x%z-JS| zS!rbwMZ78|^izkyC{tI7j77CTJuru>o{-Jw>Bc}CtLUV`Eb z%;=2$FzFS|6JrUAN;K?hGx{p?Sz$rdJe3TDyalR6!jwo<#(J7#Fte)rmVi-DX_WAdR3Dtk@@A*BO&6W`DH=#FQK>Bo_^c-)HkoXe8lwF9KFErdg|oZWf#8|MWoajo<)H=mm`< z@qBDp-Ag{~0jn8~iR=N=2*4;}Im&ov&nr@YzXO0OUeKA*%53KfHlk%CSep|yJLd6hLC%ji zSkcSpu`}L#BC#Uy8A&9JF&_pxLzG>S8NC%{7z!6CRemw5-b64`lMvNnR5k;w6R?Wv z$Go1+3gC3&`>0Zj&2wj+4I%4&TU-`$+Iwgg$1!5(AAmmN^Vdz z8$Oaw6~D=j&e;gNV=Y%z@QF<4s?08#&;XyBkPXG_N$$;x92*Hc%I1r8_+yhjX4jmk zSEZVLclMis2|Wno83oxjz)LZd@(e|KtxB*f=6x|Hq%1at`KWR%o5uxcBXC+Gxs?9Y zkq1=qd@A4*4I-?5&rc>a^ME`_#-d~1_+|vpqkzy10LjX+7BCRtx#J)l#uB9gcu}um zB4n2FL|M)|3AaZ;p~&q-o@i~7JSqa4zMT~5O+CL%Qmh8A+O2Sa6r$SEf&pfKbCFS&*2%?-HDd9 z1bFN*Pz>md@eBuSh5?$)3$li^2R2uEK(qxza7A2|U_J09?5LTQOz2LG-Hos&ChZi) z*<8% zZFJ0QyBbxxPeF!7q4_8i+5@630iThuo_A+Ld;UU&2}SKf*%p)>Xa@J3`xbNY-esSKqPPo~;~xdjGvMRFlv zOAwh4o9jgr4cXszx|; zurucKiWwaZ5P<0WATU|08PQc~ruLSO#v7|Z#L@_qb{ah~pdrYv72k*c?TxpofKWBd zwhBTl*=~w|DO> zA`0w*$*&AJvT%D7pCj|M6xo%5^>>0#8U?HPL0+;V;7?^>o)8e%d=2OSC>quhN$2Gf zMZ*ET8n)pW(b2s3E{58BA|)e61m`&z$g^HRECP16CF@EgOesc1a^+uX&zc#&Drl(w z4lA5x@6iKO2<9>_2A}Fhr$ru+s{cKp8O2Gn0i{@mB_sYBP~dY=0!I zhlSbqMYhP=a%7;Su%R>3D>9|kL4*hv)8li9v{r;XA+wKx^j8T4g~DgxFv_ zHEQE6OuO)yRLMftY6x60yA>bG1E!I@@5p>sK^X*~A~w`603a*fv(deoAS|ihsi-Tf~~!>~*iq1On3mcp~Ae!6*FRHrl!ZglzM4W=eZN!T_q$ief@9?2IB% zQFIK2h!+;#&m@myhO=ry19~FjmC-Pz(mJb0ViKbVK9S-ZWp!npnA)uXa#`LIi)>Z< zCPfBvHP`1X`24=DVnQpXbSrvCfY#r62JeG`RMgnrlY3EicUFEf5hooUk4Mzs8F=nK zY4>FSq=wyR5rEDb(Q30Q1%Q;Wdc#{;0O z7Hk!SKo)olPWmR?hQzz_D7-g!Jz@)9*TmrfOLm(bKYeT)>-GIn{T_w+0C@#``Ne*m@gzW;GR6*z^;NwZK>;yX_$AG-` z!+_s+dXfcb_xr%tT%BVG{sF%aPvjXXX0T##L%0u!`v5VZ90Y7uXTwi&VNw{-B*22; zVgX^%Fd4>->S{){%2X=3IZOgFZdOYKqO*#egkh>QpjDRYVW6^g#itLB6pf1QXW%f7{ z8IdI_dUa-5f*z|HXBFkF?7`cwp8y^vt-1&}k>68}a4F}-qi_YQ$}zxCK8y-iz4`I% z1K5JrhXXPQ7P9xhWf9%+l#VjW^MmZ?x9o0%HfZqkwheiI=d1F5vg-Gu9R zA>=N|wTO`*xh-Q;Ao5LNT8i}SBD-1Xzr6xJt5W>Q*Qi|Ws?jo5j}%EV*2ORKL3W1) z0nb(O$JhJZ@BjX~?Y{y1KfeIr1H2?8%E@6xqzG7_GWT7X_jP6x24h1NzekOVDY-!? zcpr^0AZBnY6FDklgOsdp)%Q}^joLKcdp^cwng~82AXTGa3KLS;5Ww4bWKptd4%EPN z@8(aovHt>=&v!8( z^~&56pD6Q$0A7|5{Z`t5C@cpe_*@A*5szJPpd%0YQj44j4F#TGNv=1sEZ6l@tZ0MmPi=R8Q@uAJue3zj{#lDgx<-9 zs`X|^)A<8_xc%7GZWvSBt8hOW*MQy>o^=MuSWU)WS=-ghcRViu9p$7|`vob0qn36k zET#fbmHH}$^<>WltS1VdVLg|CPi8`2!GtR8$e!#f8)}J1WbYs53q2aZM{nrJnEvC) zsSg8SpSOJ;&rjg`Z~(>oEG+>|@3E2pV{hvO^g-Crt0WkN#l+YTyA9AHN{XR9!J}j&b~OBt*nmb_ZD0SzbyOv#mE%jOcd(5L*zFEL7!+u1KIPlIBS_HZc?hAjuxr z1prws3T?PPs?}D`fk=W?PQWvgELuDjk76R8cQuLJvtjtp-yeb0vL4On?@y-me*pZy zcy1tO-_IxTYyvBpf{ap%Oqu*ziF8d7WK_x3PAsBM*pIT1yXeD2uUlbhjJZ{%(<<=1 zlJ(I0n|R`#xk|1Ak=my?OT5c+WwOP6lw=YPjB1KAjQ$fVQz>#Ox$h zydh7P*`b7)H1l$fY^8Z5;k;6k?eODGLfs6obi;;hQ?d`kevaPK!$`3i_*!ba47=Dj z^4RQq?I)yIE9_TcLMlsY&hhBb+D)7V30+z%{gcR;A)xt&Nq9On=GPp#R1;kn*u2EGvc%n%+^@$Ih80m_(7^@^)7 vCdNLxxF0SAnbp^+vK`H=5ELGgzT5ex&Yp1$U zRHCg!tVz@Ms+Oy@G_D{*ODhP12*FD`^XAT*H}g90oH@&Uzxig)`Of@)-?{GQa!LlO z3IzZ_#^Lk{cK{Hx5$#_?Bt&yD*sNZ(NL+M0bpqJ=+V6JM+!7&DF{jVP0f4l^*C7U! zl2gw z%8*qC07#9)30u#^k@>OrvG>gYiNML&J(fB&ek%55o#{aV*g-};lC!3QQN_DFl_%g85*Vot0Y+Xp6$F|^#9NmN9{-9dJ3WMv%C*FVKU_hEg4uF@+vy{T0let}1SXwsm9D|c!QEr{;UXWLa z9YY3Gv^}mDj$-HPiA2k?umc_e9BzNg$c$%^Zu|UsYDWhigLCg>Fc_Ci^%W)9JM%VY zm@>JA{PM%ng)@j7nU+`r;qYizMRPcex3Mvj%BZ%?Z%EAOqn&_j6gHh7?lIZKdx0z4|M9E-GnM%g;@__j|tHeRS6cB^wwQR zWlO6N(ZZstE0cG-b&UL3gs0heuw&7W%KUKrmMH6B@jzDFgK|LI01~&1@dWadPKi@a zazmV~gV8efw_p@WkL7Ohvl+d6)6)U4d^(`^gun0ILynO*Av;$IUeAyi!uUMaplbJ?`X`miRy7lm({b>s!Bb zFNowSAVZwTo={3*3H;5gmoF#zZx4IyUE)&OJF$bHOREi?EeivT)mDa*z3$v5IoOGB z6zX16W{8j?lCU>Pz&TBM^4cE;D^IFgW_whOm(2e}+M{KqtFu|h4#Wr9{V=3AXIX&5 zyj#6JkU+roB#jOxQ3=8Pu$5Kd!opD1BgN3fEXB_{=YzY zro&ArdF7*-<6!fkNdv~Or~qRiEsIoGOq?%vMKfAyG@O*pH)?v`QK)}oi@l1+kHbVX zV=wk`q@R5HZuP{t>{-&R-@SZNZaDi5UM(2j#o$dR^yVa!CY zN*$vv`ntsjvL4+_dH?q{_;H z7o^vq&{wB0b)G8L?kO|MBt0uG zcd2nr^T=-rDVr*2B{<*s0>sd&qp9m}iS^nw2mN7`r?sr{&*I+UA^6kczPxY_EQ1Mm=ky-|{2B+?tRziJF zS|>i4m@0f!QBm=9V>DJ_-(7If@|SoEue2>;ahmy&D#_o+wGMLlGr;+Plp5t>rvw49 z5?Nmdm9z~As51e@wY~uON-17m_-m{gK!^m_*VQ$NXON^aiL0!54`#>Q&%=U diff --git a/images/wh32_player.png b/images/wh32_player.png new file mode 100644 index 0000000000000000000000000000000000000000..a7ad58dca2d398a20e4ef94cf02e9ba1c99cc48a GIT binary patch literal 310 zc%17D@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&pI+Q;^p{F~6_%6HrL9#5JPCIX^cyHLrxhxhOTUBsE2$ zJhLQ2!QIn0AiR-J9H?lXr;B4q#Np%w309GYM=rL8qR{F5yY;Nk^X&?z z>TI5IqLg9NQ)adr*)5uVOq-k!oILr`-pnlaQp4oQm;Xzf=Pl^S%*Zf!b9;OL#Akd5 z(kxZ`6fC(4BK^Lb7`$o-Wbd(Rh-z3fDZtB%EBoT_H#d!sO%!E4KhHK<<@oi*ods7I w7xPJ!GMFBy*En``c{Il#^#k(z0v${l7~~90>Zj`;1i6&K)78&qol`;+0Gp$2m;e9( diff --git a/images/wh32_shelves.png b/images/wh32_shelves.png new file mode 100644 index 0000000000000000000000000000000000000000..6881c48640c389a46cb92c5f8515f8e78c8ac34d GIT binary patch literal 328 zc%17D@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&pI+Q&3P#Uss*O3MeF5;u=xnoS&PUnpeW$T$GwvlA5AW zo>`Ki;O^-g5Z=fq4pg+k)5S3);_%z)hJ1$%cwG1IK75UJrEv1GxCikKmx~zV7bN=y zbS{n77hrP{jk?l$f_KvYZ*x8Dx7`;y5V~+us$a6qo|6-Yzt+0A1c}_eNKCQU090K`p9>~-i1K7 OGkCiCxvX<>&pI+Q&7;@!t{&EQ=pJ!iEBiObAE1aYF-J0b5UwyNotBh zd1gt5g1e`0KzJjcI8afZr;B4q#Np&GPoMw)|K@u>Th4=@@9*;*i;3acG9~?xDkt-n zY3WH42?sQep88d~mnd~lh8;n5qmsS6F|F92<3@O1TaS?83{1OP|BTG#*p diff --git a/items.lua b/items.lua --- a/items.lua +++ b/items.lua @@ -12,26 +12,81 @@ item_book_on_navjiarr = obj { end; }; -item_book_dlg = obj { +item_bankbook = obj { + nam = "item_bankbook"; + disp = "Сберкнижка"; + inv = [[Ваша сберкнижка. Согласно ей, у вас есть 150 шиллингов на банковском счете. ]]; +}; + +item_book_dlg = dlg { var = { a = false; b = false; c = false; + d = false; }; - nam = "item_book_dlg"; + nam = "Книга о навьярах"; entered = [[Вы открываете оглавление и ищете нужную вам информацию. ]]; phr = { - {always=true, "Арифметика", [[Навьяры используют шестеричную систему счисления. Для цифр используются цветовые обозначения, аналогичные буквам: фиолетовый - 0, синий - 1, зеленый - 2, желтый - 3, оранжевый - 4, красный - 5. названия каждой цифры на навьярском языке(записаны в системе Светловой) 0 – Nol, 1 – Lse, 2 – Dyle, 3 – Vlye, 4 – Elt, 5 – Tei. ]]}; - --TODO полезное описание картографии - {always=true, "Картография", [[Навьярские карты значительно отличаются от наших. Масштабы не задаются и не выдерживаются, позволяя тем самым умещать множество деталей там где они нужны и сжимать расстояние там, где это не имеет значения. навьярские карты в основном используются для записи путей от центральной точки к нескольким удаленным от нее. ]]}; + {always=true, "Арифметика", [[Навьяры используют шестиричную систему счисления. Для цифр используются цветовые обозначения, аналогичные буквам. В скобках приведены названия на навьярском языке(запись по системе Светловой): ^]].. + img('box:4x16,#8000FF,255') .. [[ - 0 (Nol)^]] .. + img('box:4x16,#0080FF,255') .. [[ - 1 (Lse)^]] .. + img('box:4x16,#00FF80,255') .. [[ - 2 (Dyle)^]] .. + img('box:4x16,yellow,255') .. [[ - 3 (Vlye)^]] .. + img('box:4x16,#FFCC00,255') .. [[ - 4 (Elt)^]] .. + img('box:4x16,red,255') .. [[ - 5 (Tei)]]}; + {always=true, "Картография", [[Навьярские карты значительно отличаются от наших. Масштабы не задаются и не выдерживаются, позволяя тем самым умещать множество деталей там где они нужны и сжимать расстояние там, где это не имеет значения. навьярские карты в основном используются для записи путей от центральной точки к нескольким удаленным от нее. Некоторые обозначения: ^]] .. + img('images/book_temple.png') .. " - храм ^" .. + img('images/book_city.png') .. " - город ^" .. + img('images/book_current.png') .. " - течение. Если символ идет из центра к краю - значит следует идти по(или против) направления течения, если перпендикулярно радиусу окружностей - то течение пересекает путь^" .. + img('images/book_ravine.png') .. " - ущелье. Используется аналогично предыдущему ^" .. + img('images/book_cliff.png') .. " - скала. Используется аналогично течению или ущелью. Сторона с отметками означает край, находящийся выше ^" .. + img('images/book_stones.png') .. " - сооружение. Используется для любых искусственных сооружений ^" .. + img('images/book_bones.png') .. " - кости ^Список продолжается еще на много страниц. ", code [[ cart_known = true; ]]}; + {always=true, "Язык", code [[ psub('language'); ]]}; {always=true, "[Отложить книгу]", code [[ if item_book_dlg.a and item_book_dlg.b and item_book_dlg.c then language_known = true; end; back(); ]]}; - {always=true, "Язык", code [[ psub('language'); ]]}; {tag="language"}; - --TODO заполнить этот раздел - {always=true, "Алфавит и письменность", [[]], code [[ item_book_dlg.a = item_book_dlg.a + 1; ]]}; - {always=true, "Грамматика", [[]], code [[ item_book_dlg.b = item_book_dlg.b + 1; ]]}; - {always=true, "Словарь", [[]], code [[ item_book_dlg.c = item_book_dlg.c + 1; ]]}; - {always=true, "[В другой раздел]", code [[ pret(); ]]} + {always=true, "Общение", [[В обычной жизни навьяры могут использовать два взаимозаменяемых способа общения: ^1) Наиболее часто навьяры используют цветовые сигналы, подаваемые с использованием особых отростков на голове, напоминающих плавники. Светящийся пигмент просвечивает через тонкую кожу и равномерно распространяется к краям "плавника", постепенно затухая. Как правило, навьяры "говорят" достаточно быстро - у взрослого навьяра на плавнике может одновременно находиться около десятка таких цветных полос. Последовательности цветов разделяются т.н. паузами и полупаузами(полупауза как правило заметно тоньше обычной цветной полосы). ^2) Альтернативно, навьяры могут общаться посредством устной речи, однако практически не пользуются этим в естественной среде обитания(примечание Сильвии Уинтерлайт: навьяры не рыбы, а амфибии. Вероятно некогда они жили преимущественно на поверхности и использовали этот способ общения в качестве основного). Количество звуков примерно соответствует колицеству цветов, используемых для первого способа. Каждому цвету имеется четкое звуковое соответствие. ]], code [[ item_book_dlg.a = true; ]]}; + {always=true, "Алфавит и письменность", [[Современные навьярские записи выглядят как каменные таблички с ровными рядами цветных полос. Ширина полос разнится от документа к документу и составляет от 1 до 15 мм. Хотя данный способ записи достаточно компактен, для нас он неудобен и дорог. С этой целью, я предлагаю использовать альтернативную систему письменности, основанную на латинском алфавите. Каждому цвету будет сопоставлена определенная буква. Ниже приведено соответствие цветов звукам и буквам. ^]] .. + img('box:4x16,red,255') .. " - A^" .. + img('box:4x16,orange,255') .. " - R^" .. + img('box:4x16,#FFCC00,255') .. " - N^" .. + img('box:4x16,yellow,255') .. " - E^" .. + img('box:4x16,#B9FF00,255') .. " - V^" .. + img('box:4x16,#7BAA00,255') .. " - F^" .. + img('box:4x16,#00FF00,255') .. " - Y^" .. + img('box:4x16,#00FF80,255') .. " - L^" .. + img('box:4x16,#00FFFF,255') .. " - I^" .. + img('box:4x16,#0080FF,255') .. " - H^" .. + img('box:4x16,#0000FF,255') .. " - P^" .. + img('box:4x16,#8000FF,255') .. " - K^" .. + img('box:4x16,#BF00FF,255') .. " - O^" .. + img('box:4x16,#FF00FF,255') .. " - D^" .. + img('box:4x16,#800080,255') .. " - T^" .. + img('box:4x16,#FF0080,255') .. " - Z^" .. + img('box:4x16,#AA0055,255') .. " - S", code [[ item_book_dlg.b = true; ]]}; + {always=true, "Структура слова", [[В навьярском языке слова не являются фиксированными единицами, а составляются из множества корней-признаков, присущих данному предмету(rr) или действию (nn). Признаки могут отделяться от остальных корнями "e"(если речь идет о разделенных предметах) или "yhe"(если речь идет о под0группе). Примеры: ^Na'vji'a'rr - навьяр^Ty'yhe'na'vji'a'rr - ты -- навьяр^Vee'nn - двигаться^Zee'vee'nn - отдаляться^ Основные периоды времени:^Nley'elra'ysl'rr - сутки^Ynd'elra'ysl'rr - год^rja'elra'ysl'rr - 216 лет]], code [[ item_book_dlg.c = true; ]]}; + {always=true, "Словарь", [[A:^A, av, ava – живой^aed – океан, море^Ah - согласие^Arn – работа^Atre - предупреждение, опасность^Anot – жилище^Arhe – назад^Ayhe, Ayke – знание^]] .. + [[D:^Dea - предложение^Doo - последствие^]] .. + [[E:^Ere – множество, группа^Eanea - улица^E – признак объединения^Edhe – насмешка^Elra – период^Eyle – всеобщность^Eylesl - вечность^Eth - сон^Ef – способ действия^]] .. + [[H:^Hi - помощь^He – верх^Hyd - причина^Has – неопределенность^Hya – память, хранение^]] .. + [[I:^I – Я, Мы^In – добавление, дополнение^Ien — верх^Ile – видимость^Intre – уверенность^Iraa – среда(окружение)^]] .. + [[J:^Jir — трава, водоросль^]].. + [[K:^Kd – неодобрение^Ky - зуб^]] .. + [[L:^Lea – Радость^Lek – место^Lyt - встреча^]].. + [[N:^Nea – путь, дорога^Na – низ^Nev — изменение^Nley – малый(размер, объем, количество)^Ny – присутствие^Ndi - тьма^]].. + [[P:^Pha - светящийся, сияющий^Per - вперед^Pte – он, они, она, оно, это^Pai — копье^]].. + [[R:^Rja – большой^Ry - Порядок^]].. + [[T:^Tel - значимость^Ta - указание места^Tna – привязка, принадлежность^Tla – источник^Tek – механизм^Tre – множество^Ty – Ты, Вы^]].. + [[V:^Ven – тепло^Vil — покрывало, завеса^Vee – Подвижный, движущийся^Vji – разумный^Vta – неприязнь^Vtre – отрицание. Используется для обозначения противоположности другому признаку^Vlae – разделение^Vna – низ^Viv - острый^]] .. + [[Y:^Tea — наблюдать, смотреть^Ynd - средний^Yhe – Разграничитель – ставится после необязательных признаков^Ysl – время^]].. + [[Z:^Za – язык^Zy - вопрос^Zee – отдаление^Yz – святилище, храм]], code [[ item_book_dlg.d = true; ]]}; + {always=true, "[В другой раздел]", code [[ + pret(); + if item_book_dlg.a and item_book_dlg.b and item_book_dlg.c and item_book_dlg.d then + language_known = true; + end; + ]]} }; }; @@ -99,7 +154,8 @@ item_colt = obj { disp = function(s) return "Кольт (" .. tostring(s.bullets) .. " зарядов)"; end; - dsc = [[Ваш револьвер. Надежное оружие в хорошем состоянии. Оно еще не раз спасет вашу жизнь. У вас также есть небольшой запас патронов к нему. ]]; + dsc = [[На столе лежит {револьвер}. ]]; + tak = "Вы забираете револьвер. "; use = function(s, o) if (here().underwater) then return "Под водой это вам не поможет. "; @@ -155,9 +211,8 @@ item_harpoon = obj { return "Гарпунное ружье (заряжено)"; end; end; - dsc = [[ - - ]]; + dsc = [[К стене прислонено {гарпунное ружье}. ]]; + tak = "Вы забираете ружье. "; use = function(s, o) if (s.charge == 0) then return "Ружье не заряжено. "; @@ -253,14 +308,14 @@ item_lamp = obj { dsc = "На столе стоит {керосиновая лампа}. "; tak = "Вы забираете лампу с собой. "; inv = function(s) - if (pl.where.nolamp) then + if (here().nolamp) then return "Здесь не стоит зажигать лампу. "; end; - if (pl.has_light) then - pl.has_light = false; + if (me().has_light) then + me().has_light = false; return "Вы гасите свет. "; else - pl.has_light = true; + me().has_light = true; return "Вы зажигаете лампу. "; end; end; @@ -277,7 +332,7 @@ item_toolbox = obj { return [[Вы забираете ящик с собой]], true; end; end; - inv = [[Ящик со всевозможными полезными и не очень инструментами - отвертками, ключами, молотками и т.д. ]]; + inv = [[Ящик со всевозможными полезными и не очень инструментами: отвертками, ключами, молотками и т.д. ]]; }; item_money = obj { @@ -338,17 +393,17 @@ item_bottle = obj { nam = "item_bottle"; disp = "Бутылка с пойлом"; inv = [[Бутылка дешевого пойла. Вас воротит от одного запаха этой дряни. ]]; - use = function(s, o) + --[[use = function(s, o) if (o == char_worker) then remove(s, pl); char_worker.bought = true; - pr([[Вы подходите к рабочему и, аккуратно доставая бутылку, спрашиваете: ^ + pr([ [Вы подходите к рабочему и, аккуратно доставая бутылку, спрашиваете: ^ -- Выпить хочешь? ^ -- Ага, -- удивленно и обрадованно восклицает рабочий, протягивая руки. ^ -- Меняю на твой ящик с инструментами. ^ - -- Идет, -- отвечает рабочий, выхватывая из ваших рук заветную бутылку. ]]); + -- Идет, -- отвечает рабочий, выхватывая из ваших рук заветную бутылку. ] ]); end; - end; + end;]] }; item_pump_broken = obj { @@ -388,6 +443,7 @@ item_electrodes = obj { item_ducttape = obj { nam = "item_ducttape"; disp = "Изолента"; + seen_level = 1; dsc = [[На столе лежит {моток изоленты}. ]]; tak = [[Вы забираете изоленту. ]]; inv = [[Моток изоленты. ]]; @@ -422,14 +478,14 @@ item_unknown_schematics = obj { inv = function(s) remove(s, pl); put(item_leviathan_schematics, pl); - return [[Вы рассматриваете чертежи, найденные на складе. Это чертежи какого-то необычного корабля. Многие детали конструкции кажутся вам непонятными, излишними, переусложненными пока вы не натыкаетесь на надпись в углу: _"Проект ,,Левиафан'', Вестхейвен Трансоушен, 1900"_. Чуть ниже написано: _"Подводный корабль предназначенный для долговременных автономных путешествий"_. Теперь все встает на свои места - вот что строил ваш отец. ]]; + return [[Вы рассматриваете чертежи, найденные на складе. Это чертежи какого-то необычного корабля. Многие детали конструкции кажутся вам непонятными, излишними, переусложненными пока вы не натыкаетесь на надпись в углу: _"Проект ,,Левиафан'', Вестхейвен Трансоушен, 1900"_. Чуть ниже написано: _"Подводный корабль предназначенный для долговременных автономных путешествий"_. Теперь все встает на свои места -- вот что строил ваш отец. ]]; end; }; item_leviathan_schematics = obj { nam = "item_leviathan_schematics"; disp = "Чертежи \"Левиафана\""; - inv = [[Чертежи "Левиафана" - субмарины, созданной Вестхейвен Трансоушен. ]]; + inv = [[Чертежи "Левиафана" -- субмарины, созданной Вестхейвен Трансоушен. ]]; }; item_cogs = obj { @@ -475,43 +531,63 @@ item_temple_disk = obj { disp = "Светодиск из храма"; dsc = [[У стены лежит небольшой блестящий диск. ]]; tak = [[Вы поднимаете диск. ]]; - inv = [[Найденный в храме блестящий гладкий диск из неизвестного материала. Диаметр около 10 сантиметров. В центре небольшое треугольное отверстие. Вдоль внешней кромки - цветные полосы. ]]; + inv = [[Найденный в храме блестящий гладкий диск из неизвестного материала. Диаметр около 10 сантиметров. В центре небольшое треугольное отверстие. Вдоль внешней кромки тянутся цветные полосы. ]]; }; item_legend_of_temple = obj { nam = "item_legend_of_temple"; disp = "Навьярская табличка"; dsc = [[На полу в углу валяется какой-то {предмет}. ]]; - tak = [[Вы поднимаете предмет - это небольшая металлическая табличка. ]]; - inv = [[Металлическая табличка, на которую нанесены цветные полосы, соответствующие буквам языка навьяров. - ~Легенда о храме в глубинах~]]; + tak = [[Вы поднимаете предмет. Это небольшая металлическая табличка. ]]; + inv = function(s) + if (language_known) then + return [[Металлическая табличка, на которую нанесены цветные полосы, соответствующие буквам языка навьяров. История, записанная здесь, гласит: "В одном городе жил навьяр по имени Тревенвеерр. Однажды он прослышал о монстре, угрожающем соседним городам. Позже, ему довелось увидеть нападение этого чудовища на группу путешественников. Проследив его путь, Тревенвеерр узнал, что живет чудовище в глубоком ущелье. Вернувшись домой, навьяр начал расспрашивать мудрецов своего города -- как же быть, но никто не дал ему ответ. Тогда Тревенвеерр решил разрушить жилище монстра и отправился туда. Но вместо жилища монстра нашел он древний, чудесный храм -- светящиеся картины в нем складывались в причудливые истории и многие предметы лежали внутри. Тревенвеерр забрал все что смог, но не стал разрушать святилище. Когда он принес реликвии в свой город, то никто не смог понять, как их использовать -- записи оказались непонятны даже для мудрецов, а остальные реликвии никто вообще никогда не видел. Тогда Тревенвеерр отправился бродить по свету в поисках ответов. Долго бродил, но в итоге, нашел он ската, который рассказал ему, как одолеть чудовище. Воодушевленный, Тревенвеерр отправился в логово чудовища и с тех пор никто никогда не видел ни того, ни другого". ]]; + else + return [[Металлическая табличка, на которую нанесены цветные полосы, соответствующие буквам языка навьяров. ]]; + end; + end; }; item_legend_of_dark_source = obj { nam = "item_legend_of_dark_source"; disp = "Навьярская табличка"; dsc = [[На полу у входа валяется какой-то {предмет}. ]]; - tak = [[Вы поднимаете предмет - это небольшая металлическая табличка. ]]; - inv = [[Металлическая табличка, на которую нанесены цветные полосы, соответствующие буквам языка навьяров. - ~Легенда об излучающем тьму~]]; + tak = [[Вы поднимаете предмет. Это небольшая металлическая табличка. ]]; + inv = function(s) + if (language_known) then + return [[Металлическая табличка, на которую нанесены цветные полосы, соответствующие буквам языка навьяров. История, записанная здесь, гласит: "С древних времен в океаны живут скаты огромных размеров. Размах плавников их столь широк, что они закрывают ими свет поверхности. Мудрость их не уступает размеру. Один из них, известный под именем Фаэндирр, жил в специально встроенном для него храме, где собирал древние ценности и охранял их от воров. Однажды, прознал Фаэндирр об артефакте, именуемом световым диском. Фаэндирр загорелся идеей заполучить себе его. Он долго упрашивал навьяров передать ему световой диск, но те раз за разом отказывали скату. Тогда Фаэндирр украл его прямо из храма. Темной ночью, когда его никто не видел, пробрался он в храм, проткнул охранников хвостовым шипом и забрал артефакт. Когда навьяры пришли к нему, чтобы отобрать реликвию, он спросил их, могут ли они сказать для чего она нужна. Но никто не ответил Фаэндирру. Тогда он заперся в храме, а когда вооруженные навьяры ворвались внутрь, обрушил потолок, похоронив вместе с ними и себя и световой диск". ]]; + else + return [[Металлическая табличка, на которую нанесены цветные полосы, соответствующие буквам языка навьяров. ]]; + end; + end; }; item_legend_of_first_city = obj { nam = "item_legend_of_first_city"; disp = "Навьярская табличка"; dsc = [[На полу в углу валяется какой-то {предмет}. ]]; - tak = [[Вы поднимаете предмет - это небольшая металлическая табличка. ]]; - inv = [[Металлическая табличка, на которую нанесены цветные полосы, соответствующие буквам языка навьяров. - ~Легенда о первом городе~]]; + tak = [[Вы поднимаете предмет. Это небольшая металлическая табличка. ]]; + inv = function(s) + if (language_known) then + return [[Металлическая табличка, на которую нанесены цветные полосы, соответствующие буквам языка навьяров. История, записанная здесь, гласит: "Многие тысячелетия назад навьяры жили в огромных городах. Великие мудрецы их строили немыслимые машины, способные делать за навьяров практически все, что можно было придумать. Кроме одного -- машины не были способны мыслить. И только в одном городе мудрецы смогли построить такую машину. Но город этот был закрыт и никто посторонний не мог попасть в него -- накрытый незримым куполом, он был надежно защищен от проникновения извне. Долго ждали они, когда покажут им великое чудо. Но никто не выходил из закрытого города. Тогда собрали навьяры войско и отправились в нему. Но, как и раньше, никто не открыл им ворот и не впустил внутрь, а все их оружие оказалось бессильно перед прозрачным барьером. Испугались они тогда и решили забыть дорогу к страшному месту раз и навсегда. И только жители одного города сохранили карту, надежно спрятав ее, решив что однажды придет тот, кто достаточно умен, силен и безрассудлен, чтобы проникнуть в город и раскрыть его тайну". ]]; + else + return [[Металлическая табличка, на которую нанесены цветные полосы, соответствующие буквам языка навьяров. ]]; + end; + end; }; item_legend_of_hunter = obj { nam = "item_legend_of_hunter"; disp = "Навьярская табличка"; dsc = [[На полу в углу валяется какой-то {предмет}. ]]; - tak = [[Вы поднимаете предмет - это небольшая металлическая табличка. ]]; - inv = [[Металлическая табличка, на которую нанесены цветные полосы, соответствующие буквам языка навьяров. - ~Легенда об охотнике~]]; + tak = [[Вы поднимаете предмет. Это небольшая металлическая табличка. ]]; + inv = function(s) + if (language_known) then + return [[Металлическая табличка, на которую нанесены цветные полосы, соответствующие буквам языка навьяров. История, записанная здесь, гласит: "Вивпаирр был охотником. Он часто путешествовал в далекие земли в поисках невиданных рыб и новых мест. Однажды, он узнал про ходящего по поверхности рьяхеарра. Вивпаирр собрался и поднялся на поверхность. В поисках рьяхеарра он наткнулся на хевьяров. Спросив их, где искать зверя он услышал ответ ,,Докажи, что достоин и потом мы покажем тебе его. Достань нам сияющий камень из пещеры''. Сходил Вивпаирр и принес камень -- не было в этом ничего сложного, кроме того, что камень глубоко под водой лежал. Но когда он вернулся, снова сказали ему хевьяры: ,,Теперь должен убить ты зубастую рыбу, угрожающую нашим рыбакам''. Сходил Вивпаирр и убил ее -- было это достойное молодого охотника испытание, ведь рыба та была сильной молодой акулой, быстрой и острозубой. Но и тут хевьяры ответили, что это не все. Для последнего испытания попросили они Вивпаирра украсть сияющий диск из подводного города. Сразу понял охотник, что дело нечисто, но жадность и гордыня взыграли в нем -- он во что бы то ни стало хотел найти рьяхеарра. Прокравшись ночью в город, вынес он световой диск из храма родного и отдал хевьярам. А ты в ответ лишь посмеялись и сказали, что рьяхеарр здесь не живет, а живет в землях далеких. Разозлился тогда Вивпаирр и убил их всех, забрал обратно и световой диск и камень, но не вернулся он в город родной, а так и ушел. И не знает никто, нашел он своего рьяхеарра или нет". ]]; + else + return [[Металлическая табличка, на которую нанесены цветные полосы, соответствующие буквам языка навьяров. ]]; + end; + end; }; item_lse_map = obj { @@ -529,15 +605,18 @@ item_lse_map = obj { return "Фрагменты карты"; end; end; - tak = [[Вы забираете табличку себе. ]]; + tak = function(s) + atl_iyh_state = 8; + return [[Вы забираете табличку себе. ]]; + end; dsc = [[На пьедестале посреди комнаты лежит металлическая {табличка}. ]]; inv = function(s) if (s.state == 1) then - return [[Один из фрагментов навьярской карты, ведущей в Лсэрианотр - легендарный город подводной расы. ]]; + return [[Один из фрагментов навьярской карты, ведущей в Лсэрианотр -- легендарный город подводной расы. ]]; elseif (s.state == 5) then - return [[Навьярская карта, ведущая в Лсэрианотр - легендарный город подводной расы. ]]; + return [[Навьярская карта, ведущая в Лсэрианотр -- легендарный город подводной расы. ]]; else - return [[Несколько фрагментов навьярской карты, ведущей в Лсэрианотр - легендарный город подводной расы. ]]; + return [[Несколько фрагментов навьярской карты, ведущей в Лсэрианотр -- легендарный город подводной расы. ]]; end; end; }; @@ -545,22 +624,29 @@ item_lse_map = obj { item_venaedanotrr_map = obj { nam = "item_venaedanotrr_map"; disp = "Навьярская карта"; - dsc = [[Древняя металлическая пластина с картой пути к Венаэданотру. Вы путаетесь в сложном переплетении символов, линий и обозначений -- это гораздо сложнее карт, описанных в учебнике и виденных вами до сих пор. ]]; -}; - -item_navjiarr_chart_1 = obj { - nam = "item_navjiarr_chart_1"; - disp = "Навьярская табличка"; - dsc = [[На полу в углу валяется какой-то {предмет}. ]]; - tak = [[Вы поднимаете предмет - это небольшая металлическая табличка. ]]; - inv = [[Металлическая табличка, на которую нанесены странные обозначения. ]]; + inv = function(s) + local chars = ""; + if ArrayUtils.indexOf(pl.party, 'anna') ~= 0 and ArrayUtils.indexOf(pl.party, 'learr') ~= 0 then + chars = "Анны и Леарр"; + elseif ArrayUtils.indexOf(pl.party, 'anna') ~= 0 then + chars = "Анны"; + else + chars = "Леарр"; + end; + if (cart_known) then + venaedanotrr_found = true; + return [[Свиток из водорослей с картой пути к Венаэданотру. Вы путаетесь в сложном переплетении символов, линий и обозначений -- это гораздо сложнее карт, описанных в учебнике и виденных вами до сих пор, однако, будучи на Левиафане, вы скорее всего сможете проложить маршрут с помощью ]] .. chars .. ". "; + else + return [[Свиток из водорослей с картой пути к Венаэданотру. Вы не имеете никакого понимания условных обозначений на этой карте. ]]; + end; + end; }; item_navjiarr_chart_iraa = obj { nam = "item_navjiarr_chart_iraa"; disp = "Карта из Ираафаанотра"; dsc = [[На полу в углу валяется какой-то {предмет}. ]]; - tak = [[Вы поднимаете предмет - это небольшая металлическая табличка. ]]; + tak = [[Вы поднимаете предмет. Это небольшая металлическая табличка. ]]; inv = [[Металлическая табличка, на которую нанесены странные обозначения. ]]; }; @@ -575,32 +661,16 @@ item_navjiarr_chart_dyp = obj { inv = [[Металлическая табличка, на которую нанесены странные обозначения. ]]; }; -item_navjiarr_chart_2 = obj { - nam = "item_navjiarr_chart_2"; - disp = "Навьярская табличка"; - dsc = [[На полу в углу валяется какой-то {предмет}. ]]; - tak = [[Вы поднимаете предмет - это небольшая металлическая табличка. ]]; - inv = [[Металлическая табличка, на которую нанесены странные обозначения. ]]; -}; - item_navjiarr_chart_ven = obj { nam = "item_navjiarr_chart_ven"; disp = "Карта из Венаэданотра"; inv = [[Металлическая табличка с нанесенными обозначениями. ]]; } -item_navjiarr_chart_3 = obj { - nam = "item_navjiarr_chart_3"; - disp = "Навьярская табличка"; - dsc = [[На полу в углу валяется какой-то {предмет}. ]]; - tak = [[Вы поднимаете предмет - это небольшая металлическая табличка. ]]; - inv = [[Металлическая табличка, на которую нанесены странные обозначения. ]]; -}; - item_navjiarr_cube = obj { nam = "item_navjiarr_cube"; disp = "Навьярский артефакт"; - inv = [[Небольшой прозрачный куб, очень холодный на ощупь - холод ощущается даже в скафандре. От него исходит слабое свечение. ]]; + inv = [[Небольшой прозрачный куб, очень холодный на ощупь. Холод ощущается даже в скафандре. От него исходит слабое свечение. ]]; }; item_talk_device = obj { @@ -628,7 +698,7 @@ item_navjiarr_chart_z = obj { disp = "Навьярская табличка"; dsc = [[На пьедестале лежит небольшая металлическая {табличка}. ]]; tak = function(s) - return [[Вы поднимаете предмет - это небольшая металлическая табличка. Вдалеке вы слышите скрежет камней - дверь храма снова открыта. ]]; + return [[Вы поднимаете предмет. Это небольшая металлическая табличка. Вдалеке вы слышите скрежет камней -- дверь храма снова открыта. ]]; end; inv = [[Металлическая табличка, на которую нанесены странные обозначения. ]]; }; @@ -638,4 +708,106 @@ item_naethvjirr_key = obj { disp = "Ключ из древнего храма"; dsc = [[На пьедестале лежит небольшая прозрачная {коробочка}, внутрь которой заключена прямоугольная пластинка из неизвестного материала. ]]; inv = [[Небольшая прозрачная {коробочка}, внутрь которой заключена прямоугольная пластинка из неизвестного материала. Пластинка с обеих сторон покрыта тонкими металлическими нитями. ]]; +}; + +item_dynamo = obj { + var { + state = 0; + }; + nam = "item_dynamo"; + disp = function(s) + if s.state == 0 then + return "Ручная динамо-машина"; + else + return "Детали динамо-машины"; + end; + end; + dsc = [[На одном из столов лежит небольшая {коробочка} с вращающейся рукояткой. ]]; + inv = function(s) + if s.state == 0 then + return [[Небольшая динамо-машина с рукояткой и клеммами для подключения к электрической цепи. При вращении рукоятки вырабатывается электрический ток. ]]; + else + return [[Разобранная динамо-машина. ]]; + end; + end; + tak = [[Вы забираете динамо-машину. ]]; + used = function(s, o) + if s.state == 0 then + if o == item_toolbox then + if here().underwater then + return [[Вы не можете сделать это здесь. ]]; + else + s.state = 1; + return [[Вы разбираете динамо-машину. ]]; + end; + end; + elseif s.state == 1 then + if o == item_electric_lamp and item_electric_lamp.state == 1 then + if here().underwater then + return [[Вы не можете сделать это здесь. ]]; + else + item_electric_lamp.state = 2; + remove(s, pl); + return [[Вы собираете лампу с динамо-машиной в одном корпусе. Теперь батарею можно заряжать не разбирая лампу. Вождь навьяров будет рад такому подарку. ]] + end; + end; + end; + end; +}; + +item_electric_lamp = obj { + var { + state = 0; + }; + nam = "item_electric_lamp"; + disp = function(s) + if s.state == 0 then + return "Лампа"; + elseif s.state == 1 then + return "Разобранная лампа"; + elseif s.state == 2 then + return "Лампа с динамо-машиной"; + end; + end; + dsc = [[В шкафу лежат на полках {лампы}, предназначенные для монтирования на скафандры. ]]; + inv = function(s) + if s.state == 0 then + return "Электрическая лампа в герметичном корпусе, содержащем саму лампу и батарею для ее питания. Батареи хватит примерно на полчаса-час работы. "; + elseif s.state == 1 then + return "Детали электрической лампы: Корпус, лампа, батарея. "; + elseif s.state == 2 then + return "Электрическая лампа в герметичном корпусе, содержащем саму лампу, батарею для ее питания и динамо-машину. Батареи хватит примерно на полчаса-час работы. Покрутите рукоятку чтобы зарядить батарею. "; + end; + end; + tak = "Вы забираете одну из ламп. "; + used = function(s, o) + if s.state == 0 then + if o == item_toolbox then + if here().underwater then + return [[Вы не можете сделать это здесь. ]]; + else + s.state = 1; + return [[Вы разбираете лампу. ]]; + end; + end; + elseif s.state == 1 then + if o == item_dynamo and item_dynamo.state == 1 then + if here().underwater then + return [[Вы не можете сделать это здесь. ]]; + else + s.state = 2; + remove(item_dynamo, pl); + return [[Вы собираете лампу с динамо-машиной в одном корпусе. Теперь батарею можно заряжать не разбирая лампу. Вождь навьяров будет рад такому подарку. ]] + end; + end; + end; + end; +}; + +item_shark_tooth = obj { + nam = "item_shark_tooth"; + disp = "Зуб акулы"; + dsc = [[{Мертвая акула} лежит здесь, пронзенная вашим гарпуном. ]]; + inv = [[Острый зуб кровожадной акулы, жившей у храма Ираафаанотра. ]]; + tak = [[Вы вырываете у акулы из пасти зуб и забираете его себе. ]]; }; \ No newline at end of file diff --git a/journey_nleyyslanotrr.lua b/journey_nleyyslanotrr.lua --- a/journey_nleyyslanotrr.lua +++ b/journey_nleyyslanotrr.lua @@ -42,15 +42,15 @@ za_gate = dlg { end; phr = { {tag="learr"}; - {"[Остановить субмарину]И что нам делать?", [[ + {"[Остановить субмарину] И что нам делать?", [[ Леарр пожимает плечами: "Мы незаметными-пройти-должны. Сильнее-они так-как много-их". ]], code [[ psub("control"); ]]}; - {"[Продолжать движение]Попробуем преподать им урок", code = [[ walk("game_over_za_learr"); ]]}; + {"[Продолжать движение] Попробуем преподать им урок", code = [[ walk("game_over_za_learr"); ]]}; {tag="anna"}; - {"[Остановить субмарину]И что нам делать?", [[ + {"[Остановить субмарину] И что нам делать?", [[ Анна пожимает плечами: "Понятия не имею". ]], code [[ psub("control"); ]]}; - {"[Продолжать движение]Попробуем преподать им урок", code = [[ walk("game_over_za_anna"); ]]}; + {"[Продолжать движение] Попробуем преподать им урок", code = [[ walk("game_over_za_anna"); ]]}; {tag="control"}; {always = true, "[Проплыть над воротами]", code = [[ if (ArrayUtils.indexOf(pl.party, 'learr') ~= 0) then @@ -1210,7 +1210,6 @@ za_plaetlarr_fight = battlefield { win = "za_plaetlarr_victory"; underwater = true; entered = function(s) - --TODO prepend player associate - anna, learr, walter or jack if (char_learr.follow) then table.insert(s.obj, 2, za_cmbt_learr); s.plX = 3; @@ -1886,7 +1885,7 @@ za_phaetlarr_dlg = dlg { end; phr = { {tag="intro"}; - {"[Цветокод]Венаэданотр неблизко. Как ты оказался здесь?", + {"[Цветокод] Венаэданотр неблизко. Как ты оказался здесь?", function(s) if (char_learr.follow) then return [[ @@ -1904,7 +1903,7 @@ za_phaetlarr_dlg = dlg { psub("on_my_own"); end; ]]}; - {"[Цветокод]Мы ищем Лсэрианотр", + {"[Цветокод] Мы ищем Лсэрианотр", function(s) if (char_learr.follow) then return [[ @@ -1919,50 +1918,50 @@ za_phaetlarr_dlg = dlg { psub("on_my_own"); ]]}; {tag="on_my_own"}; - {"[Цветокод]Расскажи больше о них", [[ + {"[Цветокод] Расскажи больше о них", [[ "Что вы хотите знать?" ]], code [[ psub("more_on_them"); ]]}; - {"[Цветокод]Мы не враги тебе", [[ + {"[Цветокод] Мы не враги тебе", [[ "Почему я должен вам верить?" ]], code [[ psub("trust");]]}; {tag="more_on_them", empty = code [[ pret(); ]]}; - {"[Цветокод]Куда они направились?", [[ + {"[Цветокод] Куда они направились?", [[ "Они идут в Лсэрианотр. Их цель - пробудить Наэтвьирра. Блэк хочет с его помощью стать правителем мира. Дрейк хотел найти древние знания. Но сейчас он мертв". ]], code [[ pon("black");pon("drake"); ]]}; - {"[Цветокод]Сколько их было?", [[ + {"[Цветокод] Сколько их было?", [[ "Хевьяров было пятеро. Но на борту также были навьяры. Нас было много. Большинство из них свято верят в Наэтвьирра, способного возродить старый мир. Хотя Уильям Дрейк не одобрял этого, Адриан Блэк всячески поощрял это". ]]}; - {"[Цветокод]Почему они оставили тебя?", [[ + {"[Цветокод] Почему они оставили тебя?", [[ "Мы должны были взять ключ. Я, Дрейк и Блэк. Местные были против, но у нас не было выбора - ключ нужен для открытия врат Лсэрианотра. Мы пробрались в храм без проблем. Потом начались проблемы. Когда я взял ключ, я оказался в ловушке. К сожалению, у них не было инструментов, чтобы вытащить меня. Тогда я отдал ключ Дрейку и они ушли за инструментами. Они не вернулись. А потом пришли местные. От них я узнал, что Дрейк был убит". ]], code [[ pon("drake"); ]]}; - {tag="black", false, "[Цветокод]Теперь Блэк главный?", [[ + {tag="black", false, "[Цветокод] Теперь Блэк главный?", [[ "Да. У других хевьяров нет выбора, а навьяры на его корабле почти поклоняются ему". ]]}; - {tag="drake", false, "[Цветокод]Что случилось с Дрейком?", [[ + {tag="drake", false, "[Цветокод] Что случилось с Дрейком?", [[ Фаэтларр долго молчал. Наконец он собрался с силами и ответил: "Его убили местные во время их отступления с ключем". ]], code [[ pon("i_am_drake"); ]]}; - {tag="i_am_drake", false, "[Цветокод]Я Дэвид Дрэйк. Сын Уильяма", [[ + {tag="i_am_drake", false, "[Цветокод] Я Дэвид Дрэйк. Сын Уильяма", [[ Фаэтларр удивленно смотрит на вас: "Близких вьяров пути близки". ]], code [[ za_phaetlarr_dlg.state = za_phaetlarr_dlg.state + 1; poff("i_am_drake2"); ]]}; {tag="trust"}; - {"[Цветокод]Мы хотим остановить Блэка", [[Фаэтларр + {"[Цветокод] Мы хотим остановить Блэка", [[Фаэтларр Фаэтларр кажется сильно удивленным. Он долго молчит, обдумывая ваши слова. Наконец, навьяр кивает. ]], code [[ pon("need_help"); ]]}; - {tag="need_help", false, "[Цветокод]Нам нужна твоя помощь", [[ + {tag="need_help", false, "[Цветокод] Нам нужна твоя помощь", [[ Фаэтларр делает вам знак продолжать. ]], code [[ psub("not_sure"); ]]}; - {tag="i_am_drake2", "[Цветокод]Я сын Уильяма Дрейка", [[ + {tag="i_am_drake2", "[Цветокод] Я сын Уильяма Дрейка", [[ Фаэтларр удивленно смотрит на вас: "Близких вьяров пути близки". ]], code [[ za_phaetlarr_dlg.state = za_phaetlarr_dlg.state + 1; ]]}; {tag="not_sure"}; - {"[Цветокод]Нам нужно знать, где находится храм Нлейисланотра", [[ + {"[Цветокод] Нам нужно знать, где находится храм Нлейисланотра", [[ Фаэтларр уверенно говорит: "Вы спасли меня. Я помогу в ответ. Но я прошу вас еще об одном. Я хочу на борт вашего корабля". ]], code [[ pon('join'); pon('go'); ]]}; - {tag="join", false, "[Цветокод]Хорошо, мы согласны", code = [[ + {tag="join", false, "[Цветокод] Хорошо, мы согласны", code = [[ nleyyslanotrr_temple_found = true; walk("za_phaetlarr_final"); ]]}; - {tag="go", false, "[Цветокод]Что, если мы откажемся?", [[ + {tag="go", false, "[Цветокод] Что, если мы откажемся?", [[ "Я не скажу вам где храм, и каждый идет своей дорогой". ]]}; }; diff --git a/journey_venaedanotrr.lua b/journey_venaedanotrr.lua --- a/journey_venaedanotrr.lua +++ b/journey_venaedanotrr.lua @@ -53,9 +53,7 @@ item_ven_tablet = obj { inv = [[ Металлическая табличка с рисунком, изображающим навьяра и человека, пожимающих друг другу руки. ]]; - tak = [[ - Вы забираете табличку. - ]]; + tak = [[Вы забираете табличку. ]]; }; ven_obelisk = obj { @@ -99,9 +97,7 @@ ven_chieftain_dlg = dlg { end; phr = { {tag="first_meeting"}; - {"[Цветокод]Кто?", [[ - "Их много было. Среди них двое главных. Прежде чем я скажу больше, ответьте - зачем вы здесь?" - ]], code [[ psub('why_here'); ]]}; + {"[Цветокод]Кто?", [["Их много было. Среди них двое главных. Прежде чем я скажу больше, ответьте -- зачем вы здесь?"]], code [[ psub('why_here'); ]]}; {"[Цветокод]Куда они направились?", [[ "Дальше к своей цели. Но зачем вы здесь?" ]], code [[ psub('why_here'); ]]}; @@ -434,7 +430,7 @@ ven_tower_l2 = room { end ); }; } - + ven_tower_l3 = room { var { state = 0; diff --git a/leviathan.lua b/leviathan.lua --- a/leviathan.lua +++ b/leviathan.lua @@ -54,7 +54,7 @@ submarine_leviathan = obj { leviathan_airlock = darkroom { nam = "leviathan_airlock"; has_light = function(s) - return submarine_leviathan.power_on and submarine_leviathan.battery; + return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0; end; disp = "Левиафан, шлюз"; leviathan = true; @@ -65,6 +65,7 @@ leviathan_airlock = darkroom { kh_vroom("В кают-компанию", function(s) if (have(item_suit)) then remove(item_suit, pl); + me().has_light = false; end; return "leviathan_wardroom"; end, 1); @@ -78,6 +79,7 @@ leviathan_airlock = darkroom { put(item_suit, pl); elseif (have(item_suit)) then remove(item_suit, pl); + me().has_light = false; end; return where(submarine_leviathan); end; @@ -101,11 +103,11 @@ leviathan_trapdoor = obj { }; leviathan_captains_cabin = darkroom { - var { + --[[var { light_on = false; - }; + };]] has_light = function(s) - return s.light_on and submarine_leviathan.power_on and submarine_leviathan.battery; + return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0; end; nam = "leviathan_captains_cabin"; disp = "Левиафан, каюта капитана"; @@ -140,14 +142,14 @@ lev_capn_map = obj { return [[Карта Атлантического океана, судя по маркировке, принадлежащая компании "Вестхейвен Трансоушен". На ней изображено несколько объектов, имеющих значение для компании и, в частности, Атлантида. ]]; else atlantis_found = true; - return [[Карта Атлантического океана, судя по маркировке, принадлежащая компании "Вестхейвен Трансоушен". Вы внимательно осматриваете карту в поисках чего-нибудь необычного. Ваше внимание привлекает отметка "Атлантида", сделанная посреди океана. К сожалению, никаких пояснений у вас нет и единственное, что вы можете сделать - это попытаться добраться до этой точки. ]]; + return [[Карта Атлантического океана, судя по маркировке, принадлежащая компании "Вестхейвен Трансоушен". Вы внимательно осматриваете карту в поисках чего-нибудь необычного. Ваше внимание привлекает отметка "Атлантида", сделанная посреди океана. К сожалению, никаких пояснений у вас нет и единственное, что вы можете сделать это попытаться добраться до этой точки. ]]; end; end; }; lev_capn_chair = obj { nam = "lev_capn_chair"; - dsc = "Рядом со столом стоит {кресло}"; + dsc = "Рядом со столом стоит {кресло}. "; act = "Капитанское кресло. Удобное. "; }; @@ -197,7 +199,7 @@ lev_capn_ls = obj { leviathan_cabin_1 = darkroom { nam = "leviathan_cabin_1"; has_light = function(s) - return submarine_leviathan.power_on and submarine_leviathan.battery; + return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0; end; disp = "Левиафан, каюта №1"; leviathan = true; @@ -217,7 +219,7 @@ leviathan_cabin_1 = darkroom { leviathan_cabin_2 = darkroom { nam = "leviathan_cabin_2"; has_light = function(s) - return submarine_leviathan.power_on and submarine_leviathan.battery; + return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0; end; disp = "Левиафан, каюта №2"; leviathan = true; @@ -235,9 +237,12 @@ leviathan_cabin_2 = darkroom { }; leviathan_cabin_3 = darkroom { + var { + lock = false; + }; nam = "leviathan_cabin_3"; has_light = function(s) - return submarine_leviathan.power_on and submarine_leviathan.battery; + return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0; end; disp = "Левиафан, каюта №3"; leviathan = true; @@ -257,7 +262,7 @@ leviathan_cabin_3 = darkroom { leviathan_cabin_4 = darkroom { nam = "leviathan_cabin_4"; has_light = function(s) - return submarine_leviathan.power_on and submarine_leviathan.battery; + return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0; end; disp = "Левиафан, каюта №4"; leviathan = true; @@ -277,7 +282,7 @@ leviathan_cabin_4 = darkroom { leviathan_cabin_5 = darkroom { nam = "leviathan_cabin_5"; has_light = function(s) - return submarine_leviathan.power_on and submarine_leviathan.battery; + return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0; end; disp = "Левиафан, каюта №5"; leviathan = true; @@ -318,7 +323,7 @@ lev_cab_view = obj { leviathan_corridor = darkroom { nam = "leviathan_corridor"; has_light = function(s) - return submarine_leviathan.power_on and submarine_leviathan.battery; + return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0; end; disp = "Левиафан, коридор"; leviathan = true; @@ -329,7 +334,13 @@ leviathan_corridor = darkroom { kh_vroom("В каюту капитана", "leviathan_captains_cabin", 1); kh_vroom("В каюту №1", "leviathan_cabin_1", 1); kh_vroom("В каюту №2", "leviathan_cabin_2", 1); - kh_vroom("В каюту №3", "leviathan_cabin_3", 1); + kh_vroom("В каюту №3", function(s) + if not leviathan_cabin_3.lock then + return "leviathan_cabin_3"; + else + return false; + end; + end, 1); kh_vroom("В каюту №4", "leviathan_cabin_4", 1); kh_vroom("В каюту №5", "leviathan_cabin_5", 1); kh_vroom("В кают-компанию", "leviathan_wardroom", 1); @@ -345,7 +356,7 @@ leviathan_corridor = darkroom { leviathan_cargo_hold = darkroom { nam = "leviathan_cargo_hold"; has_light = function(s) - return submarine_leviathan.power_on and submarine_leviathan.battery; + return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0; end; disp = "Левиафан, грузовой отсек"; leviathan = true; @@ -369,7 +380,7 @@ leviathan_cargo_hold = darkroom { leviathan_wardroom = darkroom { nam = "leviathan_wardroom"; has_light = function(s) - return submarine_leviathan.power_on and submarine_leviathan.battery; + return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0; end; disp = "Левиафан, кают-компания"; leviathan = true; @@ -392,14 +403,13 @@ leviathan_wardroom = darkroom { leviathan_engines = darkroom { nam = "leviathan_engines"; has_light = function(s) - return submarine_leviathan.power_on and submarine_leviathan.battery; + return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0; end; disp = "Левиафан, машинное отделение"; leviathan = true; dsc_lit = [[Вы стоите на небольшой металлической платформе посреди достаточно большого помещения. Вверху и внизу тянутся какие-то трубы. Слева и справа от вас расположены механизмы, приводящие субмарину в движение. Единственная лампа, расположенная над входом, дает достаточно света, чтобы можно было осмотреться. ]]; dsc_halflit = [[В слабом свете лампы вы с трудом различаете очертания предметов. Вы стоите на небольшой металлической платформе посреди достаточно большого помещения. Вверху и внизу тянутся какие-то трубы. Слева и справа от вас расположены механизмы, приводящие субмарину в движение. ]]; dsc_dark = [[Машинный отсек Левиафана погружен во мрак и вы совсем ничего не видите. ]]; - -- Равномерный гул электрических двигателей сообщает о полной готовности субмарины. way = { kh_vroom("В коридор", "leviathan_corridor", 1); }; @@ -501,7 +511,7 @@ leviathan_breaker = obj { leviathan_lower_deck = darkroom { nam = "leviathan_lower_deck"; has_light = function(s) - return submarine_leviathan.power_on and submarine_leviathan.battery; + return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0; end; disp = "Левиафан, нижняя палуба"; leviathan = true; @@ -526,7 +536,7 @@ leviathan_lower_deck = darkroom { leviathan_life_support = darkroom { nam = "leviathan_life_support"; has_light = function(s) - return submarine_leviathan.power_on and submarine_leviathan.battery; + return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0; end; disp = "Левиафан, система жизнеобеспечения"; leviathan = true; @@ -562,7 +572,7 @@ leviathan_airregen = obj { if (submarine_leviathan.refit) then return [[{Установка регенерации воздуха} расположена в углу и, судя по показаниям приборов, отлично работает. ]]; else - return [[{Установка регенерации воздуха} сейчас находится в плачевном состоянии - часть деталей отсутствуют, еще некоторые поломаны. ]]; + return [[{Установка регенерации воздуха} сейчас находится в плачевном состоянии -- часть деталей отсутствуют, еще некоторые поломаны. ]]; end; end; seen_level = 1; @@ -571,8 +581,8 @@ leviathan_airregen = obj { leviathan_wheelhouse = darkroom { nam = "leviathan_wheelhouse"; has_light = function(s) - return submarine_leviathan.power_on and submarine_leviathan.battery; - end; + return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0; + end; disp = "Левиафан, рубка"; leviathan = true; dsc_lit = function(s) @@ -616,8 +626,6 @@ leviathan_wheelhouse = darkroom { }; }; -leviathan_controls = obj {nam = '1'} - leviathan_handwheel = obj { nam = "leviathan_handwheel"; dsc = [[Перед вами расположен {штурвал}. Рядом с ним расположено несколько рычагов. ]]; @@ -642,6 +650,19 @@ leviathan_handwheel = obj { end; }; +leviathan_airpump_timer = function() + if (submarine_leviathan.power_on and submarine_leviathan.airpump and submarine_leviathan.battery) then + submarine_leviathan.air_level = submarine_leviathan.air_level + 4000; + if (submarine_leviathan.air_level > 432000) then + submarine_leviathan.air_level = 432000; + timer:stop(); + lifeoff(leviathan_airpump_control); + p("Кислородные баллоны заполнены. "); + end; + end; + +end; + leviathan_airpump_control = obj { nam = "leviathan_airpump_control"; dsc = function(s) @@ -654,19 +675,24 @@ leviathan_airpump_control = obj { act = function(s) if (submarine_leviathan.airpump) then submarine_leviathan.airpump = false; + timer:stop(); + lifeoff(s); return [[Вы выключаете воздушные насосы. ]]; else - lifeon(s); submarine_leviathan.airpump = true; + game.timer = leviathan_airpump_timer; + timer:set(1000); + lifeon(s); return [[Вы включаете воздушные насосы. ]]; end; end; life = function(s) if (submarine_leviathan.power_on and submarine_leviathan.airpump and submarine_leviathan.battery) then - submarine_leviathan.air_level = submarine_leviathan.air_level + 4000; if (submarine_leviathan.air_level > 432000) then submarine_leviathan.air_level = 432000; - lifeoff(s); + p("Кислородные баллоны заполнены. "); + lifeoff(leviathan_airpump_control); + timer:stop(); end; if (here().leviathan) then pr([[Вы слышите гул работающих насосов. ]]); @@ -729,7 +755,6 @@ leviathan_wiring_used = function(s, o) if (submarine_leviathan.circuit_breaks == 0) then for i = 1, #leviathan_wiring do leviathan_wiring[i]:disable(); - -- TODO если игрок ТУП pr("Скорее всего, это был последний разрыв. Можно проверять. "); end; end; return [[Вы соединяете провода и заматываете их изолентой. ]]; @@ -837,19 +862,22 @@ leviathan_dlg = dlg { return [[Вы находитесь в рубке Левиафана перед штурвалом. Отсюда вы можете направиться куда-нибудь. Яркий свет электрических ламп освещает помещение. ]] .. (view); end; update_options = function() - leviathan_dlg:poff("atlantis", "old_temple", "iraaphaanotrr", "iraaphaanotrr_temple", "dypatreanotrr", "dypatreanotrr_temple"); + leviathan_dlg:poff("atlantis", "old_temple", "iraaphaanotrr", "iraaphaanotrr_temple", "dypatreanotrr", "dypatreanotrr_temple", "venaedanotrr"); if (atlantis_found and where(submarine_leviathan) ~= atl_aqua_leviathan_dock) then leviathan_dlg:pon("atlantis"); end; if (temple_found and where(submarine_leviathan) ~= iyh_far_from_entrance_foot) then leviathan_dlg:pon("old_temple"); end; - if (iraaphaanotrr_found and where(submarine_leviathan) ~= ctt_iraa_city) then + if (iraaphaanotrr_found and where(submarine_leviathan) ~= iraa_near_city_west) then leviathan_dlg:pon("iraaphaanotrr"); end; - if (dypatreanotrr_found and where(submarine_leviathan) ~= ctt_dyp_city) then + if (dypatreanotrr_found and where(submarine_leviathan) ~= dyp_center) then leviathan_dlg:pon("dypatreanotrr"); end; + if venaedanotrr_found then -- and where(submarine_leviathan) ~= dyp_center then + leviathan_dlg:pon("venaedanotrr"); + end; if (iraaphaanotrr_temple_found and where(submarine_leviathan) ~= ctt_iraa_near_temple) then leviathan_dlg:pon("iraaphaanotrr_temple"); end; @@ -864,7 +892,7 @@ leviathan_dlg = dlg { {tag="atlantis", always = "true", "Атлантида", nil, function() move(submarine_leviathan, "atl_aqua_leviathan_dock"); leviathan_dlg:update_options(); - walk(atl_entry); + walk(atl_entry); end}, {tag="old_temple", always = "true", "Старый храм", function() return "Вы прибыли в старый храм"; @@ -873,29 +901,31 @@ leviathan_dlg = dlg { leviathan_dlg:update_options(); end}, {tag="iraaphaanotrr", always = "true", "Ираафаанотр", function() - return "Вы прибыли в Ираафаанотр"; - end, function() - move(submarine_leviathan, "ctt_iraa_city"); - leviathan_dlg:update_options(); + move(submarine_leviathan, "iraa_near_city_west"); + leviathan_dlg:update_options(); + walk(iraa_entry); end}, {tag="iraaphaanotrr_temple", always = "true", "Храм Ираафаанотра", function() - return "Вы прибыли в храм Ираафаанотра"; - end, function() - move(submarine_leviathan, "ctt_iraa_near_temple"); - leviathan_dlg:update_options(); + move(submarine_leviathan, "iraa_temple_entrance"); + leviathan_dlg:update_options(); + walk(iraa_temple_entry); end}, {tag="dypatreanotrr", always = "true", "Дипатреанотр", function() - return "Вы прибыли в Дипатреанотр"; - end, function() - move(submarine_leviathan, "ctt_dyp_city"); - leviathan_dlg:update_options(); + move(submarine_leviathan, "dyp_center"); + leviathan_dlg:update_options(); + walk(dyp_entry); end}, {tag="dypatreanotrr_temple", always = "true", "Храм Дипатреанотра", function() - return "Вы прибыли в храм Дипатреанотра"; - end, function() move(submarine_leviathan, "dyp_temple_entrance"); - leviathan_dlg:update_options(); + leviathan_dlg:update_options(); + walk(dyp_temple_entry); end}, + {tag="venaedanotrr", always = "true", "Венаэданотр", function() + --[[move(submarine_leviathan, "dyp_temple_entrance"); + leviathan_dlg:update_options(); + walk(dyp_temple_entry);]] + walk("preview_unavailable_venaedanotrr"); + end}, {always = "true", "Назад", "", function() back(); end} @@ -928,7 +958,7 @@ phone_cabin = obj { elseif (#pl.party < 1) then return [[Здесь никого нет. ]]; else - walkin(phone_dlg); + walkin("phone_dlg"); end; end; seen_level = 1; @@ -937,14 +967,14 @@ phone_cabin = obj { phone_wardroom = obj { nam = "phone_wardroom"; disp = "Телефон"; - dsc = [[На столе, рядом с креслом командира установлен {телефонный аппарат} для связи в пределах субмарины. ]]; + dsc = [[На столе, рядом с креслом капитана установлен {телефонный аппарат} для связи в пределах субмарины. ]]; act = function(s) if (not submarine_leviathan.power_on or not submarine_leviathan.battery) then return [[Без электричества телефон не заработает. ]]; elseif (#pl.party < 1) then return [[Здесь никого нет. ]]; else - walkin(phone_dlg); + walkin("phone_dlg"); end; end; seen_level = 1; @@ -963,23 +993,30 @@ phone_dlg = dlg { end; phr = { { tag = "aikerjarr", always = true, "Аикерьярр", [[Аикерьярр не берет трубку. ]]}, - { tag = "phaetlarr", always = true, "Фаэтларр", code = [[walkin(phaetlarr_phone_dlg)]]}, - { tag = "learr", always = true, "Леарр", code = [[walkin(learr_phone_dlg)]]}, - { tag = "radcliffe", always = true, "Уолтер Рэдклифф", code = [[walkin(radcliffe_phone_dlg)]]}, - { tag = "wright", always = true, "Джек Райт", code = [[walkin(wright_phone_dlg)]]}, - { tag = "anna", always = true, "Анна Рэдклифф", code = [[walkin(anna_phone_dlg)]]}, + { tag = "phaetlarr", always = true, "Фаэтларр", code = [[walkin("phaetlarr_phone_dlg")]]}, + { tag = "learr", always = true, "Леарр", code = [[walkin("learr_phone_dlg")]]}, + { tag = "radcliffe", always = true, "Уолтер Рэдклифф", code = [[walkin("radcliffe_phone_dlg")]]}, + { tag = "wright", always = true, "Джек Райт", code = [[walkin("wright_phone_dlg")]]}, + { tag = "anna", always = true, "Анна Рэдклифф", code = [[walkin("anna_phone_dlg")]]}, { tag = "exit", always = true, "Положить трубку", code = [[back()]]} } }; +global { + lev_started = false; +}; + function leviathan_init() - put(submarine_leviathan:disable(), dock_mooring); - local i = 0; - while i < submarine_leviathan.circuit_breaks do - local t = rnd(#leviathan_wiring); - if (leviathan_wiring[t].state == 2) then - leviathan_wiring[t].state = 0; - i = i + 1; - end; - end; + if not lev_started then + lev_started = true; + put(submarine_leviathan:disable(), dock_mooring); + local i = 0; + while i < submarine_leviathan.circuit_breaks do + local t = rnd(#leviathan_wiring); + if (leviathan_wiring[t].state == 2) then + leviathan_wiring[t].state = 0; + i = i + 1; + end; + end; + end; end; \ No newline at end of file diff --git a/london.lua b/london.lua --- a/london.lua +++ b/london.lua @@ -8,9 +8,9 @@ char_captain = npc { dsc = [[На носу судна стоит {капитан} и курит трубку, задумчиво смотря на происходящее на палубе. ]]; phrases = { [[Капитан говорит: _"Завтра мы отправляемся обратно в Америку"_. ]], - [[Капитан задумчиво произносит, держа трубку в руке: _",,Северное сияние'' - лучший из кораблей, которыми я управлял"_. ]], + [[Капитан задумчиво произносит, держа трубку в руке: _",,Северное сияние'' -- лучший из кораблей, которыми я управлял"_. ]], [[Капитан оборачивается к вам: _"Как вам путешествие?"_ ]], - [[Капитан вынимает трубку изо рта и произносит: _"Этот пароход - гордость компании, но до знаменитой ,,Огненной стрелы'' ему далеко"_. ]], + [[Капитан вынимает трубку изо рта и произносит: _"Этот пароход -- гордость компании, но до знаменитой ,,Огненной стрелы'' ему далеко"_. ]], [[Окидывая взглядом порт, капитан вздыхает: _"Иногда я вспоминаю свою молодость на ,,Чайке'' и ,,Нефритовой королеве''"_. ]], [[Капитан задумчиво вертит трубку в руках. ]] }; @@ -24,7 +24,7 @@ char_first_mate = npc { [[Первый помощник не обращает на вас внимания. ]], [[Первый помощник спрашивает: "Как вам путешествие?" ]], [[Первый помощник сообщает: "Капитан раньше командовал ,,Чайкой''. Я не знаю, что стало с ней сейчас". ]], - [[Первый помощник с гордостью говорит: _",,Северное сияние'' - лучший корабль компании"_. ]], + [[Первый помощник с гордостью говорит: _",,Северное сияние'' -- лучший корабль компании"_. ]], [[Первый помощник сообщает: "Это был мой первый трансатлантический рейс в качестве первого помощника". ]] }; }; @@ -39,7 +39,7 @@ aurora_borealis = room { }; }; -london_mooring = cutscene("london_mooring", "Порт", [[Вместе с очередной группой пассажиров, вы сходите на берег. Толпа увлекает вас от причала и вы оказываетесь посреди порта. Вокруг снуют люди - пассажиры, грузчики, моряки. Со всех сторон доносится шум - голоса людей, гудки пароходов, ржание лошадей. ]], "port"); +london_mooring = cutscene("london_mooring", "Порт", [[Вместе с очередной группой пассажиров, вы сходите на берег. Толпа увлекает вас от причала и вы оказываетесь посреди порта. Вокруг снуют люди: пассажиры, грузчики, моряки. Со всех сторон доносится шум: голоса людей, гудки пароходов, ржание лошадей. ]], "port"); port = room { var { @@ -47,7 +47,7 @@ port = room { }; nam = "port"; disp = "Порт"; - dsc = [[Тяжелые тучи над головой, кажется, вот-вот разразятся дождем. Вокруг снуют люди - пассажиры, грузчики, моряки. Со всех сторон доносится шум - голоса людей, гудки пароходов, ржание лошадей. Вы стоите рядом с одним из складов. ]]; + dsc = [[Тяжелые тучи над головой, кажется, вот-вот разразятся дождем. Вокруг снуют люди: пассажиры, грузчики, моряки. Со всех сторон доносится шум: голоса людей, гудки пароходов, ржание лошадей. Вы стоите рядом с одним из складов. ]]; way = { vroom("На улицу", "port_street"); }; @@ -56,7 +56,7 @@ port = room { p("Сидящий у склада рабочий печально вздыхает: \"Выпить бы!\""); end; s.state = s.state + 1; - if (s.state == 3) then + if (s.state == 2) then s.state = 0; end; end; @@ -74,6 +74,33 @@ port_street = room { vroom("В пивную лавку", "ginshop"); }; dsc = [[Вы с трудом пробираетесь сквозь толпы людей, спешащих по своим делам. Из порта доносятся гудки пароходов. Со всех сторон доносится шум большого города. Тяжелые черные тучи медленно плывут по небу, грозя разразиться дождем в любую минуту. ]]; + obj = { + "dice_player" + }; +}; + +dice_player = npc { + nam = "char_dice_player"; + disp = "Игрок"; + dsc = [[У дверей пивной лавки сидит на раскладном стульчике хитрого вида {тип} в мятом старом костюме и не менее старой и мятой кепке. В руке он вертит обычную шестигранную игральную кость. ^]]; + dlg = "dice_player_dlg"; +}; + +dice_player_dlg = dlg { + nam = "dice_player_dlg"; + disp = "Игрок"; + entered = [[Человек обращается к вам: "Эй, сыграем?"]]; + phr = { + {always=true, "Во что играем?", [[Человек объясняет правила: "Играем в свинью. Все просто -- сперва мы бросаем кость. У кого выпадет больше -- тот ходит первым. Ходящий кидает кость пока не выкинет единицу или ему не надоест. Сколько выпадает на кости, стольок очков он прибавляет себе. Если выпадает единица -- все очки набранные за ход теряются. Ну так, что? Играем?"]]}; + {always=true, "Я сыграю. ", [[Человек потирает руки, спрашивая: "Сколько ставим?"]], code [[psub("stake");]]}; + {always=true, "Не в этот раз. ", code [[back();]]}; + {tag="stake"}; + {always=true, "5 шиллингов. ", code [[dice_game.stake = 5; walk("dice_game");]]}; + {always=true, "10 шиллингов. ", code [[dice_game.stake = 10; walk("dice_game");]]}; + {always=true, "25 шиллингов. ", code [[dice_game.stake = 25; walk("dice_game");]]}; + {always=true, "50 шиллингов. ", code [[dice_game.stake = 50; walk("dice_game");]]}; + {always=true, "Я передумал", code [[back();]]}; + }; }; char_worker = npc { @@ -103,75 +130,105 @@ char_worker_dlg = dlg { nam = "char_worker_dlg"; disp = "Портовый рабочий"; entered = function(s) + if have(item_bottle) then + pon("bottle"); + end; pjump('new'); return [[Недовольно посмотрев в вашу сторону, рабочий спрашивает: "Чего надо?" ]]; end; phr = { {tag='new'}, + {tag='bottle', false,"[Предложить рабочему бутылку] Могу я воспользоваться вашими инструментами?", [[Глаза рабочего округляются и он тянет руки к вожделенной бутылке: "Да без проблем, забирай". ]], code [[ + remove(item_bottle, pl); + char_worker.bought = true; + back(); + ]]}; {always=true, "Могу я воспользоваться вашими инструментами?", [[Рабочий отрывисто отвечает: "Нет", -- после чего отворачивается в другую сторону. ]], [[ pjump 'bribe_try' ]]}; {always=true, "Нет, ничего. ", [[Рабочий недовольно рычит: "Тогда отвали", -- после чего отворачивается в другую сторону. ]], [[ back(); ]]}; {tag='bribe_try'}; {always=true, "Могу я купить их у вас?", [[Рабочий снова повернулся к вам. Он с плохо скрываемым интересом спрашивает: "Сколько?" ]], [[ pjump 'bribing_20' ]]}; {always=true, "Нет, ничего. ", [[Рабочий недовольно рычит: "Тогда отвали", -- после чего отворачивается в другую сторону. ]], [[ back(); ]]}; {tag='bribing_20'}; - {"5 шиллингов?", [[ Рабочий усмехнулся: "Издеваешься?" ]]}; - {always=true, "10 шиллингов?", [[ - "15" - ]], [[pjump 'bribing_15']]}; - {always=true, "20 шиллингов?", function(s) - if (pl:pay(20)) then + {"10 шиллингов?", [[ Рабочий усмехнулся: "Издеваешься?" ]]}; + {always=true, "20 шиллингов?", [[ + "30" + ]], [[pjump 'bribing_30']]}; + {always=true, "40 шиллингов?", function(s) + if (pl:pay(40)) then char_worker.bought = true; return [[Рабочий довольно потирает руки: "Идет". ]]; else return [[Рабочий недовольно рычит: "Ты дурак?" ]]; end; end, [[ char_worker.bought = true; back();]]}; - {always=true, "30 шиллингов?", function(s) - if (pl:pay(30)) then + {always=true, "60 шиллингов?", function(s) + if (pl:pay(60)) then char_worker.bought = true; return [[Рабочий довольно потирает руки: "Идет". ]]; else return [[Рабочий недовольно рычит: "Ты дурак?" ]]; end; end, [[ char_worker.bought = true; back();]]}; - {tag='bribing_15'}; - {always=true, "10. ", [["14". ]], [[pjump 'bribing_14']]}; - {always=true, "11. ", [[ - "14" - ]], [[pjump 'bribing_14']]}; - {always=true, "12. ", [["14". ]], [[pjump 'bribing_14']]}; - {always=true, "13. ", [["14". ]], [[pjump 'bribing_14']]}; - {always=true, "14. ", function(s) - if (pl:pay(14)) then + {tag='bribing_30'}; + {always=true, "20. ", [[Рабочий потирает руки и предлагает: "28". ]], [[pjump 'bribing_28']]}; + {always=true, "22. ", [[Рабочий потирает руки и предлагает: "28". ]], [[pjump 'bribing_28']]}; + {always=true, "24. ", [[Рабочий потирает руки и предлагает: "28". ]], [[pjump 'bribing_28']]}; + {always=true, "26. ", [[Рабочий потирает руки и предлагает: "28". ]], [[pjump 'bribing_28']]}; + {always=true, "28. ", function(s) + if (pl:pay(28)) then char_worker.bought = true; return [[Рабочий довольно потирает руки: "Идет". ]]; else return [[Рабочий недовольно рычит: "Ты дурак?" ]]; end; - end, [[ char_worker.bought = true; back(); ]]}; - {tag='bribing_14'}; - {always=true, "10. ", [["13". ]], [[pjump 'bribing_13']]}; - {always=true, "11. ", [["13". ]], [[pjump 'bribing_13']]}; - {always=true, "12. ", [["13". ]], [[pjump 'bribing_13']]}; - {always=true, "13. ", function(s) - if (pl:pay(13)) then + end, [[ back(); ]]}; + {always=true, "Идет. ", function(s) + if (pl:pay(30)) then + char_worker.bought = true; + return [[Рабочий довольно потирает руки: "Идет". ]]; + else + return [[Рабочий недовольно рычит: "Ты дурак?" ]]; + end; + end, [[ back(); ]]}; + {tag='bribing_28'}; + {always=true, "20. ", [[Рабочий потирает руки и предлагает: "26". ]], [[pjump 'bribing_26']]}; + {always=true, "22. ", [[Рабочий потирает руки и предлагает: "26". ]], [[pjump 'bribing_26']]}; + {always=true, "24. ", [[Рабочий потирает руки и предлагает: "26". ]], [[pjump 'bribing_26']]}; + {always=true, "26. ", function(s) + if (pl:pay(26)) then char_worker.bought = true; return [[Рабочий довольно потирает руки: "Идет". ]]; else return [[Рабочий недовольно рычит: "Ты дурак?" ]]; end; - end, [[ char_worker.bought = true; back(); ]]}; - {tag='bribing_13'}; - {always=true, "10. ", [[Рабочий недовольно рычит: "Не хочешь -- не надо", -- после чего отворачивается в другую сторону. ]], [[ back(); ]]}; - {always=true, "11. ", [[Рабочий недовольно рычит: "Не хочешь -- не надо", -- после чего отворачивается в другую сторону. ]], [[ back(); ]]}; - {always=true, "12. ", function(s) - if (pl:pay(12)) then + end, [[ back(); ]]}; + {always=true, "Идет. ", function(s) + if (pl:pay(28)) then + char_worker.bought = true; + return [[Рабочий довольно потирает руки: "Идет". ]]; + else + return [[Рабочий недовольно рычит: "Ты дурак?" ]]; + end; + end, [[ back(); ]]}; + {tag='bribing_26'}; + {always=true, "20. ", [[Рабочий недовольно рычит: "Не хочешь -- не надо", -- после чего отворачивается в другую сторону. ]], [[ back(); ]]}; + {always=true, "22. ", [[Рабочий недовольно рычит: "Не хочешь -- не надо", -- после чего отворачивается в другую сторону. ]], [[ back(); ]]}; + {always=true, "24. ", function(s) + if (pl:pay(24)) then char_worker.bought = true; return [[Рабочий довольно потирает руки: "Идет". ]]; else return [[Рабочий недовольно рычит: "Ты дурак?" ]]; end; end, [[ back(); ]]}; + {always=true, "Идет. ", function(s) + if (pl:pay(26)) then + char_worker.bought = true; + return [[Рабочий довольно потирает руки: "Идет". ]]; + else + return [[Рабочий недовольно рычит: "Ты дурак?" ]]; + end; + end, [[ back(); ]]}; }; }; @@ -208,22 +265,22 @@ ginshop_trader_dlg = dlg { end; entered = [[Сняв очки, продавец смотрит на вас и спрашивает: "Добро пожаловать, господин. Чем могу помочь, господин?" ]]; phr = { - {always = true, "Бутылочку чего-нибудь покрепче, пожалуйста. ", [[Продавец кивает: "Сию секунду, господин". Почесав седую голову, он уходит в подвал, откуда возвращается через некоторое время с бутылкой. С громким стуком поставив бутылку на стол, он сообщает вам цену: "Это будет стоить вам 10 шиллингов, господин". ]], code = [[ psub("buy"); ]]}; + {always = true, "Бутылочку чего-нибудь покрепче, пожалуйста. ", [[Продавец кивает: "Сию секунду, господин". Почесав седую голову, он уходит в подвал, откуда возвращается через некоторое время с бутылкой. С громким стуком поставив бутылку на стол, он сообщает вам цену: "Это будет стоить вам 20 шиллингов, господин". ]], code = [[ psub("buy"); ]]}; {always = true, "Это все, спасибо. ", [[Продавец одевает очки обратно и прощается с вами: "Приходите еще, господин". ]], function() back(); end; }; {tag = "buy"}; {always = true, "Беру. ", function(s) - if (pl:pay(10)) then + if (pl:pay(20)) then ginshop_trader.bought = true; take(item_bottle); return [[Расплывшись в широкой улыбке продавец подмигивает вам и говорит: "Приходите еще, господин!" ]]; else - return [[Одевая очки обратно, продавец прячет бутылку под прилавок: "Простите, господин, но я сказал 10 шиллингов". ]]; + return [[Одевая очки обратно, продавец прячет бутылку под прилавок: "Простите, господин, но я сказал 20 шиллингов". ]]; end; end, code = [[ back(); ]]}; - {always = true, "Я передумал. ", [[Одевая очки обратно, продавец прячет бутылку под прилавок: "Подумайте еще, господин. Всего 10 шиллингов, господин!". ]], code = [[ pret(); ]]}; + {always = true, "Я передумал. ", [[Одевая очки обратно, продавец прячет бутылку под прилавок: "Подумайте еще, господин. Всего 20 шиллингов, господин!". ]], code = [[ pret(); ]]}; }; }; @@ -233,7 +290,7 @@ hotel_street = room { entered = function(s) move(char_coachman, here()); end; - dsc = [[Перед вами стоит старое двухэтажное здание гостиницы. Массивные деревянные двери открыты, приглашая вас внутрь. Покосившаяся вывеска над ними гласит: "Гостиница Старого Фрэнки". Большинство домов поблизости выглядят старыми и неухоженными - очевидно, в этом районе живут не самые богатые горожане. Вокруг тихо - лишь редкие пешеходы проходят мимо, не обращая на вас никакого внимания. По небу неспешно плывут тяжелые темные тучи. ]]; + dsc = [[Перед вами стоит старое двухэтажное здание гостиницы. Массивные деревянные двери открыты, приглашая вас внутрь. Покосившаяся вывеска над ними гласит: "Гостиница Старого Фрэнки". Большинство домов поблизости выглядят старыми и неухоженными -- очевидно, в этом районе живут не самые богатые горожане. Вокруг тихо -- лишь редкие пешеходы проходят мимо, не обращая на вас никакого внимания. По небу неспешно плывут тяжелые темные тучи. ]]; way = { vroom("В гостиницу", "hotel_hall"); }; @@ -331,7 +388,7 @@ hotel_room_7 = room { disp = "Гостиница, Комната №7"; dsc = [[Небольшая чистая комната. Деревянный столик в углу прикрыт белой скатертью. В углу стоит аккуратно сделанный стул. У окна расположена застеленная чистым бельем кровать. На скрипучем деревянном полу лежит старый коврик. ]]; obj = { - 'item_lamp', 'room_7_window' + 'item_lamp', 'room_7_window', 'money_hotel' }; way = { vroom("В коридор", "hotel_corridor_2"); @@ -342,8 +399,10 @@ hotel_room_7 = room { }; room_7_window = obj { + var { + state = 0; + }; nam = "room_7_window"; - state = 0; dsc = function(s) if (s.state == 0) then return "{Окно} закрыто плотными ставнями. "; @@ -449,21 +508,25 @@ starlight_first_dlg = dlg { left = function(s) remove(hotel_starlight, hotel_hall); path('В комнату №2', hotel_corridor_1):enable(); - put(hotel_corridor_2, "char_starlight_corridor"); + put("char_starlight_corridor", hotel_corridor_2); lifeon("char_starlight_corridor"); end; phr = { { "Мы встречались?", [[Человек пожимает плечами: "Скорее всего нет, мое имя Джозеф Старлайт. Вы случайно не родственник Уильяма Дрейка? Название Вестхейвен Трансоушен вам о чем-то говорит?" ]], code [[ pstart('have_we_met') ]]}; { "Кто вы?", [[Человек протягивает вам руку: "Джозеф Старлайт, адвокат. Название Вестхейвен Трансоушен вам о чем-то говорит?" ]], code [[ pstart('who_are_you') ]]}; { "Да, я Дэвид Дрейк.", [[Человек протягивает вам руку: "Здравствйте! Я Джозеф Старлайт. Вы сын Уильяма Дрейка? Название Вестхейвен Трансоушен вам о чем-нибудь говорит?" ]], code [[ pstart('i_am_drake') ]]}; - { "Простите, я спешу.", [[Человек огорченно вздыхает: "Простите". Подойдя к лестнице он оборачивается и говорит: "Мое имя - Джозеф Старлайт. Если хотите поговорить о Вестхейвен Трансоушен, зайдите ко мне в комнату 2 когда у вас будет время". ]], code [[ back(); ]]}; + { "Простите, я спешу.", [[Человек огорченно вздыхает: "Простите". Подойдя к лестнице он оборачивается и говорит: "Мое имя -- Джозеф Старлайт. Если хотите поговорить о Вестхейвен Трансоушен, зайдите ко мне в комнату 2 когда у вас будет время". ]], code [[ psub("end"); ]]}; {tag = "have_we_met"}; - { "Я сын Уильяма. Вы знаете что произошло?", [[Джозеф Старлайт чешет подбородок: "Немного. Это было, без сомнения, самое запутанное мое дело. Нам лучше поговорить у меня в комнате. Номер 2, на первом этаже". ]], code [[ back(); ]]}; + { "Я сын Уильяма. Вы знаете что произошло?", [[Джозеф Старлайт чешет подбородок: "Немного. Это было, без сомнения, самое запутанное мое дело. Нам лучше поговорить у меня в комнате. Номер 2, на первом этаже". ]], code [[ psub("end"); ]]}; { "Кто вы?", [[Джозеф Старлайт отвечает: "Адвокат. Я занимался делом о банкротстве Вестхейвен Трансоушен". ]], code [[ pstart('who_are_you') ]]}; {tag = "who_are_you"}; - { "Вы знаете что произошло?", [[Джозеф Старлайт чешет подбородок: "Немного. Это было, без сомнения, самое запутанное мое дело. Нам лучше поговорить у меня в комнате. Номер 2, на первом этаже". ]], code [[ back(); ]]}; + { "Вы знаете что произошло?", [[Джозеф Старлайт чешет подбородок: "Немного. Это было, без сомнения, самое запутанное мое дело. Нам лучше поговорить у меня в комнате. Номер 2, на первом этаже". ]], code [[ psub("end"); ]]}; {tag = "i_am_drake"}; - { "Да все верно. Это название компании моего отца. Вы знаете что произошло?", [[Джозеф Старлайт чешет подбородок: "Немного. Это было, без сомнения, самое запутанное мое дело. Нам лучше поговорить у меня в комнате. Номер 2, на первом этаже". ]], code [[ back(); ]]}; + { "Да все верно. Это название компании моего отца. Вы знаете что произошло?", [[Джозеф Старлайт чешет подбородок: "Немного. Это было, без сомнения, самое запутанное мое дело. Нам лучше поговорить у меня в комнате. Номер 2, на первом этаже". ]], code [[ psub("end"); ]]}; + {tag="end"}; + {"Хорошо, я зайду.", code [[ back(); ]]}; + {"Спасибо, но я спешу.", code [[ back(); ]]}; + {"Делать мне больше нечего.", code [[ back(); ]]}; }; }; @@ -516,26 +579,109 @@ starlight_dlg = dlg { end; char_starlight.forgetful = true; if (char_starlight.complete) then - return [[Джозеф оборачивается к вам и удивленно вскакивает со стула: "Как вы сюда попали?!" Он подходит к двери, открывает ее и снова закрывает, после чего запирает замок: "Опять забыл, да что ж такое?!" Потом он снова оборачивается к вам и говорит: "Господин Дрейк? Мое имя Джозеф ..." - внезапно он делает паузу, после чего продолжает: "Мы же вроде все обсудили с вами?" ]]; + return [[Джозеф оборачивается к вам и удивленно вскакивает со стула: "Как вы сюда попали?!" Он подходит к двери, открывает ее и снова закрывает, после чего запирает замок: "Опять забыл, да что ж такое?!" Потом он снова оборачивается к вам и говорит: "Господин Дрейк? Мое имя Джозеф ..." -- внезапно он делает паузу, после чего продолжает: "Мы же вроде все обсудили с вами?" ]]; else - return [[Джозеф оборачивается к вам и удивленно вскакивает со стула: "Как вы сюда попали?!" Он подходит к двери, открывает ее и снова закрывает, после чего запирает замок: "Опять забыл, да что ж такое?!" Потом он снова оборачивается к вам и говорит: "Господин Дрейк? Мое имя Джозеф Старлайт. Я думаю нам есть что обсудить касательно компании вашего отца". ]]; + return [[Джозеф оборачивается к вам и удивленно вскакивает со стула: "Как вы сюда попали?!" ^Он подходит к двери, открывает ее и снова закрывает, после чего запирает замок: "Опять забыл, да что ж такое?!" Потом он снова оборачивается к вам и говорит: "Господин Дрейк? Мое имя Джозеф Старлайт. Я думаю нам есть что обсудить касательно компании вашего отца". ]]; end; end; phr = { {1, "Вы уже представлялись. ", [[Джозеф Старлайт удивленно переспрашивает: "Да?! Что-то я этого не помню. Впрочем я такими мелочами себе голову не забиваю. Давайте к делу". ]]}; - {2, "Я вас слушаю. ", [[Джозеф Старлайт чешет подбородок: "Как я уже говорил, это дело было одним из самых запутанных. Судите сами: верхушка преуспевающей компании, внезапно исчезает, не оставив следов. Сначала мы предполагали, что это дело рук конкурентов - прибрать компанию к рукам, прикрыть или использовать их разработки. Однако, когда начали копать, выяснили, что к этому моменту Вестхейвен Трансоушен была не в лучшем состоянии -- отдел исследований закрыт, документы уничтожены, некоторые подразделения проданы. Говоря проще -- компания разваливалась". ]], code [[ pstart('father_bankrupt') ]]}; + {2, "Я вас слушаю. ", [[Джозеф Старлайт чешет подбородок: "Как я уже говорил, это дело было одним из самых запутанных. Судите сами: верхушка преуспевающей компании, внезапно исчезает, не оставив следов. Сначала мы предполагали, что это дело рук конкурентов -- прибрать компанию к рукам, прикрыть или использовать их разработки. Однако, когда начали копать, выяснили, что к этому моменту Вестхейвен Трансоушен была не в лучшем состоянии -- отдел исследований закрыт, документы уничтожены, некоторые подразделения проданы. Говоря проще -- компания разваливалась". ]], code [[ pstart('father_bankrupt') ]]}; {3, tag = 'father_bankrupt'}; {4, "Но зачем Уильяму разрушать собственную компанию? ", [[ - Джозеф Старлайт пожимает плечами: "Если бы я знал. Судя по той информации, что я о нем собрал, он весьма грамотный человек и у него были толковые помощники. Не знаю, сможете ли вы что-то сказать, господин Дрейк. Вам тогда сколько было? 10 лет?" Джозеф поправляет очки и продолжает: "У меня, конечно, есть предположение. Исследовательский отдел занимался чем-то принципиально новым, не связанным с основной деятельностью компании. Это подтверждают и отчеты компании - инженеры получали колоссальное финасирование, заказывалось огромное количество заказных деталей. Также компания зачем-то наняла нескольких видных ученых. В итоге, что бы там не планировалось - дело закончилось провалом и большими расходами, поэтому компанию пришлось закрыть. Чего я не понимаю - зачем он исчез? Любой банк бы выдал большой кредит такому человеку". ]], code [[ pstart('fathers_project') ]]}; + Джозеф Старлайт пожимает плечами: "Если бы я знал. Судя по той информации, что я о нем собрал, он весьма грамотный человек и у него были толковые помощники. Не знаю, сможете ли вы что-то сказать, господин Дрейк. Вам тогда сколько было? 10 лет?" Джозеф поправляет очки и продолжает: "У меня, конечно, есть предположение. Исследовательский отдел занимался чем-то принципиально новым, не связанным с основной деятельностью компании. Это подтверждают и отчеты компании -- инженеры получали колоссальное финасирование, заказывалось огромное количество заказных деталей. Также компания зачем-то наняла нескольких видных ученых. В итоге, что бы там не планировалось -- дело закончилось провалом и большими расходами, поэтому компанию пришлось закрыть. Чего я не понимаю -- зачем он исчез? Любой банк бы выдал большой кредит такому человеку". ]], code [[ pstart('fathers_project') ]]}; {5, tag = 'fathers_project', empty = code [[psub('final') ]]}; {6, "А может у него наоборот все получилось? ", [[Джозеф Старлайт пожимает плечами: "Тогда почему он исчез? Почему оставил семью? Еще больше вопросов". ]]}; {7, "Не думаю, что из-за простой неудачи мой отец мог бы бросить вообще все. ", [[Джозеф Старлайт чешет подбородок: "Я и не говорил, что это *простая* неудача. Судя по всему, проект был весьма перспективным. Настолько, что можно было рискнуть всем". ]]}; - {8, "И что это мог быть за проект? ", [[Джозеф Старлайт пожимает плечами: "Понятия не имею. Какое-то масштабное исследование, может быть экспедиция - это подтверждают и большое количество заказанных компанией деталей и нанятые ученые". ]], code [[ psub('submarine'); ]]}; + {8, "И что это мог быть за проект? ", [[Джозеф Старлайт пожимает плечами: "Понятия не имею. Какое-то масштабное исследование, может быть экспедиция -- это подтверждают и большое количество заказанных компанией деталей и нанятые ученые". ]], code [[ psub('submarine'); ]]}; {9, tag = 'submarine'}; {10, "Для чего это могло понадобиться Уильяму? ", [[Джозеф Старлайт снимает очки: "Понятия не имею. Совершенно". ]]}; {11, "Это бы объяснило куда он исчез. ", [[Джозеф Старлайт чешет голову: "Может быть, только никаких документов не сохранилось. Впрочем они очень много денег на какие-то секретные проекты тратили последнее время". ]]}; {13, tag = 'final'}; - {14, always = true, "Вы можете посмотреть эти бумаги? Вам знакомы эти места? [Показать Джозефу документы отца]", [["Так вот зачем вы здесь! Я догадывался. Давайте ваши бумаги сюда", - Джозеф выхватывает документы из ваших рук и бегло просматривает их. Почесав голову, он говорит: "Одно из этих мест я знаю". Он сообщает вам адрес склада 18. ]], code [[ warehouse18_found = true; poff(14); ]]}; + {14, always = true, "Вы можете посмотреть эти бумаги? Вам знакомы эти места? [Показать Джозефу документы отца]", [["Так вот зачем вы здесь! Я догадывался. Давайте ваши бумаги сюда", -- Джозеф выхватывает документы из ваших рук и бегло просматривает их. Почесав голову, он говорит: "Одно из этих мест я знаю". Он сообщает вам адрес склада 18. ]], code [[ warehouse18_found = true; poff(14); ]]}; {15, always = true, "Мне пора. ", [[Джозеф Старлайт отворачивается к столу: "До встречи". ]], code [[ back(); ]]}; }; +}; + +--[[ + Банк +]] +london_bank_street = room { + nam = "london_bank_street"; + disp = "Улица"; + dsc = [[На улице перед банком людно -- прохожие спешат по своим делам, то и дело натыкаясь друг на друга и разбегаясь в разные стороны. Среди этой суеты возвышается, словно игнорируя ее, здание, высокое и широкое, с резными колоннами, мраморными ступенями, ведущими к широким и тяжелым дверям из красного дерева и позолоченной табличкой над входом, гласящей, что перед лицезреющими это ни что иное, как банк. ]]; + way = { + kh_vroom("В банк", "london_bank"); + }; + entered = function(s) + move(char_coachman, here()); + end; +}; + +london_bank = room { + nam = "london_bank"; + disp = "Банк"; + dsc = [[Внутри банка прохладно и светло. ]]; + way = { + kh_vroom("На улицу", "london_bank_street"); + }; + obj = { + "bank_clerks"; + "bank_guard"; + }; +}; + +bank_clerks = npc { + nam = "bank_clerks"; + dsc = [[Людей внутри почти нет, не считая нескольких скучающих за мраморной стойкой {клерков} ]]; + dlg = "bank_clerks_dlg"; +}; + +bank_clerks_dlg = dlg { + nam = "bank_clerks_dlg"; + disp = "Клерк"; + entered = [[Вы подходите к одному из клерков. Молодой человек в аккуратном пиджаке и галстуке уставляет свой взор на вас и спрашивает: "Чем я могу помочь?"]]; + phr = { + {"[Передать сберкнижку] Я хотел бы снять деньги со своего счета. ", [[Вы протягиваете клерку сберкнижку. Он просматривает ее и отвечает: "Конечно. Минутку". Он уходит из зала и через несколько минут возвращается с мешочком монет. ]], code [[ remove(item_bankbook, pl); pl.money = pl.money + 150; ]]}; + {always=true; "Я вернусь позже. ", [[Клерк возвращается к своим делам. ]], code [[ back(); ]]} + }; +}; + +bank_guard = npc { + nam = "bank_guard"; + dsc = "и одинокого {охранника}, застывшего у входа."; + phrases = { + [[Охранник вежливо приветствует вас: "Добро пожаловать, господин". ]]; + [[Охранник пожимает плечами: "Я ничем не могу вам помочь". ]]; + [[Охранник зевает. ]]; + [[Охранник задумчиво чешет подбородок. ]]; + }; +}; + +money_dock = obj { + nam = "money_dock"; + dsc = "Среди куч мусора вы видите что-то {блестящее}. "; + act = function(s) + remove(money_dock, here()); + return "Пять шиллингов!"; + end; +}; + +money_wh32 = obj { + nam = "money_wh32"; + seen_level=1; + dsc = "На столе лежат несколько {монет}. "; + act = function(s) + remove(money_wh32, here()); + return "Пять шиллингов!"; + end; +}; + +money_hotel = obj { + nam = "money_hotel"; + dsc = "Под кроватью вы замечаете {что-то блестящее}. "; + act = function(s) + remove(money_hotel, here()); + return "Пять шиллингов!"; + end; }; \ No newline at end of file diff --git a/london_checkers.lua b/london_checkers.lua new file mode 100644 --- /dev/null +++ b/london_checkers.lua @@ -0,0 +1,375 @@ +checkers_game = room { + var { + board = {}; + selected = 0; + select_lock = false; + }; + nam = "checkers_game"; + nosave = true; + noautosave = true; + forcedsc = true; + randomness = 15; + depth = 6; + cutoff_lo = -3; + cutoff_hi = 3; + draw_board = function(board) + rval = { + {0,0,0,0,0,0,0,0}; + {0,0,0,0,0,0,0,0}; + {0,0,0,0,0,0,0,0}; + {0,0,0,0,0,0,0,0}; + {0,0,0,0,0,0,0,0}; + {0,0,0,0,0,0,0,0}; + {0,0,0,0,0,0,0,0}; + {0,0,0,0,0,0,0,0}; + }; + + for i = 1, #board do + if board[i][3] then + if board[i][4] then + rval[board[i][1]][board[i][2]] = 3; + else + rval[board[i][1]][board[i][2]] = 1; + end; + else + if board[i][4] then + rval[board[i][1]][board[i][2]] = 4; + else + rval[board[i][1]][board[i][2]] = 2; + end; + end; + end; + + return rval; + end; + calc_take = function(s, x, y, w, q, map) + local rval = {}; + local r = nil; + if w then + -- белый рубит черного - рубит вверх + if (map[x - 1][y - 1] == 2 or map[x - 1][y - 1] == 4) + and map[x - 2][y - 2] == 0 and x - 2 > 0 and y - 2 > 0 then + mcopy = deepcopy(map); + r = s:calc_take(x - 2, y - 2, w, q or y == 2, mcopy); + if #r == 0 then + rval[#rval + 1] = {1, {{x-1, y-1}}, q or y == 2, x-2, y-2}; + end; + for i = 1, #r do + r[i][1] = r[i][1] + 1; + r[i][2][#r[i][2] + 1] = {x-1, y-1}; + r[i][3] = r[i][3] or q or y == 2; + rval[#rval + 1] = r[i] + end; + end; + if (map[x + 1][y - 1] == 2 or map[x + 1][y - 1] == 4) + and map[x + 2][y - 2] == 0 and x + 2 < 9 and y - 2 > 0 then + mcopy = deepcopy(map); + r = s:calc_take(x + 2, y - 2, w, q or y == 2, mcopy); + if #r == 0 then + rval[#rval + 1] = {1, {{x+1, y-1}}, q or y == 2, x+2, y-2}; + end; + for i = 1, #r do + r[i][1] = r[i][1] + 1; + r[i][2][#r[i][2] + 1] = {x+1, y-1}; + r[i][3] = r[i][3] or q or y == 2; + rval[#rval + 1] = r[i] + end; + end; + --Дамка может рубить и вниз + if q and (map[x - 1][y + 1] == 2 or map[x - 1][y + 1] == 4) + and map[x - 2][y + 2] == 0 and x - 2 > 0 and y + 2 < 9 then + mcopy = deepcopy(map); + r = s:calc_take(x - 2, y + 2, w, q, mcopy); + if #r == 0 then + rval[#rval + 1] = {1, {{x-1, y+1}}, q, x-2, y+2}; + end; + for i = 1, #r do + r[i][1] = r[i][1] + 1; + r[i][2][#r[i][2] + 1] = {x-1, y+1}; + r[i][3] = r[i][3] or q; + rval[#rval + 1] = r[i]; + end; + end; + if q and (map[x + 1][y + 1] == 2 or map[x + 1][y + 1] == 4) + and map[x + 2][y + 2] == 0 and x + 2 < 9 and y + 2 < 9 then + mcopy = deepcopy(map); + r = s:calc_take(x + 2, y + 2, w, q, mcopy); + if #r == 0 then + rval[#rval + 1] = {1, {{x+1, y+1}}, q, x+2, y+2}; + end; + for i = 1, #r do + r[i][1] = r[i][1] + 1; + r[i][2][#r[i][2] + 1] = {x+1, y+1}; + r[i][3] = r[i][3] or q; + rval[#rval + 1] = r[i]; + end; + end; + else + --черный рубит белого - рубит вниз + if (map[x - 1][y + 1] == 1 or map[x - 1][y + 1] == 3) + and map[x - 2][y + 2] == 0 and x - 2 > 0 and y + 2 < 9 then + mcopy = deepcopy(map); + r = s:calc_take(x - 2, y + 2, w, q or y == 6, mcopy); + if #r == 0 then + rval[#rval + 1] = {1, {{x-1, y+1}}, q or y == 6, x-2, y+2}; + end; + for i = 1, #r do + r[i][1] = r[i][1] + 1; + r[i][2][#r[i][2] + 1] = {x-1, y+1}; + r[i][3] = r[i][3] or q or y == 6; + rval[#rval + 1] = r[i] + end; + end; + if (map[x + 1][y + 1] == 1 or map[x + 1][y + 1] == 3) + and map[x + 2][y + 2] == 0 and x + 2 < 9 and y + 2 < 9 then + mcopy = deepcopy(map); + r = s:calc_take(x + 2, y + 2, w, q or y == 6, mcopy); + if #r == 0 then + rval[#rval + 1] = {1, {{x+1, y+1}}, q or y == 6, x+2, y+2}; + end; + for i = 1, #r do + r[i][1] = r[i][1] + 1; + r[i][2][#r[i][2] + 1] = {x+1, y+1}; + r[i][3] = r[i][3] or q or y == 2; + rval[#rval + 1] = r[i] + end; + end; + --Дамка может рубить и вниз + if q and (map[x - 1][y - 1] == 1 or map[x - 1][y - 1] == 3) + and map[x - 2][y - 2] == 0 and x - 2 > 0 and y - 2 > 0 then + mcopy = deepcopy(map); + r = s:calc_take(x - 2, y - 2, w, q, mcopy); + if #r == 0 then + rval[#rval + 1] = {1, {{x-1, y-1}}, q or y == 6, x-2, y-2}; + end; + for i = 1, #r do + r[i][1] = r[i][1] + 1; + r[i][2][#r[i][2] + 1] = {x-1, y-1}; + r[i][3] = r[i][3] or q; + rval[#rval + 1] = r[i]; + end; + end; + if q and (map[x + 1][y - 1] == 1 or map[x + 1][y - 1] == 3) + and map[x + 2][y - 2] == 0 and x + 2 < 9 and y - 2 > 0 then + mcopy = deepcopy(map); + r = s:calc_take(x + 2, y - 2, w, q, mcopy); + if #r == 0 then + rval[#rval + 1] = {1, {{x+1, y-1}}, q or y == 6, x+2, y-2}; + end; + for i = 1, #r do + r[i][1] = r[i][1] + 1; + r[i][2][#r[i][2] + 1] = {x+1, y-1}; + r[i][3] = r[i][3] or q; + rval[#rval + 1] = r[i]; + end; + end; + end; + return rval; + end; + calc_turn = function(s, d, w, board) + if d > s.depth then + return nil, 0; + end; + local cost = 0; + local turns = {}; + local bmap = s.draw_board(board); + local takes = false; + for i = 1, #board do + --Рубка обязательна, поэтому сперва проверяем рубки + if board[i][3] == w then + -- своя фигура. Проверяем рубки + local r = s:calc_take(board[i][1], board[i][2], w, board[i][4], bmap); + if #r > 0 then + takes = true; + for j = 1, #r do + --Восстанавливаем состояние поля после рубки и уходим глубже + local bcopy = deepcopy(board); + for k = #bcopy, 1, -1 do + for l = 1, #r[j][2] do + if r[j][2][1] == bcopy[k][2] and r[j][2][1] == bcopy[k][2] then + table.remove(bcopy, k); + break; + end; + end; + end; + local rr, pts = s:calc_turn(d + 1, not w, bcopy); + turns[#turns + 1] = {board[i][1], board[i][2], r[j][4], r[j][5], r[j][2], r[j][1] - pts}; + end; + end; + end; + end; + -- Если была рубка, не обрабатываем дальше + if takes then + table.sort(turns, function(a,b) + return a[6] > b[6]; + end); + return turns[0], turns[0][6]; + end; + for i = 1, #board do + if board[i][3] == w then + --Проверяем ходы + if q or w then + --белая или дамка - ходит вверх + if bmap[board[i][1] - 1][board[i][2] - 1] == 0 then + local bcopy = deepcopy(board); + bcopy[i][1] = bcopy[i][1] - 1; + bcopy[i][2] = bcopy[i][2] - 1; + local rr, pts = s:calc_turn(d + 1, not w, bcopy); + turns[#turns + 1] = {board[i][1], board[i][2], bcopy[i][1], bcopy[i][2], nil, - pts}; + end; + if bmap[board[i][1] - 1][board[i][2] + 1] == 0 then + local bcopy = deepcopy(board); + bcopy[i][1] = bcopy[i][1] - 1; + bcopy[i][2] = bcopy[i][2] + 1; + local rr, pts = s:calc_turn(d + 1, not w, bcopy); + turns[#turns + 1] = {board[i][1], board[i][2], bcopy[i][1], bcopy[i][2], nil, - pts}; + end; + end; + if q or not w then + --черная или дамка - ходит вниз + if bmap[board[i][1] + 1][board[i][2] - 1] == 0 then + local bcopy = deepcopy(board); + bcopy[i][1] = bcopy[i][1] + 1; + bcopy[i][2] = bcopy[i][2] - 1; + local rr, pts = s:calc_turn(d + 1, not w, bcopy); + turns[#turns + 1] = {board[i][1], board[i][2], bcopy[i][1], bcopy[i][2], nil, - pts}; + end; + if bmap[board[i][1] + 1][board[i][2] + 1] == 0 then + local bcopy = deepcopy(board); + bcopy[i][1] = bcopy[i][1] + 1; + bcopy[i][2] = bcopy[i][2] + 1; + local rr, pts = s:calc_turn(d + 1, not w, bcopy); + turns[#turns + 1] = {board[i][1], board[i][2], bcopy[i][1], bcopy[i][2], nil, - pts}; + end; + end; + end; + end; + + table.sort(turns, function(a,b) + return a[6] > b[6]; + end); + return turns[0], turns[0][6]; + end; + enemy_turn = function(s) + end; + click = function(s, x, y) + x = math.floor((x - 4) / 24) + 1; + y = math.floor((y - 4) / 24) + 1; + if x > 0 and x < 9 and y > 0 and y < 9 then + for i = 1,#s.board do + if s.board[i][1] == x and s.board[i][2] == y then + if s.board[i][3] then + s.selected = i; + walkin(here()); + return; + else + --Может рубим? + if s.selected > 0 then + print("q"); + local dx = x - s.board[s.selected][1]; + local dy = y - s.board[s.selected][2]; + if s.board[s.selected][4] then + if math.abs(dx) == 1 and math.abs(dy) == 1 then + s.board[s.selected][1] = s.board[s.selected][1] + dx * 2; + s.board[s.selected][2] = s.board[s.selected][2] + dy * 2; + s.selected = 0; + walkin(here()); + return; + end; + else + if math.abs(dx) == 1 and dy == -1 then + s.board[s.selected][1] = s.board[s.selected][1] + dx * 2; + s.board[s.selected][2] = s.board[s.selected][2] + dy * 2; + s.selected = 0; + walkin(here()); + return; + end; + end; + end; + return; + end; + end; + end; + + if s.selected > 0 then + local dx = x - s.board[s.selected][1]; + local dy = y - s.board[s.selected][2]; + print(dx, dy); + if s.board[s.selected][4] then + if math.abs(dx) == 1 and math.abs(dy) == 1 then + s.board[s.selected][1] = x; + s.board[s.selected][2] = y; + s.selected = 0; + walkin(here()); + return; + end; + else + if math.abs(dx) == 1 and dy == -1 then + s.board[s.selected][1] = x; + s.board[s.selected][2] = y; + print(s.board[s.selected][1], s.board[s.selected][2]) + s.selected = 0; + walkin(here()); + return; + end; + end; + end; + s.selected = 0; + + + end; + walkin(here()); + end; + disp = "Шашки"; + reset = function(s) + s.board = { + {2, 3, false, false}; + {4, 3, false, false}; + {6, 3, false, false}; + {8, 3, false, false}; + + --{1, 2, false, false}; + --{3, 2, false, false}; + --{5, 2, false, false}; + --{7, 2, false, false}; + + {2, 5, false, false}; + {4, 5, false, false}; + {6, 5, false, false}; + {8, 5, false, false}; + + {1, 6, true, false}; + {3, 6, true, false}; + {5, 6, true, false}; + {7, 6, true, false}; + + {2, 7, true, false}; + {4, 7, true, false}; + {6, 7, true, false}; + {8, 7, true, false}; + + {1, 8, true, false}; + {3, 8, true, false}; + {5, 8, true, false}; + {7, 8, true, false}; + }; + end; + pic = function(s) + local rval = "images/checkerboard.png"; + if s.selected > 0 then + rval = rval .. [[;box:24x24,red,32@]] .. tostring(s.board[s.selected][1] * 24 - 20) .. "," .. tostring(s.board[s.selected][2] * 24 - 20); + end; + for i = 1, #s.board do + if s.board[i][3] and s.board[i][4] then + rval = rval .. [[;images/checkerwhiteq.png@]] .. tostring(s.board[i][1] * 24 - 20) .. "," .. tostring(s.board[i][2] * 24 - 20); + elseif not s.board[i][3] and s.board[i][4] then + rval = rval .. [[;images/checkerblackq.png@]] .. tostring(s.board[i][1] * 24 - 20) .. "," .. tostring(s.board[i][2] * 24 - 20); + elseif s.board[i][3] and not s.board[i][4] then + rval = rval .. [[;images/checkerwhite.png@]] .. tostring(s.board[i][1] * 24 - 20) .. "," .. tostring(s.board[i][2] * 24 - 20); + elseif not s.board[i][3] and not s.board[i][4] then + rval = rval .. [[;images/checkerblack.png@]] .. tostring(s.board[i][1] * 24 - 20) .. "," .. tostring(s.board[i][2] * 24 - 20); + end; + end; + return rval; + end; +}; \ No newline at end of file diff --git a/london_dice.lua b/london_dice.lua new file mode 100644 --- /dev/null +++ b/london_dice.lua @@ -0,0 +1,167 @@ +dice_game = room { + var { + player_pts = 0; + current_pts = 0; + enemy_pts = 0; + first = false; + state = 0; + }; + nosave = true; + noautosave = true; + forcedsc = true; + hideinv = true; + nam = "dice_game"; + disp = "Игра в кости"; + win = "dice_game_win"; + lose = "dice_game_lose"; + draw = "dice_game_draw"; + entered = function(s) + s.player_pts = 0; + s.enemy_pts = 0; + s.current_pts = 0; + s.state = 0; + dg_pass:disable(); + dg_roll:enable(); + end; + dsc = function(s) + if s.state == 0 then + return [[Определяем очередность ходов. Бросайте кость. ]]; + else + return([[Очки:^Вы:]] .. s.player_pts .. [[^Соперник:]] .. s.enemy_pts .. [[^Текущий раунд:]] .. s.current_pts); + end; + end; + obj = { + "dg_roll"; + "dg_pass"; + }; + player_turn = function(s) + if s.turn and (s.player_pts >= 100 or s.enemy_pts >= 100) then + timer:stop(); + game.timer = nil; + if s.player_pts >= 100 and s.enemy_pts >= 100 then + walk(s.draw); + elseif s.player_pts >= 100 then + walk(s.win); + else + walk(s.lose); + end; + return; + end; + s.state = 1; + s.current_pts = 0; + timer:stop(); + game.timer = nil; + dg_roll:enable(); + dg_pass:enable(); + end; + enemy_turn = function(s) + if not s.turn and (s.player_pts >= 100 or s.enemy_pts >= 100) then + timer:stop(); + game.timer = nil; + if s.player_pts >= 100 and s.enemy_pts >= 100 then + walk(s.draw); + elseif s.player_pts >= 100 then + walk(s.win); + else + walk(s.lose); + end; + return; + end; + s.state = 1; + s.current_pts = 0; + game.timer = s.make_enemy_turn; + timer:set(2500); + dg_roll:disable(); + dg_pass:disable(); + end; + make_enemy_turn = function() + local s = dice_game; + local pl = rnd(6); + pr [[Соперник бросает кости. ]]; + pr([[Результат броска: ]] .. tostring(pl) .. [[.^]]); + if pl == 1 then + pr [[Ваш соперник теряет ход. ]]; + s:player_turn(); + else + s.current_pts = s.current_pts + pl; + local r = rnd(10); + if r == 1 then + s.enemy_pts = s.enemy_pts + s.current_pts; + pr [[Соперник передает вам ход. ]]; + s:player_turn(); + elseif r == 2 then + pr [[Соперник продолжает игру. ]]; + elseif s.enemy_pts > s.player_pts then + if s.enemy_pts + s.current_pts >= 100 then + s.enemy_pts = s.enemy_pts + s.current_pts; + pr [[Соперник передает вам ход. ]]; + s:player_turn(); + else + pr [[Соперник продолжает игру. ]]; + end; + else + if s.enemy_pts + s.current_pts >= s.player_pts then + s.enemy_pts = s.enemy_pts + s.current_pts; + pr [[Соперник передает вам ход. ]]; + s:player_turn(); + else + pr [[Соперник продолжает игру. ]]; + end; + end; + end; + end; +}; + +dg_roll = obj { + nam = "dg_roll"; + dsc = [[{Бросить кость. }^]]; + act = function(s) + if dice_game.state == 0 then + local pl = rnd(6); + local en = rnd(6); + pr([[У вас выпало ]] .. tostring(pl) .. [[ очков. У соперника -- ]] .. tostring(en) .. [[. ]]); + if pl > en then + pr [[Вы ходите первым. Бросайте кость. ]]; + dice_game.first = true; + dice_game:player_turn(); + elseif pl < en then + pr [[Ваш соперник ходит первым. ]]; + dice_game.first = false; + dice_game:enemy_turn(); + else + pr [[Результаты совпали. Повторите бросок. ]]; + end; + else + local pl = rnd(6); + pr([[Результат броска: ]] .. tostring(pl) .. [[.^]]); + if pl == 1 then + pr [[Вы теряете набранные очки. ]]; + dice_game:enemy_turn(); + else + dice_game.current_pts = dice_game.current_pts + pl; + end; + end; + end; +}; + +dg_pass = obj { + nam = "dg_pass"; + dsc = [[{Передать ход. }^]]; + act = function(s) + dice_game.player_pts = dice_game.player_pts + dice_game.current_pts; + dice_game.current_pts = 0; + dice_game:enemy_turn(); + return [[]]; + end; +}; + +dice_game_draw = cutscene("dice_game_draw", "Игра в кости", [[Человек разводит руками: "Ничья. Сыграем еще раз?"]], "port_street"); + + +dice_game_win = cutscene("dice_game_win", "Игра в кости", [[Человек вручает вам сумму выигрыша: "Поздравляю, вы выиграли! Сыграем еще?"]], "port_street", function() + pl.money = pl.money + dice_game.stake; +end); + +dice_game_lose = cutscene("dice_game_lose", "Игра в кости", [[Человек довольно потирает руки и прячет в карман ваши деньги: "В следующий раз вам повезет. Может сыграем еще?"]], "port_street", function() + pl.money = pl.money - dice_game.stake; +end); \ No newline at end of file diff --git a/lseryanotrr_intro.lua b/lseryanotrr_intro.lua --- a/lseryanotrr_intro.lua +++ b/lseryanotrr_intro.lua @@ -89,7 +89,7 @@ lse_entered2 = cutscene("lse_entered2", "Левиафан, рубка", function(s) end, "lse_entered3"); lse_entered3 = cutscene("lse_entered3", "Левиафан, рубка", [[ - Вашему удивлению нет предела, когда яркие зеленые огни указывают вам на открывающийся проем в стене Лсэрианотра - древний город словно приглашает вас внутрь. Не раздумывая, вы направляетесь туда. Части стены словно раздвигаются, пропуская вас внутрь. Вы аккуратно проплываете в открывшийся проход и оказываетесь в огромном хорошо освещенном помещении. Стены, пол и потолок его излучают мягкий белый свет. Но вас удивляет, что зал заполнен водой лишь наполовину и в верхней части вас уже ждет группа навьяров. Среди них выделяется один стоящий в центре. Вместо простого одеяния сшитого из водорослей, он одет в человеческие рубашку и брюки! + Вашему удивлению нет предела, когда яркие зеленые огни указывают вам на открывающийся проем в стене Лсэрианотра -- древний город словно приглашает вас внутрь. Не раздумывая, вы направляетесь туда. Части стены словно раздвигаются, пропуская вас внутрь. Вы аккуратно проплываете в открывшийся проход и оказываетесь в огромном хорошо освещенном помещении. Стены, пол и потолок его излучают мягкий белый свет. Но вас удивляет, что зал заполнен водой лишь наполовину и в верхней части вас уже ждет группа навьяров. Среди них выделяется один стоящий в центре. Вместо простого одеяния сшитого из водорослей, он одет в человеческие рубашку и брюки! Стена позади вас закрывается и вы оказываетесь отрезаны от внешнего мира. Вы дергаете один из рычагов на приборной панели и Левиафан поднимается наверх... ]], "leviathan_wheelhouse"); @@ -552,7 +552,7 @@ lse_black_intro = dlg { "Если мы все сделаем правильно, Наэтвьирр будет подвластен мне и не сможет сделать ничего без моего ведома. И мне не помешает ваша помощь". ]], code [[ psub("choise"); ]]}; {tag="choise"}; - {tag="control", false, "[Показать ключ из древнего храма]Вы не сможете управлять Наэтвьирром без этого", [[ + {tag="control", false, "[Показать ключ из древнего храма] Вы не сможете управлять Наэтвьирром без этого", [[ В глазах Блэка мелькнуло любопытство: "Дайте его сюда, господин Дрейк". Вы не успеваете среагировать, как Аэдхиарр вырывает ключ из ваших рук. ]], code [[ lse_key = true; ]]}; {"Я готов помочь", function(s) diff --git a/main.lua b/main.lua --- a/main.lua +++ b/main.lua @@ -9,6 +9,7 @@ require "quotes" require "hideinv" require "kbd" require "timer" +require "click" -- Код и ядро dofile "utils.lua" @@ -25,17 +26,18 @@ dofile "dock2.lua" dofile "warehouse18.lua" dofile "warehouse32.lua" dofile "leviathan.lua" +dofile "london_dice.lua" -- Часть 2: Атлантида dofile "atlantis.lua" dofile "atlantis_ignis.lua" dofile "atlantis_dlg.lua" dofile "atlantis_intro.lua" dofile "atlantis_ignis_on_fire.lua" -dofile "atlantis_navjiarr.lua" +dofile "atlantis_iraa.lua" +dofile "atlantis_dyp.lua" dofile "atlantis_looking_for_clues.lua" dofile "atlantis_from_the_ashes.lua" dofile "atlantis_iyhehevjiarr.lua" -dofile "atlantis_catching_the_tail.lua" -- Часть 3: Путь в Лсэрианотр dofile "journey_venaedanotrr.lua" dofile "journey_nleyyslanotrr.lua" @@ -47,135 +49,5 @@ dofile "lseryanotrr_locations.lua" dofile "lse_service_tunnels.lua" dofile "lse_powerplant.lua"; dofile "lse_final_battle.lua"; ---dofile "final_scene.lua"; ---dofile "final_battle.lua"; ---dofile "first_city_inner_rim.lua" ---dofile "first_city_middle_rim.lua" ---dofile "first_city_outer_rim.lua" -global { - warehouse18_found = false; - warehouse32_found = false; - warehouse32_visited = false; - dock_found = false; - leviathan_discovered = false; - atlantis_found = false; - temple_found = false; - iraaphaanotrr_found = false; - dypatreanotrr_found = false; - iraaphaanotrr_temple_found = false; - dypatreanotrr_temple_found = false; - venaedanotrr_temple_found = false; - nleyyslanotrr_temple_found = false; - deep_temple_found = false; - lseryanotrr_found = false; - - rel_phaetlarr = 0; - rel_walter = 0; - rel_learr = 0; - rel_anna = 0; - rel_jack = 0; - language_known = false; - - dt_code = {}; - dt_buttons = {}; -}; - - - -player_drake = player { - var { - hp = 10; - has_light = false; - party = {--[["learr", "radcliffe", "phaetlarr", "wright"]]}; - companion = nil; - money = 200; - }; - nam = "player"; - disp = "Дэвид Дрейк"; - disp2 = "Дрейка"; - disp3 = "Дрейку"; - where = 'port'; - - obj = {'item_umbrella', 'item_charts', 'item_note_1', 'item_money', - }; - - pay = function(s, c) - if (s.money >= c) then - s.money = s.money - c; - return true; - else - return false; - end; - end; -}; - -intro = room { - nam = "intro"; - hideinv = true; - disp = "Вступление"; - dsc = [[ - ВНИМАНИЕ: Это специальная предварительная версия игры. Ни один фрагмент игры не является финальным. ^^ - ВНИМАНИЕ: Данная версия игры не предназначена для какого-либо распространения, исключая прямую передачу файлов автором. ^^ - Действие игры происходит в конце 19-го века. Вы играете за Дэвида Дрейка - единственного сына богатого и уважаемого владельца транспортной компании "Вестхейвен Трансоушен". ^ - Несколько лет назад, когда Дэвиду было 10 лет, Уильям таинственным образом бесследно пропал. Полицейское расследование вскоре зашло в тупик и было прекращено. Через несколько месяцев компания, оставшаяся без своего владельца, обанкротилась, ее имущество распродается. ^ - После исчезновения отца Дэвид жил в Вашингтоне с бабушкой. Он пошел по стопам отца и выучился на инженера-кораблестроителя. Несколько дней назад в доме, где он жил, был обнаружен тайник, хранящий секретные документы отца - карты, указывающие по-видимому на какие-то тайники Уильяма и записка с адресом и именем.^ - Одержимый идеей узнать больше, Дэвид отправляется в Лондон... - ]]; - obj = { - vway("Начать игру", "{Начать игру}", 'aurora_borealis'); - } -}; - -pl = player_drake; - -game.nam = "Пробуждение"; -game.dsc = [[ - Действие игры происходит в конце 19-го века. Вы играете за Дэвида Дрейка, сына владельца крупной транспортной компании "Вестхейвен Трансоушен". Несколько лет назад Уильям Дрейк, отец главного героя бесследно пропадает. Компания вскоре разваливается. Поиски ни к чему не приводят. Когда казалось бы уже все потеряно, в доме Дрейков находят тайник с документами Уильяма. Несколько схем строений, принадлежащих компании и клочок бумаги с адресом некоего Майкла Райта в Лондоне. Естественно, Дэвид как можно скорее отправляется в Великобританию... - Вам предстоит отыскать подводную лодку, посетить подводную станцию, построенную Уильямом, встретить древнюю расу подводных жителей, поучаствовать в событиях, описанных древними легендами этой расы и узнать, что стало с Уильямом Дрейком. -]]; - -game_act_phrases = { - "Вы не знаете, что с этим делать. "; - "Вам нет смысла это трогать. "; - "Вам это ничем не поможет. "; - "Это бессмысленно. "; - "Незачем это трогать. "; -}; - -game_use_phrases = { - "Вам это ничем не поможет. "; - "Это бессмысленно. "; - "Вы не знаете, как это сделать. " -}; - -game.act = function(s) - return game_act_phrases[rnd(#game_act_phrases)]; -end; - -game.use = function(s) - return game_use_phrases[rnd(#game_use_phrases)]; -end; -game.inv = "INV: Если вы видите это сообщение - это баг. "; - -function init() - ---modules init - leviathan_init(); - warehouse18_init(); - warehouse32_init(); - - local nums = {1,2,3,4,5,6}; - for i = 1, 4 do - local index = rnd(#nums); - table.insert(dt_code, nums[index]); - table.remove(nums, index); - end; - nums = {1,2,3,4,5,6}; - for i = 1, 3 do - local index = rnd(#nums); - table.insert(dt_buttons, nums[index]); - table.remove(nums, index); - end; - ---game init - pl.where = intro; -end; \ No newline at end of file +dofile "startup.lua"; \ No newline at end of file diff --git a/navjiarr_hostile_settlement.lua b/navjiarr_hostile_settlement.lua deleted file mode 100644 diff --git a/navjiarr_settlement.lua b/navjiarr_settlement.lua deleted file mode 100644 diff --git a/party.lua b/party.lua --- a/party.lua +++ b/party.lua @@ -13,7 +13,7 @@ end; party_follow = function(s) if (where(pl).cutscene or where(pl).not_follow) then - elseif (where(pl).leviathan) then + elseif where(pl).leviathan or where(pl).atlantis then if (stead.nameof(where(s)) ~= s.home) then move(s, s.home, where(s)); end; @@ -25,20 +25,24 @@ end; -- TODO больше отвлеченных диалогов, дабы было о чем поговорить с сопартийцами. Не стоит делать их деревянными безжизненными манекенами char_learr = obj { var { + home = "leviathan_wardroom"; follow = false; on_books = 0; + on_join = 0; + on_before = 0; + on_atlantis = 0; + on_conflict = 0; }; nam = "learr"; disp = "Леарр"; dsc = function(s) if (stead.nameof(where(s)) == s.home) then - return [[{Леарр} стоит возле одного из иллюминаторов и наблюдает за происходящим снаружи субмарины. ^]]; + return [[{Леарр} сидит в кресле, листая книгу. ^]]; else return [[{Леарр} ждет ваших указаний. ^]]; end; end; - home = "leviathan_wardroom"; accompany = party_accompany; life = party_follow; act = function(s) @@ -48,10 +52,12 @@ char_learr = obj { walkin(learr_dlg); end; end; + seen_level = 2; }; char_phaetlarr = obj { var { + home = "leviathan_engines"; follow = false; }; nam = "phaetlarr"; @@ -63,7 +69,6 @@ char_phaetlarr = obj { return [[{Фаэтларр} ждет ваших указаний. ^]]; end; end; - home = "leviathan_engines"; accompany = party_accompany; life = party_follow; act = function(s) @@ -73,13 +78,23 @@ char_phaetlarr = obj { walkin(phaetlarr_dlg); end; end; + seen_level = 2; }; char_radcliffe = obj { var { + home = "leviathan_engines"; follow = false; rel_on_join = nil; + + on_walter = 0; + on_atlantis = 0; + on_black = 0; + on_drake = 0; + on_anna = 0; + on_join = 0; + on_conflict = 0; }; nam = "radcliffe"; disp = "Уолтер Рэдклифф"; @@ -90,7 +105,6 @@ char_radcliffe = obj { return [[{Уолтер Рэдклифф} ждет ваших указаний. ^]]; end; end; - home = "leviathan_engines"; accompany = party_accompany; life = party_follow; act = function(s) @@ -100,16 +114,19 @@ char_radcliffe = obj { walkin(radcliffe_dlg); end; end; + seen_level = 2; }; char_wright = obj { var { + home = "leviathan_wardroom"; follow = false; iof_reaction = 0; on_learr = 0; on_leviathan = 0; + on_conflict = 0; }; nam = "wright"; disp = "Джек Райт"; @@ -120,12 +137,12 @@ char_wright = obj { return [[{Джек Райт} ждет ваших указаний. ^]]; end; end; - home = "leviathan_wardroom"; accompany = party_accompany; life = party_follow; act = function(s) walkin(wright_main_dlg); end; + seen_level = 2; }; char_anna = obj { @@ -137,6 +154,7 @@ char_anna = obj { atlantis_asked = 0; drake_asked = 0; join_asked = 0; + black_asked = 0; rel_on_join = nil; }; nam = "anna"; @@ -158,13 +176,76 @@ char_anna = obj { walkin(anna_dlg); end; end; + seen_level = 2; +}; + +learr_phone_dlg = dlg { + nam = "Леарр"; + entered = function(s) + if (char_learr.follow) then + pon('stay'); + poff('join'); + else + pon('join'); + poff('stay'); + end; + return [[Вы слышите в трубке голос Леарр: "Ты говори". ]]; + end; + phr = { + { tag = "join", always = true, "Я хочу, чтобы ты пошла со мной в следующий раз.", [[Леарр отвечает: "Хорошо". ]], + function() + char_learr:accompany(true); + char_phaetlarr:accompany(false); + char_radcliffe:accompany(false); + char_wright:accompany(false); + char_anna:accompany(false); + pon('stay'); + poff('join'); + end; + }; + { tag = "stay", always = true, "Оставайся на Левиафане.", [[Леарр отвечает: "Хорошо". ]], + function() + char_learr.accompany(char_learr, false); + poff('stay'); + pon('join'); + end; + }; + { tag = "exit", always = true, "Это все.", [[Леарр отвечает: "Ты приходи". ]], + function() + back(); + end; + }; + }; }; learr_home_dlg = dlg { - nam = "learr_dlg"; - disp = "Леарр"; - hideinv = true; + var { + iraa_temple_asked = false; + }; + nam = "Леарр"; entered = function(s) + poff("on_books", "on_join", "on_before", "on_atlantis", "talk"); + if (rel_learr < 0) then + pon("talk"); + else + --[[if (char_learr.on_books < 3) then + pon("on_books"); + pon("talk"); + end;]] + if (char_learr.on_join < 2) then + pon("on_join"); + pon("talk"); + end; + if (char_learr.on_before < 2) then + pon("on_before"); + pon("talk"); + end; + if (char_learr.on_atlantis < 2) then + pon("on_atlantis"); + pon("talk"); + end; + end; + if (atl_iyh_state == 7) then pon("on_iyh"); else @@ -178,16 +259,67 @@ learr_home_dlg = dlg { pon('join'); poff('stay'); end; - - return [[ - Леарр вопросительно смотрит на вас - ]]; + + if atl_ctt_iraa_refusal and not s.iraa_temple_asked then + s.iraa_temple_asked = true; + pon("on_iraa_temple"); + end; + + psub("generic"); + return [[Леарр вопросительно смотрит на вас. ]]; end; phr = { - { tag = "on_iyh", always = true, "Что ты можешь рассказать мне о храме?", [[ - "Каждый-храм два-входа-имеет. Большой-главный-вход далеко-виден. Тайный-задний-вход незаметен-но-всегда-есть. Мы давно-потеряли дорогу-к-этому-святилищу и задний-вход-не-помним. Если мы задний-вход-найдем, то обманим затмевающего-свет и в-храм-проникнем". - ]]}; - { tag = "join", always = true, "Я хочу, чтобы ты пошла со мной в следующий раз", "Хорошо", + {tag="on_solution_not_returned"}; + {tag="sp11", "Будет лучше если артефакты останутся у нас. ", [[Леарр удивляется вашим словам: "Они принадлежат нам!" ]], code [[ rel_learr = rel_learr - 1; psub("generic");]]}; + {tag="sp12", "Светлова вернет вам артефакты, как только всесторонне изучит их, бояться нечего. ", [[Леарр кивает: "Я знаю". ]], code [[ rel_learr = rel_learr + 1; psub("generic");]]}; + {"Посмотрим, что светлова сможет извлечь из этого. Но я пришел поговорить от другом. ", function(s) + if rel_learr < 0 then + return [[Леаар просит: "Ты ответь". ]]; + else + psub("generic"); + return [[Леарр кивает: "Ты говори". ]]; + end; + end}; + {tag="on_solution_returned_ok"}; + {tag="sp21", "Было бы лучше, если бы артефакты остались у нас. ", [[Леарр удивляется вашим словам: "Они принадлежат нам!" ]], code [[ rel_learr = rel_learr - 1; psub("generic");]]}; + {tag="sp22", "Правила есть правила. ", [[Леарр кивает: "Я знаю". ]], code [[ rel_learr = rel_learr + 1; psub("generic");]]}; + {"Я пришел поговорить от другом. ", function(s) + if rel_learr < 0 then + return [[Леаар просит: "Ты ответь". ]]; + else + psub("generic"); + return [[Леарр кивает: "Ты говори". ]]; + end; + end}; + {tag="more_questions"}; + --[[{tag="on_books", "", function() + + end};]] + {tag="on_join", "Почему ты отправилась с нами?", function() + char_learr.on_join = 2; + return [[Леарр отвечает: "Я с-Уильямом-Дрейком-хотела-отправиться, но отец не-разрешил. Он сейчас-изменил-решение и я могу-с-тобой-искать". ]]; + end}; + {tag="on_before", "Расскажи о своей жизни в Ираафаанотре.", function() + char_learr.on_before = 2; + return [[Леарр отвечает: "Я вождя-дочь. Я думать-искать-решать-сложно-но-интересно-было-училась. Хевьяры пришли-и-все-изменили. Я теперь-говорить-не-с-навьярами-учусь. Отец будущему-вождю-полезно-это-говорит. Я согласна-с-ним-в-этом".]]; + end}; + {tag="on_atlantis", "Что ты думаешь об Атлантиде?", function() + char_learr.on_atlantis = 2; + return [[Леарр отвечает: "Мы многому-научиться-у-вас-должны-и-можем. Вы в-воде-не-дышите-как-мы, но вы машины-делающие-это-за-вас-строите. Легенды гласят, что мы тоже-это-умели, но почему-разучились? Я не умею. Отец не умеет. Другие не умеют. И в-книгах-не-написано". Леарр печально вздыхает. ]]; + end}; + {tag="quit", always=true, "Поговорим в другой раз. ", [[Уолтер кивает: "Хорошо".]], code [[pret();]]}; + {tag="generic"}; + { tag = "talk", always = true, "Я хочу кое-что спросить.", function(s) + if rel_learr >= 0 then + psub("more_questions"); + return [[Леарр кивает: "Ты говори". ]]; + else + return [[Леарр отвечает: "Мы потом-поговорим". ]]; + end; + end}; + { tag = "on_iraa_temple", always = true, "Нам нужно попасть в храм и найти карту. Ты можешь уговорить вождя дать нам доступ?", [[Плавники Леарр окрашиваются сиреневым, она говорит: "Ты невозможного-просишь". Кажется, она закончила, но через мгновение, навьяресса внезапно добавляет: "Я карту-найду, если ты-Дрейк разрешишь". ]]}; + { tag = "on_iyh", always = true, "Что ты можешь рассказать мне о храме?", [["Каждый-храм два-входа-имеет. Большой-главный-вход далеко-виден. Тайный-задний-вход незаметен-но-всегда-есть. Мы давно-потеряли дорогу-к-этому-святилищу и задний-вход-не-помним. Если мы задний-вход-найдем, то обманем затмевающего-свет и в-храм-проникнем". ]]}; + { tag = "join", always = true, "Я хочу, чтобы ты пошла со мной в следующий раз.", [[Леарр отвечает: "Хорошо". ]], function() char_learr:accompany(true); char_phaetlarr:accompany(false); @@ -198,25 +330,62 @@ learr_home_dlg = dlg { poff('join'); end; }; - { tag = "stay", always = "true", "Оставайся на Левиафане", "Хорошо", + { tag = "stay", always = "true", "Оставайся на Левиафане.", [[Леарр отвечает: "Хорошо". ]], function() char_learr.accompany(char_learr, false); poff('stay'); pon('join'); end; }; - { tag = "exit", always = "true", "Это все", "Хорошо", + { tag = "exit", always = "true", "Это все.", [[Леарр отвечает: "Ты возвращайся". ]], function() back(); end; - } + }; }; }; +phaetlarr_phone_dlg = dlg { + nam = "Фаэтларр"; + entered = function(s) + if (char_phaetlarr.follow) then + pon('stay'); + poff('join'); + else + pon('join'); + poff('stay'); + end; + return [[Вы слышите голос Фаэтларра: "Фаэтларр слушает. Ты говори". ]]; + end; + phr = { + { tag = "join", always = "true", "Я хочу, чтобы ты пошел со мной в следующий раз.", [[Фаэтларр отвечает: "Хорошо". ]], + function() + char_learr:accompany(false); + char_phaetlarr:accompany(true); + char_radcliffe:accompany(false); + char_wright:accompany(false); + char_anna:accompany(false); + poff('join'); + pon('stay'); + end; + }; + { tag = "stay", always = "true", "Оставайся на Левиафане.", [[Фаэтларр отвечает: "Хорошо". ]], + function() + char_phaetlarr.accompany(char_phaetlarr, false); + pon('join'); + poff('stay'); + end; + }; + { tag = "exit", always = "true", "Это все.", [[Фаэтларр отвечает: "Ты приходи. Конец связи". ]], + function() + back(); + end; + } + }; +}; + phaetlarr_home_dlg = dlg { - nam = "phaetlarr_dlg"; - disp = "Фаэтларр"; - hideinv = true; + nam = "Фаэтларр"; entered = function(s) if (char_phaetlarr.follow) then pon('stay'); @@ -226,43 +395,116 @@ phaetlarr_home_dlg = dlg { poff('stay'); end; - return [[ - Фаэтларр ждет ваших указаний - ]]; + return [[Фаэтларр ждет ваших указаний. ]]; end; phr = { - { tag = "join", always = "true", "Я хочу, чтобы ты пошел со мной в следующий раз", "Хорошо", - function() - char_learr:accompany(false); - char_phaetlarr:accompany(true); - char_radcliffe:accompany(false); - char_wright:accompany(false); - char_anna:accompany(false); - poff('join'); - pon('stay'); - end; - }; - { tag = "stay", always = "true", "Оставайся на Левиафане", "Хорошо", - function() - char_phaetlarr.accompany(char_phaetlarr, false); - pon('join'); - poff('stay'); - end; - }; - { tag = "exit", always = "true", "Это все", "Хорошо", - function() - back(); - end; - } + { tag = "join", always = "true", "Я хочу, чтобы ты пошел со мной в следующий раз.", [[Фаэтларр отвечает: "Хорошо". ]], + function() + char_learr:accompany(false); + char_phaetlarr:accompany(true); + char_radcliffe:accompany(false); + char_wright:accompany(false); + char_anna:accompany(false); + poff('join'); + pon('stay'); + end; + }; + { tag = "stay", always = "true", "Оставайся на Левиафане.", [[Фаэтларр отвечает: "Хорошо". ]], + function() + char_phaetlarr.accompany(char_phaetlarr, false); + pon('join'); + poff('stay'); + end; + }; + { tag = "exit", always = "true", "Это все.", [[Фаэтларр отвечает: "Ты возвращайся". ]], + function() + back(); + end; + } }; }; +radcliffe_phone_dlg = dlg { + nam = "Уолтер Рэдклифф"; + entered =function(s) + if (char_radcliffe.follow) then + pon('stay'); + poff('join'); + else + pon('join'); + poff('stay'); + end; + return [[В трубке вы слышите голос Уолтера Рэдклиффа: "Рэдклифф слушает". ]]; + end; + phr = { + {tag="join", always=true, "Я хочу, чтобы ты пошел со мной в следующий раз.", [[ Уолтер отвечает: "Хорошо". ]], + function() + char_learr:accompany(false); + char_phaetlarr:accompany(false); + char_radcliffe:accompany(true); + char_wright:accompany(false); + char_anna:accompany(false); + pon('stay'); + poff('join'); + return [[Я готов]]; + end; + }; + {tag="stay", always="true", "Оставайся на Левиафане.", [[ Уолтер отвечает: "Хорошо". ]], + function() + char_radcliffe.accompany(char_radcliffe, false); + pon('join'); + poff('stay'); + end; + }; + {tag="exit", always="true", "Это все.", [[Уолтер отвечает: "Конец связи". ]], + function() + back(); + end; + }; + }; +}; + radcliffe_home_dlg = dlg { - nam = "radcliffe_dlg"; - disp = "Уолтер Рэдклифф"; - hideinv = true; + var { + iraa_temple_asked = false + }; + nam = "Уолтер Рэдклифф"; entered = function (s) - if (atl_iyh_state == 7) then + if atl_ctt_iraa_refusal and not s.iraa_temple_asked then + iraa_temple_asked = true; + pon("on_iraa_temple"); + end; + poff("on_anna", "on_walter", "on_atlantis", "on_drake", "on_black", "on_join", "questions"); + if (rel_walter < 0) then + pon("questions"); + else + if (char_radcliffe.on_anna < 3) then + pon("on_anna"); + pon("questions"); + end; + if (char_radcliffe.on_black < 2) then + pon("on_black"); + pon("questions"); + end; + if (char_radcliffe.on_walter < 2) then + pon("on_walter"); + pon("questions"); + end; + if (char_radcliffe.on_atlantis < 2) then + pon("on_atlantis"); + pon("questions"); + end; + if (char_radcliffe.on_drake < 2) then + pon("on_drake"); + pon("questions"); + end; + if (char_radcliffe.on_join < 2) then + pon("on_join"); + pon("questions"); + end; + end; + + if (atl_iyh_state == 7) then pon("on_iyh"); else poff("on_iyh"); @@ -276,16 +518,115 @@ radcliffe_home_dlg = dlg { poff('stay'); end; psub("generic"); - return [[ - Уолтер задумчиво смотрит на вас - ]]; + + if char_radcliffe.on_conflict == 0 and conflict_resolved then + char_radcliffe.on_conflict = 1; + if (rel_walter < 0) then + if atl_iyh_shockfish_dead then + if atl_iyh_artifacts_on_atlantis then + return [[Уолтер при виде вас заявляет: "Может убивать ската было и не обязательно, но мы получили, что чего хотели". ]]; + else + return [[Уолтер при виде вас заявляет: "Убийство ската было опрометчивым, Дрейк. Отношения с навьярами безнадежно испорчены. Могу лишь понадеяться, что твои действия не помешают нам найти Уильяма и Адриана". ]]; + end; + elseif atl_iyh_entrance_destroyed then + if atl_iyh_artifacts_on_atlantis then + return [[Уолтер при виде вас заявляет: "Цель оправдывает средства. Храм и сам развалился бы через пару тысяч лет, только ценные артефакты, остались бы погребены навеки. Теперь они у нас". ]]; + else + return [[Уолтер при виде вас заявляет: "Цель оправдывает средства. Храм и сам развалился бы через пару тысяч лет, только ценные артефакты, остались бы погребены навеки. Теперь они у навьяров". ]]; + end; + else + if atl_iyh_artifacts_on_atlantis then + return [[Уолтер при виде вас заявляет: "Не ожидал, что получится закончить все настолько гладко там в храме". ]]; + else + return [[Уолтер при виде вас заявляет: "Не ожидал, что получится закончить все настолько гладко там в храме. Жаль, что артефакты мы так и не посмотрели". ]]; + end; + end; + else + if atl_iyh_shockfish_dead then + if atl_iyh_artifacts_on_atlantis then + return [[Уолтер при виде вас заявляет: "Может убивать ската было и не обязательно, но мы получили, что хотели. Я поступил бы так же на твоем месте". ]]; + else + return [[Уолтер при виде вас заявляет: "Убийство ската было опрометчивым, Дрейк. Отношения с навьярами безнадежно испорчены и теперь нам придется обходиться без их помощи". ]]; + end; + elseif atl_iyh_entrance_destroyed then + if atl_iyh_artifacts_on_atlantis then + return [[Уолтер при виде вас заявляет: "Цель оправдывает средства. Храм и сам развалился бы через пару тысяч лет, только ценные артефакты, остались бы погребены навеки. Теперь они у нас. Думаю, под твоим руководством мы сможем найти экипаж Надежды". ]]; + else + return [[Уолтер при виде вас заявляет: "Цель оправдывает средства. Храм и сам развалился бы через пару тысяч лет, только ценные артефакты, остались бы погребены навеки. Теперь они у навьяров. Думаю, под твоим руководством мы сможем найти экипаж Надежды". ]]; + end; + else + if atl_iyh_artifacts_on_atlantis then + return [[Уолтер при виде вас заявляет: "Отличная работа, Дрейк. Артефакты у нас, Ираафаанотр получит свою реликвию, а мы можем продолжать наши поиски". ]]; + else + return [[Уолтер при виде вас заявляет: "Отличная работа, Дрейк. Ираафаанотр получил свою реликвию, а мы можем продолжать наши поиски". ]]; + end; + end; + end; + end; + + return [[Уолтер задумчиво смотрит на вас. ]]; end; phr = { + {tag="talk"}; + {tag="on_black", "Что ты можешь сказать о Блэке?", function(s) + char_radcliffe.on_black = 2; + return [[Уолтер пожимает плечами: "Что я могу сказать про него? Думаю, Дрейк выбрал хорошего партнера". ]]; + end}; + {tag="on_walter", "Расскажи о себе.", function(s) + char_radcliffe.on_walter = 2; + return [[Уолтер пожимает плечами: "Да мне нечего рассказать. Мы с сестрой жили в Лондоне, я уже работал в Вестхейвен Трансоушен, когда наши родители погибли -- пароход, на котором они отправились в США просто не прибыл в порт назначения. Мы с Анной остались одни. Она еще даже школу не закончила тогда. А потом мы построили Надежду, Атлантиду и далее по списку. Потом мне предложили работать внизу, на станции. Я, конечно, мог тогда отказаться, уйти в другую компанию, но направление, избранное Дрейком слишком меня привлекало. Я согласился". ]]; + end}; + {tag="on_anna", "Расскажи о своей сестре, Анне.", function(s) + char_radcliffe.on_anna = 3; + if (ArrayUtils.indexOf(pl.party, 'anna') ~= 0) then + return [[Уолтер вздыхает: "Будь у меня выбор тогда, я ни за что не взял бы ее на Атлантиду. И жалел бы сейчас об этом. Не думаю, что на поверхности она стала бы той, кто она сейчас. Все-таки общество поглощенных своей работой людей накладывает определенный отпечаток, я думаю. Я все еще не уверен, что взять ее на Левиафан было хорошей идеей -- Бог знает, с чем мы столкнемся в наших странствиях, но она очень этого хотела". ]]; + else + return [[Уолтер вздыхает: "Будь у меня выбор тогда, я ни за что не взял бы ее на Атлантиду. И жалел бы сейчас об этом. Не думаю, что на поверхности она стала бы той, кто она сейчас. Все-таки общество поглощенных своей работой людей накладывает определенный отпечаток, я думаю. То, что она осталась на станции успокаивает меня, хотя она так рвалась в эту экспедицию вместе с нами". ]]; + end; + end}; + {tag="on_drake", "Что ты можешь сказать о Дрейке?", function(s) + char_radcliffe.on_drake = 2; + return [[Уолтер отвечает: "Не думаю, что скажу про него больше чем кто-то еще. Послушайте Райта, Моро, быть может Даркстара, хотя черт знает, что у этого типа на уме. Они скажут вам все и даже больше. "]]; + end}; + {tag="on_join", "Почему ты решил присоединиться к нам?", function(s) + char_radcliffe.on_join = 2; + if (ArrayUtils.indexOf(pl.party, 'anna') ~= 0) then + if char_anna.rel_on_join >= 0 and char_radcliffe.rel_on_join >= 0 then + return [[Уолтер Рэдклифф отвечает: "Мы с Анной очень хотели отправиться в эту экспедицию: во-первых, вам не помешает наша помощь, а во-вторых -- мы хотим узнать, что стало с экипажем Надежды". ]]; + elseif char_anna.rel_on_join >= 0 then + return [[Уолтер Рэдклифф отвечает: "Признаюсь, я не слишком доверял вам тогда, но Анна убедила меня отправиться на Левиафане вместе с вами. И вот мы здесь".]] + elseif char_radcliffe.rel_on_join >= 0 then + return [[Уолтер Рэдклифф отвечает: "Ты сразу мне понравился, и это путешествие предоставляет мне возможность узнать, что стало с экипажем Надежды. Хотя Анна не хотела отправляться с вами, я решил, что будет лучше, если мы с ней будем на борту вместе".]] + else + return [[Уолтер Рэдклифф отвечает: "Скажу честно, единственная причина, почему мы отправились с вами кроется в нашем желании найти Надежду".]] + end; + else + if (char_radcliffe.rel_on_join >= 0) then + return [[Уолтер Рэдклифф отвечает: "Мы с Анной очень хотели отправиться в эту экспедицию, но к счастью, мне удалось уговорить ее остаться на Атлантиде. Я не хочу подвергать ее опасностям, которые могут подстерегать нас". ]]; + else + return [[Уолтер Рэдклифф отвечает: "Признаюсь, я не слишком доверял тебе тогда, но это единственный способ узнать, что стало с Надеждой". ]]; + end; + end; + + + end}; + {tag="on_atlantis", "Что ты думаешь об Атлантиде?", function(s) + char_radcliffe.on_atlantis = 2; + return [[Уолтер отвечает: "Думаю только Райт и Уинтерлайт в полной мере осознают, насколько большим достижением для нас, для всего человечества, является постройка этой станции. Тем не менее, они, отчего-то, не спешат поделиться своими знаниями с другими. Не думаю, что сегодняшнее общество сможет по достоинству оценить новые возможности, даруемые этими технологиями. Да и что станет с навьярами? Вспомните Новый Свет, посмотрите на другие наши колонии -- хотите ли вы этого для Леарр и других?"]]; + end}; + {tag="quit", always=true, "Поговорим в другой раз. ", [[Уолтер кивает: "Хорошо".]], code [[pret();]]}; {tag="generic"}; - {tag="on_iyh", always=true, "Что ты можешь рассказать мне о храме?", [[ - "Возможно, мы сможем разрушить вход в храм. Однако я не знаю, как навьяры на это отреагируют. " - ]]}; - {tag="join", always=true, "Я хочу, чтобы ты пошел со мной в следующий раз", "Хорошо", + {tag="questions", always=true, "У меня есть несколько вопросов. ", function(s) + if (rel_anna < 0) then + return [[Уолтер отрицательно качает головой: "Не сейчас, я занят". ]]; + else + psub("questions"); + return [[Уолтер кивает: "Слушаю". ]]; + end; + end}; + {tag="on_iraa_temple", "Вождь Ираафаанотра не хочет пускать меня в храм. Что мы можем сделать?", [[Уолтер отвечает: "В прошлый раз нам оказалось достаточно оказаться рядом с храмом, чтобы найти искомое. Быть может, в этот раз нам так же не нужно проникать внутрь? И я бы не стал исключать возможность скрытного проникновения. Раз они не знают о карте, то и не заметят потери". ]]}; + {tag="on_iyh", always=true, "Что ты можешь рассказать мне о храме?", [[Уолтер пожимает клечами: "Возможно, мы сможем разрушить вход в храм. Однако я не знаю, как навьяры на это отреагируют". ]]}; + {tag="join", always=true, "Я хочу, чтобы ты пошел со мной в следующий раз.", [[ Уолтер отвечает: "Хорошо". ]], function() if (submarine_leviathan.suits > 1) then char_learr:accompany(false); @@ -302,24 +643,57 @@ radcliffe_home_dlg = dlg { end; end; }; - {tag="stay", always="true", "Оставайся на Левиафане", "Хорошо", + {tag="stay", always="true", "Оставайся на Левиафане.", [[ Уолтер отвечает: "Хорошо". ]], function() char_radcliffe.accompany(char_radcliffe, false); pon('join'); poff('stay'); end; }; - {tag="exit", always="true", "Это все", "Хорошо", + {tag="exit", always="true", "Это все.", [[ Уолтер отвечает: "До встречи". ]], function() back(); end; - }; + }; }; }; +wright_phone_dlg = dlg { + nam = "Джек Райт"; + entered = function(s) + if (char_wright.follow) then + pon('stay'); + poff('join'); + else + pon('join'); + poff('stay'); + end; + return [[В трубке вы слышите голос Джека Райта: "Райт на связи". ]]; + end; + phr = { + {tag="join", always="true", "Я хочу, чтобы ты пошел со мной в следующий раз.", [[Джек Райт отвечает: "Хорошо". ]], code [[ + char_learr:accompany(false); + char_phaetlarr:accompany(false); + char_radcliffe:accompany(false); + char_wright:accompany(true); + char_anna:accompany(false); + pon('stay'); + poff('join'); + ]]}; + {tag="stay", always="true", "Оставайся на Левиафане.", [[Джек Райт отвечает: "Хорошо". ]], code [[ + char_wright:accompany(false); + pon('join'); + poff('stay'); + ]]}; + {tag="exit", always="true", "Это все.", [[Джек Райт отвечает: "Конец связи". ]], code [[ back(); ]]}; + }; +}; + wright_main_dlg = dlg { - nam = "wright_main_dlg"; - disp = "Джек Райт"; + var { + iraa_temple_asked = false + }; + nam = "Джек Райт"; entered = function(s) if (atl_iyh_state == 7) then pon("on_iyh"); @@ -335,24 +709,83 @@ wright_main_dlg = dlg { poff('stay'); end; + poff("talk"); if (rel_jack < 0) then - if (char_wright.on_learr == 0) then pon("on_learr"); end; - if (char_wright.on_leviathan == 0) then pon("on_leviathan"); end; - if (char_wright.on_jack == 0) then pon("on_jack"); end; + if (char_wright.on_learr == 0) then pon("on_learr", "talk"); end; + if (char_wright.on_leviathan == 0) then pon("on_leviathan", "talk"); end; + if (char_wright.on_jack == 0) then pon("on_jack", "talk"); end; else - if (char_wright.on_learr < 3 and ArrayUtils.indexOf(pl.party, 'learr') ~= 0) then pon("on_learr"); end; - if (char_wright.on_leviathan < 2) then pon("on_leviathan"); end; - if (char_wright.on_jack < 2) then pon("on_jack"); end; + if (char_wright.on_learr < 3 and ArrayUtils.indexOf(pl.party, 'learr') ~= 0) then pon("on_learr", "talk"); end; + if (char_wright.on_leviathan < 2) then pon("on_leviathan", "talk"); end; + if (char_wright.on_jack < 2) then pon("on_jack", "talk"); end; + end; + + if atl_ctt_iraa_refusal and not s.iraa_temple_asked then + iraa_temple_asked = true; + pon("on_iraa_temple"); end; - - psub("generic"); - return [[ - Джек ждет ваших указаний - ]]; + + psub("generic"); + + if char_wright.on_conflict == 0 and conflict_resolved then + char_wright.on_conflict = 1; + if (rel_jack < 0) then + if atl_iyh_shockfish_dead then + if atl_iyh_artifacts_on_atlantis then + return [[Джек при виде вас заявляет: "Должен признать, Дрейк, у меня на твоем месте не хватило бы смелости. Надеюсь, ты понимаешь, что делаешь". ]]; + else + if iof_learr_dead then + return [[Джек при виде вас заявляет: "Ты точно псих, Дрейк. Ты видел рожу Аиверьярра, когда ты это сделал?" ]]; + else + return [[Джек при виде вас заявляет: "Ты точно псих, Дрейк. Леарр будет в ярости и я ее понимаю". ]]; + end; + end; + elseif atl_iyh_entrance_destroyed then + if atl_iyh_artifacts_on_atlantis then + return [[Джек при виде вас заявляет: "Не думаю, что разнести храм было лучшим решением. Но, по-крайней мере, что-то мы оттуда вынесли". ]]; + else + return [[Джек при виде вас заявляет: "Не думаю, что разнести храм было лучшим решением. Навьяры, конечно, получили свою реликвию, но с целым храмом, они получили бы гораздо больше". ]]; + end; + else + if atl_iyh_artifacts_on_atlantis then + return [[Джек при виде вас заявляет: "Неплохо, Дрейк. Гораздо лучше, чем я ожидал. Надеюсь, я не ошибся в тебе, отправившись в эту экспедицию". ]]; + else + return [[Джек при виде вас заявляет: "Неплохо, Дрейк. Лучше, чем я ожидал. Надеюсь, я не ошибся в тебе, отправившись в эту экспедицию". ]]; + end; + end; + else + if atl_iyh_shockfish_dead then + if atl_iyh_artifacts_on_atlantis then + return [[Джек при виде вас заявляет: "Должен признать, Дэвид, у меня на твоем месте не хватило бы смелости. Я все еще думаю, что был менее кровопролитный способ, но это же всего лишь рыбина. Надеюсь, что навьяры не узнают об этом". ]]; + else + if iof_learr_dead then + return [[Джек при виде вас заявляет: "Должен признать, Дэвид, у меня на твоем месте не хватило бы смелости. Конечно, стоило утереть нос этому типу, Аикерьярру. Но не стоило при этом оборачивать против себя всех: и Ираафаанотр, и Дипатреанотр, и даже Атлантиду". ]]; + else + return [[Джек при виде вас заявляет: "Должен признать, Дэвид, у меня на твоем месте не хватило бы смелости. Жаль, Леарр не оценила твоей решимости". ]]; + end; + end; + elseif atl_iyh_entrance_destroyed then + if atl_iyh_artifacts_on_atlantis then + return [[Джек при виде вас заявляет: "Жаль, что пришлось разрушить храм. Все-таки это памятник навьярской архитектуры и все такое. Но, наверное, лучшего решения не было. К счастью, мы смогли вытащить оттуда кое-что ценное". ]]; + else + return [[Джек при виде вас заявляет: "Жаль, что пришлось разрушить храм. Все-таки это памятник навьярской архитектуры и все такое. Но, наверное, лучшего решения не было. К тому же, мы вернули навьярам то, что смогли найти". ]]; + end; + else + if atl_iyh_artifacts_on_atlantis then + return [[Джек при виде вас заявляет: "Мы блестяще справились, не находишь? Вытащили кучу ценных артефактов и никто не пострадал". ]]; + else + return [[Джек при виде вас заявляет: "Мы отлично справились, не находишь? Вытащили кучу ценных артефактов и никто не пострадал. Правда, артефакты пришлось отдать навьярам, но думаю Светлова договорится об их изучении". ]]; + end; + end; + end; + end; + + return [[Джек вопросительно смотрит на вас. ]]; end; phr = { {tag="generic"}; - {tag="on_iyh", always=true, "Что ты можешь рассказать мне о храме?", [[Джек Райт задумчиво произносит: "Возможно получится выманить ската, если направить прожектор на вход храма..." Немного подумав, он добавляет: "Другое дело, что при этом он, скорее всего, атакует Левиафан. "]]}; + {tag="on_iraa_temple", "Вождь Ираафаанотра не хочет пускать меня в храм. Что мы можем сделать?", [[Джек отвечает: "Нам не нужна сама карта. Мы можем попробовать проникнуть в храм и сделать копию карты. Никто ничего не заметит, никто ничего не потеряет". ]]}; + {tag="on_iyh", always=true, "Что ты можешь рассказать мне о храме?", [[Джек Райт задумчиво произносит: "Возможно получится выманить ската, если направить прожектор на вход храма..."^Немного подумав, он добавляет: "Другое дело, что при этом он, скорее всего, атакует Левиафан". ]]}; {tag="join", always="true", "Я хочу, чтобы ты пошел со мной в следующий раз.", [[Джек Райт отвечает: "Хорошо". ]], code [[ char_learr:accompany(false); char_phaetlarr:accompany(false); @@ -367,6 +800,7 @@ wright_main_dlg = dlg { pon('join'); poff('stay'); ]]}; + {tag="talk", "Я хочу кое-что спросить.", [[Джек Райт кивает: "Слушаю". ]], code [[psub("more_questions");]]}; {tag="exit", always="true", "Это все.", [[Джек Райт отвечает: "Хорошо". ]], code [[ back(); ]]}; {tag = "more_questions"}; {tag="on_learr", "Что ты думаешь о Леарр?", function() @@ -383,7 +817,7 @@ wright_main_dlg = dlg { return [[Джек отвечает: "Левиафан, без сомнения, превосходный корабль. Жаль, что ему не нашлось лучшего капитана". ]]; else char_wright.on_leviathan = 2; - return [[Джек не скрывает своего восхищения: "Никогда не видел ничего подобного. Неудивительно, что отец оставил жизнь на поверхности в пользу возможности создавать подобное здесь. Пока мы были в пути, я подробно изучил субмарину. Многие решения до сих пор кажутся мне невероятными - например, использование электричества в качестве движущей силы или наличие звуковой пушки. Я уже успел обсудить с отцом детали диагностических цепей. Это совершенно непостижимо, чтобы машина сама сообщала, что с ней что-то не так". ]]; + return [[Джек не скрывает своего восхищения: "Никогда не видел ничего подобного. Неудивительно, что отец оставил жизнь на поверхности в пользу возможности создавать подобное здесь. Пока мы были в пути, я подробно изучил субмарину. Многие решения до сих пор кажутся мне невероятными -- например, использование электричества в качестве движущей силы или наличие звуковой пушки. Я уже успел обсудить с отцом детали диагностических цепей. Это совершенно непостижимо, чтобы машина сама сообщала, что с ней что-то не так". ]]; end; end}; {tag="on_jack", "Чем ты занимался все это время?", function() @@ -397,11 +831,53 @@ wright_main_dlg = dlg { }; }; +anna_phone_dlg = dlg { + nam = "Анна Рэдклифф"; + entered = function(s) + if (char_anna.follow) then + pon('stay'); + poff('join'); + else + pon('join'); + poff('stay'); + end; + return [[В трубке вы слышите голос Анны Рэдклифф: "Рэдклифф слушает". ]]; + end; + phr = { + { tag = "join", always = "true", "Я хочу, чтобы ты пошла со мной в следующий раз.", [[Анна отвечает: "Хорошо". ]], + function() + char_learr:accompany(false); + char_phaetlarr:accompany(false); + char_radcliffe:accompany(false); + char_wright:accompany(false); + char_anna:accompany(true); + pon('stay'); + poff('join'); + end; + }; + { tag = "stay", always = "true", "Оставайся на Левиафане.", [[Анна отвечает: "Хорошо". ]], + function() + char_anna:accompany(false); + pon('join'); + poff('stay'); + end; + }; + { tag = "exit", always = "true", "Это все.", [[Анна отвечает: "Конец связи". ]], + function() + back(); + end; + }; + }; +}; + anna_home_dlg = dlg { - nam = "anna_home_dlg"; - disp = "Анна Рэдклифф"; - hideinv = true; + var { + iraa_temple_asked = false + }; + nam = "Анна Рэдклифф"; entered = function(s) + psub("generic"); + if (atl_iyh_state == 7) then pon("on_iyh"); else @@ -432,6 +908,11 @@ anna_home_dlg = dlg { pon("on_join"); pon("talk"); end; + if (char_anna.black_asked < 2) then + pon("on_black"); + pon("talk"); + end; + end; @@ -442,11 +923,53 @@ anna_home_dlg = dlg { pon('join'); poff('stay'); end; - return [[ - Анна ждет ваших указаний - ]]; + + if atl_ctt_iraa_refusal and not s.iraa_temple_asked then + iraa_temple_asked = true; + pon("on_iraa_temple"); + end; + + if char_anna.on_conflict == 0 and conflict_resolved then + char_anna.on_conflict = 1; + if (rel_anna < 0) then + if atl_iyh_shockfish_dead then + return [[Анна при виде вас заявляет: "Твои методы, Дрейк, меня совершенно не устраивают. Там в храме, ты просто закидал несчастную рыбину торпедами!" ]]; + elseif atl_iyh_entrance_destroyed then + return [[Анна при виде вас заявляет: "Твои методы, Дрейк, меня совершенно не устраивают. Этот храм мог раскрыть слишком многое о навьярах и их истории, чтобы его просто разрушить!" ]]; + else + if atl_iyh_artifacts_on_atlantis then + return [[Анна при виде вас заявляет: "Артефакты у нас, навьяры довольны. Уолтер был прав". ]]; + else + return [[Анна при виде вас заявляет: "Мы смогли найти реликвию и вернуть ее в Ираафаанотр. Уолтер не ошибся в тебе, Дрейк". ]]; + end; + end; + else + if atl_iyh_shockfish_dead then + if atl_iyh_artifacts_on_atlantis then + return [[Анна при виде вас заявляет: "Твои методы, Дрейк, меня совершенно не устраивают. Там в храме, ты просто закидал несчастную рыбину торпедами! Конечно, мы достигли цели..." ]]; + else + return [[Анна при виде вас заявляет: "Твои методы, Дрейк, меня совершенно не устраивают. Там в храме, ты просто закидал несчастную рыбину торпедами! Что теперь будет с Атлантидой и навьярами?" ]]; + end; + elseif atl_iyh_entrance_destroyed then + if atl_iyh_artifacts_on_atlantis then + return [[Анна при виде вас заявляет: "Я все понимаю, Дрейк, но все же... Неужели не было менее разрушительного решения? Часть артефактов, конечно, у нас. Но сколько еще мы могли бы получить, если бы храм остался стоять". ]]; + else + return [[Анна при виде вас заявляет: "Я все понимаю, Дрейк, но все же... Неужели не было менее разрушительного решения?" ]]; + end; + else + if atl_iyh_artifacts_on_atlantis then + return [[Анна при виде вас заявляет: "Артефакты у нас, навьяры довольны. Реликвия в Ираафаанотре, на своем законном месте. Прекрасно". ]]; + else + return [[Анна при виде вас заявляет: "Реликвия в Ираафаанотре, на своем законном месте. Прекрасно". ]]; + end; + end; + end; + end; + + return [[Анна ждет ваших указаний. ]]; end; phr = { + {tag="generic"}; {tag="talk", false, "Мы можем поговорить?", function(s) if (rel_anna < 0) then return [[Анна отрицательно качает головой: "Не сейчас". ]]; @@ -455,34 +978,35 @@ anna_home_dlg = dlg { return [[Анна кивает: "Да, конечно. Я вас слушаю". ]]; end; end}; + {tag="on_iraa_temple", "Вождь Ираафаанотра не хочет пускать меня в храм. Есть какой-то способ попасть внутрь?", function(s) + if ArrayUtils.indexOf(pl.party, 'learr') ~= 0 then + return [[Анна отвечает: "Вам стоит поговорить с Леарр. Во-первых, она лучше знает традиции навьяров, во-вторых, в храм она может входить свободно". ]]; + else + return [[Анна отвечает: "Не знаю способа, который не вызвал бы недовольство навьяров". ]]; + end; + end}; {tag="on_iyh", always=true, "Что ты можешь рассказать мне о храме?", [[ "Ночью скат скорее всего покинет свое логово в поисках пищи. Мы можем воспользоваться его отсутствием". ]]}; - { tag = "join", always = "true", "Я хочу, чтобы ты пошла со мной в следующий раз", + { tag = "join", always = "true", "Я хочу, чтобы ты пошла со мной в следующий раз", [[Анна отвечает: "Хорошо". ]], function() - if (submarine_leviathan.suits > 1) then - char_learr:accompany(false); - char_phaetlarr:accompany(false); - char_radcliffe:accompany(false); - char_wright:accompany(false); - char_anna:accompany(true); - pon('stay'); - poff('join'); - return [[Я готова]]; - else - -- TODO сообщать это только если в партии есть навьяры - return [[У нас не хватит оборудования. Лучше возьми кого-нибудь из навьяров]]; - end; + char_learr:accompany(false); + char_phaetlarr:accompany(false); + char_radcliffe:accompany(false); + char_wright:accompany(false); + char_anna:accompany(true); + pon('stay'); + poff('join'); end; }; - { tag = "stay", always = "true", "Оставайся на Левиафане", "Хорошо", + { tag = "stay", always = "true", "Оставайся на Левиафане", [[Анна отвечает: "Хорошо". ]], function() char_anna:accompany(false); pon('join'); poff('stay'); end; }; - { tag = "exit", always = "true", "Это все", "Хорошо", + { tag = "exit", always = "true", "Это все", [[Анна отвечает: "До встречи". ]], function() back(); end; @@ -490,29 +1014,34 @@ anna_home_dlg = dlg { { tag = "talk_more"}; {tag="on_anna", "Расскажи о себе. ", function(s) char_anna.anna_asked = 2; - return [[Анна Рэдклифф грустно вздыхает: "Мне почти нечего рассказывать. Я с молодости живу здесь, на Атлантиде. Когда Уолтер сказал, что мы будем жить здесь, я сперва расстроилась -- тогда это казалось мне невероятно скучным -- жить вдалеке от цивилизации, среди людей, которые старше меня на двадцать с лишним лет. На самом деле все оказалось не столь плохо -- здесь есть навьяры. Когда они заняты -- я сижу в библиотеке, с Мари, или смотрю фильмы в Игнисе". ]]; + return [[Анна Рэдклифф грустно вздыхает: "Мне почти нечего рассказывать. Я с молодости живу здесь, на Атлантиде. Когда Уолтер сказал, что мы будем жить здесь, я сперва расстроилась -- тогда это казалось мне невероятно скучным -- жить вдали от цивилизации, среди людей, которые старше меня на двадцать с лишним лет. На самом деле все оказалось не столь плохо -- здесь есть навьяры. Когда они заняты -- я сижу в библиотеке, с Мари, или смотрю фильмы в Игнисе". ]]; end}; {tag="on_walter", "Расскажи об Уолтере. ", function(s) char_anna.walter_asked = 2; return [[Анна Рэдклифф отвечает: "Уолтер -- мой старший брат. Он заботится обо мне с тех пор, как мама с папой покинули нас. Хотя моя жизнь сильно изменилась, когда Уолтер забрал меня с собой на Атлантиду, я не жалею об этом". ]]; end}; {tag="on_atlantis", "Что ты думаешь об Атлантиде?", function(s) - char_anna.on_atlantis = 2; + char_anna.atlantis_asked = 2; return [[Анна Рэдклифф отвечает: "Последние десять лет я живу здесь, на Атлантиде. Я хорошо помню, как расстроена я была, приехав сюда. Конечно, я не думала, что мы все проведем здесь лет десять. Мне казалось, что уже через полгода-год мы вернемся на поверхность, но намерения вашего отца сильно отличались от этого. Потом Екатерина и Сильвия познакомили меня с Телнеарром и Хетеарром -- двумя навьярами, которые первыми жили на станции. Потом Хетеарр вернулся домой, а вместо него на станцию прибыл Ривеерр. А затем покинул станцию и Телнеарр. Его заменила Леарр". ]]; end}; {tag="on_drake", "Расскажи об Уильяме Дрейке. ", function(s) - char_anna.on_drake = 2; + char_anna.drake_asked = 2; return [[Анна Рэдклифф отвечает: "Хотя Дрейк -- руководитель Атлантиды, он проводит больше времени здесь, в Окулусе, чем в своем кабинете в Доминусе. Сейчас он в экспедиции -- они с Блэком отправились на поиски отдаленных навьярских поселений". ]]; end}; + {tag="on_black", "Расскажи об Адриане Блэке. ", function(s) + char_anna.black_asked = 2; + return [[Анна Рэдклифф пожимает плечами: "Он никогда мне не нравился. Остальные говорят, что он хорошо справляется с управлением станцией и вообще многое сделал для нас, но мне не нравится его холодность и неискренность".]]; + end}; {tag="on_join", "Почему ты решила присоединиться к нам?", function(s) char_anna.on_join = 2; if (char_anna.rel_on_join >= 0) then - return [[Анна Рэдклифф отвечает: "". ]]; - elseif (char_walter.rel_on_join >= 0) then - return [[Анна Рэдклифф отвечает: "". ]]; + return [[Анна Рэдклифф отвечает: "Я хотела помочь вам найти Уильяма. Если он не вернулся до сих пор, то возможно, что-то произошло с Надеждой". ]]; + elseif (char_radcliffe.rel_on_join >= 0) then + return [[Анна Рэдклифф отвечает: "Уолтер убедил меня отправиться на Левиафане. Ему нужна была моя помощь". ]]; else - return [[Анна Рэдклифф отвечает: "". ]]; + return [[Анна Рэдклифф отвечает: "Уолтер убедил меня отправиться на Левиафане. Ему нужна была моя помощь". ]]; end; end}; + {tag="quit", always=true, "Поговорим в другой раз. ", [[Анна кивает: "Хорошо".]], code [[pret();]]}; }; }; \ No newline at end of file diff --git a/startup.lua b/startup.lua new file mode 100644 --- /dev/null +++ b/startup.lua @@ -0,0 +1,314 @@ +global { + warehouse18_found = false; + warehouse32_found = false; + warehouse32_visited = false; + dock_found = false; + leviathan_discovered = false; + atlantis_found = false; + temple_found = false; + iraaphaanotrr_found = false; + dypatreanotrr_found = false; + venaedanotrr_found = false; + nleyyslanotrr_found = false; + iraaphaanotrr_temple_found = false; + dypatreanotrr_temple_found = false; + venaedanotrr_temple_found = false; + nleyyslanotrr_temple_found = false; + deep_temple_found = false; + lseryanotrr_found = false; + + rel_phaetlarr = 0; + rel_walter = 0; + rel_learr = 0; + rel_anna = 0; + rel_jack = 0; + language_known = false; + cart_known = false; + + dt_code = {}; + dt_buttons = {}; + + --Глобальные состояния(для концовок) + conflict_resolved = false; -- Решен ли конфликт между навьярами + artifacts_returned = false; -- Вернили ли артефакты из храма навьярам? + wright_state = 0; -- был взят Райт на борт или нет + goldman_state = 0; -- 0 - Голдман не раскрыт, 1 - Голдман казнен, 2 - Голдман задержан, 3 - Голдман изгнан + leroy_state = 0; -- 0 - Леруа не раскрыт, 1 - Леруа казнен, 2 - Леруа задержан, 3 - Леруа изгнан + iraa_scepter = false; -- был ли возвращен скипетр в Ираафаанотр + iraa_map = false; -- был ли возвращен оригинал карты в Ираафаанотр + dyp_map = false; -- Передана ли карта(оригинал или копия в Дипатреанотр) + svetlova_help = 0; -- Дополнительная помощь, оказанная Светловой в исследовании навьяров --увеличивается, если показать ей КНО и скипетр +}; + +game.enable_save = function () + if here().nosave then + return false; + end; + return true; +end; + +game.enable_autosave = function () + if here().noautosave then + return false; + end; + return true; +end; + + +player_drake = player { + var { + hp = 10; + has_light = false; + party = {--[["learr", "radcliffe", "phaetlarr", "wright"]]}; + companion = nil; + money = 200; + }; + nam = "player"; + disp = "Дэвид Дрейк"; + disp2 = "Дрейка"; + disp3 = "Дрейку"; + where = 'port'; + + obj = {'hp_indicator', 'item_umbrella', 'item_charts', 'item_note_1', 'item_money', "item_bankbook"}; + + pay = function(s, c) + if (s.money >= c) then + s.money = s.money - c; + return true; + else + return false; + end; + end; +}; + +intro = room { + nam = "intro"; + hideinv = true; + disp = "Вступление"; + dsc = [[ + ВНИМАНИЕ: Это специальная предварительная версия игры. Ни один фрагмент игры не является финальным.^^ + Действие игры происходит в конце 19-го века. Вы играете за Дэвида Дрейка -- единственного сына богатого и уважаемого владельца транспортной компании "Вестхейвен Трансоушен". ^ + Несколько лет назад, когда Дэвиду было 10 лет, Уильям таинственным образом бесследно пропал. Полицейское расследование вскоре зашло в тупик и было прекращено. Через несколько месяцев компания, оставшаяся без своего владельца, обанкротилась, ее имущество распродается. ^ + После исчезновения отца Дэвид жил в Вашингтоне с бабушкой. Он пошел по стопам отца и выучился на инженера-кораблестроителя. Несколько дней назад в доме, где он жил, был обнаружен тайник, хранящий секретные документы отца -- карты, указывающие, по-видимому, на какие-то тайники Уильяма и записка с адресом и именем.^ + Одержимый идеей узнать больше, Дэвид отправляется в Лондон... + ]]; + obj = { + vway("Начать игру", "{Начать игру}", 'aurora_borealis'); + } +}; + +game.nam = "Пробуждение"; +game.dsc = [[ + Действие игры происходит в конце 19-го века. Вы играете за Дэвида Дрейка, сына владельца крупной транспортной компании "Вестхейвен Трансоушен". Несколько лет назад Уильям Дрейк, отец главного героя бесследно пропадает. Компания вскоре разваливается. Поиски ни к чему не приводят. Когда казалось бы уже все потеряно, в доме Дрейков находят тайник с документами Уильяма. Несколько схем строений, принадлежащих компании и клочок бумаги с адресом некоего Майкла Райта в Лондоне. Естественно, Дэвид как можно скорее отправляется в Великобританию... + Вам предстоит отыскать подводную лодку, посетить подводную станцию, построенную Уильямом, встретить древнюю расу подводных жителей, поучаствовать в событиях, описанных древними легендами этой расы и узнать, что стало с Уильямом Дрейком. +]]; + +game_act_phrases = { + "Вы не знаете, что с этим делать. "; + "Вам нет смысла это трогать. "; + "Вам это ничем не поможет. "; + "Это бессмысленно. "; + "Незачем это трогать. "; +}; + +game_use_phrases = { + "Вам это ничем не поможет. "; + "Это бессмысленно. "; + "Вы не знаете, как это сделать. " +}; + +game.act = function(s) + return game_act_phrases[rnd(#game_act_phrases)]; +end; + +game.use = function(s) + return game_use_phrases[rnd(#game_use_phrases)]; +end; +game.inv = "INV: Если вы видите это сообщение -- это баг. "; + +preview_unavailable_learr = game_over("preview_unavailable_learr", [[Спасти Леарр у обитателей Атлантиды не получилось. Гибель навьярессы поставила под угрозу многое, чего удалось добиться экипажу станции за долгие годы под водой. ^^Узнать, что произошло дальше, вы сможете в полной версии игры.^^Вы можете загрузить игру и попробовать спасти Леарр самостоятельно. ]]); + +preview_unavailable_rayfish = game_over("preview_unavailable_rayfish", [[Убив ската, вы восстанавливаете против себя всех навьяров из Дипатреанотра и Ираафаанотра. В ваших дальнейших поисках вам придется расчитывать только на себя.^^Узнать, что произошло дальше, вы сможете в полной версии игры.^^Вы можете загрузить игру и попробовать обойтись без убийства ската. ]]); + +preview_unavailable_venaedanotrr = cutscene("preview_unavailable_venaedanotrr", "Спасибо за игру", [[Левиафан полным ходом несется вдаль, к невиданным доселе навьярским поселениям. Кто знает, какие приключения ждут вас и остальных членов экипажа субмарины?^^Узнать, что произошло дальше, вы сможете в полной версии игры. Если вы не собрали три фрагмента карты, то вы можете продолжить игру. ^^Поздравляем с успешным прохождением предварительной версии игры. Мы ждем ваших отзывов на почту: inbox@silverwing.one^Следите за выходом новых версий на нашем сайте: awakening.silverwing.one]], "leviathan_wheelhouse"); + +function init() + ---modules init + pl = player_drake; + require "dbg"; + atlantis_init(); + leviathan_init(); + warehouse18_init(); + warehouse32_init(); + + local nums = {1,2,3,4,5,6}; + for i = 1, 4 do + local index = rnd(#nums); + table.insert(dt_code, nums[index]); + table.remove(nums, index); + end; + nums = {1,2,3,4,5,6}; + for i = 1, 3 do + local index = rnd(#nums); + table.insert(dt_buttons, nums[index]); + table.remove(nums, index); + end; + ---game init + pl.where = intro; + ---debug + + --pl.where = "item_book_dlg"; + --pl.where = "dyp_obelisk_puzzle"; + --language_known = true; + --put("item_toolbox", pl); + --put("item_electric_lamp", pl); + --put("item_dynamo", pl); + --put("item_toolbox", pl); + --put("item_cogs", pl); + --put("item_ducttape", pl); + --put("item_electrodes", pl); + --pl.where = dock_2; + --pl.where = warehouse_32; + --put(item_lamp, pl); + --language_known = true; + --pl.where = "leviathan_airlock"; + --move(submarine_leviathan, "iyh_rear_entrance_foot"); + --put(item_suit, pl); + --put(item_suit, pl); + + --pl.where = "atlantis_intro_dock"; + + ---leviathan + --submarine_leviathan.airpump = false; + --[[ + leviathan_airlock.has_light = true; + leviathan_wardroom.has_light = true; + leviathan_wheelhouse.has_light = true; + leviathan_corridor.has_light = true; + leviathan_cabin_1.has_light = true; + leviathan_cabin_2.has_light = true; + leviathan_cabin_3.has_light = true; + leviathan_cabin_4.has_light = true; + leviathan_cabin_5.has_light = true; + leviathan_captains_cabin.has_light = true; + leviathan_cargo_hold.has_light = true; + leviathan_engines.has_light = true; + leviathan_lower_deck.has_light = true; + leviathan_life_support.has_light = true; + submarine_leviathan.air_level = 432000; + submarine_leviathan.battery = true; + submarine_leviathan.battery_charge = 100; + submarine_leviathan.circuit_breaks = 0; + submarine_leviathan.valves_to_replace = 0; + submarine_leviathan.power_on = true + pl.party = {'wright', 'learr'}; + char_learr.follow = true; + atlantis_found = true;--]] + --take(item_colt); + --take(item_harpoon); + -- checkers_game:reset(); + --pl.where = "checkers_game"; + --- iraaphaanotrr + --move(submarine_leviathan, "iraa_temple_entrance"); + --[[ + ---IYH + lifeon(char_learr); + lifeon(char_wright); + lifeon(char_radcliffe); + lifeon(char_anna); + lifeon(char_aikerjarr_lev); + pl.party = {'learr', 'wright', 'radcliffe', 'anna'}; + atlantis_found = true; + move(submarine_leviathan, "ctt_dyp_temple_entrance"); + --move(submarine_leviathan, "iyh_far_from_entrance_foot"); + pl.where = leviathan_wheelhouse; + submarine_leviathan.battery = true; -- Состояние батареи + submarine_leviathan.battery_charge = 100; -- Уровень заряда батареи + submarine_leviathan.circuit_breaks = 0; -- Разрывы цепи + submarine_leviathan.valves_to_replace = 0; -- Количество клапанов, которые нужно заменить для полноценной работы + submarine_leviathan.power_on = true; -- включена ли энергия + submarine_leviathan.air_level = 432000; -- запас воздуха. Максимум - 5 дней(5 * 24 * 60 * 60 = 432000) + submarine_leviathan.airpump = false; + leviathan_airlock.has_light = true; + leviathan_wardroom.has_light = true; + leviathan_wheelhouse.has_light = true; + leviathan_corridor.has_light = true; + leviathan_cabin_1.has_light = true; + leviathan_cabin_2.has_light = true; + leviathan_cabin_3.has_light = true; + leviathan_cabin_4.has_light = true; + leviathan_cabin_5.has_light = true; + leviathan_captains_cabin.has_light = true; + leviathan_cargo_hold.has_light = true; + leviathan_engines.has_light = true; + leviathan_lower_deck.has_light = true; + leviathan_life_support.has_light = true; + --]] + + --- Chapter 1: Atlantis + --[[submarine_leviathan.battery = true; -- Состояние батареи + submarine_leviathan.battery_charge = 100; -- Уровень заряда батареи + submarine_leviathan.circuit_breaks = 0; -- Разрывы цепи + submarine_leviathan.valves_to_replace = 0; -- Количество клапанов, которые нужно заменить для полноценной работы + submarine_leviathan.power_on = true; -- включена ли энергия + submarine_leviathan.air_level = 432000; -- запас воздуха. Максимум - 5 дней(5 * 24 * 60 * 60 = 432000) + submarine_leviathan.airpump = false; + leviathan_airlock.has_light = true; + leviathan_wardroom.has_light = true; + leviathan_wheelhouse.has_light = true; + leviathan_corridor.has_light = true; + leviathan_cabin_1.has_light = true; + leviathan_cabin_2.has_light = true; + leviathan_cabin_3.has_light = true; + leviathan_cabin_4.has_light = true; + leviathan_cabin_5.has_light = true; + leviathan_captains_cabin.has_light = true; + leviathan_cargo_hold.has_light = true; + leviathan_engines.has_light = true; + leviathan_lower_deck.has_light = true; + leviathan_life_support.has_light = true; + + pl.party = {'wright'}; + put(item_toolbox, pl); + put(item_ducttape, pl); + pl.where = "leviathan_airlock"; + atlantis_found = true; + move(submarine_leviathan, "atl_aqua_leviathan_dock"); + submarine_leviathan:enable(); ]] + + --ven_temple_l1.position = "66"; + --put(item_ven_tablet, pl); + --put(item_harpoon, pl); + --put(item_colt, pl); + --ven_shark.position = "55"; + --pl.where = "za_plaetlarr_fight"; + --pl.where = "lse_final_battle"; + --move(submarine_leviathan, "za_temple_back_entrance_foot"); + --char_anna.follow = true; + --pl.where = "ven_chest_look"; + --move(ven_shark, "ven_temple_l1"); + + --put(item_suit, pl); + + -- pl.where = warehouse_32; + -- pl.where = w32_mgr; + + -- put(item_cogs, pl); + -- put(item_pump_details, pl); + -- put(item_electrodes, pl); + --put(item_lamp, pl); + -- pl.where = aurora_borealis; + -- move(submarine_leviathan, first_city_entrance); + -- move(submarine_leviathan, first_city_outer_east); + -- walk(final_scene); + -- walk(leviathan_wardroom); + -- walk(leviathan_wardroom); + -- put("char_learr", "leviathan_wardroom"); + -- put("char_phaetlarr", "leviathan_engines"); + -- put("char_radcliffe", "leviathan_engines"); + -- put("char_wright", "leviathan_wardroom"); + -- pl.where = leviathan_airlock; + -- pl.where = hotel_street; + -- pl.where = warehouse_32_entry; + -- dock_found = true; +end; diff --git a/theme.ini b/theme.ini new file mode 100644 --- /dev/null +++ b/theme.ini @@ -0,0 +1,2 @@ +;win.col.link = #801010 +scr.gfx.scalable = 1 diff --git a/travel.lua b/travel.lua --- a/travel.lua +++ b/travel.lua @@ -1,7 +1,6 @@ --[[ Кучер, который будет за деньги возить вас по локациям первой части ]] ---TODO случайный ответ кучера из нескольких вариантов char_coachman = obj { nam = "coachman"; disp = "экипаж"; @@ -33,6 +32,9 @@ coachman_dlg = dlg { hideinv = true; entered = function(s) poff(1, 2, 3, 4, 5, 6, 7); + if (where(char_coachman) ~= london_bank_street) then + pon(7); + end; if (where(char_coachman) ~= port_street) then pon(6); end; @@ -119,6 +121,17 @@ coachman_dlg = dlg { end; end }, + {7, always = true, "В банк (5 монет). ", + function (s) + if (pl:pay(5)) then + walk 'london_bank_street'; + return coachman_responses_ok[rnd(#coachman_responses_ok)]; + else + back(); + return coachman_responses_fail[rnd(#coachman_responses_fail)]; + end; + end + }, {255, always = true, "Я передумал. ", function(s) back() end} diff --git a/utils.lua b/utils.lua --- a/utils.lua +++ b/utils.lua @@ -165,8 +165,12 @@ end); function npc(tab) if (not tab.act) then tab.act = function(s) - if (s.dlg) then - walkin(s.dlg); + local dlg = nil; + if s.dlg then + dlg = EngineUtils.getValue(s.dlg, s); + end; + if dlg then + walkin(dlg); else local phrases = EngineUtils.getValue(s.phrases, s); return phrases[rnd(#phrases)]; @@ -207,7 +211,7 @@ function darkroom(tab) end; tab.life = function(s) local hasLight = EngineUtils.getValue(s.has_light, s); - local plLight = EngineUtils.getValue(pl.has_light, pl); + local plLight = EngineUtils.getValue(me().has_light, pl); if (hasLight) then -- show all objects that were not explicitly disabled(any seen_level) for i = 1, #objs(s) do @@ -258,7 +262,7 @@ function darkroom(tab) tab.dsc = function(s) local lt; local hasLight = EngineUtils.getValue(s.has_light, s); - local plLight = EngineUtils.getValue(pl.has_light, pl); + local plLight = EngineUtils.getValue(me().has_light, pl); if (hasLight) then lt = EngineUtils.getValue(s.dsc_lit); elseif (plLight) then @@ -282,7 +286,7 @@ function game_over(nam, dsc) }; end; -function cutscene(nam, disp, dsc, nxt, entered) +function cutscene(nam, disp, dsc, nxt, entered, pic) return room { nam = nam; not_follow = true; @@ -291,6 +295,7 @@ function cutscene(nam, disp, dsc, nxt, e hideinv = true; cutscene = true; dsc = dsc; + pic = pic; obj = { vway("continue", "{Продолжить}", nxt); }; @@ -667,6 +672,7 @@ end; if (here().input:len() < here().maxlen) then here().input = here().input .. "0"; end; + return ""; end; }; @@ -677,6 +683,7 @@ end; if (here().input:len() > 0) then here().input = here().input:sub(1, here().input:len() - 1); end; + return ""; end; }; @@ -685,6 +692,7 @@ end; dsc = "{Отмена}"; act = function(s) back(); + return ""; end; }; @@ -695,6 +703,7 @@ end; if (here().input) then here():check(here().input); end; + return ""; end; }; @@ -765,33 +774,33 @@ end; end; end; phr = { - {1, always = "true", "Использовать рацию", function(s) - local val = EngineUtils.getValue(_atlantis.suit_menu._item.dlg, _atlantis.suit_menu._item); + {1, always = "true", "[Использовать рацию]", function(s) + local val = EngineUtils.getValue(_atlantis_suit_menu._item.dlg, _atlantis_suit_menu._item); if (val) then walkin(val); - stead.ref(val).__from__ = _atlantis.suit_menu.__from__; + stead.ref(val).__from__ = _atlantis_suit_menu.__from__; else back(); return "Никто не отвечает"; end; end}; {2, always = "true", function(s) - if (pl.has_light) then - return "Выключить фонарь"; + if (me().has_light) then + return "[Выключить фонарь]"; else - return "Включить фонарь"; + return "[Включить фонарь]"; end; end, function(s) - if (pl.has_light) then - pl.has_light = false; + if (me().has_light) then + me().has_light = false; return "Вы выключаете фонарь. "; else - pl.has_light = true; + me().has_light = true; return "Вы включаете фонарь. "; end; end}; - {3, always = "true", "Использовать кодировщик", code [[ walkin("_atlantis_coder"); ]]}; - {4, always = "true", "Снять скафандр", function(s) + {3, always = "true", "[Использовать кодировщик]", code [[ walkin("_atlantis_coder"); ]]}; + {4, always = "true", "[Снять скафандр]", function(s) if (EngineUtils.getValue(_atlantis_suit_menu._item.cantakeoff, _atlantis_suit_menu._item)) then drop(_atlantis._uit_menu._item); back(); @@ -875,6 +884,8 @@ labyrinth = function(tab) tab.dsc = function(s) if (type(dsc) == "function") then return dsc(s); + elseif dsc == nil then + return s.map[s.position].name; else return dsc .. s.map[s.position].name; end; @@ -918,4 +929,19 @@ labyrinth = function(tab) stead.add_var(tab, { oldposition = tab.position; }); return lab; +end; + +function deepcopy(orig) + local orig_type = type(orig) + local copy + if orig_type == 'table' then + copy = {} + for orig_key, orig_value in next, orig, nil do + copy[deepcopy(orig_key)] = deepcopy(orig_value) + end + setmetatable(copy, deepcopy(getmetatable(orig))) + else -- number, string, boolean, etc + copy = orig + end + return copy end; \ No newline at end of file diff --git a/warehouse18.lua b/warehouse18.lua --- a/warehouse18.lua +++ b/warehouse18.lua @@ -55,12 +55,12 @@ dlg_w18_sec_out_first = dlg { {2, "Я Дэвид Дрейк. ", [[Охранник пожимает плечами: "Мне это ни о чем не говорит". ]]}; {3, "Могу я поговорить с управляющим?", [[Охранник отрицательно качает головой: "Управляющий занят". ]], [[ pon(4); ]]}; {4, false, "У меня срочное дело к управляющему. ", [[Охранник чешет подбородок: "Я не могу вас пропустить". ]], [[ pon(5);pon(6); ]]}; - {5, false, "Может эти 5 шиллингов помогут вам принять решение? ", function(s) - if (pl:pay(5)) then + {5, false, "Может эти 10 шиллингов помогут вам принять решение? ", function(s) + if (pl:pay(10)) then walkin('warehouse_18_manager'); return [[Глаза охранника заблестели. Он выхватывает монеты из ваших рук и говорит: "Следуйте за мной". ]] else - return [[Охранник с непониманием смотрит на вас: "Какие 5 шиллингов? Здесь их нет". ]] + return [[Охранник с непониманием смотрит на вас: "Какие 10 шиллингов? Здесь их нет". ]] end; end}; {6, false, "Может есть способ договориться? ", [[Охранник отрицательно качает головой: "Что вам нужно от управляющего?" ]], [[ pon(7);pon(8); ]]}; diff --git a/warehouse32.lua b/warehouse32.lua --- a/warehouse32.lua +++ b/warehouse32.lua @@ -128,6 +128,16 @@ wright_travel_dlg = dlg { }; }; +w32_tablet = cutscene("w32_tablet", "Склад 32, задняя дверь", "Табличка со схемой склада висит рядом с дверью. ", "w32_backdoor", null, "images/wh32_plan.png"); + +w32_tablet_obj = obj { + nam = "w32_tablet_obj"; + dsc = "Рядом с дверью висит {табличка}. "; + act = function(s) + walk(w32_tablet); + end; +}; + w32_backdoor = room { nam = "w32_backdoor"; disp = "Склад 32, задняя дверь"; @@ -137,8 +147,8 @@ w32_backdoor = room { end; way = { kh_vroom("Войти", function(s) - if (pl.has_light) then - pn("Мне стоит погасить лампу, прежде чем заходить внутрь. "); + if (me().has_light) then + pn("Стоит погасить лампу, прежде чем заходить внутрь. "); return false; else return "warehouse_32"; @@ -146,6 +156,9 @@ w32_backdoor = room { end); kh_vroom("Через забор", "warehouse_32_behind_night"); }; + obj = { + "w32_tablet_obj"; + }; }; w32_mgr = darkroom { @@ -155,12 +168,8 @@ w32_mgr = darkroom { }; nam = "w32_mgr"; disp = "Склад 32, кабинет управляющего"; - dsc_dark = [[ - Вы находитесь в кабинете управляющего. В темноте вы можете лишь смутно различить очертания предметов. - ]]; - dsc_halflit = [[ - Вы находитесь в кабинете управляющего. - ]]; + dsc_dark = [[Вы находитесь в кабинете управляющего. В темноте вы можете лишь смутно различить очертания предметов. ]]; + dsc_halflit = [[Вы находитесь в кабинете управляющего. ]]; entered = function(s) warehouse_32.pos = "54"; end; @@ -171,25 +180,24 @@ w32_mgr = darkroom { if (not w32_mgr.key_inplace or not w32_mgr.book_inplace) then pr("Стоит вернуть все как было. "); return false; - elseif (pl.has_light) then + elseif (me().has_light) then pr("Если я не погашу лампу, меня заметят. "); return false; else - return "warehouse_32" + return "warehouse_32"; end; end, 2); }; obj = { 'w32_mgr_table', - 'w32_mgr_bookcase' + 'w32_mgr_bookcase', + 'money_wh32' }; }; w32_journal = obj { nam = 'w32_journal'; - dsc = [[ - В ящике стола лежит {учетная книга}, в которую занесено все содержимое склада. - ]]; + dsc = [[В ящике стола лежит {учетная книга}, в которую занесено все содержимое склада. ]]; act = function(s) local list = [[Среди сотен записей вы натыкаетесь на несколько, отмеченных как "Westhaven":]]; for i = 1, #w32_shelf_input.items do @@ -209,13 +217,9 @@ w32_mgr_table = obj { nam = 'w32_mgr_table'; dsc = function(s) if (s.open) then - return [[ - В центре комнаты расположен большой письменный стол. {Ящик} стола выдвинут. - ]]; + return [[В центре комнаты расположен большой письменный стол. {Ящик} стола выдвинут. ]]; else - return [[ - В центре комнаты расположен большой письменный стол. В столе имеется {ящик}. - ]]; + return [[В центре комнаты расположен большой письменный стол. В столе имеется {ящик}. ]]; end; end; act = function(s) @@ -223,20 +227,14 @@ w32_mgr_table = obj { if (s.open) then s.open = false; w32_journal:disable(); - return [[ - Вы задвигаете ящик. - ]]; + return [[Вы задвигаете ящик. ]]; else s.open = true; w32_journal:enable(); - return [[ - Вы выдвигаете ящик. - ]]; + return [[Вы выдвигаете ящик. ]]; end; else - return [[ - Ящик заперт. Вам придется найти ключ. - ]]; + return [[Ящик заперт. Вам придется найти ключ. ]]; end; end; used = function(s, o) @@ -260,21 +258,27 @@ w32_mgr_table = obj { }; w32_mgr_bookcase = obj { + var { + state = 0; + }; seen_level = 1; nam = 'w32_mgr_bookcase'; - dsc = [[ - Одну из стен практически целиком занимает {шкаф}, заполненный книгами и записями. - ]]; + dsc = [[Одну из стен практически целиком занимает {шкаф}, заполненный книгами и записями. ]]; act = function(s) item_w32_key:enable(); - return "Вы замечаете спрятанный за книгами ключ. "; + if (s.state == 0) then + s.state = 1; + return "Вы замечаете спрятанный за книгами ключ. "; + else + return "Записи, журналы и прочие малоинтересные вам книги. "; + end; end; used = function(s, o) if (o == item_w32_key) then w32_mgr.key_inplace = true; remove(item_w32_key, pl); put(item_w32_key, s); - return "Вы возвращает ключик на место"; + return "Вы возвращаете ключик на место. "; end; end; obj = { @@ -284,22 +288,12 @@ w32_mgr_bookcase = obj { warehouse_32_definitions = { ---line E - ["01"] = { name="у задней двери", dsc=[[ - К югу от вас расположена задняя дверь склада. - ]], e1 = "11", ex3 = "w32_backdoor"}; - ["02"] = { name="тупик", dsc=[[ - - ]], e1 = "12", corner = true}; - ["03"] = { name="тупик", dsc=[[ - - ]], e1 = "13", corner = true}; - ["04"] = { name="тупик", dsc=[[ - - ]], e1 = "14", corner = true}; + ["01"] = { name="у задней двери", dsc=[[К югу от вас расположена задняя дверь склада. ]], e1 = "11", ex3 = "w32_backdoor"}; + ["02"] = { name="тупик", dsc=[[Вы в тупике. К югу от вас находится стена, на востоке и западе -- стеллажи. Здесь составлено несколько больших ящиков, за которыми можно спрятаться. ]], e1 = "12", corner = true}; + ["03"] = { name="тупик", dsc=[[Вы в тупике. К югу от вас находится стена, на востоке и западе -- стеллажи. Здесь составлено несколько больших ящиков, за которыми можно спрятаться. ]], e1 = "13", corner = true}; + ["04"] = { name="тупик", dsc=[[Вы в тупике. К югу от вас находится стена, на востоке и западе -- стеллажи. Здесь составлено несколько больших ящиков, за которыми можно спрятаться. ]], e1 = "14", corner = true}; ---line DE - ["10"] = { name="тупик", dsc=[[ - - ]], e2 = "11", corner = true}; + ["10"] = { name="тупик", dsc=[[Вы в тупике. К западу от вас находится стена, на севере и юге -- стеллажи. Здесь составлено несколько больших ящиков, за которыми можно спрятаться. ]], e2 = "11", corner = true}; ["11"] = { name="секция D1", dsc=[[ ]], e1 = "21", e2="12", e3="01", e4="10", sector = "D1"}; @@ -312,13 +306,9 @@ warehouse_32_definitions = { ["14"] = { name="секция D4", dsc=[[ ]], e1 = "24", e2="15", e3="04", e4="13", sector = "D4"}; - ["15"] = { name="тупик", dsc=[[ - - ]], e4 = "14", corner = true}; + ["15"] = { name="тупик", dsc=[[Вы в тупике. К востоку от вас находится стена, на севере и юге -- стеллажи. Здесь составлено несколько больших ящиков, за которыми можно спрятаться. ]], e4 = "14", corner = true}; ---line CD - ["20"] = { name="тупик", dsc=[[ - - ]], e2 = "21", corner = true}; + ["20"] = { name="тупик", dsc=[[Вы в тупике. К западу от вас находится стена, на севере и юге -- стеллажи. Здесь составлено несколько больших ящиков, за которыми можно спрятаться. ]], e2 = "21", corner = true}; ["21"] = { name="секция C1", dsc=[[ ]], e1 = "31", e2="22", e3="11", e4="20", sector = "C1"}; @@ -331,13 +321,9 @@ warehouse_32_definitions = { ["24"] = { name="секция C4", dsc=[[ ]], e1 = "34", e2="25", e3="14", e4="23", sector = "C4"}; - ["25"] = { name="тупик", dsc=[[ - - ]], e4 = "24", corner = true}; + ["25"] = { name="тупик", dsc=[[Вы в тупике. К востоку от вас находится стена, на севере и юге -- стеллажи. Здесь составлено несколько больших ящиков, за которыми можно спрятаться. ]], e4 = "24", corner = true}; ---line BC - ["30"] = { name="тупик", dsc=[[ - - ]], e2 = "31", corner = true}; + ["30"] = { name="тупик", dsc=[[Вы в тупике. К западу от вас находится стена, на севере и юге -- стеллажи. Здесь составлено несколько больших ящиков, за которыми можно спрятаться. ]], e2 = "31", corner = true}; ["31"] = { name="секция B1", dsc=[[ ]], e1 = "41", e2="32", e3="21", e4="30", sector = "B1"}; @@ -350,13 +336,9 @@ warehouse_32_definitions = { ["34"] = { name="секция B4", dsc=[[ ]], e1 = "44", e2="35", e3="24", e4="33", sector = "B4"}; - ["35"] = { name="тупик", dsc=[[ - - ]], e4 = "34", corner = true}; + ["35"] = { name="тупик", dsc=[[Вы в тупике. К востоку от вас находится стена, на севере и юге -- стеллажи. Здесь составлено несколько больших ящиков, за которыми можно спрятаться. ]], e4 = "34", corner = true}; ---line AB - ["40"] = { name="тупик", dsc=[[ - - ]], e2 = "41", corner = true}; + ["40"] = { name="тупик", dsc=[[Вы в тупике. К западу от вас находится стена, на севере и юге -- стеллажи. Здесь составлено несколько больших ящиков, за которыми можно спрятаться. ]], e2 = "41", corner = true}; ["41"] = { name="секция A1", dsc=[[ ]], e1 = "51", e2="42", e3="31", e4="40", sector = "A1"}; @@ -369,22 +351,12 @@ warehouse_32_definitions = { ["44"] = { name="секция A4", dsc=[[ ]], e1 = "54", e2="45", e3="34", e4="43", sector = "A4"}; - ["45"] = { name="тупик", dsc=[[ - - ]], e4 = "34", corner = true}; + ["45"] = { name="тупик", dsc=[[Вы в тупике. К востоку от вас находится стена, на севере и юге -- стеллажи. Здесь составлено несколько больших ящиков, за которыми можно спрятаться. ]], e4 = "34", corner = true}; ---line A - ["51"] = { name="тупик", dsc=[[ - - ]], e3 = "41", corner = true}; - ["52"] = { name="у входа", dsc=[[ - К северу от вас расположен главный вход склада, но он заперт. - ]], e3 = "42"}; - ["53"] = { name="тупик", dsc=[[ - - ]], e3 = "43", corner = true}; - ["54"] = { name="у входа в кабинет управляющего", dsc=[[ - К северу от вас расположена дверь, ведущая, судя по табличке на ней, в кабинет управляющего. - ]], e3 = "44", ex1="w32_mgr"}; + ["51"] = { name="тупик", dsc=[[Вы в тупике. К северу от вас находится стена, на востоке и западе -- стеллажи. Здесь составлено несколько больших ящиков, за которыми можно спрятаться. ]], e3 = "41", corner = true}; + ["52"] = { name="у входа", dsc=[[К северу от вас расположен главный вход склада, но он заперт. ]], e3 = "42"}; + ["53"] = { name="тупик", dsc=[[Вы в тупике. К северу от вас находится стена, на востоке и западе -- стеллажи. Здесь составлено несколько больших ящиков, за которыми можно спрятаться. ]], e3 = "43", corner = true}; + ["54"] = { name="у входа в кабинет управляющего", dsc=[[К северу от вас расположена дверь, ведущая в кабинет управляющего. ]], e3 = "44", ex1="w32_mgr"}; }; function getDirName(dir) @@ -404,14 +376,84 @@ warehouse_32 = room { pos = "01"; hidden = false; guards = { - { pos = "21", dir=1, s = 1 }; --s=1 - должен повернуть направо, s=2 - должен пройти прямо - { pos = "31", dir=4, s = 1 }; --s=1 - должен повернуть направо, s=2 - должен пройти прямо - { pos = "24", dir=2, s = 1 }; --s=1 - должен повернуть направо, s=2 - должен пройти прямо - { pos = "34", dir=3, s = 1 }; --s=1 - должен повернуть направо, s=2 - должен пройти прямо + { pos = "11", dir=1, s = 2 }; --s=1 - должен идти на юг(или повернуть по часовой стрелке, если смотрит не на юг), s=2 - на север + { pos = "42", dir=2, s = 1 }; --s=1 - должен идти на юг(или повернуть по часовой стрелке, если смотрит не на юг), s=2 - на север + { pos = "13", dir=1, s = 2 }; --s=1 - должен идти на юг(или повернуть по часовой стрелке, если смотрит не на юг), s=2 - на север + { pos = "44", dir=2, s = 1 }; --s=1 - должен идти на юг(или повернуть по часовой стрелке, если смотрит не на юг), s=2 - на север }; }; nam = "warehouse_32"; nolamp = true; + map = { + {1,1,2,1,1,1,1,1,1,1,1}; + {1,3,0,3,0,3,0,3,0,3,1}; + {1,0,0,0,0,0,0,0,0,0,1}; + {1,3,0,3,0,3,0,3,0,3,1}; + {1,0,0,0,0,0,0,0,0,0,1}; + {1,3,0,3,0,3,0,3,0,3,1}; + {1,0,0,0,0,0,0,0,0,0,1}; + {1,3,0,3,0,3,0,3,0,3,1}; + {1,0,0,0,0,0,0,0,0,0,1}; + {1,3,0,3,0,3,0,3,0,3,1}; + {1,1,1,1,2,1,1,1,2,1,1}; + }; + pic = function(s) + local pl_y = math.floor(tonumber(s.pos) / 10); + local pl_x = tonumber(s.pos) % 10; + local pl_xm = pl_x * 2 + 1; + local deltax = 0; + local deltay = 0; + if pl_x == 0 then + pl_xm = 2; + deltax = -32; + elseif pl_x == 5 then + pl_xm = 10; + deltax = 32; + end; + local pl_ym = pl_y * 2 + 1; + if pl_y == 0 then + pl_ym = 2; + deltay = 32; + elseif pl_y == 5 then + pl_ym = 10; + deltay = -32; + end; + local rval = "images/wh32_bg.png"; + + + for x = 0, 8 do + for y = 0, 8 do + print(pl_ym - 4 + y, pl_xm - 4 + x) + if pl_xm - 4 + x > 0 and pl_ym - 4 + y > 0 and pl_xm - 4 + x < 12 and pl_ym - 4 + y < 12 then + if s.map[pl_ym - 4 + y][pl_xm - 4 + x] == 1 then + rval = rval .. ";images/wh32_wall.png@" .. tostring((x) * 32) .. "," .. tostring(256 - (y) * 32); + elseif s.map[pl_ym - 4 + y][pl_xm - 4 + x] == 2 then + rval = rval .. ";images/wh32_door.png@" .. tostring((x) * 32) .. "," .. tostring(256 - (y) * 32); + elseif s.map[pl_ym - 4 + y][pl_xm - 4 + x] == 3 then + rval = rval .. ";images/wh32_shelves.png@" .. tostring((x) * 32) .. "," .. tostring(256 - (y) * 32); + end; + else + rval = rval .. ";box:32x32,black,255@" .. tostring((x) * 32) .. "," .. tostring(256 - (y) * 32); + end; + end; + end; + + + for i = 1, #s.guards do + local g_y = math.floor(tonumber(s.guards[i].pos) / 10); + local g_x = tonumber(s.guards[i].pos) % 10; + if pl_y - g_y == 0 or pl_x - g_x == 0 and math.abs(pl_y - g_y) + math.abs(pl_x - g_x) < 3 then + rval = rval .. ";images/wh32_guard_" .. tostring(s.guards[i].dir) .. ".png@" .. tostring((g_x - pl_x) * 64 + 128 + deltax) .. ",".. tostring((pl_y - g_y) * 64 + 128 + deltay); + end; + if math.abs(pl_y - g_y) == 1 and math.abs(pl_x - g_x) == 1 then + rval = rval .. ";images/unseen_enemy.png@" .. tostring((g_x - pl_x) * 64 + 128 + deltax) .. ",".. tostring((pl_y - g_y) * 64 + 128 + deltay); + end; + end; + + rval = rval .. ";images/wh32_player.png@128,128"; + print(rval); + return rval .. ";images/wh32_mask.png"; + end; disp = function(s) return "Склад 32, " .. s.definitions[s.pos].name; end; @@ -460,11 +502,31 @@ warehouse_32 = room { guardTurn = function(s) local pl_y = math.floor(tonumber(s.pos) / 10); local pl_x = tonumber(s.pos) % 10; - --print("player:", pl_x, pl_y); --Каждый стражник делает ход, игрок получает сообщения, о том, слышит ли он шаги, откуда и как они движутся for i = 1, #s.guards do - --TODO play with this random number to assume good gameplay: predictable enough, yet somewhat random if (rnd(10) < 9) then + --[[if (s.guards[i].s == 1) then + if s.guards[i].dir ~= 3 then + s.guards[i].dir = s.guards[i].dir + 1; + else + s.guards[i].pos = s.definitions[s.guards[i].pos].e3; + if not s.definitions[s.definitions[s.guards[i].pos].e3].e3 then + s.guards[i].s = 2; + end; + end; + else + if s.guards[i].dir ~= 1 then + s.guards[i].dir = s.guards[i].dir + 1; + if (s.guards[i].dir > 4) then + s.guards[i].dir = 1; + end; + else + s.guards[i].pos = s.definitions[s.guards[i].pos].e1; + if not s.definitions[s.definitions[s.guards[i].pos].e1].e1 then + s.guards[i].s = 1; + end; + end; + end;]] if (s.guards[i].s == 1) then s.guards[i].s = 2; s.guards[i].dir = s.guards[i].dir + 1; @@ -522,13 +584,13 @@ warehouse_32 = room { end; else if (g_x - pl_x == 1 and g_y - pl_y == 1) then - pr("К северовостоку от вас вы слышите шаги охранника. "); + pr("К северо-востоку от вас вы слышите шаги охранника. "); elseif (g_x - pl_x == 1 and pl_y - g_y == 1) then - pr("К юговостоку от вас вы слышите шаги охранника. "); + pr("К юго-востоку от вас вы слышите шаги охранника. "); elseif (pl_x - g_x == 1 and g_y - pl_y == 1) then - pr("К северозападу от вас вы слышите шаги охранника. "); + pr("К северо-западу от вас вы слышите шаги охранника. "); elseif (pl_x - g_x == 1 and pl_y - g_y == 1) then - pr("К югозападу от вас вы слышите шаги охранника. "); + pr("К юго-западу от вас вы слышите шаги охранника. "); end; end; end; diff --git a/wright.lua b/wright.lua --- a/wright.lua +++ b/wright.lua @@ -59,7 +59,7 @@ wright_dlg = dlg { return [[Джек Райт отвлекается от газеты: "Добрый день". ]]; elseif (s.state == 1) then --First meeting - char_wright_home.known = true; + char_wright_home.known = true; psub('first_visit'); return [[Перед вами молодой человек, одетый в недорогой, но опрятный костюм. Его бледное лицо украшает короткая темная борода и пышные усы. Темные волосы коротко острижены. Серые глаза с интересом разглядывают вас. Он протягивает вам руку и представляется: "Добрый день. Мое имя -- Джек Райт. Майкл -- мой отец, но он пропал несколько лет назад". ]]; elseif (s.state == 2) then @@ -75,7 +75,8 @@ wright_dlg = dlg { s.state = 5; warehouse32_found = true; psub('warehouse_discovered'); - return [[Джек отвлекается от документов: "Добрый день. У меня хорошие новости. Я нашел склад 32", - он достает карту города и показывает вам место. ]]; + pl.money = pl.money + 100; + return [[Джек отвлекается от документов: "Добрый день. У меня хорошие новости. Я нашел склад 32", -- он достает карту города и показывает вам место. Потом он достает из стола мешочек денег и протягивает вам со словами: "Надеюсь, это поможет тебе в поисках". ]]; end; elseif (s.state == 4) then --Documents taken back @@ -92,47 +93,47 @@ wright_dlg = dlg { pon("phr_leviathan"); end; return [[Джек отвлекается от газеты: "Добрый день". ]]; - elseif (s.state == 7) then + elseif (s.state == 6) then psub('warehouse_discovered3'); return [[Джек отвлекается от газеты: "Добрый день". ]]; end; end; phr = { {tag='first_visit'}; - {"Мое имя -- Дэвид Дрейк. Мне удалось найти кое-какие документы в одном из тайников отца. Этот адрес был среди них. Вы что-то знаете о судьбе моего отца? ", [[Джек вздыхает: "Это бесполезно. Я изучил практически все, до чего сумел дотянуться - газеты, судебные дела. И ничего - никаких зацепок. Компания обанкротилась, руководители пропали". ]], code [[wright_dlg.state = 2; psub('ask_documents'); ]]}; + {"Мое имя -- Дэвид Дрейк. Мне удалось найти кое-какие документы в одном из тайников отца. Этот адрес был среди них. Вы что-то знаете о судьбе моего отца? ", [[Джек вздыхает: "Это бесполезно. Я изучил практически все, до чего сумел дотянуться: газеты, судебные дела. И ничего -- никаких зацепок. Компания обанкротилась, руководители пропали". ]], code [[wright_dlg.state = 2; psub('ask_documents'); ]]}; {tag='ask_documents'}; - {always = true, "[Отдать документы]Посмотрите это. Не думаю, что вы это видели. ", [[Джек нехотя забирает бумаги из ваших рук и бегло их осматривает. Пожимая плечами, он комментирует: "Ничего интересного, просто планы старых зданий. Док 2? Отец там часто бывал, впрочем не думаю, что после 10 лет там что-то осталось. Если хотите - можете оставить документы, я попробую разузнать побольше". ]], code [[ + {always = true, "[Отдать документы] Посмотрите это. Не думаю, что вы это видели. ", [[Джек нехотя забирает бумаги из ваших рук и бегло их осматривает. Пожимая плечами, он комментирует: "Ничего интересного, просто планы старых зданий. Док 2? Отец там часто бывал, впрочем не думаю, что после 10 лет там что-то осталось. Если хотите, можете оставить документы, я попробую разузнать побольше". ]], code [[ dock_found = true; wright_dlg.state = 3; remove(item_charts, pl); psub("checking_documents"); ]]}; - {always = true, "У меня есть несколько вопросов.", [[Джек кивает: "Чем смогу - помогу". ]], code [[psub('questions')]]}; + {always = true, "У меня есть несколько вопросов.", [[Джек кивает: "Чем смогу -- помогу". ]], code [[psub('questions')]]}; {always = true, "Я вернусь позже.", [[ Джек возвращается к своим делам: "До встречи". ]], code [[ back(); ]]}; {tag='checking_documents'}; - {always = true, "Вы можете вернуть мне бумаги?", [["Конечно. Если принесете их снова -- я возобновлю поиски", - Джек возвращает вам документы. ]], code [[ + {always = true, "Вы можете вернуть мне бумаги?", [["Конечно. Если принесете их снова -- я возобновлю поиски", -- Джек возвращает вам документы. ]], code [[ wright_dlg.state = 4; put(item_charts, pl); back(); ]]}; - {always = true, "У меня есть несколько вопросов.", [[Джек кивает: "Чем смогу - помогу". ]], code [[psub('questions')]]}; + {always = true, "У меня есть несколько вопросов.", [[Джек кивает: "Чем смогу -- помогу". ]], code [[psub('questions')]]}; {always = true, "Я вернусь позже.", [[Джек возвращается к своим делам: "До встречи". ]], code [[ back(); ]]}; {tag='questions'}; - {"Вы знаете, чем занимался ваш отец в Вестхейвен Трансоушен?", [["Частично", - Джек показывает на картину на стене: "Он проектировал корабли, был главным инженером. Перед тем, как исчезнуть, он часто запирался в этом кабинете, подолгу что-то чертил. До глубокой ночи книги читал... Никаких материалов он не оставил. Он, вообще, очень ответственно относился к этому - никто никогда не знал, чем конкретно он занимается, кроме его подчиненных и вашего отца". ]]}; + {"Вы знаете, чем занимался ваш отец в Вестхейвен Трансоушен?", [["Частично", -- Джек показывает на картину на стене: "Он проектировал корабли, был главным инженером. Перед тем, как исчезнуть, он часто запирался в этом кабинете, подолгу что-то чертил. До глубокой ночи книги читал... Никаких материалов он не оставил. Он, вообще, очень ответственно относился к этому -- никто никогда не знал, чем конкретно он занимается, кроме его подчиненных и вашего отца". ]]}; {always = true, "Вернемся к делу.", [[Джек кивает: "Хорошо". ]], code [[ pret(); ]]}; {tag='ask_documents2'}; - {always = true, "[Отдать документы]Вот документы.", [[Джек забирает бумаги и раскладывает их на своем столе: "Спасибо, я посмотрю, что смогу найти". ]], code[[ wright_dlg.state = 3; remove(item_charts, pl); back(); ]]}; - {always = true, "У меня есть несколько вопросов.", [[Джек кивает: "Чем смогу - помогу". ]], code [[psub('questions')]]}; + {always = true, "[Отдать документы] Вот документы.", [[Джек забирает бумаги и раскладывает их на своем столе: "Спасибо, я посмотрю, что смогу найти". ]], code[[ wright_dlg.state = 3; remove(item_charts, pl); back(); ]]}; + {always = true, "У меня есть несколько вопросов.", [[Джек кивает: "Чем смогу -- помогу". ]], code [[psub('questions')]]}; {always = true, "Я вернусь позже.", [[Джек возвращается к своим делам: "До встречи". ]], code [[ back(); ]]}; {tag='warehouse_discovered'}; - {"[Рассказать о Левиафане]Я кое-что нашел в доке...", [[Джек мгновенно вскакивает со стула, восклицая: "Ничего себе, я должен это видеть!" ]], code [[ + {"[Рассказать о Левиафане] Я кое-что нашел в доке...", [[Джек мгновенно вскакивает со стула, восклицая: "Ничего себе, я должен это видеть!" ]], code [[ char_wright_home.known_leviathan = true; rel_jack = rel_jack + 1; walkin('wright_leviathan_cutscene1a'); ]]}; {always = true, "Отлично, я съезжу туда и посмотрю, что удастся найти.", [[Джек возвращается к своим делам: "До встречи". ]], code [[ back(); ]]}; {tag='warehouse_discovered2'}; - {tag="phr_leviathan", "[Рассказать о Левиафане]Я кое-что нашел в доке...", [[Джек мгновенно вскакивает со стула, восклицая: "Ничего себе, я должен это видеть!" ]], code [[ + {tag="phr_leviathan", "[Рассказать о Левиафане] Я кое-что нашел в доке...", [[Джек мгновенно вскакивает со стула, восклицая: "Ничего себе, я должен это видеть!" ]], code [[ char_wright_home.known_leviathan = true; rel_jack = rel_jack + 1; walkin('wright_leviathan_cutscene1a'); @@ -148,29 +149,32 @@ wright_dlg = dlg { end}; {always = true, "Я вернусь позже.", [[Джек возвращается к своим делам: "До встречи". ]], code [[ back(); ]]}; {tag='warehouse_break_in'}; - {always = true, "Надо попробовать.", [["Хорошо", - отвечает Джек. Приготовления занимают все время до вечера. Наконец, после наступления темноты, вы садитесь в повозку и Джек привозит вас к складу 32. ]], code [[ walk('warehouse_32_night'); ]]}; + {always = true, "Надо попробовать.", [["Хорошо", -- отвечает Джек. ]], code [[ + wright_dlg.state = 6; + walk('wright_warehouse_32_entry'); + ]]}; {always = true, "Лучше не стоит.", [[Джек разочарованно отвечает: "Очень жаль". ]], code [[ pret(); ]]}; {tag='warehouse_break_in_reluctant'}; {always = true, "Мы можем попробовать проникнуть туда. Вдруг там что-то сохранилось?", [[Джек удивленно переспрашивает: "Проникнуть? Дэвид, вы в своем уме?"]], code [[ psub("w_bir2");]]}; {always = true, "Я пойду.", [[Джек возвращается к своим делам: "До встречи". ]]}; {tag="w_bir2"}; - {always = true, "Если мы хотим найти моего и вашего отца - нам нужно действовать вместе.", [[Джек отрицательно качает головой: "Я не готов действовать такими методами". ]], code [[ psub("w_bir3");]]}; + {always = true, "Если мы хотим найти моего и вашего отца -- нам нужно действовать вместе.", [[Джек отрицательно качает головой: "Я не готов действовать такими методами". ]], code [[ psub("w_bir3");]]}; {always = true, "Вы правы, это глупо.", [[Джек молча кивает. ]], code [[ pret(); ]]}; {tag="w_bir3"}; - {"Вы готовы остановиться в шаге от цели?", [[Джек отвечает не сразу: "Мы не знаем, насколько мы близко. "]]}; - { "У нас нет другого выбора. Это наша единственная зацепка", [[Джек берет карандаш, вертит его в руках несколько минут, потом смотрит на картину. Наконец, он соглашается: "Будь по вашему". Приготовления занимают все время до вечера. Наконец, после наступления темноты, вы садитесь в повозку и Джек привозит вас к складу 32. ]], code [[ - wright_dlg.state = 7; - walk("warehouse_32_night"); + {"Вы готовы остановиться в шаге от цели?", [[Джек отвечает не сразу: "Мы не знаем, насколько мы близко".]]}; + { "У нас нет другого выбора. Это наша единственная зацепка.", [[Джек берет карандаш, вертит его в руках несколько минут, потом смотрит на картину. Наконец, он соглашается: "Будь по-вашему". ]], code [[ + wright_dlg.state = 6; + walk("wright_warehouse_32_entry"); ]]}; {"У вас есть другие предложения?", [[Джек вздыхает: "Нет. Придется признать, поиски зашли в тупик". ]]}; {always = true, "Вы правы, это глупо.", [[Джек молча кивает. ]], code [[ psub("warehouse_break_in_reluctant"); ]]}; {tag='warehouse_discovered3'}; - {always = true, "Надо еще раз попасть на склад.", [["Хорошо", - отвечает Джек. После наступления темноты, вы садитесь в повозку и Джек привозит вас к складу 32. ]], code [[ psub('warehouse_break_in'); ]]}; + {always = true, "Надо еще раз попасть на склад.", [["Хорошо", -- отвечает Джек. После наступления темноты, вы садитесь в повозку Джека, и он привозит вас к складу 32. ]], code [[ psub('warehouse_break_in'); ]]}; {always = true, "Я вернусь позже.", [["До встречи". ]], code [[ back(); ]]}; {tag='leviathan_restored_known'}; - {always = true, "Мне удалось починить \"Левиафан\". Мне понадобится помощник на борту.", [[Джек поднимается с кресла и одевает пальто: "Безусловно, я готов", - сообщает вам он. "Здесь меня ничто не держит". ]], code [[ - lifeon("char_wright"); + {always = true, "Мне удалось починить \"Левиафан\". Мне понадобится помощник на борту.", [[Джек поднимается с кресла и одевает пальто: "Безусловно, я готов", -- сообщает вам он. "Здесь меня ничто не держит". ]], code [[ table.insert(pl.party, 'wright'); + move(char_wright, char_wright.home); walk('leviathan_wardroom'); ]]}; {always = true, "Я вернусь позже.", [[ @@ -178,14 +182,16 @@ wright_dlg = dlg { ]], code [[ back(); ]]}; {tag='leviathan_restored'}; {always = true, "Я нашел подводный корабль. Мне понадобится помощь в управлении им. ", [[Джек мгновенно вскакивает со стула, восклицая: "Ничего себе! Я должен это видеть!". ]], code [[ - lifeon("char_wright"); table.insert(pl.party, 'wright'); - walk('wright_leviathan_cutscene2'); + move(char_wright, char_wright.home); + walk('wright_leviathan_cutscene2'); ]]}; {always = true, "Я вернусь позже.", [[Джек возвращается к своим делам: "До встречи".]], code [[ back(); ]]}; }; }; +wright_warehouse_32_entry = cutscene("wright_warehouse_32_entry", "Склад 32", [[Приготовления занимают все время до вечера. Наконец, после наступления темноты, вы садитесь в повозку, и Джек привозит вас к складу 32. ]], 'warehouse_32_night'); + wright_leviathan_cutscene2 = cutscene("wright_leviathan_cutscene2", "Причал", [[Вместе с Джеком вы приезжаете в док. Райт долго и с интересом осматривает корпус _"Левиафана"_. Внутри, Джек долго обходит отсеки, разглядывая все узлы. Наконец, вы оказываетесь в кают-компании и он сообщает: "Я готов". ]], 'leviathan_wardroom'); wright_leviathan_cutscene1a = cutscene("wright_leviathan_cutscene1a", "Причал", [[Вместе с Джеком Райтом вы отправляетесь в док 2. После прибытия на место, Джек долго и с интересом осматривает металлический корпус субмарины. С задумчивым видом он ходит туда-сюда вдоль причала. ]], 'wright_leviathan_cutscene1b'); @@ -195,9 +201,12 @@ wright_leviathan_cutscene1b = dlg { disp = "Причал"; entered = [[После очередного круга, он спрашивает: "Она работает?"]]; phr = { - {"Десять лет под водой. Не думаю, что там хоть что-то сохранилось.", [[Джек задумчиво смотрит на металлический корпус, на табличку с выгравированным названием. Наконец он говорит: "Надо попытаться попасть внутрь, а затем посмотрим". Еще немного постояв, он возвращается к кэбу. Джек оборачивается к вам и спрашивает: "Пора ехать. Вы со мной?" ]], code [[ psub('choice'); ]]}; - {"Не уверен, но, думаю, да.", [[Джек задумчиво смотрит на металлический корпус, на табличку с выгравированным названием. Наконец он говорит: "Надо попытаться попасть внутрь, а затем посмотрим". Еще немного постояв, он возвращается к кэбу. Джек оборачивается к вам и спрашивает: "Пора ехать. Вы со мной?"]], code [[ psub('choice'); ]]}; - {tag='choice'}; + {"Десять лет под водой. Не думаю, что там хоть что-то сохранилось.", [[Джек задумчиво смотрит на металлический корпус, на табличку с выгравированным названием. Наконец он говорит: "Надо попытаться попасть внутрь, а затем посмотрим". Еще немного постояв, он возвращается к кэбу. Повернувшись к вам он сообщает: "Вы можете расчитывать на меня, если вам потребуется помощь в управлении этой посудиной". ]], code [[ psub('choice'); ]]}; + {"Не уверен, но, думаю, да.", [[Джек задумчиво смотрит на металлический корпус, на табличку с выгравированным названием. Наконец он говорит: "Надо попытаться попасть внутрь, а затем посмотрим". Еще немного постояв, он возвращается к кэбу. Повернувшись к вам он сообщает: "Вы можете расчитывать на меня, если вам потребуется помощь в управлении этой посудиной". ]], code [[ psub('choice'); ]]}; + {tag='choice'}; + {"Несомненно, я сообщу вам, если получится ее оживить.", [[Джек кивает и спрашивает: "Пора ехать. Вы со мной?" ]], code [[ psub('end'); ]]}; + {"Спасибо, но я справлюсь и сам.", [[Джек пожимает плечами, но отвечает: "Тем не менее, мое предложение остается в силе", -- и, чуть выждав, спрашивает -- "Пора ехать. Вы со мной?" ]], code [[ psub('end'); ]]}; + {tag='end'}; {"Да, поехали.", [[ Вы садитесь в кэб и возвращаетесь домой к Джеку. ]], [[ walk('wright_house_cabinet'); ]]}; @@ -220,11 +229,11 @@ wright_entry_dlg = dlg { {always = true, "Могу я увидеть Майкла Райта?", [[Голос за дверью повторяет вопрос: "Кто спрашивает?"]], code [[ psub('who') ]]}; {always = true, "Извините, я ошибся адресом.", code [[ back(); ]]}, {tag = 'who'}; - {"Вы знаете Уильяма Дрейка?", [["Понятия не имею. Кто спрашивает?" - В голосе собеседника явно прослеживается некоторое недовольство. ]], code [[ psub('irritated') ]]}; - {"Майкл Райт здесь живет?", [["Кто спрашивает?" - В голосе собеседника явно прослеживается некоторое недовольство. ]], code [[ psub('irritated') ]]}; - {always = true, "У меня важное сообщение для него.", [["Он тут не живет уже много лет. Уходите" - вам показалось, что голос собеседника слегка дрогнул при этих словах. ]], code [[ back(); ]]}; + {"Вы знаете Уильяма Дрейка?", [["Понятия не имею. Кто спрашивает?" -- В голосе собеседника явно прослеживается некоторое недовольство. ]], code [[ psub('irritated') ]]}; + {"Майкл Райт здесь живет?", [["Кто спрашивает?" -- В голосе собеседника явно прослеживается некоторое недовольство. ]], code [[ psub('irritated') ]]}; + {always = true, "У меня важное сообщение для него.", [["Он тут не живет уже много лет. Уходите" -- вам показалось, что голос собеседника слегка дрогнул при этих словах. ]], code [[ back(); ]]}; {tag = 'irritated'}; - {"Мой отец - Уильям Дрейк, работал с Майклом Райтом. Так вы знаете его?", [[Вы слышите звук отодвигающегося засова и ответ: "Проходите". ]], code [[ + {"Мой отец -- Уильям Дрейк, работал с Майклом Райтом. Так вы знаете его?", [[Вы слышите звук отодвигающегося засова и ответ: "Проходите". ]], code [[ door_wright.locked = false; path("В дом", wright_house):enable(); back(); @@ -261,7 +270,7 @@ wright_house_cabinet = room { wright_house_front_room = room { nam = "wright_house_front_room"; disp = "Дом Райта, гостиная"; - dsc = [[Окна в гостиной завешены тяжелыми занавесками и в полутьме вы с трудом различаете очертания предметов интерьера - дорогих старых кресел, изящно украшенных шкафов, покрытых многолетним слоем пыли канделябров. ]]; + dsc = [[Окна в гостиной завешены тяжелыми занавесками и в полутьме вы с трудом различаете очертания предметов интерьера: дорогих старых кресел, изящно украшенных шкафов, покрытых многолетним слоем пыли канделябров. ]]; entered = function(s) if (not s.visited) then s.visited = true; @@ -280,7 +289,7 @@ wright_house = room { enter = function(s) put(char_coachman, here()); end; - dsc = [[Небольшой кирпичный особняк, принадлежащий Майклу Райту, стоит на одной из тихих улочек, на окраине Лондона. Дом выглядит неухоженным - штукатурка местами осыпалась, лужайка заросла высокой травой, часть окон закрыта ставнями, явно давно не открывавшимися. ]]; + dsc = [[Небольшой кирпичный особняк, принадлежащий Майклу Райту, стоит на одной из тихих улочек, на окраине Лондона. Дом выглядит неухоженным -- штукатурка местами осыпалась, лужайка заросла высокой травой, часть окон закрыта ставнями, явно давно не открывавшимися. ]]; obj = {'door_wright'}; way = { vroom("В дом", "wright_house_front_room"):disable();