diff --git a/leviathan.lua b/leviathan.lua new file mode 100644 --- /dev/null +++ b/leviathan.lua @@ -0,0 +1,254 @@ +--[[ +Ваша подводная лодка - Левиафан +Для начала вам придется починить ее +Имеет два двигателя - электрический и паровой +Для запуска машины потребуется починить и обеспечить энергией хотя бы один из них(уголь или батареи) +Левиафан - достаточно большая подводная лодка. Хотя она может управляться одним человеком, рассчитана она на много большее. + +Имеется три доступных уровня освещения: +Не освещено - ничего не видно, передвигаться по кораблю невозможно +Плохо освещено - Описания минимальны, большинство действий недостпны +Хорошо освещено - полные описания, все действия доступны + +На складе имеется три скафандра в хорошем состоянии. Без них невозможно покинуть корабль в подводных локациях. Скафандр может быть испорчен и потребует ремонта. Если оба скафандра выведены из строя их потребуется отремонтировать. +]] +submarine_leviathan = obj { + nam = "submarine_leviathan"; + disp = "Левиафан"; + -- dsc = [[ + -- Вы видите огромную металлическую конструкцию, напоминающую рыбу. Большие стеклянные иллюминаторы по бортам еще больше усиливают впечатление. На бортах крупными буквами выведено "А12 Левиафан". В верхней части машины вы видите {люк}.^ + --]]; + dsc = [[ + Вы видите "{Левиафан}" - вашу субмарину + ]]; + act = [[ Несмотря на проведенные в бездействии годы, субмарина сейчас в отличном состоянии. Из иллюминаторов льется яркий свет. На борту виднреется слегка пошарпанная, но читаемая надпись "А04 - Левиафан" ]]; + -- function() + -- walk "leviathan_airlock"; + -- return "Оказавшись внутри, вы закрываете за собой люк"; + --end; +}; + +--leviathan_exit = obj { +-- nam = "leviathan_exit"; +-- dsc = [[ +-- {Люк} в потолке закрыт. +-- ]]; +-- act = function(s) +-- walk(where(submarine_leviathan)); +-- return "Оказавшись снаружи, вы закрываете за собой люк"; +-- end; +--}; + +leviathan_airlock = room { + nam = "leviathan_airlock"; + disp = "Левиафан, шлюз"; + dsc = [[ + Вы находитесь в шлюзовом отсеке Левиафана. Яркий свет электрических ламп освещает помещение. + ]]; + way = { + vroom("Кают-компания", "leviathan_wardroom"); + vroom("Наружу", function() + return where(submarine_leviathan); + end); + }; +}; + +leviathan_captains_cabin = room { + nam = "leviathan_captains_cabin"; + disp = "Левиафан, каюта капитана"; + dsc = [[ + Вы находитесь в каюте, очевидно, предназначенной для капитана. Эта каюта немного больше остальных, в ней размещен стол и стул. + В столе несколько ящичков, хитроумно закрытых, чтобы при качке они не открывались. + ]]; + way = { + vroom("Каюты", "leviathan_cabins"); + }; +}; + +leviathan_cabins = room { + nam = "leviathan_cabins"; + disp = "Левиафан, каюты"; + dsc =[[ + Вы находитесь в длинном коридоре с множеством дверей, ведущих в каюты, расположенные по левому борту. + ]]; + way = { + vroom("Каюта капитана", "leviathan_captains_cabin"); + vroom("Кают-компания", "leviathan_wardroom"); + }; + +}; + +leviathan_cargo_hold = room { + nam = "leviathan_cargo_hold"; + disp = "Левиафан, грузовой отсек"; + dsc = [[ + Вы находитесь в грузовом отсеке Левиафана + ]]; + way = { + vroom("Кают-компания", "leviathan_wardroom"); + }; +}; + +leviathan_wardroom = room { + nam = "leviathan_wardroom"; + disp = "Левиафан, кают-компания"; + dsc = [[ + Вы находитесь в кают-компании Левиафана. Просторная комната, в центре которой укреплен массивный металлический стол. + Из машинного отсека доносится гул двигателей. Яркий свет электрических ламп освещает помещение. + ]]; + way = { + vroom("Машинный отсек", "leviathan_engines"); + vroom("Рубка", "leviathan_dlg"); + vroom("Шлюз", "leviathan_airlock"); + vroom("Каюты", "leviathan_cabins"); + vroom("Грузовой отсек", "leviathan_cargo_hold"); + }; + obj = { + --vway("Машинный отсек", "Из {машинного отсека} доносится легкий гул.^", "leviathan_engines"); + --vway("Рубка", "{В рубку}^", "leviathan_dlg"); + --vway("Шлюз", "{В шлюз}^", "leviathan_airlock"); + --vway("Каюты", "{В каюты экипажа}^", "leviathan_cabins"); + --vway("Грузовой отсек", "{В грузовой отсек}^", "leviathan_cargo_hold"); + "char_learr"; + "char_phaetlarr"; + "char_radcliffe"; + "char_wright"; + }; +}; + +leviathan_engines = room { + nam = "leviathan_engines"; + disp = "Левиафан, машинное отделение"; + dsc = [[ + Вы находитесь в машинном отделении Левиафана. Равномерный гул электрических двигателей сообщает о полной готовности субмарины. + ]]; + way = { + vroom("Кают-компания", "leviathan_wardroom"); + }; +}; + +leviathan_dlg = dlg { + nam = "leviathan_dlg"; + disp = "Штурвал Левиафана"; + dsc = function() + local view = ""; + if (type(where(submarine_leviathan).view) == "function") then + view = where(submarine_leviathan).view(where(submarine_leviathan)); + else + view = where(submarine_leviathan).view; + end; + + return [[ + Вы находитесь в рубке Левиафана перед штурвалом. + Отсюда вы можете направиться куда-нибудь. + Яркий свет электрических ламп освещает помещение. ^ + ]] .. (view); + end; + update_options = function() + leviathan_dlg:poff(10,11,12,13,14); + if (where(submarine_leviathan).navigatable) then + leviathan_dlg:poff(1,2,3,4,5); + if (where(submarine_leviathan).south) then + pon(10); + end; + if (where(submarine_leviathan).north) then + pon(11); + end; + if (where(submarine_leviathan).east) then + pon(12); + end; + if (where(submarine_leviathan).west) then + pon(13); + end; + if (where(submarine_leviathan).gate) then + pon(14); + end; + else + leviathan_dlg:pon(1, 2, 3, 4); + leviathan_dlg:poff(5); + if (where(submarine_leviathan) == atlantis_dock) then + leviathan_dlg:poff(1); + end; + if (where(submarine_leviathan) == navjiarr_settlement) then + leviathan_dlg:poff(2); + end; + if (where(submarine_leviathan) == navjiarr_hostile_settlement) then + leviathan_dlg:poff(3); + end; + if (where(submarine_leviathan) == first_city_entrance) then + leviathan_dlg:poff(4); + leviathan_dlg:pon(5); + end; + end; + end; + enter = function(s) + leviathan_dlg.update_options(); + end; + phr = { + {1, always = "true", "Атлантида", function() + return "Вы прибыли в Атлантиду"; + end, function() + move(submarine_leviathan, "atlantis_dock"); + leviathan_dlg:update_options(); + end}, + {2, always = "true", "Поселение Навьяр", function() + return "Вы прибыли в Атлантиду"; + end, function() + move(submarine_leviathan, "navjiarr_settlement"); + leviathan_dlg:update_options(); + end}, + {3, always = "true", "Враждебное поселение Навьяр", function() + return "Вы прибыли в Атлантиду"; + end, function() + move(submarine_leviathan, "navjiarr_hostile_settlement"); + leviathan_dlg:update_options(); + end}, + {4, always = "true", "Лсэрианотр, древний город Навьяр", function() + return "Вы прибыли в Лсэрианотр"; + end, function() + move(submarine_leviathan, "first_city_entrance"); + leviathan_dlg:update_options(); + end}, + {5, always = "true", "Вперед, в город", function() + if (first_city_entrance.open) then + return [[ + Движимый вашей умелой рукой, Левиафан вплывает в ворота. Оказавшись среди светящихся стен древнего города, вы отключаете прожектор. + ]]; + else + return [[ + Вы не рискуете протаранить ворота, простоявшие не одно тысячелетие. + ]]; + end; + end, + function() + if (first_city_entrance.open) then + move(submarine_leviathan, "first_city_outer_south"); + leviathan_dlg:update_options(); + end; + end; + }, + {10, always = "true", "На юг", "", function() + move(submarine_leviathan, where(submarine_leviathan).south); + leviathan_dlg:update_options(); + end;}; + {11, always = "true", "На север", "", function() + move(submarine_leviathan, where(submarine_leviathan).north); + leviathan_dlg:update_options(); + end;}; + {12, always = "true", "На восток", "", function() + move(submarine_leviathan, where(submarine_leviathan).east); + leviathan_dlg:update_options(); + end;}; + {13, always = "true", "На запад", "", function() + move(submarine_leviathan, where(submarine_leviathan).west); + leviathan_dlg:update_options(); + end;}; + {14, always = "true", "В ворота", "", function() + move(submarine_leviathan, where(submarine_leviathan).gate); + leviathan_dlg:update_options(); + end;}; + {255, always = "true", "Назад, в кают-компанию", "", function() + back(); + end} + }; +}; \ No newline at end of file