Changeset - 9c3e0fecdb92
[Not reviewed]
default
0 7 0
Silverwing - 8 years ago 2015-10-16 04:42:27

Updates
7 files changed with 481 insertions and 80 deletions:
0 comments (0 inline, 0 general)
dock2.lua
Show inline comments
 
@@ -7,7 +7,7 @@ dock_2 = room {
 
	nam = "dock_2";
 
	disp = "Док 2, вход";
 
	dsc = [[
 
		Вы стоите перед старым железный забором. 
 
		Вы стоите перед старым железный забором, ограждающим док 2, принадлежавший "Вестхейвен Трансоушен". Ржавая табличка, указывающая это все еще висит над воротами, слегка поскрипывая под сильными порывами ветра. За забором все заставлено металлическими грузовыми контейнерами, не менее ржавыми чем все остальное здесь. Вдали виднеется старый кран, предназначенный для погрузки и разгрузки приходящих судов. 
 
	]];
 
	enter = function(s)
 
		move(char_coachman, here());
 
@@ -25,30 +25,38 @@ dock_gate = obj {
 
	disp = "Ворота";
 
	dsc = function(s)
 
		if (s.open) then 
 
			return "Ржавые {ворота} слегка приоткрыты. ";
 
			return [[
 
				Ржавые {ворота} застыли в приоткрытом состоянии, достаточно, чтобы вы смогли проникнуть за них. 
 
			]];
 
		else
 
			return "На проржавевших воротах висит {амбарный замок}. ";
 
			return [[
 
				На проржавевших воротах, ведущих на территорию дока, висит {амбарный замок}. 
 
			]];
 
		end;
 
	end;
 
	act = function (s)
 
		if (s.open) then
 
			return [[Ворота приоткрыты достаточно, чтобы вы могли войти внутрь. ]];
 
			return [[ 
 
				Вы при всем желании не сможете сдвинуть ворота с места. 
 
			]];
 
		else
 
			return [[
 
				Массивный старый замок уже изрядно проржавел. Даже если бы у вас был ключ, вы врядли смогли бы открыть его. 
 
				Массивный старый замок уже изрядно проржавел и пришел в негодность. Даже если бы у вас был ключ, вы врядли смогли бы открыть его. 
 
			]];
 
		end;
 
	end;
 
	used = function(s,o)
 
		if (s.open) then
 
			return "Я больше ничего не могу здесь сделать. ";
 
			return false;
 
		end;
 
		if (o == item_toolbox) then
 
			s.open = true;
 
			path("Войти"):enable();
 
			return "Пользуясь ломиком, найденным в ящике, вы снимаете замок с ворот. С жутким скрипом вам удается приоткрыть их. Теперь вы можете войти внутрь. ";
 
			return [[
 
				Пользуясь ломиком, найденным в ящике, вы снимаете замок с ворот. С жутким скрипом вам удается приоткрыть их. Теперь вы можете войти внутрь. 
 
			]];
 
		else
 
			return "Врядли это поможет. ";
 
			return false;
 
		end;
 
	end;
 
	
 
@@ -58,10 +66,8 @@ dock_inside = room {
 
	nam = "dock_inside";
 
	disp = "Док";
 
	dsc = [[
 
		Вы находитесь на территории дока, принадлежавшего компании Вестхейвен Транс Оушен, о чем свидетельствует обшарпанная табличка над входом. 
 
	]];
 
	view = [[
 
		Левиафан находится в доке
 
		Вы находитесь на территории дока, принадлежавшего компании "Вестхейвен Трансоушен", о чем свидетельствует оставшаяся позади табличка. Вдалеке, у причала стоит старый грузовой кран. 
 
		Вы не слышите ничего, кроме завываний ветра и скрипа ржавого металла. 
 
	]];
 
	way = {
 
		vroom("Выйти", "dock_2");
 
@@ -75,15 +81,18 @@ dock_inside = room {
 
dock_boxes = obj {
 
	nam = "dock_boxes";
 
	disp = "Ящики";
 
	dsc = "Ровными рядами вокруг расположены грузовые {контейнеры}. ";
 
	act = "Старые контейнеры. Скорее всего, большинство из них пусты. ";
 
	dsc = "Ровными рядами вокруг расположены старые грузовые {контейнеры}. Большинство из них проржавели настолько, что не осталось никаких опознавательных знаков об их происхождении и содержимом. ";
 
	act = "Скорее всего, большинство из этих контейнеров пусты - врядли кто-то позволил бы пропадать такому количеству добра. ";
 
};
 
 
dock_mooring = room {
 
	nam = "dock_inside";
 
	disp = "Причал";
 
	dsc = [[
 
		Вы находитесь у причала дока 2. Повсюду вокруг стоят грузовые контейнеры с логотипом Вестхейвен Транс Оушен. 
 
		Вы находитесь у причала. Здесь нет ящиков и почти пусто, не считая нескольих кучек мусора - старых гнилых деревяшек, каких-то ржавых металлических трубок, мешков с неизвестным содержимым. Вы не слышите ничего, кроме шума мутной воды, завываний ветра и скрипа ржавого металла. 
 
	]];
 
	view = [[
 
		Левиафан находится в доке
 
	]];
 
	way = {
 
		vroom("К пульту управления краном", "dock_crane_control");
 
@@ -129,13 +138,13 @@ dock_crane = obj {
 
	state = 0;
 
	dsc = function(s)
 
		if (s.state == 0) then
 
			return "Огромный металлический кран нависает над водой. {Тросы} сейчас подняты. ";
 
			return "Чуть в стороне от вас огромный металлический кран нависает над водой. {Тросы} сейчас подняты. Возле одной из ног основания установлена небольшая кабинка, в которой по-видимому расположены механизмы для управления краном. ";
 
		elseif (s.state == 1) then
 
			return "Огромный металлический кран нависает над водой. {Тросы} опущены насколько это возможно - они почти полностью погружены в грязную воду. ";
 
			return "Чуть в стороне от вас огромный металлический кран нависает над водой. {Тросы} опущены насколько это возможно - они почти полностью погружены в грязную воду. Возле одной из ног основания установлена небольшая кабинка, в которой по-видимому расположены механизмы для управления краном. ";
 
		elseif (s.state == 2) then
 
			return "Огромный металлический кран нависает над водой. {Тросы} подцеплены к предмету, скрывающемуся под водой. ";
 
			return "Чуть в стороне от вас огромный металлический кран нависает над водой. {Тросы} подцеплены к предмету, скрывающемуся под водой. Возле одной из ног основания установлена небольшая кабинка, в которой по-видимому расположены механизмы для управления краном. ";
 
		else
 
			return "Огромный металлический кран нависает над водой. " -- На крюках подвешена странная машина. Торпедообразный корпус, в верхней части которого виден наглухо задраенный люк, а в задней видно несколько гребных винтов. Иллюминаторы, частично показавшиеся на поверхности покрыты грязью, не позволяя заглянуть внутрь. В передней части на борту прикреплена слегка поржавевшая табличка "А04 - Левиафан". 
 
			return "Чуть в стороне от вас огромный металлический кран нависает над водой. " -- На крюках подвешена странная машина. Торпедообразный корпус, в верхней части которого виден наглухо задраенный люк, а в задней видно несколько гребных винтов. Иллюминаторы, частично показавшиеся на поверхности покрыты грязью, не позволяя заглянуть внутрь. В передней части на борту прикреплена слегка поржавевшая табличка "А04 - Левиафан". 
 
		end;
 
	end;
 
	act = function(s)
game_over.lua
Show inline comments
 
game_over_caught = room {
 
	nam = "game_over_caught";
 
	disp = "Игра окончена";
 
	hideinv = true;
 
	dsc = [[
 
		Ну пиздец, приплыли
 
	]];
 
};
 
 
game_over_shot = room {
 
	nam = "game_over_shot";
 
	disp = "Игра окончена";
items.lua
Show inline comments
 
@@ -211,6 +211,14 @@ item_charts = obj {
 
	end;
 
};
 
 
item_pump_details = obj {
 
	nam = "item_pump_details";
 
	disp = "Детали насоса";
 
	inv = [[
 
		Ебаный насос, Жора где ты был?
 
	]];
 
};
 
 
item_electrodes = obj {
 
	nam = "item_electrodes";
 
	disp = "Электроды";
london.lua
Show inline comments
 
@@ -37,8 +37,9 @@ char_first_mate = character {
 
aurora_borealis = room {
 
	nam = "aurora_borealis";
 
	disp = "\"Северное сияние\", палуба";
 
	--На палубе парохода людно. Пассажиры один за другим сходят на берег. Небо покрыто тяжелыми тучами. Со всех сторон доносятся гудки пароходов.
 
	dsc = [[
 
		На палубе парохода людно. Пассажиры один за другим сходят на берег. Небо покрыто тяжелыми тучами. Со всех сторон доносятся гудки пароходов.
 
		Вы стоите на палубе парохода "Северное Сияние", только что прибывшего в порт Лондона. Небо над головой затянуто тяжелыми тучами. Пассажиры толпятся у сходней. Матросы занимаются своими делами, не обращая внимания на вас и других пассажиров. 
 
	]];
 
	obj = {'char_captain', 'char_first_mate'};
 
	way = {
 
@@ -49,11 +50,13 @@ aurora_borealis = room {
 
london_mooring = room {
 
	nam = "london_mooring";
 
	disp = "Причал";
 
	hideinv = true;
 
	-- У причала не протолкнуться. У вас не остается выбора, кроме как отойти к порту вместе с толпой. 
 
	dsc = [[
 
		У причала не протолкнуться. У вас не остается выбора, кроме как отойти к порту вместе с толпой. 
 
		Вы находитесь у причала в толпе пассажиров, сошедших с нескольих пароходов. Тяжелые тучи над головой, кажется, вот-вот разразятся дождем. Толпа увлекает вас от причала. Где-то вдалеке вы слышите гудки нескольких пароходов, с трудом перебивающие остальной шум. Через несколько минут толпа прореживается и вы наконец-то можете подумать куда направиться.
 
	]];
 
	way = {
 
		vroom("Отойти от причала", "port");
 
		vroom("Дальше", "port");
 
	};
 
};
 
 
@@ -64,8 +67,8 @@ port = room {
 
		move(char_coachman, here());
 
	end;
 
	dsc = [[
 
		Вы находитесь в порту. Небо покрыто тяжелыми тучами - вот-вот начнется дождь. 
 
		Вокруг кипит жизнь: снуют толпы народу, то и дело раздаются гудки пароходов, слышно ржание лошадей, запряженных в многочисленные экипажи, привозящие и увозящие людей.
 
		Вы находитесь в порту. Тяжелые тучи над головой, кажется, вот-вот разразятся дождем. Вокруг снует множество людей - пассажиры, матросы, рабочие. Все эти пестрые толпы хаотично движутся вокруг, сталкиваясь и расходясь.
 
		Гудки прибывающих и отбывающих пароходов, ржание лошадей, запряженных в многочисленные экипажи, голоса людей бурно обсуждающих предстоящее(или окончившееся) плавание, все это сливается в единый неразборчивый шум. 
 
	]];
 
	obj = {'item_toolbox', 'char_worker'};
 
};
 
@@ -168,11 +171,12 @@ clerk = obj {
 
	Гостиница
 
]]
 
 
--TODO пивную лавку разместить рядом с портом
 
ginshop = room {
 
	nam = "ginshop";
 
	disp = "Пивная лавка";
 
	dsc = [[
 
		Вы находитесь в небольшой комнатушке. 
 
		Вы находитесь в небольшой комнатушке, где явно давно не убирались. Многолетний слой грязи на полу давно засох, несмотря на регулярно разливаемое содержимое бутылок, расставленных всюду, где только можно. Будучи излюбленным заведением самых опустившихся алкоголиков, этот магазинчик представлял огромный выбор дешевого и крепкого пойла. 
 
	]];
 
	obj = {'ginshop_trader'};
 
};
 
@@ -181,7 +185,7 @@ ginshop_trader = character {
 
	nam = "ginshop_trader";
 
	disp = "Торговец";
 
	dsc = [[
 
		За грязным прилавком, не раз залитым пивом и другими напитками стоит подслеповатый {торговец}. 
 
		За грязным прилавком, не раз залитым местными "напитками", стоит {торговец}. Сквозь потрескавшееся мутное стекло в старых очках(второе отсутствовало судя по всему уже давно) он пытается рассмотреть вас.
 
	]];
 
	dlg = "ginshop_trader_dlg";
 
};
 
@@ -208,13 +212,15 @@ hotel_street = room {
 
	entered = function(s)
 
		move(char_coachman, here());
 
	end;
 
	--Громоздкие темные тучи медленно плывут по небу. 
 
	--Вдалеке на другой стороне улицы вы видите старую, полусгнившую вывеску пивной лавки.
 
	dsc = [[
 
		Вы стоите на улице у входа в гостиницу. Гостиница представляет собой трехэтажное кирпичное здание. Ниже по улице вы видите здание, на котором висит вывеска пивной лавки.
 
		Вы стоите на одной из улиц Лондона. Большинство домов, расположенных поблизости выглядят старыми и неухоженными. Очевидно, это один из небогатых кварталов города. Прямо перед вами находится старое двухэтажное здание. Массивные деревянные двери открыты, приглашая вас внутрь. Старая покосившаяся вывеска над ними гласит "Гостиница Старого Фрэнки". Громоздкие темные тучи медленно плывут по небу. 
 
	]];
 
	way = {
 
		vroom("В гостиницу", "hotel_hall");
 
		vroom("В переулок", "hotel_alley");
 
		vroom("В пивную лавку", "ginshop");
 
		--vroom("В пивную лавку", "ginshop");
 
	};
 
};
 
 
@@ -222,7 +228,7 @@ hotel_hall = room {
 
	nam = "hotel_hall";
 
	disp = "Гостиница";
 
	dsc = [[
 
		Вы находитесь в холле гостиницы. Просторный зал, по высоте составляющий два этажа. В задней части вы видите широкую лестницу, застеленную красной дорожкой. Занавески на окнах аккуратно собраны в стороны, позволяя свету проникнуть в помещение. Несмотря на это, под потолком горит огромная люстра, украшенная золотом и серебром. 
 
		Вы находитесь в холле гостиницы. Просторный зал, по высоте занимающий оба этажа здания. В задней части зала вы видите широкую лестницу, застеленную старой дорожкой, которая некогда была красной. Окна закрыты тяжелыми занавесками, не позволяя свету с улицы проникнутьт в помещение. Однако, огромная люстра под потолком дает достаточно света. 
 
	]];
 
	obj = {
 
		'hotel_concierge'
 
@@ -236,8 +242,10 @@ hotel_hall = room {
 
 
hotel_corridor_1 = room {
 
	nam = "hotel_corridor_1";
 
	disp = "Отель, первый этаж";
 
	dsc = "Вы находитесь в коридоре гостиницы. ";
 
	disp = "Гостиница, первый этаж";
 
	dsc = [[
 
		Вы находитесь в коридоре на первом этаже гостиницы. Окна здесь отсутствуют и все освещение дают несколько газовых ламп, укрепленных на стенах. Вдоль стен расположено несколько простых дверей, ведущих в комнаты, предназначенные для постояльцев. 
 
	]];
 
	way = {
 
		vroom("В холл", "hotel_hall");
 
		vroom("В комнату №2", "hotel_room_2"):disable();
 
@@ -246,8 +254,10 @@ hotel_corridor_1 = room {
 
 
hotel_corridor_2 = room {
 
	nam = "hotel_corridor_2";
 
	disp = "Отель, второй этаж";
 
	dsc = "Вы находитесь в коридоре гостиницы. ";
 
	disp = "Гостиница, второй этаж";
 
	dsc = [[
 
		Вы находитесь в коридоре на втором этаже гостиницы. Окна здесь отсутствуют и все освещение дают несколько газовых ламп, укрепленных на стенах. Вдоль стен расположено несколько простых дверей, ведущих в комнаты, предназначенные для постояльцев. 
 
	]];
 
	way = {
 
		vroom("В холл", "hotel_hall");
 
		vroom("В комнату №7", "hotel_room_7"):disable();
 
@@ -256,18 +266,23 @@ hotel_corridor_2 = room {
 
 
hotel_room_2 = room {
 
	nam = "hotel_room_2";
 
	disp = "Комната №2";
 
	disp = "Гостиница, Комната №2";
 
	dsc = [[
 
		Вы находитесь в комнате Джозефа Старлайта.
 
		Вы находитесь в комнате Джозефа Старлайта. На столике у окна стоит зажженная лампа, рядом брошена стопка газет. На кровати в углу валяется шляпа хозяина. Окно распахнуто, впуская внутрь прохладный и влажный воздух, а также шум городской суеты.
 
	]];
 
};
 
 
hotel_room_7 = room {
 
	nam = "hotel_room_7";
 
	disp = "Комната №7";
 
	disp = "Гостиница, Комната №7";
 
	-- TODO сделать возможность открыть и закрыть ставни на окнах
 
	-- TODO нахуй магазинчик, торговца и прочих уродов
 
	dsc = [[
 
		Вы находитесь в вашей комнате в отеле.
 
		Вы находитесь в вашей комнате в гостинице Старого Фрэнки. Небольшой деревянный столик прикрыт чистой белой скатертью. В углу стоит аккуратно сделанный стул. У окна расположена застеленная свежим бельем кровать. Окна закрыты плотными ставнями. На скрипучем деревянном полу постелен старый коврик.
 
	]];
 
	obj = {
 
		'item_lamp'
 
	};
 
	way = {
 
		vroom("Спуститься вниз", "hotel_hall");
 
	};
 
@@ -283,20 +298,23 @@ hotel_alley = room {
 
		lifeoff(alley_trader);
 
	end;
 
	dsc = [[
 
		Узкий, грязный проулок. 
 
		Вы находитесь в узком проулке позади гостиницы. Дома расположены очень близко друг к другу, оставляя совсем немного свободного места. 
 
	]];
 
	obj = {
 
		'alley_trader'
 
	};
 
	way = {
 
		vroom("Ко входу в гостиницу", "hotel_street");
 
		vroom("В пивную лавку", "ginshop");
 
	}
 
};
 
 
alley_trader = obj {
 
	nam = "alley_trader";
 
	disp = "Торговец редкостями";
 
	dsc = "Немолодой {человек} в старом пальто и очках стоит, опершись на стену одного из домов.";
 
	dsc = [[
 
		Немолодой {человек} в старом пальто стоит, опершись на стену одного из домов. Сквозь стекла старых очков в тяжелой оправе он смотрит на вас, словно в ожидании ваших действий. 
 
	]];
 
	life = function(s)
 
		if(math.random(5) > 3 and where(pl) ~= alley_trader_dlg) then
 
			pn("Повернувшись к вам, человек спрашивает: \"Могу я чем-нибудь помочь?\"");
 
@@ -345,7 +363,7 @@ hotel_concierge = obj {
 
	nam = "hotel_concierge";
 
	disp = "Консьерж";
 
	dsc = [[
 
		За стойкой скучает {консьерж}.
 
		За стойкой скучает пожилой {консьерж}. Поношенный костюм, выглаженный и начищенный, хорошо сидит на его худощавом теле. Аккуратно подстриженная седая борода украшает его морщинистое лицо. Руки его неподвижно лежат на стойке, а глаза наблюдают за входящими и выходящими посетителями.
 
	]];
 
	act = function(s)
 
		if (hotel_concierge.paid) then
main.lua
Show inline comments
 
@@ -7,6 +7,7 @@ require "para"
 
require "dash"
 
require "quotes"
 
require "hideinv"
 
require "kbd"
 
 
-- Код и ядро
 
dofile "utils.lua"
 
@@ -188,6 +189,7 @@ function init()
 
	---modules init
 
	leviathan_init();
 
	warehouse18_init();
 
	warehouse32_init();
 
	---game init
 
	put(char_coachman, port);
 
	pl.where = intro;
utils.lua
Show inline comments
 
@@ -205,7 +205,6 @@ function darkroom(tab)
 
			end;
 
		end;
 
		
 
		
 
		if (life) then
 
			life(s);
 
		end;
 
@@ -223,4 +222,54 @@ function darkroom(tab)
 
	end;
 
	
 
	return room(tab);
 
end;
 
 
--[[
 
	Создает комнату с полем для ввода числа длиной не более tab.maxlen
 
	По нажатии enter вызывает метод tab.сheck
 
	Приглашение для ввода: tab.label
 
	Вводимый текст: tab.input
 
]]
 
function input_number(tab)
 
	if (not tab.maxlen) then
 
		tab.maxlen = 2;
 
	end;
 
	tab.forcedsc = true;
 
	tab.noinv = true;
 
	tab.input = "";
 
	tab.dsc = function(s)
 
		pr(tab.label .. tab.input .. "_");
 
		return false;
 
		--return tab.label .. tab.input .. "_";
 
	end;
 
	tab.entered = function(s)
 
		hook_keys('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'backspace', 'return');
 
	end;
 
	tab.left = function(s)
 
		unhook_keys('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'backspace', 'return');
 
	end;
 
	tab.kbd = function(s, down, key)
 
		if (not down) then
 
			if (key == "return") then
 
				if (s.input) then
 
					s:check();
 
				end;
 
			elseif (key == "backspace") then
 
				if (s.input:len() > 0) then
 
					s.input = s.input:sub(1, s.input:len() - 1);
 
				end;
 
			else
 
				if (string.len(s.input) < s.maxlen) then
 
					s.input = s.input .. key;
 
					-- hide buttons :)
 
				end;
 
			end;
 
		end;
 
		pr("");
 
	end;
 
	tab.obj = {
 
		-- TODO add onscreen buttons for symbian users or losers with android 
 
	};
 
 
	return room(tab);
 
end;
 
\ No newline at end of file
warehouse32.lua
Show inline comments
 
@@ -10,10 +10,12 @@ warehouse_32_entry = room {
 
	dsc = [[
 
		
 
	]];
 
	entered = function(s)
 
		warehouse_32.pos = "01";
 
		warehouse_32.dir = 1;
 
	end;
 
	way = {
 
		kh_vroom("Войти", function(s)
 
			
 
		end;);
 
		kh_vroom("Войти(temp)", "warehouse_32");
 
	};
 
};
 
 
@@ -25,6 +27,34 @@ warehouse_32_entry_night = room {
 
	]];
 
};
 
 
w32_backdoor = room {
 
	nam = "w32_backdoor";
 
	disp = "Склад 32, задняя дверь";
 
};
 
 
w32_mgr = room {
 
	nam = "w32_mgr";
 
	disp = "Склад 32, кабинет управляющего";
 
	dsc = [[
 
		Вы находитесь в кабинете управляющего. 
 
	]];
 
	entered = function(s)
 
		warehouse_32.pos = "54";
 
		warehouse_32.dir = 3;
 
	end;
 
	way = {
 
		
 
	};
 
	obj = {
 
		
 
	};
 
};
 
 
w32_frontdoor = room {
 
	nam = "w32_frontdoor";
 
	--TODO decide if this s#!t is needed
 
};
 
 
warehouse_32_definitions = {
 
	---line E
 
	["01"] = { name="у задней двери", dsc=[[
 
@@ -45,16 +75,16 @@ warehouse_32_definitions = {
 
	]], e2 = "11", corner = true};
 
	["11"] = { name="", dsc=[[
 
		
 
	]], e1 = "21", e2="12", e3="01", e4="10"};
 
	]], e1 = "21", e2="12", e3="01", e4="10", sector = "D1"};
 
	["12"] = { name="", dsc=[[
 
		
 
	]], e1 = "22", e2="13", e3="02", e4="11"};
 
	]], e1 = "22", e2="13", e3="02", e4="11", sector = "D2"};
 
	["13"] = { name="", dsc=[[
 
		
 
	]], e1 = "23", e2="14", e3="03", e4="12"};
 
	]], e1 = "23", e2="14", e3="03", e4="12", sector = "D3"};
 
	["14"] = { name="", dsc=[[
 
		
 
	]], e1 = "24", e2="15", e3="04", e4="13"};
 
	]], e1 = "24", e2="15", e3="04", e4="13", sector = "D4"};
 
	["15"] = { name="тупик", dsc=[[
 
		
 
	]], e4 = "14", corner = true};
 
@@ -64,16 +94,16 @@ warehouse_32_definitions = {
 
	]], e2 = "21", corner = true};
 
	["21"] = { name="", dsc=[[
 
		
 
	]], e1 = "31", e2="22", e3="11", e4="20"};
 
	]], e1 = "31", e2="22", e3="11", e4="20", sector = "C1"};
 
	["22"] = { name="", dsc=[[
 
		
 
	]], e1 = "32", e2="23", e3="12", e4="21"};
 
	]], e1 = "32", e2="23", e3="12", e4="21", sector = "C2"};
 
	["23"] = { name="", dsc=[[
 
		
 
	]], e1 = "33", e2="24", e3="13", e4="22"};
 
	]], e1 = "33", e2="24", e3="13", e4="22", sector = "C3"};
 
	["24"] = { name="", dsc=[[
 
		
 
	]], e1 = "34", e2="25", e3="14", e4="23"};
 
	]], e1 = "34", e2="25", e3="14", e4="23", sector = "C4"};
 
	["25"] = { name="тупик", dsc=[[
 
		
 
	]], e4 = "24", corner = true};
 
@@ -83,16 +113,16 @@ warehouse_32_definitions = {
 
	]], e2 = "31", corner = true};
 
	["31"] = { name="", dsc=[[
 
		
 
	]], e1 = "41", e2="32", e3="21", e4="30"};
 
	]], e1 = "41", e2="32", e3="21", e4="30", sector = "B1"};
 
	["32"] = { name="", dsc=[[
 
		
 
	]], e1 = "42", e2="33", e3="22", e4="31"};
 
	]], e1 = "42", e2="33", e3="22", e4="31", sector = "B2"};
 
	["33"] = { name="", dsc=[[
 
		
 
	]], e1 = "43", e2="34", e3="23", e4="32"};
 
	]], e1 = "43", e2="34", e3="23", e4="32", sector = "B3"};
 
	["34"] = { name="", dsc=[[
 
		
 
	]], e1 = "44", e2="35", e3="24", e4="33"};
 
	]], e1 = "44", e2="35", e3="24", e4="33", sector = "B4"};
 
	["35"] = { name="тупик", dsc=[[
 
		
 
	]], e4 = "34", corner = true};
 
@@ -102,16 +132,16 @@ warehouse_32_definitions = {
 
	]], e2 = "41", corner = true};
 
	["41"] = { name="", dsc=[[
 
		
 
	]], e1 = "51", e2="42", e3="31", e4="40"};
 
	]], e1 = "51", e2="42", e3="31", e4="40", sector = "A1"};
 
	["42"] = { name="", dsc=[[
 
		
 
	]], e1 = "52", e2="43", e3="32", e4="41"};
 
	]], e1 = "52", e2="43", e3="32", e4="41", sector = "A2"};
 
	["43"] = { name="", dsc=[[
 
		
 
	]], e1 = "53", e2="44", e3="33", e4="42"};
 
	]], e1 = "53", e2="44", e3="33", e4="42", sector = "A3"};
 
	["44"] = { name="", dsc=[[
 
		
 
	]], e1 = "54", e2="45", e3="34", e4="43"};
 
	]], e1 = "54", e2="45", e3="34", e4="43", sector = "A4"};
 
	["45"] = { name="тупик", dsc=[[
 
		
 
	]], e4 = "34", corner = true};
 
@@ -130,49 +160,325 @@ warehouse_32_definitions = {
 
	]], e3 = "44", ex1="w32_mgr"};
 
};
 
 
function getDirName(dir)
 
	if (dir == 1) then
 
		return "север";
 
	elseif (dir == 2) then
 
		return "восток";
 
	elseif (dir == 3) then
 
		return "юг";
 
	elseif (dir == 4) then
 
		return "запад";
 
	end;
 
end;
 
 
warehouse_32 = room {
 
	nam = "warehouse_32";
 
	disp = function(s)
 
		return "Склад 32, " .. s.definitions[position].name;
 
		return "Склад 32, " .. s.definitions[s.pos].name;
 
	end;
 
	dsc = function(s)
 
		local dir_name;
 
		if (s.dir == 1) then
 
			dir_name = "север";
 
		elseif (s.dir == 2) then
 
			dir_name = "восток";
 
		elseif (s.dir == 3) then
 
			dir_name = "юг";
 
		elseif (s.dir == 4) then
 
			dir_name = "запад";
 
		end;
 
		return s.definitions[position].dsc .. "^ Вы смотрите на " .. dir_name;
 
		return s.definitions[s.pos].dsc .. "^ Вы смотрите на " .. getDirName(s.dir);
 
	end;
 
	definitions = warehouse_32_definitions;
 
	pos = "01";
 
	dir = 1;
 
	hidden = false;
 
	guards = {
 
		{ pos = "21", dir="1", s = 1 }; --s=1 - должен повернуть направо, s=2 - должен пройти прямо
 
		{ pos = "31", dir="4", s = 1 }; --s=1 - должен повернуть направо, s=2 - должен пройти прямо
 
		{ pos = "24", dir="2", s = 1 }; --s=1 - должен повернуть направо, s=2 - должен пройти прямо
 
		{ pos = "34", dir="3", s = 1 }; --s=1 - должен повернуть направо, s=2 - должен пройти прямо
 
		{ pos = "21", dir=1, s = 1 }; --s=1 - должен повернуть направо, s=2 - должен пройти прямо
 
		{ pos = "31", dir=4, s = 1 }; --s=1 - должен повернуть направо, s=2 - должен пройти прямо
 
		{ pos = "24", dir=2, s = 1 }; --s=1 - должен повернуть направо, s=2 - должен пройти прямо
 
		{ pos = "34", dir=3, s = 1 }; --s=1 - должен повернуть направо, s=2 - должен пройти прямо
 
	};
 
	checkGuardSight = function(s)
 
		--Проверить область зрения каждого стражника, если игрок находится в области зрения - FAIL
 
		for i = 1, #s.guards do
 
			if (s.guards[i].pos == s.pos) then
 
				--detected
 
				walk("game_over_caught");
 
				return false;
 
			end;
 
			if (s.guards[i].dir == 1) then
 
				if (s.definitions[s.guards[i].pos].e1 and s.pos == s.definitions[s.guards[i].pos].e1) then
 
					--detected
 
					walk("game_over_caught");
 
					return false;
 
				end;
 
			elseif (s.guards[i].dir == 2) then
 
				if (s.definitions[s.guards[i].pos].e2 and s.pos == s.definitions[s.guards[i].pos].e2) then
 
					--detected
 
					walk("game_over_caught");
 
					return false;
 
				end;
 
			elseif (s.guards[i].dir == 3) then
 
				if (s.definitions[s.guards[i].pos].e3 and s.pos == s.definitions[s.guards[i].pos].e3) then
 
					--detected
 
					walk("game_over_caught");
 
					return false;
 
				end;
 
			elseif (s.guards[i].dir == 4) then
 
				if (s.definitions[s.guards[i].pos].e4 and s.pos == s.definitions[s.guards[i].pos].e4) then
 
					--detected
 
					walk("game_over_caught");
 
					return false;
 
				end;
 
			end;
 
		end;
 
		return true;
 
	end;
 
	guardTurn = function(s)
 
		local pl_x = math.floor(tonumber(s.pos) / 10);
 
		local pl_y = tonumber(s.pos) % 10;
 
		print("player:", pl_x, pl_y);
 
		--Каждый стражник делает ход, игрок получает сообщения, о том, слышит ли он шаги, откуда и как они движутся
 
		for i = 1, #s.guards do
 
			--TODO play with this random number to assume good gameplay: predictable enough, yet somewhat random
 
			if (rnd(10) < 9) then
 
				if (s.guards[i].s == 1) then
 
					s.guards[i].s = 2;
 
					s.guards[i].dir = s.guards[i].dir + 1;
 
					if (s.guards[i].dir > 4) then
 
						s.guards[i].dir = 1;
 
					end;
 
				elseif (s.guards[i].s == 2) then
 
					s.guards[i].s = 1;
 
					if (s.guards[i].dir == 1) then
 
						if (s.definitions[s.guards[i].pos].e1) then
 
							 s.guards[i].pos = s.definitions[s.guards[i].pos].e1;
 
						end;
 
					elseif (s.guards[i].dir == 2) then
 
						if (s.definitions[s.guards[i].pos].e2) then
 
							s.guards[i].pos = s.definitions[s.guards[i].pos].e2;
 
						end;
 
					elseif (s.guards[i].dir == 3) then
 
						if (s.definitions[s.guards[i].pos].e3) then
 
							s.guards[i].pos = s.definitions[s.guards[i].pos].e3;
 
						end;
 
					elseif (s.guards[i].dir == 4) then
 
						if (s.definitions[s.guards[i].pos].e4) then
 
							s.guards[i].pos = s.definitions[s.guards[i].pos].e4;
 
						end;
 
					end;
 
				end;
 
			end;
 
			
 
			local g_x = math.floor(tonumber(s.guards[i].pos) / 10);
 
			local g_y = tonumber(s.guards[i].pos) % 10;
 
			print("guard:", g_x, g_y)
 
			--Видимость при разнице не более двух. В прямой видимости - видно, иначе - слышно
 
			--TODO может стоит сделать, чтобы шаги были слышны только при движении стражнека?
 
			if (g_x == pl_x) then
 
				--North-south line
 
				if (g_y - pl_y == 2) then
 
					pr("На севере вдалеке вы видите стражника, он не видит вас. Он смотрит на " .. getDirName(s.guards[i].dir));
 
				elseif (g_y - pl_y == 1) then
 
					pr("На севере вы видите стражника, он не видит вас. Он смотрит на " .. getDirName(s.guards[i].dir));
 
				elseif (pl_y - g_y == 1) then
 
					pr("На юге вы видите стражника, он не видит вас. Он смотрит на " .. getDirName(s.guards[i].dir));
 
				elseif (pl_y - g_y == 2) then
 
					pr("На юге вдалеке вы видите стражника, он не видит вас. Он смотрит на " .. getDirName(s.guards[i].dir));
 
				end;
 
			elseif (g_y == pl_y) then
 
				--east-west line
 
				if (g_x - pl_x == 2) then
 
					pr("На востоке вдалеке вы видите стражника, он не видит вас. Он смотрит на " .. getDirName(s.guards[i].dir));
 
				elseif (g_x - pl_x == 1) then
 
					pr("На востоке вы видите стражника, он не видит вас. Он смотрит на " .. getDirName(s.guards[i].dir));
 
				elseif (pl_x - g_x == 1) then
 
					pr("На западе вы видите стражника, он не видит вас. Он смотрит на " .. getDirName(s.guards[i].dir));
 
				elseif (pl_x - g_x == 2) then
 
					pr("На западе вдалеке вы видите стражника, он не видит вас. Он смотрит на " .. getDirName(s.guards[i].dir));
 
				end;
 
			else
 
				if (g_x - pl_x == 1 and g_y - pl_y == 1) then
 
					pr("К северовостоку от вас вы слышите шаги. ");
 
				elseif (g_x - pl_x == 1 and pl_y - g_y == 1) then
 
					pr("К юговостоку от вас вы слышите шаги. ");
 
				elseif (pl_x - g_x == 1 and g_y - pl_y == 1) then
 
					pr("К северозападу от вас вы слышите шаги. ");
 
				elseif (pl_x - g_x == 1 and pl_y - g_y == 1) then
 
					pr("К югозападу от вас вы слышите шаги. ");
 
				end;
 
			end;
 
		end;
 
	end;
 
	makeTurn = function(s)
 
		s:checkGuardSight();
 
		s:guardTurn();
 
		s:checkGuardSight();
 
		print("turn");
 
		print(s.guards[1].pos, s.guards[1].dir);
 
		print(s.guards[2].pos, s.guards[2].dir);
 
		print(s.guards[3].pos, s.guards[3].dir);
 
		print(s.guards[4].pos, s.guards[4].dir);
 
		if (s:checkGuardSight()) then
 
			s:guardTurn();
 
			if (s:checkGuardSight()) then
 
				path("Повернуть налево"):enable();
 
				path("Повернуть направо"):enable();
 
				
 
				if (warehouse_32.dir == 1) then
 
					if (warehouse_32_definitions[warehouse_32.pos].e1 or warehouse_32_definitions[warehouse_32.pos].ex1) then
 
						path("Вперед"):enable();
 
					else
 
						path("Вперед"):disable();
 
					end;
 
				elseif (warehouse_32.dir == 2) then
 
					if (warehouse_32_definitions[warehouse_32.pos].e2 or warehouse_32_definitions[warehouse_32.pos].ex2) then
 
						path("Вперед"):enable();
 
					else
 
						path("Вперед"):disable();
 
					end;
 
				elseif (warehouse_32.dir == 3) then
 
					if (warehouse_32_definitions[warehouse_32.pos].e3 or warehouse_32_definitions[warehouse_32.pos].ex3) then
 
						path("Вперед"):enable();
 
					else
 
						path("Вперед"):disable();
 
					end;
 
				elseif (warehouse_32.dir == 4) then
 
					if (warehouse_32_definitions[warehouse_32.pos].e4 or warehouse_32_definitions[warehouse_32.pos].ex4) then
 
						path("Вперед"):enable();
 
					else
 
						path("Вперед"):disable();
 
					end;
 
				end;
 
				
 
				if (warehouse_32_definitions[warehouse_32.pos].corner) then
 
					path("Спрятаться"):enable();
 
				else
 
					path("Спрятаться"):disable();
 
				end;
 
				
 
				if (warehouse_32.hidden) then
 
					path("Спрятаться"):disable();
 
					path("Выбраться из укрытия"):enable();
 
					path("Вперед"):disable();
 
					path("Повернуть налево"):disable();
 
					path("Повернуть направо"):disable();
 
				else
 
					path("Выбраться из укрытия"):disable();
 
				end;
 
				
 
				if (warehouse_32_definitions[warehouse_32.pos].sector) then
 
					warehouse_32_shelves.current = warehouse_32_definitions[warehouse_32.pos].sector;
 
					warehouse_32_shelves:enable();
 
				else
 
					warehouse_32_shelves:disable();
 
				end;
 
			end;
 
		end;
 
	end;
 
	enter = function(s)
 
		s:makeTurn();
 
	end;
 
	way = {
 
		kh_vroom("Повернуть налево", function(s)
 
			warehouse_32.dir = warehouse_32.dir - 1;
 
			if (warehouse_32.dir < 1) then
 
				warehouse_32.dir = 4;
 
			end;
 
			
 
			return warehouse_32;
 
		end);
 
		kh_vroom("Вперед", function(s)
 
			if (warehouse_32.dir == 1) then
 
				if (warehouse_32_definitions[warehouse_32.pos].ex1) then
 
					return warehouse_32_definitions[warehouse_32.pos].ex1;
 
				else
 
					warehouse_32.pos = warehouse_32_definitions[warehouse_32.pos].e1;
 
				end;
 
			elseif (warehouse_32.dir == 2) then
 
				if (warehouse_32_definitions[warehouse_32.pos].ex2) then
 
					return warehouse_32_definitions[warehouse_32.pos].ex2;
 
				else
 
					warehouse_32.pos = warehouse_32_definitions[warehouse_32.pos].e2;
 
				end;
 
			elseif (warehouse_32.dir == 3) then
 
				if (warehouse_32_definitions[warehouse_32.pos].ex3) then
 
					return warehouse_32_definitions[warehouse_32.pos].ex3;
 
				else
 
					warehouse_32.pos = warehouse_32_definitions[warehouse_32.pos].e3;
 
				end;
 
			elseif (warehouse_32.dir == 4) then
 
				if (warehouse_32_definitions[warehouse_32.pos].ex4) then
 
					return warehouse_32_definitions[warehouse_32.pos].ex4;
 
				else
 
					warehouse_32.pos = warehouse_32_definitions[warehouse_32.pos].e4;
 
				end;
 
			end;
 
			
 
			return "warehouse_32";
 
		end);
 
		kh_vroom("Повернуть направо", function(s)
 
			warehouse_32.dir = warehouse_32.dir + 1;
 
			if (warehouse_32.dir > 4) then
 
				warehouse_32.dir = 1;
 
			end;
 
			
 
			return warehouse_32;
 
		end);
 
		kh_vroom("Спрятаться", function(s)
 
			warehouse_32.hidden = true;
 
			
 
			return warehouse_32;
 
		end);
 
		kh_vroom("Выбраться из укрытия", function(s)
 
			warehouse_32.hidden = false;
 
			
 
			return warehouse_32;
 
		end);
 
	};
 
};
 
\ No newline at end of file
 
	obj = {
 
		'warehouse_32_shelves'
 
	};
 
};
 
 
warehouse_32_shelves = obj {
 
	nam = "warehouse_32_shelves";
 
	current = "E1";
 
	dsc = function (s)
 
		return "Стеллажи, расположенные в этой секции отмечены табличкой {" .. s.current .. "}";
 
	end;
 
	act = function(s)
 
		walkin("w32_shelf_input");
 
	end;
 
};
 
 
w32_shelf_input = input_number {
 
	nam = "w32_shelf_input";
 
	check = function(s)
 
		
 
	end;
 
	label = "Укажите номер позиции:";
 
	items = {
 
		{ n = "item_electrodes"; };
 
		{ n = "item_pump_details"; };
 
	};
 
};
 
 
function warehouse32_init()
 
	for i = 1, #w32_shelf_input.items do
 
		local ok = false;
 
		while not ok do
 
			local index1 = rnd(4);
 
			local index2 = rnd(4);
 
			local shelf_name;
 
			if (index1 == 1) then
 
				shelf_name = 'A';
 
			elseif (index1 == 2) then
 
				shelf_name = 'B';
 
			elseif (index1 == 3) then
 
				shelf_name = 'C';
 
			elseif (index1 == 4) then
 
				shelf_name = 'D';
 
			end;
 
			shelf_name = shelf_name .. tostring(index2);
 
			w32_shelf_input.items[i].shelf = shelf_name;
 
			w32_shelf_input.items[i].position = "";
 
			ok = true;
 
			for j = 1, i - 1 do
 
				if (w32_shelf_input.items[i].shelf == w32_shelf_input.items[j].shelf and 
 
					w32_shelf_input.items[i].position == w32_shelf_input.items[j].position) then
 
					ok = false;
 
				end;
 
			end;
 
		end;
 
	end;
 
end;
0 comments (0 inline, 0 general)