Changeset - 037e19ceec23
[Not reviewed]
default
0 3 0
Silverwing - 8 years ago 2017-02-11 15:39:16

More leviathan improvements
3 files changed with 20 insertions and 37 deletions:
0 comments (0 inline, 0 general)
leviathan.lua
Show inline comments
 
@@ -89,49 +89,49 @@ leviathan_suits = obj {
 
    nam = "leviathan_suits";
 
    dsc = "У стены стоят два {водолазных костюма}. ";
 
    act = "Костюмы для глубоководного погружения. ";
 
};
 
 
leviathan_trapdoor = obj {
 
    nam = "leviathan_trapdoor";
 
    dsc = "На потолке расположен люк, ведущий наружу субмарины. ";
 
};
 
 
leviathan_captains_cabin = darkroom {
 
    var {
 
        light_on = false;
 
    };
 
    has_light = function(s)
 
        return s.light_on and submarine_leviathan.power_on and submarine_leviathan.battery;
 
    end;
 
	nam = "leviathan_captains_cabin";
 
	disp = "Левиафан, каюта капитана";
 
	leviathan = true;
 
	dsc_lit = [[Каюта капитана несколько больше остальных. Под потолком расположена элетрическая лампа, излучающая яркий свет. ]];
 
	dsc_halflit = [[Вы находитесь в каюте, очевидно, предназначенной для капитана. Под потолком расположена элетрическая лампа, однако сейчас она не горит. Эта каюта немного больше остальных. В слабом свете лампы вы с трудом различаете очертания дверей и предметов. ]];
 
	dsc_dark = [[Вы находитесь в одной из кают. В темноте вы не можете ничего различить. ]];
 
	way = {
 
		kh_vroom("В коридор", "leviathan_corridor", 0);
 
		kh_vroom("В коридор", "leviathan_corridor", 1);
 
	};
 
	obj = {
 
		"phone_cabin";
 
        "lev_capn_desk";
 
        "lev_capn_map";
 
        "lev_capn_chair";
 
        "lev_capn_bed";
 
        "lev_capn_view";
 
	};
 
};
 
 
lev_capn_desk = obj {
 
    nam = "lev_capn_desk";
 
    dsc = [[У стены установлен небольшой стол с несколькими {ящиками}. ]];
 
    act = "Ящики пусты. ";
 
};
 
 
lev_capn_map = obj {
 
    nam = "lev_capn_map";
 
    dsc = [[Над столом висит {карта} Атлантического океана. ]];
 
    act = function(s) 
 
        if atlantis_found then
 
            return [[Карта Атлантического океана, судя по маркировке, принадлежащая компании "Вестхейвен Трансоушен". На ней изображено несколько объектов, имеющих значение для компании и, в частности, Атлантида. ]];
 
        else
 
@@ -180,129 +180,129 @@ lev_capn_ls = obj {
 
                pr [[Ничего не происходит. ]];
 
            end;
 
        else
 
            here().light_on = true;
 
            if (submarine_leviathan.power_on and submarine_leviathan.battery) then
 
                pr [[Свет зажигается. ]];
 
            else
 
                pr [[Ничего не происходит. ]];
 
            end;
 
        end;
 
    end;
 
};
 
 
leviathan_cabin_1 = darkroom {
 
	nam = "leviathan_cabin_1";
 
    has_light = function(s)
 
        return submarine_leviathan.power_on and submarine_leviathan.battery;
 
    end;
 
	disp = "Левиафан, каюта №1";
 
	leviathan = true;
 
	dsc_lit = [[Эта каюта ничем не отличается от других, расположенных по левому борту субмарины. Под потолком расположена электрическая лампа, излучающая яркий свет. ]];
 
    dsc_halflit = [[Эта каюта ничем не отличается от других, расположенных по левому борту субмарины. Под потолком расположена электрическая лампа, однако сейчас она не горит. В слабом свете лампы вы с трудом различаете очертания дверей и предметов.  ]]; 
 
    dsc_dark = [[В помещении темно и вы ничего не видите. ]];  
 
	way = {
 
		kh_vroom("В коридор", "leviathan_corridor", 0);
 
		kh_vroom("В коридор", "leviathan_corridor", 1);
 
	};
 
    obj = {
 
        'lev_cab_table';
 
        'lev_cab_beds';
 
        'lev_cab_view';
 
    };   
 
};
 
 
leviathan_cabin_2 = darkroom {
 
	nam = "leviathan_cabin_2";
 
    has_light = function(s)
 
        return submarine_leviathan.power_on and submarine_leviathan.battery;
 
    end;   
 
	disp = "Левиафан, каюта №2";
 
	leviathan = true;
 
	dsc_lit = [[Эта каюта ничем не отличается от других, расположенных по левому борту субмарины. Под потолком расположена электрическая лампа, излучающая яркий свет. ]];
 
    dsc_halflit = [[Эта каюта ничем не отличается от других, расположенных по левому борту субмарины. Под потолком расположена электрическая лампа, однако сейчас она не горит. В слабом свете лампы вы с трудом различаете очертания дверей и предметов.  ]]; 
 
    dsc_dark = [[В помещении темно и вы ничего не видите. ]];  
 
	way = {
 
		kh_vroom("В коридор", "leviathan_corridor", 0);
 
		kh_vroom("В коридор", "leviathan_corridor", 1);
 
	};
 
    obj = {
 
        'lev_cab_table';
 
        'lev_cab_beds';
 
        'lev_cab_view';
 
    };   
 
};
 
 
leviathan_cabin_3 = darkroom {
 
	nam = "leviathan_cabin_3";
 
    has_light = function(s)
 
        return submarine_leviathan.power_on and submarine_leviathan.battery;
 
    end;   
 
	disp = "Левиафан, каюта №3";
 
	leviathan = true;
 
	dsc_lit = [[Эта каюта ничем не отличается от других, расположенных по левому борту субмарины. Под потолком расположена электрическая лампа, излучающая яркий свет. ]];
 
    dsc_halflit = [[Эта каюта ничем не отличается от других, расположенных по левому борту субмарины. Под потолком расположена электрическая лампа, однако сейчас она не горит. В слабом свете лампы вы с трудом различаете очертания дверей и предметов.  ]]; 
 
    dsc_dark = [[В помещении темно и вы ничего не видите. ]];  
 
	way = {
 
		kh_vroom("В коридор", "leviathan_corridor", 0);
 
		kh_vroom("В коридор", "leviathan_corridor", 1);
 
	};      
 
    obj = {
 
        'lev_cab_table';
 
        'lev_cab_beds';
 
        'lev_cab_view';
 
    };   
 
};
 
 
leviathan_cabin_4 = darkroom {
 
	nam = "leviathan_cabin_4";
 
    has_light = function(s)
 
        return submarine_leviathan.power_on and submarine_leviathan.battery;
 
    end;   
 
	disp = "Левиафан, каюта №4";
 
	leviathan = true;
 
	dsc_lit = [[Эта каюта ничем не отличается от других, расположенных по левому борту субмарины. Под потолком расположена электрическая лампа, излучающая яркий свет. ]];
 
    dsc_halflit = [[Эта каюта ничем не отличается от других, расположенных по левому борту субмарины. Под потолком расположена электрическая лампа, однако сейчас она не горит. В слабом свете лампы вы с трудом различаете очертания дверей и предметов.  ]]; 
 
    dsc_dark = [[В помещении темно и вы ничего не видите. ]];  
 
	way = {
 
		kh_vroom("В коридор", "leviathan_corridor", 0);
 
		kh_vroom("В коридор", "leviathan_corridor", 1);
 
	};
 
    obj = {
 
        'lev_cab_table';
 
        'lev_cab_beds';
 
        'lev_cab_view';
 
    };   
 
};
 
 
leviathan_cabin_5 = darkroom {
 
	nam = "leviathan_cabin_5";
 
    has_light = function(s)
 
        return submarine_leviathan.power_on and submarine_leviathan.battery;
 
    end;   
 
	disp = "Левиафан, каюта №5";
 
	leviathan = true;
 
	dsc_lit = [[Эта каюта ничем не отличается от других, расположенных по левому борту субмарины. Под потолком расположена электрическая лампа, излучающая яркий свет. ]];
 
    dsc_halflit = [[Эта каюта ничем не отличается от других, расположенных по левому борту субмарины. Под потолком расположена электрическая лампа, однако сейчас она не горит. В слабом свете лампы вы с трудом различаете очертания дверей и предметов.  ]]; 
 
    dsc_dark = [[В помещении темно и вы ничего не видите. ]];  
 
	way = {
 
		kh_vroom("В коридор", "leviathan_corridor", 0);
 
		kh_vroom("В коридор", "leviathan_corridor", 1);
 
	};
 
    obj = {
 
        'lev_cab_table';
 
        'lev_cab_beds';
 
        'lev_cab_view';
 
    };
 
};
 
 
lev_cab_table = obj {
 
    nam = "lev_cab_table";
 
    dsc = [[У стены рядом с иллюминатором расположен небольшой {столик}. ]];
 
    act = "Столик пуст. ";
 
};
 
 
lev_cab_beds = obj {
 
    nam = "lev_cab_beds";
 
    dsc = [[Напротив стола расположены две {койки} одна над другой. ]];
 
    act = "Мне сейчас некогда спать. ";
 
};
 
 
lev_cab_view = obj {
 
    nam = "lev_cab_view";
 
    dsc = "Напротив входа расположен {иллюминатор}. ";
 
    act = function(s)
 
@@ -459,63 +459,49 @@ leviathan_battery = obj {
 
	seen_level = 1;
 
	opened = false;
 
};
 
 
leviathan_breaker = obj {
 
	nam = "leviathan_breaker";
 
	dsc = function(s)
 
		if (submarine_leviathan.power_on) then
 
			return [[Рядом с батареей укреплен {рубильник}. Сейчас он включен. ]];
 
		else
 
			return [[Рядом с батареей укреплен {рубильник}. Сейчас он выключен. ]];
 
		end;
 
	end;
 
	act = function(s)
 
		if (submarine_leviathan.power_on) then
 
			submarine_leviathan.power_on = false;
 
			-- TODO включать свет по всему Левиафану, если восстановлены разрывы цепи и установлена батарея
 
			-- TODO включать двигатель если установлена батарея
 
			pr([[Вы выключаете рубильник. ]]);
 
		else
 
			submarine_leviathan.power_on = true;
 
			-- TODO включать двигатель если установлена батарея
 
			pr([[Вы включаете рубильник. ]]);
 
			if (submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0) then
 
				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;
 
				pr([[Повсюда зажигается яркий свет, на мгновение ослепляя вас. ]]);
 
				pr([[Повсюду зажигается яркий свет, на мгновение ослепляя вас. ]]);
 
			end;
 
		end;
 
	end;
 
	seen_level = 1;
 
};
 
 
leviathan_lower_deck = darkroom {
 
	nam = "leviathan_lower_deck";
 
    has_light = function(s)
 
        return submarine_leviathan.power_on and submarine_leviathan.battery;
 
    end;   
 
	disp = "Левиафан, нижняя палуба";
 
	leviathan = true;
 
	dsc_lit = [[Большой отсек на нижней палубе Левиафана освещен электрическими лампами, укрепленными на стенах. Повсюду раскиданы неизвестно откуда взявшиеся обломки металла. В передней части помещения вы видите несколько отверстий для зарядки торпедных аппаратов. ]];
 
	dsc_halflit = [[Большой отсек на нижней палубе Левиафана слабо освещен вашей лампой. Повсюду раскиданы неизвестно откуда взявшиеся обломки металла. В передней части помещения вы видите несколько отверстий для зарядки торпедных аппаратов. ]];
 
	dsc_dark = [[На нижней палубе Левиафана темно и вы совсем ничего не видите. ]];
 
	way = {
 
		kh_vroom("В коридор", "leviathan_corridor", 1);
 
		kh_vroom("К системе жизнеобеспечения", "leviathan_life_support", 1);
 
	};
 
	obj = {
 
		"leviathan_lower_wiring";
 
	};
 
};
 
@@ -581,113 +567,110 @@ leviathan_wheelhouse = darkroom {
 
		if (type(where(submarine_leviathan).view) == "function") then
 
			view = where(submarine_leviathan):view();
 
		else
 
			view = where(submarine_leviathan).view;
 
		end;
 
		
 
		return [[Небольшое помещение в передней части субмарины освещено слабым светом вашей лампы. Через три огромных иллюминатора вы можете увидеть происходящее снаружи субмарины. ]] .. (view);
 
	end;
 
	dsc_dark = function(s)
 
		local view = "";
 
		if (type(where(submarine_leviathan).view) == "function") then
 
			view = where(submarine_leviathan):view();
 
		else
 
			view = where(submarine_leviathan).view;
 
		end;
 
		
 
		return [[Небольшое помещение в передней части субмарины не освещено. В темноте вы ничего не можете разглядеть. Через три огромных иллюминатора вы можете увидеть происходящее снаружи субмарины. ]] .. (view);
 
	end;
 
	way = {
 
		kh_vroom("В кают-компанию", "leviathan_wardroom", 2);
 
	};
 
	obj = {
 
		'leviathan_handwheel';
 
		'leviathan_airpump_control';
 
		'leviathan_controls';
 
		'leviathan_wheelhouse_sensors';
 
		"leviathan_wheelhouse_wiring";
 
	};
 
};
 
 
leviathan_controls = obj {nam = '1'}
 
 
leviathan_handwheel = obj {
 
	nam = "leviathan_handwheel";
 
	dsc = [[Перед вами расположен {штурвал}. Рядом с ним расположено несколько рычагов. ]];
 
	act = function(s)
 
		if (atlantis_found and submarine_leviathan.air_level > 400000 and submarine_leviathan.circuit_breaks == 0 and submarine_leviathan.power_on) then
 
			--walkin("demo_end");
 
			local dlg = EngineUtils.getValue(where(submarine_leviathan).handwheel_room);
 
			if (dlg) then
 
				walkin(dlg);
 
			else
 
				walkin('leviathan_dlg');
 
			end;
 
		elseif (not submarine_leviathan.power_on) then
 
			return [[Без электричества _"Левиафан"_ не сдвинется с места. ]];
 
		elseif (not atlantis_found) then
 
			return [[Вы не знаете, куда плыть. ]];
 
		elseif (submarine_leviathan.air_level <= 400000) then
 
			return [[Без воздуха вы далеко не уплывете. ]];
 
		elseif (submarine_leviathan.circuit_breaks > 0) then
 
			return [[В темноте вы не можете управлять кораблем. ]];
 
		end;
 
	end;
 
};
 
 
leviathan_airpump_control = obj {
 
	nam = "leviathan_airpump_control";
 
	dsc = function(s)
 
		if (submarine_leviathan.airpump) then
 
			return [[Один из них отвечает за управление {воздушными насосами} и находится сейчас во включенном состоянии. ]];
 
		else
 
			return [[Один из них отвечает за управление {воздушными насосами} и находится сейчас в выключенном состоянии.  ]];
 
		end;
 
	end;
 
	act = function(s)
 
		if (submarine_leviathan.airpump) then
 
			submarine_leviathan.airpump = false;
 
			return [[Вы выключаете воздушные насосы. ]];
 
		else
 
			lifeon(s);
 
			submarine_leviathan.airpump = true;
 
			return [[Вы включаете воздушные насосы. ]];
 
		end;
 
	end;
 
	life = function(s)
 
		if (submarine_leviathan.power_on) then
 
			if (submarine_leviathan.airpump and submarine_leviathan.battery) then
 
				submarine_leviathan.air_level = submarine_leviathan.air_level + 250;
 
				if (submarine_leviathan.air_level > 432000) then submarine_leviathan.air_level = 432000;
 
		if (submarine_leviathan.power_on and submarine_leviathan.airpump and submarine_leviathan.battery) then
 
            submarine_leviathan.air_level = submarine_leviathan.air_level + 4000;
 
            if (submarine_leviathan.air_level > 432000) then 
 
                submarine_leviathan.air_level = 432000;
 
                lifeoff(s);
 
            end;
 
            if (here().leviathan) then
 
				pr([[Вы слышите гул работающих насосов. ]]);
 
				end;
 
			end;
 
		end;
 
	end;
 
	seen_level = 1;
 
};
 
 
leviathan_controls = obj {
 
	nam = "leviathan_controls";
 
	dsc = [[Остальные {рычаги} используются для управления движением субмарины. ]];
 
	seen_level = 1;
 
};
 
 
leviathan_wheelhouse_sensors = obj {
 
	nam = "leviathan_wheelhouse_sensors";
 
	dsc = [[Чуть ниже рычагов находится небольшая {панель} с лампочками и стрелками каких-то приборов. ]];
 
	act = function(s)
 
		if (submarine_leviathan.battery) then
 
			pr("На панели горят следующие лампочки: ");
 
			pr("батарея работает");
 
			if (submarine_leviathan.power_on) then
 
				pr(", питание включено");
 
			end;
 
			if (submarine_leviathan.airpump) then
 
				pr(", воздушные насосы включены");
 
			end;
 
			if (submarine_leviathan.circuit_breaks > 0) then
 
				pr(", разорвана цепь освещения");
 
			end;
 
			pr(". ");
 
		else
 
			pr("На панели не горит ни одна лампочка. ");
 
		end;
 
		local percent = submarine_leviathan.air_level / 432000 * 100;
utils.lua
Show inline comments
 
@@ -500,80 +500,76 @@ end;
 
            here().input = here().input .. "8";
 
        end;
 
        return "";
 
    end;
 
};
 
 
_kh_input9 = obj {
 
    nam = "_kh_input9";
 
    dsc = "{9}";
 
    act = function(s)
 
        if (here().input:len() < here().maxlen) then
 
            here().input = here().input .. "9";
 
        end;
 
        return "";
 
    end;
 
};
 
 
_kh_input0 = obj {
 
    nam = "_kh_input0";
 
    dsc = "{0}";
 
    act = function(s)
 
        if (here().input:len() < here().maxlen) then
 
            here().input = here().input .. "0";
 
        end;
 
        return "";
 
    end;
 
};
 
 
_kh_backspace = obj {
 
    nam = "_kh_back";
 
    dsc = "{Стереть}";
 
    act = function(s)
 
        if (here().input:len() > 0) then
 
            here().input = here().input:sub(1, here().input:len() - 1);
 
        end;
 
        return "";
 
    end;
 
};
 
 
_kh_cancel = obj {
 
    nam = "_kh_cancel";
 
    dsc = "{Отмена}";
 
    act = function(s)
 
        back();
 
        return "";
 
    end;
 
};
 
 
_kh_enter = obj {
 
    nam = "_kh_enter";
 
    dsc = "{Ввод}";
 
    act = function(s)
 
        if (here().input) then
 
            here():check(here().input);
 
        end;
 
        return "";
 
    end;
 
};
 
 
 
--[[
 
	Создает obj, который добавляет другой obj на сцену при активации и становится неинтерактивным
 
	nam - имя объекта
 
	dsc_a - описание до активации
 
	dsc_b - описание после активации
 
	act_a - описание взаимодействия до активации
 
	act_b - описание взаимодействия после активации
 
	o2 - obj, добавляемый на сцену
 
	r - удаляет объект после активации
 
]]
 
function obscured_obj(nam, dsc_a, act_a, o2, r, dsc_b, act_b)
 
	return obj {
 
		var {
 
			activated = false;
 
		};
 
		nam = nam;
 
		dsc = function(s)
 
			if (s.activated) then
 
				return dsc_b;
 
			else 
wright.lua
Show inline comments
 
@@ -32,48 +32,52 @@ char_wright_home = obj {
 
	disp = "Джек Райт";
 
	dsc = function(s)
 
		if (s.documents) then
 
			return [[За столом сидит {Джек Райт} и с интересом рассматривает схемы, которые вы ему отдали. ]];
 
		else
 
            if (s.known) then
 
                return [[За столом сидит {Джек Райт}, неспешно просматривая какие-то бумаги. ]];
 
            else
 
			    return [[За столом сидит {молодой человек}, неспешно просматривающий какие-то бумаги. ]];
 
            end;         
 
		end;
 
	end;
 
	act = function(s)
 
		walkin(wright_dlg);
 
	end;
 
};
 
 
wright_dlg = dlg {
 
    var {
 
        state = 1;
 
    };
 
	nam = "wright_dlg";
 
	disp = "Джек Райт";
 
	entered = function(s)
 
        if (submarine_leviathan.power_on and submarine_leviathan.airpump and submarine_leviathan.battery and submarine_leviathan.air_level < 432000) then
 
            submarine_leviathan.air_level = 432000;
 
            lifeoff(s);
 
        end;   
 
		if (atlantis_found and submarine_leviathan.air_level > 400000 and submarine_leviathan.circuit_breaks == 0 and submarine_leviathan.power_on) then
 
			psub('leviathan_restored');
 
			return [[Джек Райт отвлекается от газеты: "Добрый день". ]];
 
		elseif (s.state == 1) then
 
			--First meeting
 
            char_wright_home.known = true;         
 
			psub('first_visit');
 
			return [[Перед вами молодой человек, одетый в недорогой, но опрятный костюм. Его бледное лицо украшает короткая темная борода и пышные усы. Темные волосы коротко острижены. Серые глаза с интересом разглядывают вас. Он протягивает вам руку и представляется: "Добрый день. Мое имя -- Джек Райт. Майкл -- мой отец, но он пропал несколько лет назад". ]];
 
		elseif (s.state == 2) then
 
			--Documents not given
 
			psub('ask_documents');
 
			return [[Джек отвлекается от газеты: "Добрый день. Вы обещали принести какие-то документы". ]];
 
		elseif (s.state == 3) then
 
			--Documents given
 
			if (not leviathan_discovered) then
 
				psub('checking_documents');
 
				return [[Джек отвлекается от документов: "Добрый день. Если вы по поводу документов, то я еще ничего не нашел". ]];
 
			else
 
				s.state = 5;
 
				warehouse32_found = true;
 
				psub('warehouse_discovered');
 
				return [[Джек отвлекается от документов: "Добрый день. У меня хорошие новости. Я нашел склад 32", - он достает карту города и показывает вам место. ]];
 
			end;
 
		elseif (s.state == 4) then
0 comments (0 inline, 0 general)