Changeset - 6ed973c10053
[Not reviewed]
default
0 5 0
Silverwing - 8 years ago 2016-11-09 16:46:17

Chapter 2 complete
5 files changed with 1509 insertions and 4 deletions:
0 comments (0 inline, 0 general)
game_over.lua
Show inline comments
 
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_learr = 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", [[
 
    Гигантский спрут мгновенно опутывает вас своими щупальцами. Вы не можете вырваться из стальной хватки чудовища. Металл скафандра скрипит, не выдерживая давления и вы понимаете, что ваши дни сочтены. 
 
]]);
 
 
game_over_eaten_by_shark = room {
 
    nam = "game_over_eaten_by_shark";
 
    disp = "Игра окончена";
 
    hideinv = true;
 
    dsc = [[
 
        Вы не успеваете заметить, как акула разгрызает ваш скафандр острыми зубами. Через несколько мгновений вы умираете. 
 
    ]];
 
};
 
 
game_over_caught = room {
 
	nam = "game_over_caught";
 
	disp = "Игра окончена";
 
	hideinv = true;
 
	dsc = [[
 
		Охранники склада обнаруживают вас. В мгновение вы оказываетесь схвачены. Ни в полиции ни в суде никому нет никакого дела до причин вашей попытки проникновения на склад. Ближайшие несколько лет вы проведете в тюрьме. 
 
	]];
 
};
 
 
game_over_banished = room {
 
	nam = "game_over_banished";
 
	disp = "Игра окончена";
 
	hideinv = true;
 
	dsc = [[
 
		Охранники сопровождают вас до Левиафана. Без помощи Атлантиды, вы не сможете найти отца. Ваши поиски окончены. 
 
	]];
 
};
 
 
game_over_powerless = room {
 
	nam = "game_over_powerless";
 
	disp = "Игра окончена";
 
	hideinv = true;
 
	dsc = [[
 
		Электрооборудование Левиафана выходит из строя и вы теряете всякую возможность управлять субмариной. Разъяренный скат продолжает атаковать субмарину, то испуская электрические разряды, то нанося удары хвостовым шипом. Через некоторое время обшивка не выдерживает и рубка Левиафана заполняется водой. 
 
	]];
 
};
 
 
game_over_shockfish = room {
 
	nam = "game_over_shockfish";
 
	disp = "Игра окончена";
 
	hideinv = true;
 
	dsc = [[
 
		Когда скат возвращается и обнаруживает вас, он мгновенно убивает вас, сперва проткнув хвостовым шипом и после чего выпустив мощный электрический разряд. 
 
	]];
 
};
 
 
game_over_shockfish_2 = room {
 
	nam = "game_over_shockfish";
 
	disp = "Игра окончена";
 
	hideinv = true;
 
	dsc = [[
 
		Вы возвращаетесь в главный зал храма и не замечаете, как сзади вас скат плавно опускается и протыкает вас своим шипом. Мощный электрически разряд довершает дело и ваше тело падает на пол древнего святилища. 
 
	]];
 
};
 
 
game_over_sunk = room {
 
	nam = "game_over_sunk";
 
	disp = "Игра окончена";
 
	hideinv = true;
 
	dsc = [[
 
		Мощный удар хвостового шипа пробивает обшивку Левиафана насквозь. Вода быстро заполняет отсеки субмарины и у вас не остается никаких шансов спастись. 
 
	]];
 
};
 
 
game_over_shot = room {
 
	nam = "game_over_shot";
 
	disp = "Игра окончена";
 
	hideinv = true;
 
	dsc = [[
 
		Блэк вскидывает пистолет и стреляет в вашу сторону. Вы чувствуете боль в груди. В глазах мутнеет и вы бессильно падаете на пол. Вскоре Наэтвьирр пробудится окончательно, но вас это уже не волнует. 
 
	]];
 
};
 
 
game_over_awakening = room {
 
	nam = "game_over_awakening";
 
	disp = "Игра окончена";
 
	hideinv = true;
 
	dsc = [[
 
		Пробуждение Наэтвьирра завершено. Вы зря старались. 
 
	]];
 
};
 
 
game_over_pylon = room {
 
	nam = "game_over_pylon";
 
	disp = "Игра окончена";
 
	hideinv = true;
 
	dsc = [[
 
		Мощный луч света, исходящий из пилона, испепеляет вас. Вскоре Наэтвьирр пробудится окончательно, но вас это уже не волнует. 
 
	]];
 
};
 
 
game_over_naethvjirr = room {
 
	nam = "game_over_naethvjirr";
 
	disp = "Игра окончена";
 
	hideinv = true;
 
	dsc = [[
 
		Очередная атака Наэтвьирра оказывается для вас фатальной. Вы бессильно падаете на пол. Вскоре Наэтвьирр пробудится окончательно, но вас это уже не волнует. 
 
	]];
 
};
 
 
game_over_shot_fb = room {
 
	nam = "game_over_shot_fb";
 
	disp = "Игра окончена";
 
	hideinv = true;
 
	dsc = [[
 
		Застреленный Адрианом Блэком, вы бессильно падаете на пол. Вскоре Наэтвьирр пробудится окончательно, но вас это уже не волнует. 
 
	]];
 
};
 
 
game_over_victory =room {
 
	nam = "game_over_victory";
 
	disp = "Вы победили";
 
	hideinv = true;
 
	dsc = [[
 
		Как только последний генератор затихает, свет начинает медленно тускнеть. Вы слышите, как по всему городу экстренно открываются двери и понимаете, что у вас есть всего несколько минут прежде чем вода хлынет и в этот зал. Вы в спешке приводите в сознание ваших напарников и одеваете скафандр.
 
	]];
 
};
 
 
game_over_ignis = room {
 
	nam = "Игра окончена";
 
	disp = "Игра окончена";
 
	hideinv = true;
 
	dsc = [[
 
		У вас кружится голова от нестерпимого жара. Не в силах стоять, вы опускаетесь на горячий пол. С каждым вдохом вы чувствуете едкий дым, проникающий в ваши легкие. Леарр подбегает к вам, чтобы помочь. Вы пытаетесь подняться, но падаете снова и теряете сознание. 
 
	]];
 
};
 
 
game_over_trap = room {
 
	nam = "Игра окончена";
 
	disp = "Игра окончена";
 
	hideinv = true;
 
	dsc = [[
 
		Вы делаете шаг  и не успеваете понять, как пол под вами проваливается и вы падаете в пропасть. 
 
	]];
 
};
 
\ No newline at end of file
items.lua
Show inline comments
 
@@ -314,385 +314,396 @@ item_bottle = obj {
 
			]]);
 
		end;
 
	end;
 
};
 
 
item_pump_broken = obj {
 
	nam = "item_pump_broken";
 
	disp = "Насос";
 
	inv = [[
 
		Старый ручной насос. Рычаг сломан, делая его использование невозможным. 
 
	]];
 
};
 
 
item_pump = obj {
 
	nam = "item_pump";
 
	disp = "Насос";
 
	inv = [[
 
		Старый ручной насос. 
 
	]];
 
};
 
 
item_pump_details = obj {
 
	nam = "item_pump_details";
 
	disp = "Детали насоса";
 
	inv = [[
 
		Запчасти для насоса. 
 
	]];
 
	use = function(s, o)
 
		if (o == item_pump_broken) then
 
			remove(s, pl);
 
			remove(item_pump_broken, pl);
 
			put(item_pump, pl);
 
			return [[
 
				Вы починили насос. 
 
			]];
 
		end;
 
	end;
 
};
 
 
item_electrodes = obj {
 
	nam = "item_electrodes";
 
	disp = "Электроды";
 
	inv = [[
 
		Несколько металлических пластин, предназначенных для использования в качестве электродов. 
 
	]];
 
};
 
 
item_ducttape = obj {
 
	nam = "item_ducttape";
 
	disp = "Изолента";
 
	dsc = [[
 
		На столе лежит {моток изоленты}. 
 
	]];
 
	tak = [[
 
		Вы забираете изоленту. 
 
	]];
 
	inv = [[
 
		Моток изоленты. 
 
	]];
 
};
 
 
item_map = obj {
 
	nam = "item_map";
 
	disp = "Карта";
 
	inv = function(s) 
 
		if s.seen then
 
			return [[
 
				Карта Атлантического океана, судя по маркировке, принадлежащая компании "Вестхейвен Трансоушен". На ней изображено несколько объектов, имеющих значение для компании и, в частности, Атлантида.
 
			]];
 
		else
 
			s.seen = true;
 
			atlantis_found = true;
 
			return [[
 
				Карта Атлантического океана, судя по маркировке, принадлежащая компании "Вестхейвен Трансоушен". Вы внимательно осматриваете карту в поисках чего-нибудь необычного. Ваше внимание привлекает отметка "Атлантида", сделанная посреди океана. К сожалению, никаких пояснений у вас нет и единственное, что вы можете сделать - это попытаться добраться до этой точки. 
 
			]];
 
		end;
 
	end;
 
};
 
 
item_map_2 = obj {
 
	nam = "item_map";
 
	disp = "Карта";
 
	inv = function(s)
 
		iraaphaanotrr_found = true;
 
		dypatreanotrr_found = true;
 
		return [[
 
			Карта, отданная вам Екатериной Светловой. Эта карта почти идентична найденной вам на складе, за исключением наличия дополнительных точек, указывающих навьярские города Дипатреанотр и Ираафаанотр. 
 
		]];
 
	end;
 
};
 
 
item_unknown_schematics = obj {
 
	nam = "item_unknown_schematics";
 
	disp = "Чертежи";
 
	inv = function(s) 
 
		remove(s, pl);
 
		put(item_leviathan_schematics, pl);
 
		return [[
 
			Вы рассматриваете чертежи, найденные на складе. Это чертежи какого-то необычного корабля. Многие детали конструкции кажутся вам непонятными, излишними, переусложненными пока вы не натыкаетесь на надпись в углу: "Проект "Левиафан", Вестхейвен Трансоушен, 1900". Чуть ниже написано: "Подводный корабль предназначенный для долговременноых автономных путешествий". Теперь все встает на свои места - вот что строил ваш отец. 
 
		]];
 
	end;
 
};
 
 
item_leviathan_schematics = obj {
 
	nam = "item_leviathan_schematics";
 
	disp = "Чертежи \"Левиафана\"";
 
	inv = [[
 
		Чертежи "Левиафана" - субмарины, созданной Вестхейвен Трансоушен. 
 
	]];
 
};
 
 
item_cogs = obj {
 
	nam = "item_cogs";
 
	disp = "Шестеренки";
 
	inv = [[
 
		Несколько шестерней разного размера. 
 
	]];
 
	use = function(s, o)
 
		if (o == crane_service_access_panel and crane_service_access_panel.state == 1) then
 
			remove(s, pl);
 
			dock_crane.broken = false;
 
			return [[
 
				Вы заменяете поврежденные шестерни новыми. 
 
			]];
 
		end;
 
	end;
 
};
 
 
item_w32_key = obj {
 
	nam = "item_w32_key";
 
	disp = "Ключ";
 
	dsc = [[
 
		За книгами спрятан небольшой {ключик}. 
 
	]];
 
	tak = function(s)
 
		w32_mgr.key_inplace = false;
 
		return [[
 
			Вы забираете ключ. 
 
		]];
 
	end;
 
	inv = [[
 
		Ключ от стола управляющего из склада 32
 
	]];
 
};
 
 
item_navjiarr_disk = obj {
 
	nam = "item_navjiarr_disk";
 
	disp = "Светодиск Светловой";
 
	dsc = [[
 
		Отданный вам Екатериной Светловой блестящий гладкий диск из неизвестного материала. Диаметр около 10 сантиметров. В центре небольшое треугольное отверстие. Вдоль внешней кромки - цветные полосы. 
 
	]];
 
};
 
 
item_goldmans_clock = obj {
 
	nam = "item_goldmans_clock";
 
	disp = "Часы";
 
	dsc = [[
 
		На полу валяются дорогие {карманные часы}.
 
	]];
 
	tak = [[
 
		Вы забираете часы себе.
 
	]];
 
	inv = [[
 
		Дорогие карманные часы на цепочке. Под крышкой гравировка "Франсуа Голдман, 1864". 
 
	]];
 
};
 
 
item_statuette = obj {
 
	nam = "item_statuette";
 
	disp = "Статуэтка";
 
	inv = [[
 
		Металлическая статуэтка, сделанная из неизвестного вам сплава, она хорошо сохранилась в океанской воде.^
 
		Статуэтка в деталях изображает навьяра, держащего в правой руке блокнот, и сосредоточенно смотрящего перед собой.
 
	]];
 
};
 
 
item_temple_disk = obj {
 
	nam = "item_temple_disk";
 
	disp = "Светодиск из храма";
 
	dsc = [[
 
		У стены лежит небольшой блестящий диск.
 
	]];
 
	tak = [[
 
		Вы поднимаете диск.
 
	]];
 
	inv = [[
 
		Найденный в храме блестящий гладкий диск из неизвестного материала. Диаметр около 10 сантиметров. В центре небольшое треугольное отверстие. Вдоль внешней кромки - цветные полосы. 
 
	]];
 
};
 
 
item_legend_of_temple = obj {
 
	nam = "item_legend_of_temple";
 
	disp = "Навьярская табличка";
 
	dsc = [[
 
		На полу в углу валяется какой-то {предмет}.
 
	]];
 
	tak = [[
 
		Вы поднимаете предмет - это небольшая металлическая табличка.
 
	]];
 
	inv = [[
 
		Металлическая табличка, на которую нанесены цветные полосы, соответствующие буквам языка навьяров. 
 
		~Легенда о храме в глубинах~
 
	]];
 
};
 
 
item_legend_of_dark_source = obj {
 
	nam = "item_legend_of_dark_source";
 
	disp = "Навьярская табличка";
 
	dsc = [[
 
		На полу у входа валяется какой-то {предмет}.
 
	]];
 
	tak = [[
 
		Вы поднимаете предмет - это небольшая металлическая табличка.
 
	]];
 
	inv = [[
 
		Металлическая табличка, на которую нанесены цветные полосы, соответствующие буквам языка навьяров. 
 
		~Легенда об излучающем тьму~
 
	]];
 
};
 
 
item_legend_of_first_city = obj {
 
	nam = "item_legend_of_first_city";
 
	disp = "Навьярская табличка";
 
	dsc = [[
 
		На полу в углу валяется какой-то {предмет}.
 
	]];
 
	tak = [[
 
		Вы поднимаете предмет - это небольшая металлическая табличка.
 
	]];
 
	inv = [[
 
		Металлическая табличка, на которую нанесены цветные полосы, соответствующие буквам языка навьяров. 
 
		~Легенда о первом городе~
 
	]];
 
};
 
 
item_legend_of_hunter = obj {
 
	nam = "item_legend_of_hunter";
 
	disp = "Навьярская табличка";
 
	dsc = [[
 
		На полу в углу валяется какой-то {предмет}.
 
	]];
 
	tak = [[
 
		Вы поднимаете предмет - это небольшая металлическая табличка.
 
	]];
 
	inv = [[
 
		Металлическая табличка, на которую нанесены цветные полосы, соответствующие буквам языка навьяров. 
 
		~Легенда об охотнике~
 
	]];
 
};
 
 
item_navjiarr_chart_1 = obj {
 
	nam = "item_navjiarr_chart_1";
 
	disp = "Навьярская табличка";
 
	dsc = [[
 
		На полу в углу валяется какой-то {предмет}.
 
	]];
 
	tak = [[
 
		Вы поднимаете предмет - это небольшая металлическая табличка.
 
	]];
 
	inv = [[
 
		Металлическая табличка, на которую нанесены странные обозначения. 
 
	]];
 
};
 
 
item_navjiarr_chart_iraa = obj {
 
	nam = "item_navjiarr_chart_iraa";
 
	disp = "Карта из Ираафаанотра";
 
	dsc = [[
 
		На полу в углу валяется какой-то {предмет}.
 
	]];
 
	tak = [[
 
		Вы поднимаете предмет - это небольшая металлическая табличка.
 
	]];
 
	inv = [[
 
		Металлическая табличка, на которую нанесены странные обозначения. 
 
	]];
 
};
 
 
item_navjiarr_chart_dyp = obj {
 
	nam = "item_navjiarr_chart_dyp";
 
	disp = "Карта из Дипатреанотра";
 
	dsc = [[
 
		На пьедестале лежит металлическая табличка. 
 
	]];
 
	tak = function(s)
 
		path("Выйти из храма"):enable();
 
		return [[
 
			Как только вы подбираете табличку, дверь открывается. 
 
		]];
 
	end;
 
	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 = [[
 
		Небольшой прозрачный куб, очень холодный на ощупь - холод ощущается даже в скафандре. От него исходит слабое свечение. 
 
	]];
 
};
 
 
item_talk_device = obj {
 
	nam = "item_talk_device";
 
	disp = "Устройство для общения с навьярами";
 
	inv = [[
 
		Небольшое устройство с клавиатурой и большим количеством цветных лампочек. Оно полностью герметично и может быть использовано под водой. 
 
	]];
 
};
 
 
item_suit = suit {
 
	dlg = "call_leviathan";
 
	nam = "Скафандр";
 
	--cantakeoff = function(s)
 
	--	return not where(pl).underwater;
 
	--end;
 
};
 
 
item_deep_key = obj {
 
    nam = "item_deep_key";
 
    disp = "Пирамидка";
 
    dsc = [[
 
        На пьедестале вы видите небольшой блестящий {предмет}.
 
    ]];
 
    inv = [[
 
        Небольшая полупрозрачная пирамидка из неизвестного материала. Гладкая и холодная на ощупь. На гранях пирамидки нанесены непонятные символы. 
 
    ]];
 
    tak = [[
 
        Это оказалась небольшая полупрозрачная пирамидка. Вы забираете ее себе. 
 
    ]];
 
};
 
 
item_navjiarr_chart_z = obj {
 
nam = "item_navjiarr_chart_z";
 
    disp = "Навьярская табличка";
 
    dsc = [[
 
        На пьедестале лежит небольшая металлическая {табличка}.
 
    ]];
 
    tak = function(s)
 
        
 
        return [[
 
            Вы поднимаете предмет - это небольшая металлическая табличка. Вдалеке вы слышите скрежет камней - дверь храма снова открыта. 
 
        ]];
 
    end;
 
    inv = [[
 
        Металлическая табличка, на которую нанесены странные обозначения. 
 
    ]];
 
};
 
 
item_naethvjirr_key = obj {
 
    nam = "item_naethvjirr_key";
 
    disp = "Ключ из древнего храма";
 
    dsc = [[
 
        На пьедестале лежит небольшая прозрачная {коробочка}, внутрь которой заключена прямоугольная пластинка из неизвестного материала. 
 
    ]];
 
    inv = [[
 
        Небольшая прозрачная {коробочка}, внутрь которой заключена прямоугольная пластинка из неизвестного материала. Пластинка с обеих сторон покрыта тонкими металлическими нитями. 
 
    ]];
 
};
 
\ No newline at end of file
journey_temple.lua
Show inline comments
 
dt_labyrinth_foot = room {
 
    nam = "dt_labyrinth_foot";
 
    no_exit = [[
 
        Нет смысла покидать Левиафан здесь. 
 
    ]];
 
    handwheel_room = "dt_labyrinth";
 
};
 

	
 
dt_labyrinth_bridge = room {
 
    nam = "dt_labyrinth_bridge";
 
    no_exit = [[
 
         Вы не сможете высадиться здесь. 
 
    ]];
 
    handwheel_room = "dt_labyrinth";
 
};
 

	
 
--id, dsc, directions, where, leviathan_where
 
dt_labyrinth_map = {
 
    ["01"] = {
 
        dsc = [[
 
            Вы находитесь у входа в сложный лабиринт ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        ne = "02",
 
        where = dt_labyrinth_foot
 
    };
 
    ["02"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        sw = "01",
 
        e = "03",
 
        where = dt_labyrinth_foot
 
    };
 
    ["03"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        w = "02",
 
        ne = "04",
 
        where = dt_labyrinth_foot
 
    };
 
    ["04"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        sw = "03",
 
        nw = "05",
 
        e = "07",
 
        where = dt_labyrinth_foot
 
    };
 
    ["05"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        se = "04",
 
        n = "06",
 
        where = dt_labyrinth_foot
 
    };
 
    ["06"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        s = "05",
 
        where = dt_labyrinth_foot
 
    };
 
    ["07"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        w = "04",
 
        n = "08",
 
        se = "09",
 
        where = dt_labyrinth_foot
 
    };
 
    ["08"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        s = "07",
 
        where = dt_labyrinth_foot
 
    };
 
    ["09"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        w = "33",
 
        ne = "10",
 
        nw = "07",
 
        where = dt_labyrinth_foot
 
    };
 
    ["10"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        ne = "11",
 
        sw = "09",
 
        where = dt_labyrinth_foot
 
    };
 
    ["11"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Под вами с северо-запада на юго-восток простирается глубокая расщелина. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        ne = "13",
 
        se = "14",
 
        nw = "12",
 
        sw = "10",
 
        where = dt_labyrinth_foot
 
    };
 
    ["12"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Под вами простирается глубокая расщелина. Она продолжается на северо-запад настолько далеко, насколько хватает мощности прожектора Левиафана, однако, судя по карте, вам нет смысла двигаться в том направлении.
 
        ]], 
 
        se = "11",
 
        where = dt_labyrinth_foot
 
    };
 
    ["13"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        sw = "11",
 
        where = dt_labyrinth_foot
 
    };
 
    ["14"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Под вами с северо-запада на юго-восток простирается глубокая расщелина. На юго-востоке вы видите узкий каменный мостик, протянувшийся над бездной. Из отверстия в скале напротив моста исходит яркий свет. 
 
        ]], 
 
        nw = "11",
 
        se = "15",
 
        where = dt_labyrinth_foot
 
    };
 
    ["15"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Под вами с северо-запада на юго-восток простирается глубокая расщелина. Прямо под Левиафаном вы видите узкий каменный мостик, из отверстия в скале напротив которого исходит яркий свет. Мостик слишком узкий и вы не можете высадиться здесь
 
        ]], 
 
        nw = "11",
 
        se = "15",
 
        where = dt_labyrinth_bridge
 
    };
 
    ["16"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        ne = "35",
 
        where = dt_labyrinth_foot
 
    };
 
    ["17"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Под вами с северо-запада на юго-восток простирается глубокая расщелина. На северо-западе вы видите узкий каменный мостик, протянувшийся над бездной. Из отверстия в скале напротив моста исходит яркий свет. 
 
        ]], 
 
        nw = "15",
 
        where = dt_labyrinth_foot
 
    };
 
    ["18"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        ne = "31",
 
        where = dt_labyrinth_foot
 
    };
 
    ["19"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. на северо-востоке вы видите глубокую расщелину, простирающуюся с северо-запада на юго-восток. над расщелиной висит узкий каменный мостик. Из отверстия в скале напротив него исходит яркий свет. 
 
        ]], 
 
        ne = "15",
 
        w = "20",
 
        where = "dt_temple_ravine"
 
    };
 
    ["20"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        e = "19",
 
        s = "20",
 
        where = dt_labyrinth_foot
 
    };
 
    ["21"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        n = "20",
 
        se = "22",
 
        where = dt_labyrinth_foot
 
    };
 
    ["22"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        nw = "21",
 
        sw = "23",
 
        where = dt_labyrinth_foot
 
    };
 
    ["23"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        ne = "22",
 
        w = "24",
 
        where = dt_labyrinth_foot
 
    };
 
    ["24"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        e = "23",
 
        sw = "25",
 
        where = dt_labyrinth_foot
 
    };
 
    ["25"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        ne = "24",
 
        nw = "26",
 
        where = dt_labyrinth_foot
 
    };
 
    ["26"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        ne = "27",
 
        se = "25",
 
        where = dt_labyrinth_foot
 
    };
 
    ["27"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        ne = "28",
 
        sw = "26",
 
        nw = "30",
 
        where = dt_labyrinth_foot
 
    };
 
    ["28"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        sw = "27",
 
        nw = "29",
 
        where = dt_labyrinth_foot
 
    };
 
    ["29"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        se = "28",
 
        where = dt_labyrinth_foot
 
    };
 
    ["30"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        se = "27",
 
        w = "31",
 
        where = dt_labyrinth_foot
 
    };
 
    ["31"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        e = "30",
 
        n = "32",
 
        w = "34",
 
        where = dt_labyrinth_foot
 
    };
 
    ["32"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        ne = "33",
 
        s = "31",
 
        where = dt_labyrinth_foot
 
    };
 
    ["33"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        e = "9",
 
        s = "31",
 
        where = dt_labyrinth_foot
 
    };
 
    ["34"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        e = "31",
 
        w = "35",
 
        where = dt_labyrinth_foot
 
    };
 
    ["35"] = {
 
        dsc = [[
 
            Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. 
 
        ]], 
 
        e = "34",
 
        sw = "16",
 
        where = dt_labyrinth_foot
 
    };
 
};
 

	
 
dt_labyrinth = room {
 
    var {
 
        location = "01";
 
    };
 
    no_exit = [[
 
        Нет смысла покидать Левиафан здесь. 
 
    ]];
 
    nam = "Штурвал Левиафана";
 
    dsc = function(s)
 
        return dt_labyrinth_map[dt_labyrinth.location].dsc;
 
    end;
 
    entered = function(s)
 
        s:update();
 
    end;
 
    update = function(s)
 
        dt_north:disable();
 
        dt_north_east:disable();
 
        dt_east:disable();
 
        dt_south_east:disable();
 
        dt_south:disable();
 
        dt_south_west:disable();
 
        dt_west:disable();
 
        dt_north_west:disable();
 
        if (dt_labyrinth_map[dt_labyrinth.location].n) then
 
            dt_north:enable();
 
        end;
 
        if (dt_labyrinth_map[dt_labyrinth.location].ne) then
 
            dt_north_east:enable();
 
        end;
 
        if (dt_labyrinth_map[dt_labyrinth.location].e) then
 
            dt_east:enable();
 
        end;
 
        if (dt_labyrinth_map[dt_labyrinth.location].se) then
 
            dt_south_east:enable();
 
        end;
 
        if (dt_labyrinth_map[dt_labyrinth.location].s) then
 
            dt_south:enable();
 
        end;
 
        if (dt_labyrinth_map[dt_labyrinth.location].sw) then
 
            dt_south_west:enable();
 
        end;
 
        if (dt_labyrinth_map[dt_labyrinth.location].w) then
 
            dt_west:enable();
 
        end;
 
        if (dt_labyrinth_map[dt_labyrinth.location].nw) then
 
            dt_north_west:enable();
 
        end;
 
    end;
 
    way = {
 
        kh_vroom("Отойти от штурвала", "leviathan_wheelhouse");
 
    };
 
    obj = {
 
        "dt_north",
 
        "dt_north_east",
 
        "dt_east",
 
        "dt_south_east",
 
        "dt_south",
 
        "dt_south_west",
 
        "dt_west",
 
        "dt_north_west"
 
    };
 
};
 

	
 
dt_north = obj {
 
    nam = "dt_north";
 
    dsc = "{На север}^";
 
    act = function(s)
 
        pr [[
 
            Вы движетесь на север.
 
        ]];
 
        dt_labyrinth.location = dt_labyrinth_map[dt_labyrinth.location].n;
 
        dt_labyrinth:update();
 
    end;
 
};
 

	
 
dt_north_east = obj {
 
    nam = "dt_north_east";
 
    dsc = "{На северо-восток}^";
 
    act = function(s)
 
        pr [[
 
            Вы движетесь на северо-восток.
 
        ]];
 
        dt_labyrinth.location = dt_labyrinth_map[dt_labyrinth.location].ne;
 
        dt_labyrinth:update();
 
    end;
 
};
 

	
 
dt_east = obj {
 
    nam = "dt_east";
 
    dsc = "{На восток}^";
 
    act = function(s)
 
        pr [[
 
            Вы движетесь на восток.
 
        ]];
 
        dt_labyrinth.location = dt_labyrinth_map[dt_labyrinth.location].e;
 
        dt_labyrinth:update();
 
    end;
 
};
 

	
 
dt_south_east = obj {
 
    nam = "dt_south_east";
 
    dsc = "{На юго-восток}^";
 
    act = function(s)
 
        pr [[
 
            Вы движетесь на юго-восток.
 
        ]];
 
        dt_labyrinth.location = dt_labyrinth_map[dt_labyrinth.location].se;
 
        dt_labyrinth:update();
 
    end;
 
};
 

	
 
dt_south = obj {
 
    nam = "dt_south";
 
    dsc = "{На юг}^";
 
    act = function(s)
 
        pr [[
 
            Вы движетесь на юг.
 
        ]];
 
        dt_labyrinth.location = dt_labyrinth_map[dt_labyrinth.location].s;
 
        dt_labyrinth:update();
 
    end;
 
};
 

	
 
dt_south_west = obj {
 
    nam = "dt_south_west";
 
    dsc = "{На юго-запад}^";
 
    act = function(s)
 
        pr [[
 
            Вы движетесь на юго-запад.
 
        ]];
 
        dt_labyrinth.location = dt_labyrinth_map[dt_labyrinth.location].sw;
 
        dt_labyrinth:update();
 
    end;
 
};
 

	
 
dt_west = obj {
 
    nam = "dt_west";
 
    dsc = "{На запад}^";
 
    act = function(s)
 
        pr [[
 
            Вы движетесь на запад.
 
        ]];
 
        dt_labyrinth.location = dt_labyrinth_map[dt_labyrinth.location].w;
 
        dt_labyrinth:update();
 
    end;
 
};
 

	
 
dt_north_west = obj {
 
    nam = "dt_north_west";
 
    dsc = "{На северо-запад}^";
 
    act = function(s)
 
        pr [[
 
            Вы движетесь на северо-запад.
 
        ]];
 
        dt_labyrinth.location = dt_labyrinth_map[dt_labyrinth.location].nw;
 
        dt_labyrinth:update();
 
    end;
 
};
 

	
 
dt_temple_ravine = room {
 
    nam = "dt_temple_ravine";
 
    handwheel_room = "dt_labyrinth";
 
    disp = "Ущелье";
 
    dsc = [[
 
        Вы стоите на дне расщелины. К северо-востоку от вас находится глубокое ущелье. Через ущелье переброшен узкий каменный мостик, на другом конце которого вы видите в скале прямоугольное отверстие явно искусственного происхождения. Из отверстия исходит яркий свет. 
 
    ]];
 
    way = {
 
        kh_vroom("В Левиафан", "leviathan_airlock");
 
        kh_vroom("На мост", "dt_temple_bridge1");
 
    };
 
};
 

	
 
dt_temple_bridge1 = room {
 
    var {
 
        state = 0;
 
    };
 
    nam = "dt_temple_bridge1";
 
    disp = "Мост над пропастью";
 
    dsc = [[
 
        Вы ступаете на хлипкий мостик. Камни ходят ходуном под вашими ногами, и кажется, что слабая конструкция вот вот рухнет, увлекая вас за собой в бездну. 
 
    ]];
 
    entered = function(s)
 
        char_radcliffe:accompany(false);
 
        char_wright:accompany(false);
 
        char_anna:accompany(false);
 
        if (s.state == 0) then
 
            s.state = 1;
 
            if (char_learr.follow) then
 
                pr [[
 
                    Леарр с сомнением смотрит на шаткую постройку и по ее головным плавникам бегут цветные полосы: "Не думаю, что мост выдержит нас обоих. Не бойся, я поплыву над ним".
 
                ]];
 
            end;
 
            if (char_phaetlarr.follow) then
 
                pr [[
 
                    Фаэтларр осматривает мост и по его головным плавникам бегут цветные полосы: "Я бы не рискнул пойти по нему, но у тебя, хевьяр, кажется нет выбора", - навьяр смотрит на вас со странной ухмылкой. 
 
                ]];
 
            end;
 
            if (char_radcliffe.follow) then
 
                pr [[
 
                    В динамиках раздается голос Уолтера Рэдклиффа: "Я не думаю, что мост выдержит нас обоих. Если тебе нужен помощник, то навьяр здесь будет полезнее. К тому же, это их святилище".
 
                ]];
 
            end;
 
            if (char_wright.follow) then
 
                pr [[
 
                    В динамиках раздается голос Джека Райта: "Нам точно стоит идти здесь? Мост не выглядит надежным. Думаю, тебе стоит взять навьяра, если тебе нужен спутник".
 
                ]];
 
            end;
 
            if (char_anna.follow) then
 
                pr [[
 
                    В динамиках раздается голос Анны Рэдклифф: "Думаю, мост без проблем выдержит одного из нас. Удачи. Мне кажется, тебе лучше было бы идти с навьяром".
 
                ]];
 
            end;
 
        end;
 
    end;
 
    way = {
 
        kh_vroom("В ущелье", "dt_temple_ravine");
 
        kh_vroom("Дальше по мосту", "dt_temple_bridge2");
 
    };
 
};
 

	
 
dt_temple_bridge2 = room {
 
    var {
 
        state = 0;
 
    };
 
    nam = "dt_temple_bridge2";
 
    disp = "Мост над пропастью";
 
    dsc = [[
 
        Вы почти дошли до проема в скале. Вам кажется, что внизу, в бездне движется что-то огромное. 
 
    ]];
 
    entered = function(s)
 
        if (s.state == 0) then
 
            s.state = 1;
 
            if (char_learr.follow) then
 
                pr [[
 
                    По головным плавникам Леарр бегут цветные полосы: "Что это? Там, внизу".
 
                ]];
 
            end;
 
            if (char_phaetlarr.follow) then
 
                pr [[
 
                    По головным плавникам Фаэтларра бегут цветные полосы: "Ты видишь это, хевьяр?".
 
                ]];
 
            end;
 
        end;
 
    end;
 
    way = {
 
        kh_vroom("К ущелью", "dt_temple_bridge1");
 
        kh_vroom("В проем", "dt_temple_entrance");
 
    };
 
};
 

	
 
dt_temple_entrance = room {
 
    var {
 
        state = 0;
 
        open = false;
 
    };
 
    nam = "dt_temple_entrance";
 
    disp = "У входа в храм";
 
    dsc = function(s)
 
        if (dt_temple_entrance.open) then
 
            return [[
 
                Вы находитесь в небольшом помещении, ярко освещенном лампами в виде длинных трубок. Стены вокруг покрыты навьярскими письменами. Дверь во внутреннее помещение храма открыта. 
 
            ]];
 
        else
 
            return [[
 
                Вы находитесь в небольшом помещении, ярко освещенном лампами в виде длинных трубок. Стены вокруг покрыты навьярскими письменами. Тяжелая дверь во внутреннее помещение храма заблокирована.
 
            ]];
 
        end;
 
    end;
 
    entered = function(s)
 
        if (s.state == 0) then
 
            s.state = 1;
 
            if (char_learr.follow) then
 
                pr [[
 
                    Леарр с интересом рассматривает древние письмена. По ее головным плавникам бегут цветные полосы: "Потрясающе! Это слова наших предков. Тех, кто видел Лсэрианотр собственными глазами, а может даже и самих создателей Спящего в Глубинах!".
 
                ]];
 
            end;
 
            if (char_phaetlarr.follow) then
 
                pr [[
 
                    Фаэтларр бегло осматривает письмена: "Кажется, Блэк кое-что упустил. Хорошо, что мы здесь хевьяр. С этими знаниями мы победим".
 
                ]];
 
            end;
 
        end;
 
    end;
 
    obj = {
 
        "dt_terminal",
 
        "dt_wires"
 
        
 
    };
 
    way = {
 
        kh_vroom("К ущелью", "dt_temple_bridge2");
 
        kh_vroom("В храм", function(s)
 
            if (dt_temple_entrance.open) then
 
                return "dt_temple";
 
            else
 
                pr [[Дверь заперта. ]];
 
                return false;
 
            end;
 
        end);
 
    };
 
};
 

	
 
dt_terminal = obj {
 
    nam = "dt_terminal";
 
    dsc = [[
 
        Рядом с дверью расположен небольшой {пульт} с шестью кнопками и светящимся экраном. 
 
    ]];
 
    act = function(s)
 
        walkin("dt_terminal_room");
 
    end;
 
};
 

	
 
dt_wires = obj {
 
    nam = "dt_wires";
 
    dsc = [[
 
        Под пультом вы видите открытую {панель} с какими-то проводами. 
 
    ]];
 
    act = function(s)
 
        walkin("dt_wires_room");
 
    end;
 
};
 

	
 
dt_terminal_room = room {
 
    var {
 
        code = {};
 
    };
 
    nam = "dt_terminal_room";
 
    disp = "У входа в храм, пульт";
 
    forcedsc = true;
 
    dsc = function(s)
 
        local r = "";
 
        if (#s.code == 0) then
 
            r = "Вы стоите перед небольшим пультом. На экране пусто. ";
 
        else
 
            r = "Вы стоите перед небольшим пультом. На экране вы видите следующую последовательность цветов: ";
 
            for i = 1, #s.code - 1 do
 
                r = r .. dt_wire_colors[s.code[i]] .. ", ";
 
            end;
 
            r = r .. dt_wire_colors[s.code[#s.code]] .. ". ";
 
        end;
 
        r = r .. "Под экраном расположены шесть кнопок. "
 
        return r;
 
    end;
 
    way = {
 
        kh_vroom("Отойти от терминала", "dt_temple_entrance");
 
    };
 
    obj = {
 
        "dt_term1",
 
        "dt_term2",
 
        "dt_term3",
 
        "dt_term4",
 
        "dt_term5",
 
        "dt_term6"
 
    };
 
    check = function(s)
 
        if (#s.code == 4) then
 
            local test = true;
 
            for i = 1, #s.code do
 
                test = test and (s.code[i] == dt_code[i]);
 
            end;
 
            s.code = {};
 
            if (test) then
 
                dt_temple_entrance.open = true;
 
                pr [[ Через несколько мгновений дисплей гаснет. Дверь открывается почти бесшумно, открывая вам доступ к внутреннему залу древнего святилища. ]];
 
            else
 
                pr [[ Через несколько мгновений дисплей гаснет. ]];
 
            end;
 
        end;
 
    end;
 
};
 

	
 
dt_term1 = obj {
 
    nam = "dt_term1";
 
    dsc = "{Нажать фиолетовую кнопку}^";
 
    act = function(s)
 
        if (ArrayUtils.indexOf(dt_buttons, 1) ~= 0 or not dt_wires_room.connections[1]) then
 
            return "Вы нажимаете на кнопку, но ничего не происходит. ";
 
        else
 
            table.insert(dt_terminal_room.code, dt_wires_room.connections[1]);
 
            dt_terminal_room:check();
 
            pr "Вы нажимаете на кнопку, и на экране зажигается соответствующая ей цветная полоса. ";
 
        end;
 
    end;
 
};
 

	
 
dt_term2 = obj {
 
    nam = "dt_term2";
 
    dsc = "{Нажать синюю кнопку}^";
 
    act = function(s)
 
        if (ArrayUtils.indexOf(dt_buttons, 2) ~= 0 or not dt_wires_room.connections[2]) then
 
            return "Вы нажимаете на кнопку, но ничего не происходит. ";
 
        else
 
            table.insert(dt_terminal_room.code, dt_wires_room.connections[2]);
 
            dt_terminal_room:check();
 
            pr "Вы нажимаете на кнопку, и на экране зажигается соответствующая ей цветная полоса. ";
 
        end;
 
    end;
 
};
 

	
 
dt_term3 = obj {
 
    nam = "dt_term3";
 
    dsc = "{Нажать зеленую кнопку}^";
 
    act = function(s)
 
        if (ArrayUtils.indexOf(dt_buttons, 3) ~= 0 or not dt_wires_room.connections[3]) then
 
            return "Вы нажимаете на кнопку, но ничего не происходит. ";
 
        else
 
            table.insert(dt_terminal_room.code, dt_wires_room.connections[3]);
 
            dt_terminal_room:check();
 
            pr "Вы нажимаете на кнопку, и на экране зажигается соответствующая ей цветная полоса. ";
 
        end;
 
    end;
 
};
 

	
 
dt_term4 = obj {
 
    nam = "dt_term4";
 
    dsc = "{Нажать желтую кнопку}^";
 
    act = function(s)
 
        if (ArrayUtils.indexOf(dt_buttons, 4) ~= 0 or not dt_wires_room.connections[4]) then
 
            return "Вы нажимаете на кнопку, но ничего не происходит. ";
 
        else
 
            table.insert(dt_terminal_room.code, dt_wires_room.connections[4]);
 
            dt_terminal_room:check();
 
            pr "Вы нажимаете на кнопку, и на экране зажигается соответствующая ей цветная полоса. ";
 
        end;
 
    end;
 
};
 

	
 
dt_term5 = obj {
 
    nam = "dt_term5";
 
    dsc = "{Нажать оранжевую кнопку}^";
 
    act = function(s)
 
        if (ArrayUtils.indexOf(dt_buttons, 5) ~= 0 or not dt_wires_room.connections[5]) then
 
            return "Вы нажимаете на кнопку, но ничего не происходит. ";
 
        else
 
            table.insert(dt_terminal_room.code, dt_wires_room.connections[5]);
 
            dt_terminal_room:check();
 
            pr "Вы нажимаете на кнопку, и на экране зажигается соответствующая ей цветная полоса. ";
 
        end;
 
    end;
 
};
 

	
 
dt_term6 = obj {
 
    nam = "dt_term6";
 
    dsc = "{Нажать красную кнопку}^";
 
    act = function(s)
 
        if (ArrayUtils.indexOf(dt_buttons, 6) ~= 0 or not dt_wires_room.connections[6]) then
 
            return "Вы нажимаете на кнопку, но ничего не происходит. ";
 
        else
 
            table.insert(dt_terminal_room.code, dt_wires_room.connections[6]);
 
            dt_terminal_room:check();
 
            pr "Вы нажимаете на кнопку, и на экране зажигается соответствующая ей цветная полоса. ";
 
        end;
 
    end;
 
};
 

	
 
dt_wire_colors = {
 
    "фиолетовый",
 
    "синий",
 
    "зеленый",
 
    "желтый",
 
    "оранжевый",
 
    "красный"
 
};
 

	
 
dt_wires_room = dlg {
 
    var {
 
        connections = {
 
            1,
 
            2,
 
            3,
 
            4,
 
            5,
 
            6
 
        };
 
        selected = nil;
 
    };
 
    nam = "dt_wires_room";
 
    disp = "У входа в храм, панель";
 
    dsc = [[
 
        Перед вами открытая панель, за которой находятся шесть проводов, подключенные к своим разъемам. Провода отличаются цветами. 
 
    ]]; 
 
    choose_socket = function(s)
 
        pon("s0");
 
        pon("s1");
 
        pon("s2");
 
        pon("s3");
 
        pon("s4");
 
        pon("s5");
 
        for conn = 1, #dt_wires_room.connections do
 
            if (dt_wires_room.connections[conn] == 1) then
 
                poff("s0");
 
            elseif (dt_wires_room.connections[conn] == 2) then
 
                poff("s1");
 
            elseif (dt_wires_room.connections[conn] == 3) then
 
                poff("s2");
 
            elseif (dt_wires_room.connections[conn] == 4) then
 
                poff("s3");
 
            elseif (dt_wires_room.connections[conn] == 5) then
 
                poff("s4");
 
            elseif (dt_wires_room.connections[conn] == 6) then
 
                poff("s5");
 
            end;
 
        end;
 
        psub("socket");
 
    end;
 
    phr = { 
 
        {tag="wire"};
 
        {
 
            tag = "w0", always = true, 
 
            function(s)
 
                local connect = "не подключен";
 
                if (dt_wires_room.connections[1] ~= nil) then
 
                    connect = dt_wire_colors[dt_wires_room.connections[1]] .. " разъем";
 
                    return "Отсоединить фиолетовый провод (".. connect .. ")";
 
                else
 
                    return "Выбрать фиолетовый провод (".. connect .. ")";
 
                end;
 
                
 
            end, function(s)
 
                if (dt_wires_room.connections[1] ~= nil) then
 
                    dt_wires_room.connections[1] = nil;
 
                    return "Вы отсоединяете провод";
 
                else
 
                    dt_wires_room.selected = 1;
 
                    dt_wires_room:choose_socket();
 
                    return "Куда подключить?";
 
                end;
 
            end
 
        };
 
        {
 
            tag = "w1", always = true, 
 
            function(s)
 
                local connect = "не подключен";
 
                if (dt_wires_room.connections[2] ~= nil) then
 
                    connect = dt_wire_colors[dt_wires_room.connections[2]] .. " разъем";
 
                    return "Отсоединить синий провод (".. connect .. ")";
 
                else
 
                    return "Выбрать синий провод (".. connect .. ")";
 
                end;
 
                
 
            end, function(s)
 
                if (dt_wires_room.connections[2] ~= nil) then
 
                    dt_wires_room.connections[2] = nil;
 
                    return "Вы отсоединяете провод";
 
                else
 
                    dt_wires_room.selected = 2;
 
                    dt_wires_room:choose_socket();
 
                    return "Куда подключить?";
 
                end;
 
            end
 
        };
 
        {
 
            tag = "w2", always = true, 
 
            function(s)
 
                local connect = "не подключен";
 
                if (dt_wires_room.connections[3] ~= nil) then
 
                    connect = dt_wire_colors[dt_wires_room.connections[3]] .. " разъем";
 
                    return "Отсоединить зеленый провод (".. connect .. ")";
 
                else
 
                    return "Выбрать зеленый провод (".. connect .. ")";
 
                end;
 
                
 
            end, function(s)
 
                if (dt_wires_room.connections[3] ~= nil) then
 
                    dt_wires_room.connections[3] = nil;
 
                    return "Вы отсоединяете провод";
 
                else
 
                    dt_wires_room.selected = 3;
 
                    dt_wires_room:choose_socket();
 
                    return "Куда подключить?";
 
                end;
 
            end
 
        };
 
        {
 
            tag = "w3", always = true, 
 
            function(s)
 
                local connect = "не подключен";
 
                if (dt_wires_room.connections[4] ~= nil) then
 
                    connect = dt_wire_colors[dt_wires_room.connections[4]] .. " разъем";
 
                    return "Отсоединить желтый провод (".. connect .. ")";
 
                else
 
                    return "Выбрать желтый провод (".. connect .. ")";
 
                end;
 
                
 
            end, function(s)
 
                if (dt_wires_room.connections[4] ~= nil) then
 
                    dt_wires_room.connections[4] = nil;
 
                    return "Вы отсоединяете провод";
 
                else
 
                    dt_wires_room.selected = 4;
 
                    dt_wires_room:choose_socket();
 
                    return "Куда подключить?";
 
                end;
 
            end
 
        };
 
        {
 
            tag = "w4", always = true, 
 
            function(s)
 
                local connect = "не подключен";
 
                if (dt_wires_room.connections[5] ~= nil) then
 
                    connect = dt_wire_colors[dt_wires_room.connections[5]] .. " разъем";
 
                    return "Отсоединить оранжевый провод (".. connect .. ")";
 
                else
 
                    return "Выбрать оранжевый провод (".. connect .. ")";
 
                end;
 
                
 
            end, function(s)
 
                if (dt_wires_room.connections[5] ~= nil) then
 
                    dt_wires_room.connections[5] = nil;
 
                    return "Вы отсоединяете провод";
 
                else
 
                    dt_wires_room.selected = 5;
 
                    dt_wires_room:choose_socket();
 
                    return "Куда подключить?";
 
                end;
 
            end
 
        };
 
        {
 
            tag = "w5", always = true, 
 
            function(s)
 
                local connect = "не подключен";
 
                if (dt_wires_room.connections[6] ~= nil) then
 
                    connect = dt_wire_colors[dt_wires_room.connections[6]] .. " разъем";
 
                    return "Отсоединить красный провод (".. connect .. ")";
 
                else
 
                    return "Выбрать красный провод (".. connect .. ")";
 
                end;
 
                
 
            end, function(s)
 
                if (dt_wires_room.connections[6] ~= nil) then
 
                    dt_wires_room.connections[6] = nil;
 
                    return "Вы отсоединяете провод";
 
                else
 
                    dt_wires_room.selected = 6;
 
                    dt_wires_room:choose_socket();
 
                    return "Куда подключить?";
 
                end;
 
            end
 
        };
 
        {
 
            tag = "leave", always = true, "Отойти от панели", code = [[ walk("dt_temple_entrance"); ]]
 
        };
 
        {tag="socket"};
 
        {
 
            tag = "s0", always = true,
 
            "В фиолетовый разъем", function(s)
 
                dt_wires_room.connections[dt_wires_room.selected] = 1;
 
                psub("wire");
 
                return "Провод подключен";
 
            end
 
        };
 
        {
 
            tag = "s1", always = true,
 
            "В синий разъем", function(s)
 
                dt_wires_room.connections[dt_wires_room.selected] = 2;
 
                psub("wire");
 
                return "Провод подключен";
 
            end
 
        };
 
        {
 
            tag = "s2", always = true,
 
            "В зеленый разъем", function(s)
 
                dt_wires_room.connections[dt_wires_room.selected] = 3;
 
                psub("wire");
 
                return "Провод подключен";
 
            end
 
        };
 
        {
 
            tag = "s3", always = true,
 
            "В желтый разъем", function(s)
 
                dt_wires_room.connections[dt_wires_room.selected] = 4;
 
                psub("wire");
 
                return "Провод подключен";
 
            end
 
        };
 
        {
 
            tag = "s4", always = true,
 
            "В оранжевый разъем", function(s)
 
                dt_wires_room.connections[dt_wires_room.selected] = 5;
 
                psub("wire");
 
                return "Провод подключен";
 
            end
 
        };
 
        {
 
            tag = "s5", always = true,
 
            "В красный разъем", function(s)
 
                dt_wires_room.connections[dt_wires_room.selected] = 6;
 
                psub("wire");
 
                return "Провод подключен";
 
            end
 
        };
 
    };   
 
};
 

	
 
dt_wire0 = obj {
 
    nam = "dt_wire0";
 
    dsc = function(s)
 
        local connect = "не подключен";
 
        if (dt_wires_room.connections[1] ~= nil) then
 
            connect = dt_wire_colors[dt_wires_room.connections[1]] .. "разъем";
 
        end;
 
        return "Выбрать фиолетовый провод (".. connect .. ")^";
 
    end;
 
};
 

	
 
dt_temple = room {
 
    var {
 
        state = 0;
 
    };
 
    nam = "dt_temple";
 
    disp = "Древний храм";
 
    dsc = [[
 
        Вы находитесь в огромном зале, высеченном в скале древними навьярами. 
 
    ]];
 
    obj = {
 
        "dt_walls",
 
        "dt_pedestal",
 
        "dt_screens",
 
        "item_naethvjirr_key"
 
    };
 
    way = {
 
        kh_vroom("Выйти", "dt_temple_entrance");
 
    };
 
};
 

	
 
dt_walls = obj {
 
    nam = "dt_walls";
 
    dsc = [[
 
        Стены зала, освещенные такими же лампами, как и внешнее помещение, украшены множеством предостерегающих рисунков и символов. 
 
    ]];
 
};
 

	
 
dt_pedestal = obj {
 
    nam = "dt_pedestal";
 
    dsc = [[
 
        В центре зала установлен массивный металлический пьедестал.
 
    ]];
 
};
 

	
 
dt_screens = obj {
 
    nam = "dt_screens";
 
    dsc = [[
 
        Вокруг пьедестала расположено множество экранов, на которых цветными полосами навьярского языка горят предупреждения об опасности использования предмета, хранящегося в этом зале. 
 
    ]];
 
}
 

	
 
dt_fight = room {
 
    var {
 
        state = 0;
 
        has_shot = false;
 
        rotation = 90;
 
        dir = 0;
 
        tentacles = {
 
            {hp=200, dir=0, away = 0 };
 
            {hp=200, dir=1, away = 0 };
 
            {hp=200, dir=2, away = 0 };
 
            {hp=200, dir=3, away = 0 };
 
            {hp=200, dir=4, away = 0 };
 
        };
 
    };
 
    nam = "dt_fight";
 
    disp = "Левиафан, рубка";
 
    forcedsc = true;
 
    entered = function(s)
 
        s:maketurn();
 
        if (s.state == 0) then
 
            s.state = 1;
 
            local dirs = {0,1,2,3,4,5,6,7};
 
            for i = 1, #s.tentacles do
 
                local cd = rnd(#dirs);
 
                s.tentacles[i].dir = dirs[cd];
 
                table.remove(dirs, cd);
 
                print(#dirs);
 
            end;
 
        end;
 
    end;
 
    eval_tentacle = function(s, tentacle)
 
        if (tentacle.hp <= 70) then
 
            return [[Серьезно раненое щупальце ]];
 
        elseif (tentacle.hp <= 140) then
 
            return [[Раненое щупальце ]];
 
        elseif (tentacle.hp < 200) then
 
            return [[Легко раненое щупальце ]];
 
        else
 
            return [[Щупальце ]];
 
        end;
 
    end;
 
    dsc = function(s)
 
        local fr = s.dir + 1;
 
        local r = s.dir + 2;
 
        local br = s.dir + 3;
 
        local b = s.dir + 4;
 
        local fl = s.dir - 1;
 
        local l = s.dir - 2;
 
        local bl = s.dir - 3;
 
        if (fr > 7) then
 
            fr = fr - 8;
 
        end;
 
        if (r > 7) then
 
            r = r - 8;
 
        end;
 
        if (br > 7) then
 
            br = br - 8;
 
        end;
 
        if (b > 7) then
 
            b = b - 8;
 
        end;
 
        if (fl < 0) then
 
            fl = fl + 8;
 
        end;
 
        if (l < 0) then
 
            l = l + 8;
 
        end;
 
        if (bl < 0) then
 
            bl = bl + 8;
 
        end;
 
        for i = 1, #s.tentacles do 
 
            pr(s.tentacles[i].hp .. " ");
 
        end;
 
        pr("^");
 
        pr [[Щупальца кракена тянутся к Левиафану. ]];
 
        for i = 1, #s.tentacles do 
 
            if (s.tentacles[i].hp > 0 and s.tentacles[i].dir == s.dir and s.tentacles[i].away == 0) then
 
                pr(s:eval_tentacle(s.tentacles[i]) .. [[ находится прямо перед субмариной. ]]);
 
            end;
 
        end;
 
        for i = 1, #s.tentacles do 
 
            if (s.tentacles[i].hp > 0 and s.tentacles[i].dir == fr and s.tentacles[i].away == 0) then
 
                pr(s:eval_tentacle(s.tentacles[i]) .. [[ находится спереди и справа от субмарины. ]]);
 
            end;
 
        end;
 
        for i = 1, #s.tentacles do 
 
            if (s.tentacles[i].hp > 0 and s.tentacles[i].dir == fl and s.tentacles[i].away == 0) then
 
                pr(s:eval_tentacle(s.tentacles[i]) .. [[ находится спереди и слева от субмарины. ]]);
 
            end;
 
        end;
 
        for i = 1, #s.tentacles do 
 
            if (s.tentacles[i].hp > 0 and s.tentacles[i].dir == r and s.tentacles[i].away == 0) then
 
                pr(s:eval_tentacle(s.tentacles[i]) .. [[ находится справа по борту. ]]);
 
            end;
 
        end;
 
        for i = 1, #s.tentacles do 
 
            if (s.tentacles[i].hp > 0 and s.tentacles[i].dir == l and s.tentacles[i].away == 0) then
 
                pr(s:eval_tentacle(s.tentacles[i]) .. [[ находится слева по борту. ]]);
 
            end;
 
        end;
 
        for i = 1, #s.tentacles do 
 
            if (s.tentacles[i].hp > 0 and s.tentacles[i].dir == b and s.tentacles[i].away == 0) then
 
                pr(s:eval_tentacle(s.tentacles[i]) .. [[ находится сзади. ]]);
 
            end;
 
        end;
 
        for i = 1, #s.tentacles do 
 
            if (s.tentacles[i].hp > 0 and s.tentacles[i].dir == bl and s.tentacles[i].away == 0) then
 
                pr(s:eval_tentacle(s.tentacles[i]) .. [[ находится сзади и слева. ]]);
 
            end;
 
        end;
 
        for i = 1, #s.tentacles do 
 
            if (s.tentacles[i].hp > 0 and s.tentacles[i].dir == br and s.tentacles[i].away == 0) then
 
                pr(s:eval_tentacle(s.tentacles[i]) .. [[ находится сзади и справа. ]]);
 
            end;
 
        end;
 
    end;
 
    maketurn = function(s)
 
        local dcnt = 0;
 
        if (s.has_shot) then
 
            local fr = s.dir + 1;
 
            local r = s.dir + 2;
 
            local br = s.dir + 3;
 
            local b = s.dir + 4;
 
            local fl = s.dir - 1;
 
            local l = s.dir - 2;
 
            local bl = s.dir - 3;
 
            if (fr > 7) then
 
                fr = fr - 8;
 
            end;
 
            if (r > 7) then
 
                r = r - 8;
 
            end;
 
            if (br > 7) then
 
                br = br - 8;
 
            end;
 
            if (b > 7) then
 
                b = b - 8;
 
            end;
 
            if (fl < 0) then
 
                fl = fl + 8;
 
            end;
 
            if (l < 0) then
 
                l = l + 8;
 
            end;
 
            if (bl < 0) then
 
                bl = bl + 8;
 
            end;
 
            s.has_shot = false;
 
            s.rotation = 90;
 
            for i = 1, #s.tentacles do 
 
                if (s.tentacles[i].hp > 0) then
 
                    if (s.tentacles[i].away > 0) then
 
                        s.tentacles[i].away = s.tentacles[i].away - 1;
 
                        if (s.tentacles[i].away == 0) then
 
                            --TODO show up somewhere
 
                            local dirs = {};
 
                            for j = 1, #s.tentacles do 
 
                                if (s.tentacles[j].hp > 0 and s.tentacles[j].away == 0) then
 
                                    table.insert(dirs, s.tentacles[j].dir);
 
                                end;
 
                            end;
 
                            local newdir;
 
                            repeat 
 
                                newdir = rnd(8) - 1;
 
                            until ArrayUtils.indexOf(dirs, newdir) == 0;
 
                            print(newdir);
 
                            s.tentacles[i].dir = newdir;
 
                            
 
                            if (s.tentacles[i].hp <= 70) then
 
                                pr [[Серьезно раненое щупальце ]];
 
                            elseif (s.tentacles[i].hp <= 140) then
 
                                pr [[Раненое щупальце ]];
 
                            elseif (s.tentacles[i].hp < 200) then
 
                                pr [[Легко раненое щупальце ]];
 
                            end;
 
                            if (newdir == f) then
 
                                pr [[подтягивается спереди. ]];
 
                            elseif (newdir == fr) then
 
                                pr [[подтягивается спереди справа. ]];
 
                            elseif (newdir == fl) then
 
                                pr [[подтягивается спереди слева. ]];
 
                            elseif (newdir == r) then
 
                                pr [[подтягивается справа. ]];
 
                            elseif (newdir == l) then
 
                                pr [[подтягивается слева. ]];
 
                            elseif (newdir == br) then
 
                                pr [[подтягивается сзади справа. ]];
 
                            elseif (newdir == bl) then
 
                                pr [[подтягивается сзади слева. ]];
 
                            elseif (newdir == b) then
 
                                pr [[подтягивается сзади. ]];
 
                            end;
 
                        end;
 
                    else
 
                        --TODO hit leviathan or hide up
 
                        if (rnd(8) > 1) then
 
                            submarine_leviathan.hull_integrity = submarine_leviathan.hull_integrity - 5;
 
                            pr [[Кракен ударяет Левиафан щупальцем. ]];
 
                        else
 
                            s.tentacles[i].away = 1;
 
                            pr [[Кракен отдергивает одно из щупалец. ]];
 
                        end;
 
                    end;
 
                else
 
                    dcnt = dcnt + 1;
 
                end;
 
            end;
 
        end;
 
        if (dcnt > 2) then
 
            walk("dt_kraken_victory");
 
        end;
 
        
 
        dt_f_rotate_ccw45:enable();
 
        dt_f_rotate_cw45:enable();
 
        dt_f_sonic:enable();
 
        if (submarine_leviathan.torpedoes == 0) then
 
            dt_f_torpedo:disable();
 
        else
 
            dt_f_torpedo:enable();
 
        end;
 
        if (submarine_leviathan.torpedoes == 2) then
 
            dt_f_recharge:disable();
 
        else
 
            dt_f_recharge:enable();
 
        end;
 
        if (s.rotation < 45) then
 
            dt_f_rotate_ccw45:disable();
 
            dt_f_rotate_cw45:disable();
 
        end;
 
        if (s.has_shot) then
 
            dt_f_torpedo:disable();
 
            dt_f_sonic:disable();
 
        end;
 
        
 
        if (submarine_leviathan.hull_integrity <= 0) then
 
            walk("game_over_kraken");
 
        end;
 
    end;
 
    obj = {
 
        "dt_f_rotate_ccw45",
 
        "dt_f_rotate_cw45",
 
        "dt_f_torpedo",
 
        "dt_f_sonic",
 
        "dt_f_recharge",
 
        "dt_f_wait"
 
    };
 
};
 

	
 
dt_f_rotate_ccw45 = obj {
 
    nam = "dt_f_rotate_ccw45";
 
    dsc = "{Повернуть на 45 градусов против часовой стрелки}^";
 
    act = function(s)
 
        dt_fight.dir = dt_fight.dir - 1;
 
        if (dt_fight.dir < 0) then
 
            dt_fight.dir = dt_fight.dir + 8;
 
        end;
 
        dt_fight.rotation = dt_fight.rotation - 45;
 
        pr "Субмарина поворачивает против часовой стрелки. ";
 
        dt_fight:maketurn();
 
    end;
 
};
 

	
 
dt_f_rotate_cw45 = obj {
 
    nam = "dt_f_rotate_cw45";
 
    dsc = "{Повернуть на 45 градусов по часовой стрелке}^";
 
    act = function(s)
 
        dt_fight.dir = dt_fight.dir + 1;
 
        if (dt_fight.dir > 7) then
 
            dt_fight.dir = dt_fight.dir - 8;
 
        end;
 
        dt_fight.rotation = dt_fight.rotation - 45;
 
        pr  "Субмарина поворачивает по часовой стрелке. ";
 
        dt_fight:maketurn();
 
    end;
 
};
 

	
 
dt_f_torpedo = obj {
 
    nam = "dt_f_torpedo";
 
    dsc = "{Выстрелить торпедой}^";
 
    act = function(s)
 
        pr "Вы выпускаете торпеду. ";
 
        dt_fight.has_shot = true;
 
        submarine_leviathan.torpedoes = submarine_leviathan.torpedoes - 1;
 
        for i=1, #dt_fight.tentacles do
 
            if dt_fight.tentacles[i].dir == dt_fight.dir and dt_fight.tentacles[i].hp > 0 and dt_fight.tentacles[i].away == 0 then
 
                dt_fight.tentacles[i].hp = dt_fight.tentacles[i].hp - 70;
 
                dt_fight.tentacles[i].away = 2;
 
                if (dt_fight.tentacles[i].hp > 0) then
 
                    pr "Торпеда попадает в одно из щупалец, нанеся ему существенный урон. Кракен резко отдергивает его. ";
 
                else
 
                    pr "Щупальце отрывает взрывом. Кракен бьется в конвульсиях. ";
 
                end;
 
            end;
 
        end;    
 
        dt_fight:maketurn();
 
    end;
 
};
 

	
 
dt_f_sonic = obj {
 
    nam = "dt_f_sonic";
 
    dsc = "{Выстрелить из звуковой пушки}^";
 
    act = function(s)
 
        dt_fight.has_shot = true;
 
        pr [[Вы стреляете из звуковой пушки. ]];
 
        local fr = dt_fight.dir + 1;
 
        local fl = dt_fight.dir - 1;
 
        if (fr > 7) then
 
            fr = fr - 8;
 
        end;
 
        if (fl < 0) then
 
            fl = fl + 8;
 
        end;
 
        local hit = false;
 
        for i=1, #dt_fight.tentacles do
 
            if (dt_fight.tentacles[i].dir == dt_fight.dir or dt_fight.tentacles[i].dir == fr or dt_fight.tentacles[i].dir == fl) and dt_fight.tentacles[i].hp > 0 and dt_fight.tentacles[i].away == 0 then
 
                hit = true;
 
                dt_fight.tentacles[i].hp = dt_fight.tentacles[i].hp - 20;
 
                dt_fight.tentacles[i].away = 3;
 
                if (dt_fight.tentacles[i].hp <= 0) then
 
                    pr "Одно из щупалец выведено из строя. ";
 
                end;
 
            end;
 
        end;    
 
        if (hit) then
 
            pr [[
 
                Кракен резко отдергивает щупальца, попавшие в область действия звуковой пушки. 
 
            ]];
 
        end;
 
        dt_fight:maketurn();
 
    end;
 
};
 

	
 
dt_f_recharge = obj {
 
    nam = "dt_f_recharge";
 
    dsc = "{Перезарядить торпедные аппараты}^";
 
    act = function(s)
 
        submarine_leviathan.torpedoes = 2;
 
        if (ArrayUtils.indexOf(pl.party, 'wright') ~= 0 or ArrayUtils.indexOf(pl.party, 'radcliffe') ~= 0) then
 
            pr "Вы отдаете по телефону приказ перезарядить торпедные аппараты. ";
 
            dt_fight:maketurn();
 
        else
 
            pr "Вы спускаетесь вниз, чтобы перезарядить торпедные аппараты. ";
 
            dt_fight.has_shot = true;
 
            dt_fight:maketurn();
 
            dt_fight.has_shot = true;
 
            dt_fight:maketurn();
 
            pr "Вы возвращаетесь в рубку, чтобы продолжить бой. "
 
        end;
 
    end;
 
};
 

	
 

	
 
dt_f_wait = obj {
 
    nam = "dt_f_wait";
 
    dsc = "{Ждать}^";
 
    act = function(s)
 
        pr "";
 
        dt_fight.has_shot = true;
 
        dt_fight.rotation = 0;
 
        dt_fight:maketurn();
 
    end;
 
};
 

	
 
dt_kraken_victory = cutscene("dt_kraken_victory", "Левиафан, рубка", [[
 
    После очередного выстрела Левиафана, кракен исчезает в глубинах, оставив вас в покое. 
 
]], "leviathan_wheelhouse");
 
\ No newline at end of file
journey_zayslanotrr.lua
Show inline comments
 
global {
 
    za_convoy_gone = false;
 
};
 

	
 
za_gate_foot = room {
 
    nam = "Вход в Заисланотр";
 
    handwheel_room = "za_gate";
 
    underwater = true;
 
    no_exit = [[
 
        Нет смысла покидать Левиафан здесь. 
 
    ]];
 
    view = [[
 
        Через иллюминаторы вы видите перед собой высокие металлические ворота Заисланотра. С обеих сторон от них стоят две смотровые башни, на вершинах которых горят красные огоньки. 
 
    ]];
 
};
 

	
 
za_gate = dlg {
 
    var {
 
        state = 0;
 
    };
 
    nam = "Левиафан, рубка";
 
    entered = function(s)
 
        if (s.state == 0) then
 
            s.state = 1;
 
            if (ArrayUtils.indexOf(pl.party, 'learr') ~= 0) then
 
                psub("learr");
 
                return [[
 
                    Как только Левиафан приближается к городу, массивные металлические ворота начинают закрываться. Огни на башнях окрашиваются красным, а по всему городу начинается какое-то волнение. В рубку поднимается Леарр. Она встает рядом с вами и, окидывая взглядом город, произносит: "Мы туда-не-идем. Они не-пускают-нас".
 
                ]];
 
            else
 
                psub("anna");
 
                return [[
 
                    Как только Левиафан приближается к городу, массивные металлические ворота начинают закрываться. Огни на башнях окрашиваются красным, а по всему городу начинается какое-то волнение. В рубку поднимается Анна. Она встает рядом с вами и, окидывая взглядом город, произносит: "Кажется, нам здесь не рады".
 
                ]];
 
            end;
 
        else
 
            psub("control");
 
            return [[
 
                Левиафан находится перед массивными металлическими воротами Заисланотра. Огни на башнях горят ярко-красным, сообщая вам что пути нет. 
 
            ]];
 
        end;
 
    end;
 
    phr = {
 
        {tag="learr"};
 
        {"[Остановить субмарину]И что нам делать?", [[
 
            Леарр пожимает плечами: "Мы незаметными-пройти-должны. Сильнее-они так-как много-их".
 
        ]], code [[ psub("control"); ]]};
 
        {"[Продолжать движение]Попробуем преподать им урок", code = [[ walk("game_over_za_learr"); ]]};
 
        {tag="anna"};
 
        {"[Остановить субмарину]И что нам делать?", [[
 
            Анна пожимает плечами: "Понятия не имею".
 
        ]], code [[ psub("control"); ]]};
 
        {"[Продолжать движение]Попробуем преподать им урок", code = [[ walk("game_over_za_anna"); ]]};
 
        {tag="control"};
 
        {always = true, "[Проплыть над воротами]", code = [[
 
            if (ArrayUtils.indexOf(pl.party, 'learr') ~= 0) then
 
                walk("game_over_za_learr");
 
            else
 
                walk("game_over_za_anna");
 
            end;
 
        ]]};
 
        {always = true, "[Двигаться вдоль стен]", code = [[
 
            move(submarine_leviathan, "za_crack_foot");
 
            walk("za_crack");
 
        ]]};
 
        {always = true, "[Отправиться в другое место]", code = [[
 
            walk("leviathan_handwheel");
 
        ]]};
 
        {always = true, "[Отойти от штурвала]", code = [[
 
            walk("leviathan_wheelhouse");
 
        ]]};
 
    };
 
};
 

	
 
za_crack_foot = room {
 
    nam = "Вход в Заисланотр";
 
    handwheel_room = "za_crack";
 
    underwater = true;
 
    dsc = [[
 
        Перед вами возвышается каменная стена древнего города. Через широкую трещину в ней вы вполне можете попытаться попасть на другую сторону. 
 
    ]];
 
    view = [[
 
        Через иллюминаторы вы видите высокие стены Заисланотра. Мощный луч прожектора освещает едва заметную трещину в стене. Быть может, вы сможете незаметно пробраться через нее в город. 
 
    ]];
 
    way = {
 
        kh_vroom("В Левиафан", leviathan_airlock);
 
        kh_vroom("В трещину", "za_crack_inside");
 
    };
 
};
 

	
 
za_crack = dlg {
 
    nam = "Левиафан, рубка";
 
    entered = [[
 
        Левиафан находится у стены Заисланотра. Огни на башнях погашены, сообщая что навьяры скорее всего не придают значения вашему присутствию. 
 
    ]];
 
    phr = {
 
        {always = true, "[Вернуться к воротам]", code = [[
 
            move(submarine_leviathan, "za_gate_foot");
 
            walk("za_gate");
 
        ]]};
 
        {always = true, "[Отправиться в другое место]", code = [[
 
            walk("leviathan_handwheel");
 
        ]]};
 
        {always = true, "[Отойти от штурвала]", code = [[
 
            walk("leviathan_wheelhouse");
 
        ]]};
 
    };
 
};
 

	
 
za_convoy_route = {
 
    "za_cross_6",
 
    "za_street_11",
 
    "za_cross_5",
 
    "za_street_13",
 
    "za_cross_24",
 
    "za_street_15",
 
    "za_cross_7",
 
    "za_street_16",
 
    "za_cross_8",
 
    "za_street_22",
 
    "za_cross_11",
 
    "za_street_23",
 
    "za_cross_12",
 
    "za_street_41",
 
    "za_cross_22",
 
    "za_street_42",
 
    "za_cross_23",
 
    "za_street_44",
 
    "za_cross_15",
 
    "za_street_27",
 
    "za_prison_entrance",
 
    "za_prison"
 
};
 

	
 
za_convoy = {
 
    position = null;
 
    direction = 'za_cross_6';
 
    index = 1;
 
    life = function(s)
 
        local loc = stead.deref(here());
 
        for i = 1, #za_convoy_messages do
 
            if (za_convoy_messages[i][1] == loc and za_convoy_messages[i][2] == za_convoy.position) then
 
                pr(za_convoy_messages[i][3]);
 
            end;
 
        end;
 
        if (za_convoy.index > #za_convoy_route) then
 
            --TODO Конвой ушол
 
            print("Konvoy left");
 
            za_convoy_gone = true;
 
            timer:stop();
 
            game.timer = null;
 
            lifeoff(za_convoy);
 
        else
 
            za_convoy.direction  = za_convoy_route[za_convoy.index];
 
            if (loc == za_convoy.position) then
 
                --TODO Бой начинается
 
                timer:stop();
 
                game.timer = null;
 
                lifeoff(za_convoy);
 
                enter(za_phaetlarr_fight_intro);
 
            end;
 
        end;
 
    end;
 
};
 

	
 
za_convoy_messages = {
 
    --here--new_position--message--
 
    {"za_street_12", "za_cross_6", "Конвой выходит на перекресток к северу от вас. Навьяры поворачивают в противоположную от вас сторону и продолают свой путь. "},
 
    {"za_street_11", "za_cross_6", "Конвой выходит на перекресток к северу от вас. Навьяры поворачивают в вашу сторону и продолают свой путь. "},
 
    {"za_street_12", "za_street_11", "Конвой удаляется на север. "},
 
    {"za_cross_6", "za_street_11", "Конвой движется на север. "},
 
    {"za_cross_5", "za_street_11", "Конвой приближается к вам. "},
 
    {"za_cross_6", "za_cross_5", "Конвой удаляется на север. "},
 
    {"za_street_11", "za_cross_5", "Конвой движется на север. "},
 
    {"za_street_10", "za_cross_5", "Конвой приближается к вам. "},
 
    {"za_street_13", "za_cross_5", "Конвой выходит на перекресток к востоку от вас. "},
 
    {"za_street_10", "za_street_13", "Конвой сворачивает на улицу к западу. "},
 
    {"za_street_11", "za_street_13", "Конвой сворачивает на улицу к западу. "},
 
    {"za_cross_24", "za_street_13", "Конвой приближается к вас с востока. "},
 
    {"za_street_14", "za_cross_24", "Конвой выходит на перекресток к югу от вас. "},
 
    {"za_street_15", "za_cross_24", "Конвой выходит на перекресток к северу от вас. "},
 
    {"za_street_14", "za_street_15", "Конвой удаляется от вас на юг. "},
 
    {"za_cross_24", "za_street_15", "Конвой движется от вас на юг. "},
 
    {"za_cross_7", "za_street_15", "Конвой приближается к вас с севера. "},
 
    {"za_deadend_3n", "za_cross_7", "Конвой выходит на перекресток к северу от вас. "},
 
    {"za_cross_24", "za_cross_7", "Конвой удаляется на юг. "},
 
    {"za_street_15", "za_cross_7", "Конвой движется на юг. "},
 
    {"za_street_16", "za_cross_7", "Конвой выходит на перекресток к востоку от вас. "},
 
    {"za_deadend_3n", "za_street_16", "Конвой уходит на запад. "},
 
    {"za_street_15", "za_street_16", "Конвой уходит на запад. "},
 
    {"za_cross_7", "za_street_16", "Конвой уходит на запад. "},
 
    {"za_cross_8", "za_street_16", "Конвой приближается с востока. "},
 
    {"za_street_17", "za_cross_8", "Конвой выходит на перекресток к югу от вас. "},
 
    {"za_street_22", "za_cross_8", "Конвой выходит на перекресток к востоку от вас. "},
 
    {"za_street_16", "za_cross_8", "Конвой уходит на запад. "},
 
    {"za_cross_7", "za_cross_8", "Конвой удаляется на запад. "},
 
    {"za_cross_7", "za_street_22", "Конвой удаляется на запад. "},
 
    {"za_street_16", "za_street_22", "Конвой движется на запад. "},
 
    {"za_street_17", "za_street_22", "Конвой движется на запад. "},
 
    {"za_cross_11", "za_street_22", "Конвой приближается с востока. "},
 
    {"za_cross_8", "za_cross_11", "Конвой удаляется на запад. "},
 
    {"za_street_22", "za_cross_11", "Конвой движется на запад. "},
 
    {"za_street_21", "za_cross_11", "Конвой выходит на перекресток к югу от вас. "},
 
    {"za_street_36", "za_cross_11", "Конвой выходит на перекресток к востоку от вас. "},
 
    {"za_street_23", "za_cross_11", "Конвой выходит на перекресток к северу от вас. "},
 
    {"za_street_22", "za_street_23", "Конвой движется на юг. "},
 
    {"za_street_21", "za_street_23", "Конвой удаляется на юг. "},
 
    {"za_street_36", "za_street_23", "Конвой движется на юг. "},
 
    {"za_cross_11", "za_street_23", "Конвой движется на юг. "},
 
    {"za_cross_12", "za_street_23", "Конвой приближается с севера. "},
 
    {"za_cross_11", "za_cross_12", "Конвой удаляется на юг. "},
 
    {"za_street_23", "za_cross_12", "Конвой выходит на перекресток к югу от вас. "},
 
    {"za_street_46", "za_cross_12", "Конвой выходит на перекресток к востоку от вас. "},
 
    {"za_street_24", "za_cross_12", "Конвой выходит на перекресток к западу от вас. "},
 
    {"za_street_41", "za_cross_12", "Конвой выходит на перекресток к северу от вас. "},
 
    {"za_street_23", "za_street_41", "Конвой удаляется на юг. "},
 
    {"za_cross_12", "za_street_41", "Конвой движется на юг. "},
 
    {"za_street_46", "za_street_41", "Конвой движется на юг. "},
 
    {"za_street_24", "za_street_41", "Конвой движется на юг. "},
 
    {"za_cross_22", "za_street_41", "Конвой приближается с севера. "},
 
    {"za_cross_12", "za_cross_22", "Конвой удаляется на юг. "},
 
    {"za_street_41", "za_cross_22", "Конвой выходит на перекресток к югу от вас. "},
 
    {"za_street_45", "za_cross_22", "Конвой выходит на перекресток к востоку от вас. "},
 
    {"za_street_42", "za_cross_22", "Конвой выходит на перекресток к западу от вас. "},
 
    {"za_street_40", "za_cross_22", "Конвой выходит на перекресток к северу от вас. "},
 
    {"za_street_41", "za_street_42", "Конвой движется на восток. "},
 
    {"za_street_40", "za_street_42", "Конвой движется на восток. "},
 
    {"za_cross_22", "za_street_42", "Конвой движется на восток. "},
 
    {"za_street_45", "za_street_42", "Конвой удаляется на восток. "},
 
    {"za_cross_23", "za_street_42", "Конвой приближается с запада. "},
 
    {"za_cross_22", "za_cross_23", "Конвой удаляется на восток. "},
 
    {"za_street_42", "za_cross_23", "Конвой выходит на перекресток к востоку от вас. "},
 
    {"za_street_43", "za_cross_23", "Конвой выходит на перекресток к югу от вас. "},
 
    {"za_street_44", "za_cross_23", "Конвой выходит на перекресток к западу от вас. "},
 
    {"za_street_42", "za_street_44", "Конвой удаляется на восток. "},
 
    {"za_cross_23", "za_street_44", "Конвой движется на восток. "},
 
    {"za_street_43", "za_street_44", "Конвой движется на восток. "},
 
    {"za_cross_15", "za_street_44", "Конвой приближается с запада. "},
 
    {"za_cross_23", "za_cross_15", "Конвой удаляется на восток. "},
 
    {"za_street_44", "za_cross_15", "Конвой выходит на перекресток к востоку от вас. "},
 
    {"za_street_26", "za_cross_15", "Конвой выходит на перекресток к югу от вас. "},
 
    {"za_street_35", "za_cross_15", "Конвой выходит на перекресток к северу от вас. "},
 
    {"za_street_27", "za_cross_15", "Конвой выходит на перекресток к западу от вас. "},
 
    {"za_street_44", "za_street_27", "Конвой удаляется на восток. "},
 
    {"za_cross_15", "za_street_27", "Конвой движется на восток. "},
 
    {"za_street_26", "za_street_27", "Конвой движется на восток. "},
 
    {"za_street_35", "za_street_27", "Конвой движется на восток. "},
 
    {"za_prison_entrance", "za_street_27", "Конвой приближается с запада. "},
 
    {"za_cross_15", "za_prison_entrance", "Конвой удаляется на восток. "},
 
    {"za_street_27", "za_prison_entrance", "Конвой приближается ко входу в здание. "},
 
    {"za_deadend_2s", "za_prison_entrance", "Конвой приближается ко входу в здание к югу от вас. "},
 
    {"za_street_28", "za_prison_entrance", "Конвой приближается ко входу в здание. "},
 
    {"za_street_27", "za_prison", "Двери здания мгновенно раскрываются, впуская навьяров, после чего столь же быстро закрываются. "},
 
    {"za_deadend_2s", "za_prison", "Двери здания мгновенно раскрываются, впуская навьяров, после чего столь же быстро закрываются. "},
 
    {"za_street_28", "za_prison", "Двери здания мгновенно раскрываются, впуская навьяров, после чего столь же быстро закрываются. "}
 
};
 

	
 
za_timer = function()
 
    local loc = stead.deref(here());
 
    za_convoy.index = za_convoy.index + 1;
 
    za_convoy.position = za_convoy.direction;
 
    for i = 1, #za_convoy_messages do
 
        if (za_convoy_messages[i][1] == loc and za_convoy_messages[i][2] == za_convoy.position) then
 
            pr(za_convoy_messages[i][3]);
 
        end;
 
    end;
 
    if (za_convoy.index > #za_convoy_route) then
 
        --TODO Конвой ушол
 
        print("Konvoy left");
 
        timer:stop();
 
        game.timer = null;
 
        lifeoff(za_convoy);
 
    else
 
        za_convoy.direction  = za_convoy_route[za_convoy.index];
 
        if (loc == za_convoy.position) then
 
            --TODO Бой начинается
 
            timer:stop();
 
            game.timer = null;
 
            lifeoff(za_convoy);
 
            enter(za_phaetlarr_fight_intro);
 
        end;
 
    end;
 
end;
 

	
 
za_alley = inherit(room, function(s) 
 
    if (not s.disp) then
 
        s.disp = "Заисланотр, проулок";
 
    end;
 
    if (not s.dsc) then
 
        s.dsc = [[
 
            Вы находитесь посреди узкого проулка где-то в Заисланотре. 
 
        ]];
 
    end;
 
    
 
    return s;
 
end);
 

	
 
za_street = inherit(room, function(s) 
 
    if (not s.disp) then
 
        s.disp = "Заисланотр, улица";
 
    end;
 
    if (not s.dsc) then
 
        s.dsc = [[
 
            Вы находитесь посреди улицы где-то в Заисланотре. 
 
        ]];
 
    end;
 
    
 
    return s;
 
end);
 

	
 
za_deadend = inherit(room, function(s) 
 
    if (not s.disp) then
 
        s.disp = "Заисланотр, тупик";
 
    end;
 
    if (not s.dsc) then
 
        s.dsc = [[
 
            Вы находитесь в тупике где-то в Заисланотре. 
 
        ]];
 
    end;
 
    
 
    return s;
 
end);
 

	
 
za_cross = inherit(room, function(s) 
 
    if (not s.disp) then
 
        s.disp = "Заисланотр, перекресток";
 
    end;
 
    if (not s.dsc) then
 
        s.dsc = [[
 
            Вы находитесь на перекрестке где-то в Заисланотре. 
 
        ]];
 
    end;
 
    
 
    return s;
 
end);
 

	
 
za_crack_inside = za_alley {
 
    nam = "za_crack_inside";
 
    disp = "Заисланотр, у трещины в стене";
 
    dsc = [[
 
        Вы находитесь в небольшом проулке на окраине Заисланотра. К западу от вас возвышается городская стена, а с востока и севера вы видите стены домов. 
 
    ]];
 
    way = {
 
        kh_vroom("На юг", "za_alley_1");
 
        kh_vroom("В трещину", "za_crack_foot");
 
    };
 
};
 

	
 
za_alley_1 = za_alley {
 
    nam = "za_alley_1";
 
    way = {
 
        kh_vroom("На юг", "za_alley_2");
 
        kh_vroom("На север", "za_crack_inside");
 
    };
 
};
 

	
 
za_alley_2 = za_alley {
 
    nam = "za_alley_2";
 
    way = {
 
        kh_vroom("На юг", "za_deadend_1n");
 
        kh_vroom("На север", "za_alley_1");
 
        kh_vroom("На восток", "za_street_1");
 
    };
 
};
 

	
 
za_deadend_1n = za_deadend{
 
    nam = "za_deadend_1n";
 
    way = {
 
        kh_vroom("На север", "za_alley_2");
 
    };
 
};
 

	
 
za_street_1 = za_street {
 
    nam = "za_street_1";
 
    way = {
 
        kh_vroom("На запад", "za_alley_2");
 
        kh_vroom("На восток", "za_cross_1");
 
    };
 
};
 

	
 
za_cross_1 = za_cross {
 
    var {
 
        state = 0;
 
    };
 
    nam = "za_cross_1";
 
    enter = function(s)
 
        if (s.state == 0) then
 
            s.state = 1;
 
            walkin("za_cutscene_1");
 
        end;
 
    end;
 
    way = {
 
        kh_vroom("На юг", "za_street_20");
 
        kh_vroom("На север", "za_street_2");
 
        kh_vroom("На запад", "za_street_1");
 
        kh_vroom("На восток", "za_street_4");
 
    };
 
};
 

	
 
za_cutscene_1 = cutscene("za_cutscene_1", "Заисланотр, перекресток", [[
 
    Из темной невзрачной улицы вы выходите в город. Древние каменные и металлические сооружения возвышаются над вами. Вы стоите посреди просторного перекрестка. Дороги ведут во все стороны. Сейчас посреди ночи улицы города пустынны и вы можете спокойно обследовать их. 
 
]], "za_cross_1");
 

	
 
za_street_2 = za_street {
 
    nam = "za_street_2";
 
    way = {
 
        kh_vroom("На юг", "za_cross_1");
 
        kh_vroom("На север", "za_street_3");
 
    };
 
};
 

	
 
za_street_3 = za_street {
 
    nam = "za_street_3";
 
    dsc = [[
 
        Вы находитесь посреди улицы где-то в Заисланотре. К северу от вас стоят несколько навьяров, опершись на стену дома. 
 
    ]];
 
    way = {
 
        kh_vroom("На юг", "za_street_2");
 
        kh_vroom("На север", function()
 
            pr [[
 
                Если они меня увидят, то поднимут тревогу. 
 
            ]];
 
            return false;
 
        end);
 
    };
 
};
 

	
 
za_street_4 = za_street {
 
    nam = "za_street_4";
 
    way = {
 
        kh_vroom("На запад", "za_cross_1");
 
        kh_vroom("На восток", "za_cross_2");
 
    };
 
};
 

	
 
za_cross_2 = za_cross {
 
    nam = "za_cross_2";
 
    way = {
 
        kh_vroom("На юг", "za_street_18");
 
        kh_vroom("На север", "za_street_5");
 
        kh_vroom("На запад", "za_street_4");
 
        kh_vroom("На восток", "za_street_6");
 
    };
 
};
 

	
 
za_street_5 = za_street {
 
    nam = "za_street_5";
 
    way = {
 
        kh_vroom("На юг", "za_cross_2");
 
    };
 
};
 

	
 
za_street_6 = za_street {
 
    nam = "za_street_6";
 
    way = {
 
        kh_vroom("На запад", "za_cross_2");
 
        kh_vroom("На северо-восток", "za_street_7");
 
    };
 
};
 

	
 
za_street_7 = za_street {
 
    nam = "za_street_7";
 
    way = {
 
        kh_vroom("На юго-запад", "za_street_6");
 
        kh_vroom("На восток", "za_cross_3");
 
    };
 
};
 

	
 
za_cross_3 = za_cross {
 
    nam = "za_cross_3";
 
    way = {
 
        kh_vroom("На юго-восток", "za_street_9");
 
        kh_vroom("На запад", "za_street_7");
 
        kh_vroom("На северо-запад", "za_street_8");
 
    };
 
};
 

	
 
za_street_8 = za_street {
 
    nam = "za_street_8";
 
    way = {
 
        kh_vroom("На юго-восток", "za_cross_3");
 
    };
 
};
 

	
 
za_street_9 = za_street {
 
    nam = "za_street_9";
 
    way = {
 
        kh_vroom("На северо-запад", "za_cross_3");
 
        kh_vroom("На юг", "za_cross_4");
 
    };
 
};
 

	
 
za_cross_4 = za_cross {
 
    nam = "za_cross_4";
 
    dsc = [[
 
        Вы находитесь посреди улицы где-то в Заисланотре. Улица на востоке завалена камнями и заросла водорослями. 
 
    ]];
 
    way = {
 
        kh_vroom("На юг", "za_street_10");
 
        kh_vroom("На север", "za_street_9");
 
        kh_vroom("На восток", function(s)
 
            pr [[
 
                Я не пройду здесь.
 
            ]];
 
            return false;
 
        end);
 
    };
 
};
 

	
 
za_street_10 = za_street {
 
    nam = "za_street_10";
 
    way = {
 
        kh_vroom("На юг", "za_cross_5");
 
        kh_vroom("На север", "za_cross_4");
 
    };
 
};
 

	
 
za_cross_5 = za_cross {
 
    nam = "za_cross_5";
 
    way = {
 
        kh_vroom("На юг", "za_street_11");
 
        kh_vroom("На север", "za_street_10");
 
        kh_vroom("На запад", "za_street_13");
 
    };
 
};
 

	
 
za_street_11 = za_street {
 
    nam = "za_street_11";
 
    way = {
 
        kh_vroom("На юг", "za_cross_6");
 
        kh_vroom("На север", "za_cross_5");
 
    };
 
};
 
@@ -554,775 +558,810 @@ za_cross_6 = za_cross {
 
        end);
 
    };
 
};
 

	
 
za_street_12 = za_street {
 
    nam = "za_street_12";
 
    way = {
 
        kh_vroom("На юг", "za_deadend_2n");
 
        kh_vroom("На север", "za_cross_6");
 
    };
 
};
 

	
 
za_deadend_2n = za_deadend {
 
    nam = "za_deadend_2n";
 
    way = {
 
        kh_vroom("На север", "za_street_12");
 
    };
 
};
 

	
 
za_street_13 = za_street {
 
    nam = "za_street_13";
 
    way = {
 
        kh_vroom("На запад", "za_cross_24");
 
        kh_vroom("На восток", "za_cross_5");
 
    };
 
};
 

	
 
za_cross_24 = za_cross {
 
    nam = "za_cross_24";
 
    way = {
 
        kh_vroom("На юг", "za_street_15");
 
        kh_vroom("На север", "za_street_14");
 
        kh_vroom("На восток", "za_street_13");
 
    };
 
};
 

	
 
za_street_14 = za_street {
 
    nam = "za_street_14";
 
    way = {
 
        kh_vroom("На юг", "za_cross_24");
 
    };
 
};
 

	
 
za_street_15 = za_street {
 
    nam = "za_street_15";
 
    way = {
 
        kh_vroom("На юг", "cross_7");
 
        kh_vroom("На север", "za_cross_24");
 
    };
 
};
 

	
 
za_cross_7 = za_cross {
 
    nam = "za_cross_7";
 
    way = {
 
        kh_vroom("На юг", "za_deadend_3n");
 
        kh_vroom("На север", "za_street_15");
 
        kh_vroom("На запад", "za_street_16");
 
    };
 
};
 

	
 
za_deadend_3n = za_deadend {
 
    nam = "za_deadend_3n";
 
    way = {
 
        kh_vroom("На север", "za_cross_7");
 
    };
 
};
 

	
 
za_street_16 = za_street {
 
    nam = "za_street_16";
 
    way = {
 
        kh_vroom("На запад", "za_cross_8");
 
        kh_vroom("На восток", "za_cross_7");
 
    };
 
};
 

	
 
za_cross_8 = za_cross {
 
    nam = "za_cross_8";
 
    way = {
 
        kh_vroom("На север", "za_street_17");
 
        kh_vroom("На запад", "za_street_22");
 
        kh_vroom("На восток", "za_street_16");
 
    };
 
};
 

	
 
za_street_17 = za_street {
 
    nam = "za_street_17";
 
    way = {
 
        kh_vroom("На юг", "za_cross_8");
 
        kh_vroom("На север", "za_cross_9");
 
    };
 
};
 

	
 
za_cross_9 = za_cross {
 
    nam = "za_cross_9";
 
    way = {
 
        kh_vroom("На юг", "za_street_17");
 
        kh_vroom("На север", "za_street_18");
 
        kh_vroom("На запад", "za_street_19");
 
    };
 
};
 

	
 
za_street_18 = za_street {
 
    nam = "za_street_18";
 
    way = {
 
        kh_vroom("На юг", "za_cross_9");
 
        kh_vroom("На север", "za_cross_2");
 
    };
 
};
 

	
 
za_street_19 = za_street {
 
    nam = "za_street_19";
 
    way = {
 
        kh_vroom("На запад", "za_cross_10");
 
        kh_vroom("На восток", "za_cross_9");
 
    };
 
};
 

	
 
za_cross_10 = za_cross {
 
    nam = "za_cross_10";
 
    way = {
 
        kh_vroom("На юг", "za_street_21");
 
        kh_vroom("На север", "za_street_20");
 
        kh_vroom("На запад", "za_street_31");
 
        kh_vroom("На восток", "za_street_19");
 
    };
 
};
 

	
 
za_street_20 = za_street {
 
    nam = "za_street_20";
 
    way = {
 
        kh_vroom("На юг", "za_cross_10");
 
        kh_vroom("На север", "za_cross_1");
 
    };
 
};
 

	
 
za_street_31 = za_street {
 
    nam = "za_street_31";
 
    way = {
 
        kh_vroom("На запад", "za_alley_3");
 
        kh_vroom("На восток", "za_cross_10");
 
    };
 
};
 

	
 
za_alley_3 = za_alley {
 
    nam = "za_alley_3";
 
    way = {
 
        kh_vroom("На восток", "za_street_31");
 
        kh_vroom("На север", "za_deadend_1s");
 
    };
 
};
 

	
 
za_deadend_1s = za_deadend{
 
    nam = "za_deadend_1s";
 
    way = {
 
        kh_vroom("На юг", "za_alley_3");
 
    };
 
};
 

	
 
za_street_21 = za_street {
 
    nam = "za_street_21";
 
    way = {
 
        kh_vroom("На юг", "za_cross_11");
 
        kh_vroom("На север", "za_cross_10");
 
    };
 
};
 

	
 
za_cross_11 = za_cross {
 
    nam = "za_cross_11";
 
    way = {
 
        kh_vroom("На юг", "za_street_23");
 
        kh_vroom("На север", "za_street_21");
 
        kh_vroom("На запад", "za_street_36");
 
        kh_vroom("На восток", "za_street_22");
 
    };
 
};
 

	
 
za_street_22 = za_street {
 
    nam = "za_street_22";
 
    way = {
 
        kh_vroom("На запад", "za_cross_11");
 
        kh_vroom("На восток", "za_cross_8");
 
    };
 
};
 

	
 
za_street_36 = za_street {
 
    nam = "za_street_36";
 
    dsc = [[
 
        Западным концом эта улица упирается в городскую стену. 
 
    ]];
 
    way = {
 
        kh_vroom("На восток", "za_cross_11");
 
    };
 
};
 

	
 
za_street_46 = za_street {
 
    nam = "za_street_46";
 
    dsc = [[
 
        Западным концом эта улица упирается в городскую стену. 
 
    ]];
 
    way = {
 
        kh_vroom("На восток", "za_cross_12");
 
    };
 
};
 

	
 
za_street_23 = za_street {
 
    nam = "za_street_23";
 
    way = {
 
        kh_vroom("На юг", "za_cross_12");
 
        kh_vroom("На север", "za_cross_11");
 
    };
 
};
 

	
 
za_cross_12 = za_cross {
 
    nam = "za_cross_12";
 
    way = {
 
        kh_vroom("На юг", "za_street_41");
 
        kh_vroom("На север", "za_street_23");
 
        kh_vroom("На запад", "za_street_46");
 
        kh_vroom("На восток", "za_street_24");
 
    };
 
};
 

	
 
za_street_24 = za_street {
 
    nam = "za_street_24";
 
    way = {
 
        kh_vroom("На запад", "za_cross_12");
 
        kh_vroom("На восток", "za_cross_13");
 
    };
 
};
 

	
 
za_cross_13 = za_cross {
 
    nam = "za_cross_13";
 
    way = {
 
        kh_vroom("На юг", "za_street_43");
 
        kh_vroom("На запад", "za_street_24");
 
        kh_vroom("На восток", "za_street_25");
 
    };
 
};
 

	
 
za_street_25 = za_street {
 
    nam = "za_street_25";
 
    way = {
 
        kh_vroom("На запад", "za_cross_13");
 
        kh_vroom("На восток", "za_cross_14");
 
    };
 
};
 

	
 
za_cross_14 = za_cross {
 
    nam = "za_cross_14";
 
    way = {
 
        kh_vroom("На юг", "za_street_26");
 
        kh_vroom("На север", "za_deadend_3s");
 
        kh_vroom("На запад", "za_street_25");
 
    };
 
};
 

	
 
za_deadend_3s = za_deadend {
 
    nam = "za_deadend_3s";
 
    way = {
 
        kh_vroom("На юг", "za_cross_14");
 
    };
 
};
 

	
 
za_street_26 = za_street {
 
    nam = "za_street_26";
 
    way = {
 
        kh_vroom("На юг", "za_cross_15");
 
        kh_vroom("На север", "za_cross_14");
 
    };
 
};
 

	
 
za_cross_15 = za_cross {
 
    nam = "za_cross_15";
 
    way = {
 
        kh_vroom("На юг", "za_street_35");
 
        kh_vroom("На север", "za_street_26");
 
        kh_vroom("На запад", "za_street_44");
 
        kh_vroom("На восток", "za_street_27");
 
    };
 
};
 

	
 
za_street_27 = za_street {
 
    nam = "za_street_27";
 
    way = {
 
        kh_vroom("На запад", "za_cross_15");
 
        kh_vroom("На восток", "za_prison_entrance");
 
    };
 
};
 

	
 
za_prison_entrance = room {
 
    nam = "za_prison_entrance";
 
    disp = "Заисланотр, у входа в тюрьму";
 
    dsc = [[
 
        Перед вами вход в большое металлическое здание. Похоже, оно гораздо старше остальных зданий в городе - на это указывают многочисленные следы коррозии на стенах и явно не раз восстановленная дверь. Именно сюда навьяры завели пленника. 
 
    ]];
 
    way = {
 
        kh_vroom("На запад", "za_street_27");
 
        kh_vroom("На восток", "za_street_28");
 
    };
 
};
 

	
 
za_deadend_2s = za_deadend {
 
    nam = "za_deadend_2s";
 
    way = {
 
        kh_vroom("На юг", "za_prison_entrance");
 
    };
 
};
 

	
 
za_street_28 = za_street {
 
    nam = "za_street_28";
 
    way = {
 
        kh_vroom("На запад", "za_prison_entrance");
 
        kh_vroom("На восток", "za_cross_16");
 
    };
 
};
 

	
 
za_cross_16 = za_cross {
 
    nam = "za_cross_16";
 
    way = {
 
        kh_vroom("На юг", "za_street_29");
 
        kh_vroom("На запад", "za_street_28");
 
        kh_vroom("На восток", "za_deadend_4");
 
    };
 
};
 

	
 
za_deadend_4 = za_deadend {
 
    nam = "za_deadend_4";
 
    way = {
 
        kh_vroom("На запад", "za_cross_16");
 
    };
 
};
 

	
 
za_street_29 = za_street {
 
    nam = "za_street_29";
 
    way = {
 
        kh_vroom("На юг", "za_street_30");
 
        kh_vroom("На север", "za_cross_16");
 
    };
 
};
 

	
 
za_street_30 = za_street {
 
    nam = "za_street_30";
 
    way = {
 
        kh_vroom("На юг", "za_cross_17");
 
        kh_vroom("На север", "za_street_29");
 
    };
 
};
 

	
 
za_cross_17 = za_cross {
 
    nam = "za_cross_17";
 
    dsc = [[
 
        Вы находитесь посреди улицы где-то в Заисланотре. Улица на юге перегорожена отрядом навьярских воинов. 
 
    ]];
 
    way = {
 
        kh_vroom("На юг", function()
 
            pr [[
 
                Мне с ними не справиться. 
 
            ]];
 
            return false;
 
        end);
 
        kh_vroom("На север", "za_street_30");
 
        kh_vroom("На запад", "za_street_32");
 
        kh_vroom("На восток", "za_deadend_5");
 
    };
 
};
 

	
 
za_deadend_5 = za_deadend {
 
    nam = "za_deadend_5";
 
    way = {
 
        kh_vroom("На запад", "za_cross_17");
 
    };
 
};
 

	
 
za_street_32 = za_street {
 
    nam = "za_street_32";
 
    way = {
 
        kh_vroom("На запад", "za_cross_18");
 
        kh_vroom("На восток", "za_cross_17");
 
    };
 
};
 

	
 
za_cross_18 = za_cross {
 
    nam = "za_cross_18";
 
    dsc = [[
 
        Вы находитесь посреди перекрестка рядом с тюрьмой Заисланотра. Рядом с собой в стене здания вы видите небольшой зарешеченное окошко. 
 
        Вы находитесь посреди перекрестка рядом с тюрьмой Заисланотра. 
 
    ]];
 
    way = {
 
        kh_vroom("На юг", "za_deadend_6");
 
        kh_vroom("На запад", "za_street_33");
 
        kh_vroom("На восток", "za_street_32");
 
    };
 
    obj = {
 
        "za_prison_window";
 
    };
 
};
 

	
 
za_prison_window = obj {
 
    var {
 
        state = 0;
 
    };
 
    nam = "za_prison_window";
 
    dsc = [[
 
        Рядом с собой в стене здания вы видите небольшой зарешеченное {окошко}. 
 
    ]];
 
    act = function(s)
 
        if (s.state == 0) then
 
            if (za_convoy_gone) then    
 
                return [[
 
                    В камере по ту сторону окна находится тот самый навьяр, которого вы видели в сопровождении конвоя. 
 
                ]];
 
            else 
 
                return [[
 
                    Здесь нет ничего интересного. 
 
                ]];
 
            end;
 
        else
 
            return [[
 
                Вам здесь больше нечего делать. 
 
            ]];
 
        end;
 
    end;
 
    used = function (s, o)
 
        if (o == item_toolbox) then
 
            walk("za_phaetlarr_free");
 
        end;
 
    end;
 
};
 

	
 
za_deadend_6 = za_deadend {
 
    nam = "za_deadend_6";
 
    way = {
 
        kh_vroom("На север", "za_cross_18");
 
    };
 
};
 

	
 
za_street_33 = za_street {
 
    nam = "za_street_33";
 
    way = {
 
        kh_vroom("На запад", "za_cross_19");
 
        kh_vroom("На восток", "za_cross_18");
 
    };
 
};
 

	
 
za_cross_19 = za_cross {
 
    nam = "za_cross_19";
 
    dsc = [[
 
        Вы находитесь посреди улицы где-то в Заисланотре. Улица на юге перегорожена отрядом навьярских воинов. 
 
    ]];
 
    way = {
 
        kh_vroom("На юг", function()
 
            pr [[
 
                Мне с ними не справиться. 
 
            ]];
 
            return false;
 
        end);
 
        kh_vroom("На север", "za_street_34");
 
        kh_vroom("На запад", "za_street_37");
 
        kh_vroom("На восток", "za_street_33");
 
    };
 
};
 

	
 
za_street_34 = za_street {
 
    nam = "za_street_34";
 
    way = {
 
        kh_vroom("На юг", "za_cross_19");
 
        kh_vroom("На север", "za_street_35");
 
    };
 
};
 

	
 
za_street_35 = za_street {
 
    nam = "za_street_35";
 
    way = {
 
        kh_vroom("На юг", "za_street_34");
 
        kh_vroom("На север", "za_cross_15");
 
    };
 
};
 

	
 
za_street_37 = za_street {
 
    nam = "za_street_37";
 
    way = {
 
        kh_vroom("На северо-запад", "za_street_38");
 
        kh_vroom("На восток", "za_cross_19");
 
    };
 
};
 

	
 
za_street_38 = za_street {
 
    nam = "za_street_38";
 
    way = {
 
        kh_vroom("На север", "za_cross_20");
 
        kh_vroom("На юго-восток", "za_street_37");
 
    };
 
};
 

	
 
za_street_47 = za_street {
 
    nam = "za_street_47";
 
    dsc = [[
 
        Вы находитесь на углу двух улиц Заисланотра. 
 
    ]];
 
    way = {
 
        kh_vroom("На запад", "za_street_39");
 
        kh_vroom("На юг", "za_street_38");
 
    };
 
};
 

	
 
za_street_39 = za_street {
 
    nam = "za_street_39";
 
    way = {
 
        kh_vroom("На запад", "za_cross_21");
 
        kh_vroom("На восток", "za_street_47");
 
    };
 
};
 

	
 
za_cross_21 = za_cross {
 
    nam = "za_cross_21";
 
    dsc = [[
 
        Вы находитесь посреди перекрестка где-то в Заисланотре. Улица на юге перегорожена отрядом навьярских воинов. 
 
    ]];
 
    way = {
 
        kh_vroom("На юг", function()
 
            pr [[
 
                Мне с ними не справиться. 
 
            ]];
 
            return false;
 
        end);
 
        kh_vroom("На север", "za_street_40");
 
        kh_vroom("На восток", "za_street_39");
 
    };
 
};
 

	
 
za_street_40 = za_street {
 
    nam = "za_street_40";
 
    way = {
 
        kh_vroom("На юг", "za_cross_21");
 
        kh_vroom("На север", "za_cross_22");
 
    };
 
};
 

	
 
za_cross_22 = za_cross {
 
    nam = "za_cross_22";
 
    way = {
 
        kh_vroom("На юг", "za_street_40");
 
        kh_vroom("На север", "za_street_41");
 
        kh_vroom("На запад", "za_street_45");
 
        kh_vroom("На восток", "za_street_42");
 
    };
 
};
 

	
 
za_street_42 = za_street {
 
    nam = "za_street_42";
 
    way = {
 
        kh_vroom("На запад", "za_cross_22");
 
        kh_vroom("На восток", "za_cross_23");
 
    };
 
};
 

	
 
za_cross_23 = za_cross {
 
    nam = "za_cross_23";
 
    way = {
 
        kh_vroom("На север", "za_street_43");
 
        kh_vroom("На запад", "za_street_42");
 
        kh_vroom("На восток", "za_street_44");
 
    };
 
};
 

	
 
za_street_41 = za_street {
 
    nam = "za_street_41";
 
    way = {
 
        kh_vroom("На юг", "za_cross_22");
 
        kh_vroom("На север", "za_cross_12");
 
    };
 
};
 

	
 
za_street_43 = za_street {
 
    nam = "za_street_43";
 
    way = {
 
        kh_vroom("На юг", "za_cross_23");
 
        kh_vroom("На север", "za_cross_13");
 
    };
 
};
 

	
 
za_street_44 = za_street {
 
    nam = "za_street_44";
 
    way = {
 
        kh_vroom("На запад", "za_cross_23");
 
        kh_vroom("На восток", "za_cross_15");
 
    };
 
};
 

	
 
za_street_45 = za_street {
 
    nam = "za_street_45";
 
    way = {
 
        kh_vroom("На запад", "za_alley_4");
 
        kh_vroom("На восток", "za_cross_22");
 
    };
 
};
 

	
 
za_alley_4 = za_alley {
 
    nam = "za_alley_4";
 
    way = {
 
        kh_vroom("На восток", "za_street_45");
 
        kh_vroom("На юг", "za_deadend_7");
 
    };
 
};
 

	
 
za_deadend_7 = za_deadend {
 
    nam = "za_deadend_7";
 
    way = {
 
        kh_vroom("На север", "za_alley_4");
 
    };
 
};
 

	
 
za_phaetlarr_fight_intro = cutscene("za_phaetlarr_fight_intro_a", "Заисланотр, улица",[[
 
    Конвой замечает вас и переходит в атаку. Внезапно пленник выхватывает копье у одного из стражников и бросается в бой. 
 
]], za_plaetlarr_fight );
 

	
 
za_plaetlarr_victory = cutscene("za_phaetlarr_victory", "Заисланотр, улица", function(s)
 
    if (char_learr.follow) then
 
        return [[
 
            Вы побеждаете стражников. Фаэтларр с недоверием смотрит на вас, сжимая копье. Вы видите, как цветные полосы на его плавниках формируются в вопрос: "Что вы здесь хотите?" Глядя на Леарр он немного успокаивается и внимательно следит за ее словами: "Они что-хотели?"
 
        ]];
 
    elseif (char_anna.follow) then
 
        return [[
 
            Вы побеждаете стражников. Фаэтларр с недоверием смотрит на вас, сжимая копье. Вы видите, как цветные полосы на его плавниках формируются в вопрос: "Что вы здесь хотите?" В динамиках раздается голос Анны: "Он явно не расположен к нам. Но у нас мало выбора. Спроси его, знает ли он где храм"?
 
        ]];
 
    elseif (char_wright.follow) then
 
        return [[
 
            Вы побеждаете стражников. Фаэтларр с недоверием смотрит на вас, сжимая копье. Вы видите, как цветные полосы на его плавниках формируются в вопрос: "Что вы здесь хотите?" В динамиках раздается голос Джека: "Я думаю, пора возвращаться на корабль. Я надеюсь, он даст нам всю необходимую информацию".
 
        ]];
 
    elseif (char_radcliffe.follow) then
 
        return [[
 
            Вы побеждаете стражников. Фаэтларр с недоверием смотрит на вас, сжимая копье. Вы видите, как цветные полосы на его плавниках формируются в вопрос: "Что вы здесь хотите?" В динамиках раздается голос Уолтера: "Здесь слишком опасно оставаться. Надо доставить его на Левиафан и там решить, что делать дальше".
 
        ]];
 
    else
 
        return [[
 
            Вы побеждаете стражников. Фаэтларр с недоверием смотрит на вас, сжимая копье. Вы видите, как цветные полосы на его плавниках формируются в вопрос: "Что вы здесь хотите?"
 
        ]];
 
    end;
 
end, "za_phaetlarr_dlg");
 

	
 
za_plaetlarr_fight = battlefield {
 
    nam = "Заисланотр, улица";
 
    plX = 3;
 
    plY = 1;
 
    lose = "game_over_za_fight";
 
    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 = 2;
 
        elseif (char_anna.follow) then
 
            table.insert(s.obj, 2, za_cmbt_anna);
 
            s.plX = 2;
 
        elseif (char_wright.follow) then
 
            table.insert(s.obj, 2, za_cmbt_wright);
 
            s.plX = 2;
 
        elseif (char_radcliffe.follow) then
 
            table.insert(s.obj, 2, za_cmbt_radcliffe);
 
            s.plX = 2;
 
        end;
 
    end;
 
    obj = {
 
        'za_cmbt_phaetlarr',
 
        'za_cmbt_guard1',
 
        'za_cmbt_guard2',
 
        'za_cmbt_guard3',
 
        'za_cmbt_guard4'
 
    };
 
};
 
 
 
za_cmbt_phaetlarr = combatant {
 
    nam = "za_cmbt_phaetlarr";
 
    disp2 = "Фаэтларра";
 
    disp3 = "Фаэтларру";
 
    x = 3;
 
    y = 4;
 
    pic = "images/phaetlarr.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
 
                table.insert(enemies, obj);
 
            end;
 
        end;
 
        if (#enemies == 0) then
 
            return;
 
        end;
 
        table.sort(enemies, function(a, b)
 
            return (here().getDistance(s.x, s.y, b.x, b.y) > here().getDistance(s.x, s.y, a.x, a.y));
 
        end);
 
        local enemy = enemies[1];
 
        local dist = here().getDistance(s.x, s.y, enemy.x, enemy.y);
 
        -- 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 and dist == 1) then
 
            if (rnd(4) > 1) then
 
                pn("Фаэтларр бьет " .. enemy.disp2 .. " копьем и попадает. ");
 
                enemy.hp = enemy.hp - 2;
 
            else
 
                pn("Фаэтларр бьет " .. enemy.disp2 .. " копьем, но промахивается. "); 
 
            end;
 
        elseif (s.hasSpear and dist == 0) then
 
            enemy.hp = enemy.hp - 2;
 
            pn("Фаэтларр бьет " .. enemy.disp2 .. " копьем и попадает. ");
 
        elseif (s.hasSpear and dist < 4) then
 
            s.hasSpear = false;
 
            if (rnd(4) > dist) then
 
                enemy.hp = enemy.hp - 2;
 
                pn("Фаэтларр бросает копье в " .. enemy.disp2 .. " и попадает. ");
 
            else
 
                
 
                pn("Фаэтларр бросает копье в " .. enemy.disp2 .. ", но промахивается. ");
 
            end;
 
        elseif dist == 0 then
 
            if (enemy.hasSpear) then
 
                enemy.hasSpear = false;
 
                s.hasSpear = true;
 
                pn("Фаэтларр забирает копье у " .. enemy.disp2 .. ". ");
 
            else
 
                enemy.hp = enemy.hp - 1;
 
                pn("Фаэтларр бьет " .. enemy.disp2 .. " и попадает. ");
 
            end;
 
        else
 
            if (enemy.x > s.x) then
 
                s.x = s.x + 1;
 
            elseif (enemy.x < s.x) then
 
                s.x = s.x - 1;
 
            end;
 
            
 
            if (enemy.y > s.y) then
 
                s.y = s.y + 1;
 
            elseif (enemy.y < s.y) then
 
                s.y = s.y - 1;
 
            end;
 
            
 
            pn("Фаэтларр идет к " .. enemy.disp3 .. ". ");
 
        end;
 
    end;
 
    dsc = function(s)
 
        if (s.hp > 0) then
 
            return [[ {Фаэтларр} готов к бою. ]];
 
        else
 
            return [[ {Фаэтларр} без сознания. ]];
 
        end;
 
    end;
 
};
 

	
 
za_cmbt_learr = combatant {
 
    nam = "za_cmbt_learr";
 
    disp2 = "Леарр";
 
    disp3 = "Леарр";
 
    x = 4;
 
    y = 1;
 
    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
 
                table.insert(enemies, obj);
 
            end;
 
        end;
 
        if (#enemies == 0) then
 
            return;
 
        end;
 
        table.sort(enemies, function(a, b)
 
            return (here().getDistance(s.x, s.y, b.x, b.y) > here().getDistance(s.x, s.y, a.x, a.y));
 
        end);
 
        local enemy = enemies[1];
 
        local dist = here().getDistance(s.x, s.y, enemy.x, enemy.y);
 
        -- 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 and dist == 1) then
 
            if (rnd(4) > 1) then
 
                pn("Леарр бьет " .. enemy.disp2 .. " копьем и попадает. ");
 
                enemy.hp = enemy.hp - 2;
 
            else
 
                pn("Леарр бьет " .. enemy.disp2 .. " копьем, но промахивается. "); 
 
            end;
 
        elseif (s.hasSpear and dist == 0) then
 
            enemy.hp = enemy.hp - 2;
 
            pn("Леарр бьет " .. enemy.disp2 .. " копьем и попадает. ");
 
        elseif dist == 0 then
 
            enemy.hp = enemy.hp - 1;
 
            pn("Леарр бьет " .. enemy.disp2 .. " и попадает. ");
 
        else
 
@@ -1422,385 +1461,409 @@ za_cmbt_wright = combatant {
 
    end;
 
    dsc = function(s)
 
        if (s.hp > 0) then
 
            return [[ {Райт} готов к бою. ]];
 
        else
 
            return [[ {Райт} без сознания. ]];
 
        end;
 
    end;
 
};
 

	
 
za_cmbt_radcliffe = combatant {
 
    nam = "za_cmbt_radcliffe";
 
    disp2 = "Рэклиффа";
 
    disp3 = "Рэдклиффу";
 
    x = 4;
 
    y = 1;
 
    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
 
                table.insert(enemies, obj);
 
            end;
 
        end;
 
        if (#enemies == 0) then
 
            return;
 
        end;
 
        table.sort(enemies, function(a, b)
 
            return (here().getDistance(s.x, s.y, b.x, b.y) > here().getDistance(s.x, s.y, a.x, a.y));
 
        end);
 
        local enemy = enemies[1];
 
        local dist = here().getDistance(s.x, s.y, enemy.x, enemy.y);
 
        -- 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 and dist == 1) then
 
            if (rnd(4) > 1) then
 
                pn("Рэдклифф бьет " .. enemy.disp2 .. " гарпуном и попадает. ");
 
                enemy.hp = enemy.hp - 2;
 
            else
 
                pn("Рэдклифф бьет " .. enemy.disp2 .. " гарпуном, но промахивается. "); 
 
            end;
 
        elseif (s.hasHarpoon and dist == 0) then
 
            enemy.hp = enemy.hp - 2;
 
            pn("Рэдклифф бьет " .. enemy.disp2 .. " гарпуном и попадает. ");
 
        elseif (s.hasHarpoon and dist < 4) then
 
            s.hasHarpoon = false;
 
            if (rnd(4) > dist) then
 
                pn("Рэдклифф стреляет в " .. enemy.disp2 .. " гарпуном и попадает. ");    
 
                enemy.hp = enemy.hp - 2;
 
            else
 
                pn("Рэдклифф стреляет в " .. enemy.disp2 .. " гарпуном, но промахивается. "); 
 
            end;
 
        elseif (not s.hasHarpoon) then
 
            s.hasHarpoon = true;
 
            pn("Рэдклифф перезаряжает ружье. ");
 
        else
 
            if (enemy.x > s.x) then
 
                s.x = s.x + 1;
 
            elseif (enemy.x < s.x) then
 
                s.x = s.x - 1;
 
            end;
 
            
 
            if (enemy.y > s.y) then
 
                s.y = s.y + 1;
 
            elseif (enemy.y < s.y) then
 
                s.y = s.y - 1;
 
            end;
 
            
 
            pn("Рэдклифф идет к " .. enemy.disp3 .. ". ");
 
        end;
 
    end;
 
    dsc = function(s)
 
        if (s.hp > 0) then
 
            return [[ {Рэдклифф} готов к бою. ]];
 
        else
 
            return [[ {Рэдклифф} без сознания. ]];
 
        end;
 
    end;
 
};
 

	
 
za_cmbt_anna = combatant {
 
    nam = "za_cmbt_anna";
 
    disp2 = "Анну";
 
    disp3 = "Анне";
 
    x = 4;
 
    y = 1;
 
    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
 
                table.insert(enemies, obj);
 
            end;
 
        end;
 
        if (#enemies == 0) then
 
            return;
 
        end;
 
        table.sort(enemies, function(a, b)
 
            return (here().getDistance(s.x, s.y, b.x, b.y) > here().getDistance(s.x, s.y, a.x, a.y));
 
        end);
 
        
 
        local pldist = here().getDistance(s.x, s.y, pl.x, pl.y);
 
        
 
        local enemy = enemies[1];
 
        local dist = here().getDistance(s.x, s.y, enemy.x, enemy.y);
 
        -- 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 and dist == 1) then
 
            if (rnd(4) > 1) then
 
                pn("Анна бьет " .. enemy.disp2 .. " гарпуном и попадает. ");
 
                enemy.hp = enemy.hp - 2;
 
            else
 
                pn("Анна бьет " .. enemy.disp2 .. " гарпуном, но промахивается. "); 
 
            end;
 
        elseif (s.hasHarpoon and dist == 0) then
 
            enemy.hp = enemy.hp - 2;
 
            pn("Анна бьет " .. enemy.disp2 .. " гарпуном и попадает. ");
 
        elseif (s.hasHarpoon and dist < 4) then
 
            s.hasHarpoon = false;
 
            if (rnd(4) > dist) then
 
                pn("Анна стреляет в " .. enemy.disp2 .. " гарпуном и попадает. ");    
 
                enemy.hp = enemy.hp - 2;
 
            else
 
                pn("Анна стреляет в " .. enemy.disp2 .. " гарпуном, но промахивается. "); 
 
            end;
 
        elseif (not s.hasHarpoon) then
 
            s.hasHarpoon = true;
 
            pn("Анна перезаряжает ружье. ");
 
        elseif (pldist > 0) then
 
            if (pl.x > s.x) then
 
                s.x = s.x + 1;
 
            elseif (pl.x < s.x) then
 
                s.x = s.x - 1;
 
            end;
 
            
 
            if (pl.y > s.y) then
 
                s.y = s.y + 1;
 
            elseif (pl.y < s.y) then
 
                s.y = s.y - 1;
 
            end;
 
            
 
            pn("Анна идет к вам. ");
 
        else
 
            pn("Анна ждет ваших действий. ");
 
        end;
 
    end;
 
    dsc = function(s)
 
        if (s.hp > 0) then
 
            return [[ {Анна} готова к бою. ]];
 
        else
 
            return [[ {Анна} без сознания. ]];
 
        end;
 
    end;
 
};
 

	
 
za_cmbt_guard = function(nam, index, x, y, spear) 
 
    return combatant {
 
        nam = nam;
 
        disp2 = "стражника " .. tostring(index);
 
        disp3 = "стражника " .. tostring(index);
 
        x = x;
 
        y = y;
 
        hp = 6;
 
        pic = "images/navjiarr_guard".. index ..".png";
 
        shootHit = "Вы стреляете в стражника и попадаете в него. ";
 
        shootMiss = "Вы стреляете в стражника, но не попадаете в него. ";
 
        shootKill = "Вы стреляете в стражника и он падает замертво. ";
 
        handHit = "Вы ударяете стражника. ";
 
        handKill = "После вашего удара стражник падает. ";
 
        handFar = "Слишком далеко. ";
 
        hasSpear = spear;
 
        enemy = true;
 
        dsc = function(s)
 
            if (s.hp > 0) then
 
                if (s.hasSpear) then
 
                    return "{Стражник " .. tostring(index).. "} вооружен копьем готов к бою. ";
 
                else
 
                    return "{Стражник " .. tostring(index).. "} готов к бою. ";
 
                end;
 
            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
 
                    table.insert(enemies, obj);
 
                end;
 
            end;
 
            table.sort(enemies, function(a, b)
 
                return (here().getDistance(s.x, s.y, b.x, b.y) > here().getDistance(s.x, s.y, a.x, a.y));
 
            end);
 
            local enemy = enemies[1];
 
            local dist = 9000;
 
            if (not enemy) then
 
                enemy = pl;
 
                dist = here().getDistance(s.x, s.y, here().plX, here().plY);
 
            else
 
                dist = here().getDistance(s.x, s.y, enemy.x, enemy.y);
 
            end;
 
            
 
            if (dist > here().getDistance(s.x, s.y, here().plX, here().plY)) then
 
                enemy = pl;
 
            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 and dist == 1) then
 
                if (rnd(4) > 1) then
 
                    pn("Стражник ".. tostring(index).. " бьет " .. enemy.disp2 .. " копьем и попадает. ");
 
                    enemy.hp = enemy.hp - 2;
 
                else
 
                    pn("Стражник ".. tostring(index).. " бьет " .. enemy.disp2 .. " копьем, но промахивается. "); 
 
                end;
 
            elseif (s.hasSpear and dist == 0) then
 
                enemy.hp = enemy.hp - 2;
 
                pn("Стражник ".. tostring(index).. " бьет " .. enemy.disp2 .. " копьем и попадает. ");
 
            elseif dist == 0 then
 
                enemy.hp = enemy.hp - 1;
 
                pn("Стражник ".. tostring(index).. " бьет " .. enemy.disp2 .. " и попадает. ");
 
            else
 
                if (enemy.x > s.x) then
 
                    s.x = s.x + 1;
 
                elseif (enemy.x < s.x) then
 
                    s.x = s.x - 1;
 
                end;
 
                
 
                if (enemy.y > s.y) then
 
                    s.y = s.y + 1;
 
                elseif (enemy.y < s.y) then
 
                    s.y = s.y - 1;
 
                end;
 
                
 
                pn("Стражник ".. tostring(index).. " идет к " .. enemy.disp3 .. ". ");
 
            end;
 
        end;
 
    };
 
end;
 

	
 
za_cmbt_guard1 = za_cmbt_guard("za_cmbt_guard1", 1, 1, 5, true);
 
za_cmbt_guard2 = za_cmbt_guard("za_cmbt_guard2", 2, 2, 5, false);
 
za_cmbt_guard3 = za_cmbt_guard("za_cmbt_guard3", 3, 4, 5, true);
 
za_cmbt_guard4 = za_cmbt_guard("za_cmbt_guard4", 4, 5, 5, true);
 

	
 
za_phaetlarr_dlg = dlg {
 
    var {
 
        state = 0;
 
    };
 
    nam = "za_phaetlarr_dlg";
 
    disp = "Фаэтларр";
 
    entered = function(s)
 
        psub("intro");
 
        if (char_learr.follow) then
 
            s.state = 1;
 
            return [[
 
                Навьяр смотрит попеременно на Леарр и на вас, после чего отвечает: "Я Фаэтларр из Венаэданотра. Хевьяры обманули их и меня. Но как вы здесь оказались? Они закрыли хевьярам путь в город". Обращаясь к Леарр, он продолжает: "Ты осторожна будь. Хевьярам нельзя доверять".
 
            ]];
 
        else
 
            return [[
 
                Навьяр представляется: "Я Фаэтларр из Венаэданотра". После чего повторяет свой вопрос: "Что вы здесь хотите?"
 
            ]];
 
        end;
 
    end;
 
    phr = {
 
        {tag="intro"};
 
        {"[Цветокод]Венаэданотр неблизко. Как ты оказался здесь?", 
 
            function(s)
 
                if (char_learr.follow) then
 
                    return [[
 
                        Фаэтларр больше обращается к Леарр, чем к вам: "Другие хевьяры взяли меня на свой корабль. Пойдем со мной, сестра, вместе мы вернемся в Венаэданотр". Потом он гневно смотрит на вас: "Уходите, мы справимся сами". Видя, что Леарр не двигается, он застывает в удивлении. 
 
                    ]];
 
                else
 
                    return [[
 
                        "Другие хевьяры взяли меня на свой корабль. Больше я не повторю такой ошибки. Уходите, я справлюсь сам".
 
                    ]];
 
                end;
 
            end, code [[ 
 
                if (char_learr.follow) then 
 
                    psub("on_my_own_learr");
 
                else
 
                    psub("on_my_own");
 
                end;
 
        ]]};
 
        {"[Цветокод]Мы ищем Лсэрианотр", 
 
            function(s)
 
                if (char_learr.follow) then
 
                    return [[
 
                        Фаэтларр больше обращается к Леарр, чем к вам: "Пойдем сестра. Эти такие же, как и те, с которыми был я. Вернемся в Венаэданотр". Потом он гневно смотрит на вас: "Уходите. Я не стану помогать вам".
 
                    ]];
 
                else
 
                    return [[
 
                        "Вы заодно с ними. Уходите, я не стану помогать вам".
 
                    ]];
 
                end;
 
            end, code [[
 
                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="drake", false, "[Цветокод]Что случилось с Дрейком?", [[
 
            Фаэтларр долго молчал. Наконец он собрался с силами и ответил: "Его убили местные во время их отступления с ключем".
 
        ]], code [[ pon("i_am_drake"); ]]};
 
        {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, "[Цветокод]Нам нужна твоя помощь", [[
 
            Фаэтларр делает вам знак продолжать. 
 
        ]], code [[ psub("not_sure"); ]]};
 
        {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 = [[
 
            zayslanotrr_temple_found = true;
 
            walk("za_phaetlarr_final");
 
        ]]};
 
        {tag="go", false, "[Цветокод]Что, если мы откажемся?", [[
 
            "Я не скажу вам где храм, и каждый идет своей дорогой".
 
        ]]};
 
    };
 
};
 

	
 
za_char_phaetlarr = npc {
 
    nam = "za_char_phaetlarr";
 
    dsc = [[
 
        {Фаэтларр} стоит рядом и ждет ваших действий. 
 
    ]];
 
    phrases = {
 
        "Фаэтларр ждет ваших действий. "
 
    };
 
};
 

	
 
za_phaetlarr_final = cutscene("za_phaetlarr_final", "Левиафан, Кают-компания", [[
 
    Вы возвращаетесь на Левиафан, где уже собрался весь экипаж. Фаэтларр рассказывает вам как попасть в храм
 
]], "leviathan_wardroom");
 
\ No newline at end of file
 
]], "leviathan_wardroom");
 

	
 
za_phaetlarr_free = cutscene("za_phaetlarr_free", "Заисланотр, улица", function(s)
 
    if (char_learr.follow) then
 
        return [[
 
            При помощи инструментов, вы убираете решетку из окна и освобождаете Фаэтларра. Навьяр выбирается из тюрьмы и с недоверием смотрит на вас, сжимая копье. Вы видите, как цветные полосы на его плавниках формируются в вопрос: "Что вы здесь хотите?" Глядя на Леарр он немного успокаивается и внимательно следит за ее словами: "Они что-хотели?"
 
        ]];
 
    elseif (char_anna.follow) then
 
        return [[
 
            При помощи инструментов, вы убираете решетку из окна и освобождаете Фаэтларра. Навьяр выбирается из тюрьмы и с недоверием смотрит на вас, сжимая копье. Вы видите, как цветные полосы на его плавниках формируются в вопрос: "Что вы здесь хотите?" В динамиках раздается голос Анны: "Он явно не расположен к нам. Но у нас мало выбора. Спроси его, знает ли он где храм"?
 
        ]];
 
    elseif (char_wright.follow) then
 
        return [[
 
            При помощи инструментов, вы убираете решетку из окна и освобождаете Фаэтларра. Навьяр выбирается из тюрьмы и с недоверием смотрит на вас, сжимая копье. Вы видите, как цветные полосы на его плавниках формируются в вопрос: "Что вы здесь хотите?" В динамиках раздается голос Джека: "Я думаю, пора возвращаться на корабль. Я надеюсь, он даст нам всю необходимую информацию".
 
        ]];
 
    elseif (char_radcliffe.follow) then
 
        return [[
 
            При помощи инструментов, вы убираете решетку из окна и освобождаете Фаэтларра. Навьяр выбирается из тюрьмы и с недоверием смотрит на вас, сжимая копье. Вы видите, как цветные полосы на его плавниках формируются в вопрос: "Что вы здесь хотите?" В динамиках раздается голос Уолтера: "Здесь слишком опасно оставаться. Надо доставить его на Левиафан и там решить, что делать дальше".
 
        ]];
 
    else
 
        return [[
 
            При помощи инструментов, вы убираете решетку из окна и освобождаете Фаэтларра. Навьяр выбирается из тюрьмы и с недоверием смотрит на вас, сжимая копье. Вы видите, как цветные полосы на его плавниках формируются в вопрос: "Что вы здесь хотите?"
 
        ]];
 
    end;
 
end, za_phaetlarr_dlg);
 
\ No newline at end of file
main.lua
Show inline comments
 
-- $Name: Пробуждение$
 
-- $Version: 1.0$
 
-- $Author: Khaelenmore Thaal$
 
 
instead_version "1.9.1"
 
require "para"
 
require "dash"
 
require "quotes"
 
require "hideinv"
 
require "kbd"
 
require "timer"
 
 
-- Код и ядро
 
dofile "utils.lua"
 
dofile "battlefield.lua";
 
-- Общее
 
dofile "items.lua"
 
dofile "party.lua"
 
dofile "game_over.lua";
 
-- Часть 1
 
dofile "london.lua"
 
dofile "wright.lua"
 
dofile "travel.lua"
 
dofile "dock2.lua"
 
dofile "warehouse18.lua"
 
dofile "warehouse32.lua"
 
-- Часть 2
 
dofile "leviathan.lua"
 
dofile "atlantis.lua"
 
dofile "atlantis_ignis.lua"
 
dofile "atlantis_dlg.lua"
 
dofile "atlantis_intro.lua"
 
dofile "atlantis_ignis_on_fire.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_zayslanotrr.lua"
 
dofile "journey_zayslanotrr_temple.lua"
 
dofile "journey_temple.lua"
 
-- Часть 4
 
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;
 
	dock_found = false;
 
	leviathan_discovered = false;
 
	atlantis_found = false;
 
	temple_found = false;
 
	nearest_cities_found = false;
 
	iraaphaanotrr_temple_found = false;
 
	dypatreanotrr_temple_found = false;
 
    venaedanotrr_temple_found = false;
 
    zayslanotrr_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;
 
    
 
    dt_code = {};
 
    dt_buttons = {};
 
};
 
 
 
 
pl = player {
 
	nam = "player";
 
	disp = "Дэвид Дрейк";
 
    disp2 = "Дрейка";
 
    disp3 = "Дрейку";
 
	where = 'port';
 
	hp = 10;
 
	obj = {'item_umbrella', 'item_charts', 'item_note_1', 'item_money', 
 
	};
 
	-- party array. Should be empty on start
 
	party = {--[["learr", "radcliffe", "phaetlarr", "wright"]]};
 
	companion = nil;
 
	money = 200;
 
	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: Если вы видите это сообщение - это баг. ";
 
 
require "dbg"
 
 
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;
 
	---debug	
 
	--[[
 
	---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;
 
	atl_iyh_state = 7;
 
	--]]
 
	
 
	--- 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 = "za_temple_back_entrance";
 
    pl.where = "dt_fight";
 
    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;
 
\ No newline at end of file
0 comments (0 inline, 0 general)