diff --git a/first_city_inner_rim.lua b/first_city_inner_rim.lua --- a/first_city_inner_rim.lua +++ b/first_city_inner_rim.lua @@ -1,3 +1,90 @@ +-- TODO (приват) добавить описание шлюза +-- TODO (приват) картинка с дисплея терминала +-- TODO (приват) вменяемое описание цели данного паззла, тексты на навьярском или реалистичное объяснение их понятности персонажу +first_city_airlock_control = room { + nam = "first_city_airlock"; + disp = "Комната управления шлюзом центрального зала"; + dsc = function (s) + return "Вы находитесь в небольшой комнате. Перед вами расположен дисплей, на котором расположены три вертикальные полосы разной длины. " .. tostring(s.tanks[1]) .. "/" .. tostring(s.tanks[2]) .. "/" .. tostring(s.tanks[3]); + end; + tanks = {10, 0, 0}; + tanks_capacity = {10, 7, 3}; + selected_source = nil; + selected_target = nil; + detect = function(s) + if (tanks[2] == 5) then + return true; + else + return false; + end; + end; + obj = { + "first_city_transfer", + "first_city_select_s", + "first_city_select_p", + "first_city_select_a" + }; +}; + +first_city_transfer = obj { + nam = "first_city_transfer"; + dsc = "{Выполнить} ^"; + act = function(s) + if (first_city_airlock_control.selected_source and first_city_airlock_control.selected_target) then + local tmp = math.min(first_city_airlock_control.tanks[first_city_airlock_control.selected_source], first_city_airlock_control.tanks_capacity[first_city_airlock_control.selected_target] - first_city_airlock_control.tanks[first_city_airlock_control.selected_target]); + first_city_airlock_control.tanks[first_city_airlock_control.selected_source] = first_city_airlock_control.tanks[first_city_airlock_control.selected_source] - tmp; + first_city_airlock_control.tanks[first_city_airlock_control.selected_target] = first_city_airlock_control.tanks[first_city_airlock_control.selected_target] + tmp; + first_city_airlock_control.selected_source = nil; + first_city_airlock_control.selected_target = nil; + return "Выполнено"; + else + return "Невозможно выполнить"; + end; + end; +}; + +first_city_select_s = obj { + nam = "first_city_select_s"; + dsc = "{Выбрать первый баллон} ^"; + act = function(s) + if (not first_city_airlock_control.selected_source) then + first_city_airlock_control.selected_source = 1; + else + first_city_airlock_control.selected_target = 1; + end; + + return ""; + end; +}; + +first_city_select_p = obj { + nam = "first_city_select_p"; + dsc = "{Выбрать второй баллон} ^"; + act = function(s) + if (not first_city_airlock_control.selected_source) then + first_city_airlock_control.selected_source = 2; + else + first_city_airlock_control.selected_target = 2; + end; + + return ""; + end; +}; + +first_city_select_a = obj { + nam = "first_city_select_a"; + dsc = "{Выбрать третий баллон} ^"; + act = function(s) + if (not first_city_airlock_control.selected_source) then + first_city_airlock_control.selected_source = 3; + else + first_city_airlock_control.selected_target = 3; + end; + + return ""; + end; +}; + first_city_inner_south = room { nam = "first_city_inner_south"; disp = "Лсэрианотр, внутреннее кольцо, юг"; @@ -47,6 +134,11 @@ first_city_inner_north = room { east = "first_city_inner_east"; west = "first_city_inner_west"; navigatable = true; + entered = function(s) + if (first_city_airlock_control.detect(first_city_airlock_control)) then + path("first_city_to_center"):enable(); + end; + end; dsc = [[ Вы находитесь в северной части внутреннего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. ]]; @@ -54,8 +146,8 @@ first_city_inner_north = room { Вы находитесь в северной части внутреннего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. ]]; way = { - vroom("Центр города", "first_city_central_room_entrance"); - vroom("Левиафан", "leviathan_airlock"); + kh_vroom("Центр города", "first_city_central_room_entrance", "first_city_to_center"):disable(); + kh_vroom("Левиафан", "leviathan_airlock"); }; }; @@ -63,8 +155,7 @@ first_city_central_room_entrance = room nam = "first_city_central_room_entrance"; disp = "Лсэрианотр, Вход в центральный зал"; dsc = [[ - Вы находитесь у входа в центральный зал Лсэрианотра. Входная дверь закрывается и вода быстро откачивается из помещения. Вы снимаете скафандр и готовитесь к встрече с Уильямом. - Отсюда пути назад уже нет. + Вы находитесь у входа в центральный зал Лсэрианотра. Входная дверь закрывается и вода быстро откачивается из помещения. Вы снимаете скафандр и готовитесь к встрече с Уильямом. Отсюда пути назад уже нет. ]]; obj = { vway("Центральный зал", "{Вперед}", "final_scene_before_battle");