walking_in_3d_maze = {}
local self = walking_in_3d_maze

self.params = 
{
	room_bg = "scenes_chapter05_scene05_minigame", -- фон помещения
	start_room = 87, -- номер комнаты, с которой начинаем путь. Номер берется из таблицы rooms
	start_direction = 1, -- из какой двери мы изначально пришли. 1 - из верхей, 2 - из правой, 3 - из нижней, 4 - из левой
	finish = 86, -- номер комнаты, к которой надо прийти. Номер берется из таблицы rooms
	win_delay = 300, -- задержка при победе
	cursors = 
	{
		"gui_cursors_cursor_maze_left", -- курсор влево
		"gui_cursors_cursor_maze_up", -- курсор вверх
		"gui_cursors_cursor_maze_right", -- курсор вправо
		"gui_cursors_cursor_maze_down" -- курсор вниз
	}, 
	darkness_delay = 400, -- сколько мелькает темнота при переходах между сценами
	compass_pos = sf.misc.FloatVector(10, 494),  -- позиция компаса
	compass_start_angle = math.pi*3/2, -- начальный поворот компаса
	doors =  -- двери в комнаты
	{ -- айдишники из dsfrontend
			"left_door", -- левая 
			"center_door", -- центральная
			"right_door" -- правая
	},
	correct = "scenes_chapter05_scene05_minigame_round_green",  -- отметка, что верно идем
	wrong = "scenes_chapter05_scene05_minigame_round_red", -- отметка, что идем не туда
	
	path = -- верный путь - для отметки на блокнотике пройденного пути. без первой комнаты
	{ -- room = какая комната,  pos - в каком месте вставлять картинку с кружочком или крестиком
	-- строка 1
		{room = 1, pos = sf.misc.FloatVector(34, 87)},
		{room = 2, pos = sf.misc.FloatVector(60, 87)},
	-- строка 2	
		{room = 3, pos = sf.misc.FloatVector(34, 111)},
		{room = 6, pos = sf.misc.FloatVector(58, 111)},
	-- строка 3
		{room = 12, pos = sf.misc.FloatVector(20, 136)},
		{room = 19, pos = sf.misc.FloatVector(46, 137)},
		{room = 24, pos = sf.misc.FloatVector(72, 136)},
	-- строка 4	
		{room = 29, pos = sf.misc.FloatVector(33, 161)},
		{room = 30, pos = sf.misc.FloatVector(58, 161)},
	-- строка 5	
		{room = 34, pos = sf.misc.FloatVector(34, 185)},
		{room = 39, pos = sf.misc.FloatVector(58, 185)},
	-- строка 6	
		{room = 40, pos = sf.misc.FloatVector(31, 210)},
		{room = 41, pos = sf.misc.FloatVector(56, 210)},
	-- строка 7	
		{room = 42, pos = sf.misc.FloatVector(28, 234)},
		{room = 47, pos = sf.misc.FloatVector(53, 235)},
	-- строка 8	
		{room = 50, pos = sf.misc.FloatVector(28, 258)},
		{room = 51, pos = sf.misc.FloatVector(53, 258)},
	-- строка 9	
		{room = 56, pos = sf.misc.FloatVector(28, 283)},
		{room = 57, pos = sf.misc.FloatVector(49, 283)},
	-- строка 10	
		{room = 58, pos = sf.misc.FloatVector(20, 307)},
		{room = 60, pos = sf.misc.FloatVector(40, 307)},
		{room = 68, pos = sf.misc.FloatVector(58, 308)},
	-- строка 11	
		{room = 71, pos = sf.misc.FloatVector(27, 332)},
		{room = 72, pos = sf.misc.FloatVector(49, 332)},
	-- строка 12	
		{room = 75, pos = sf.misc.FloatVector(23, 357)},
		{room = 76, pos = sf.misc.FloatVector(48, 357)},
	-- строка 13	
		{room = 77, pos = sf.misc.FloatVector(25, 381)},
		{room = 78, pos = sf.misc.FloatVector(46, 381)},
	-- строка 14	
		{room = 83, pos = sf.misc.FloatVector(12, 405)},
		{room = 84, pos = sf.misc.FloatVector(34, 406)},
		{room = 86, pos = sf.misc.FloatVector(53, 406)}
	},
	back_widget = "go_back", -- id картинки, на которой показывается, где показывать курсор "назад"
	trash = -- мусор, id из dsfrontend, для каждой комнаты задается, номера тех виджетов, которые не надо прятать
	{
		"trash01",  "trash02",  "trash03", 	"trash04", 	"trash05",
		"trash06", 	"trash07", 	"trash08", 	"trash09", 	"trash10",
		"trash11", 	"trash12", 	"trash13", 	"trash14", 	"trash15",
		"trash16", 	"trash17", 	"trash18", 	"trash19", 	"trash20",
		"trash21", 	"trash22", 	"trash23", 	"trash24", 	"trash25",
		"trash26", 	"trash27", 	"trash28" , 	"trash29"
	},
	rooms = 
	{
		{ -- комнатко1
			doors = { 87, 0, 2, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты. -1 = выход 
			trash = {1, 15, 16, 22, 27, 19, 12, 13} -- украшательства комнаты
		},
		{ -- комнатко2
			doors = { 1, 3, 4, 5}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {2, 5, 10, 14, 8, 17, 9} -- украшательства комнаты
		},
		{ -- комнатко 3
			doors = { 9, 6, 0, 2}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {3, 4, 11, 1} -- украшательства комнаты
		},
		{ -- комнатко4
			doors = { 2, 11, 7, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {2, 8, 17, 9} -- украшательства комнаты
		},
		{ -- комнатко5
			doors = {0, 2, 0, 8}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {10, 14, 8, 17, 9} -- украшательства комнаты
		},
		{ -- комнатко6
			doors = {10, 0, 12, 3}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {4, 11, 1} -- украшательства комнаты
		},
		{ -- комнатко7
			doors = {4, 0, 14, 13}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {5, 10, 14} -- украшательства комнаты
		},
		{ -- комнатко8
			doors = {0, 5, 17, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {1, 4} -- украшательства комнаты
		},
		{ -- комнатко9
			doors = {0, 10, 3, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {11, 10, 2} -- украшательства комнаты
		},
		{ -- комнатко10
			doors = {0, 18, 6, 9}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {16, 17, 4, 22, 23, 24, 25, 26} -- украшательства комнаты
		},
		{ -- комнатко11
			doors = {0, 0, 15, 4}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {} -- украшательства комнаты
		},
		{ -- комнатко12
			doors = {6, 19, 0, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {7, 1, 8, 17} -- украшательства комнаты
		},
		{ -- комнатко13
			doors = {0, 7, 0, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = { 22, 23, 24, 25} -- украшательства комнаты
		},
		{ -- комнатко14
			doors = {7, 0, 20, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = { 22, 23, 24, 25, 26} -- украшательства комнаты
		},
		{ -- комнатко15
			doors = { 11, 16, 0, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {} -- украшательства комнаты
		},
		{ -- комнатко16
			doors = {0, 0, 0, 15}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {7, 1, 8, 17, 18} -- украшательства комнаты
		},
		{ -- комнатко17
			doors = {8, 21, 22, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {7, 1, 8, 17} -- украшательства комнаты
		},
		{ -- комнатко18
			doors = {0, 23, 0, 10}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = { 22, 23, 24, 25, 26} -- украшательства комнаты
		},
		{ -- комнатко19
			doors = {25, 24, 0, 12}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {7, 1, 8, 17} -- украшательства комнаты
		},
		{ -- комнатко20
			doors = {0, 0, 0, 31}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {1, 8, 17, 18, 6} -- украшательства комнаты
		},
		{ -- комнатко21
			doors = {0, 0, 0, 17}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {7, 1, 8, 17} -- украшательства комнаты
		},
		{ -- комнатко22
			doors = {17, 0, 0, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {18, 19, 20, 21} -- украшательства комнаты
		},
		{ -- комнатко 23
			doors = {0, 0, 0, 18}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {1, 18, 19, 20, 21, 7} -- украшательства комнаты
		},
		{ -- комнатко 24
			doors = {0, 28, 29, 19}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {19, 20, 21} -- украшательства комнаты
		},
		{ -- комнатко 25
			doors = {0, 26, 19, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {} -- украшательства комнаты
		},
		{ -- комнатко 26
			doors = {0, 27, 0, 25}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {1} -- украшательства комнаты
		},
		{ -- комнатко 27
			doors = {0, 0, 28, 26}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {2, 4, 6, 7, 1} -- украшательства комнаты
		},
		{ -- комнатко 28
			doors = {27, 0, 0, 24}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = { 28, 23, 25, 19, 20, 21} -- украшательства комнаты
		},
		{ -- комнатко 29
			doors = {24, 0, 30, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {7, 1, 8, 17} -- украшательства комнаты
		},
		{ -- комнатко 30
			doors = {29, 32, 35, 34}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {28, 23, 25,  13} -- украшательства комнаты
		},
		{ -- комнатко 31
			doors = {37, 20, 0, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {25, 19, 20, 21, 12} -- украшательства комнаты
		},
		{ -- комнатко 32
			doors = {33, 0, 0, 30}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {7, 1, 8, 17} -- украшательства комнаты
		},
		{ -- комнатко 33
			doors = {0, 0, 32, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {10, 2, 11, 17} -- украшательства комнаты
		},
		{ -- комнатко 34
			doors = {0, 30, 0, 39}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {28, 23, 25, 19, 20, 21, 12, 13} -- украшательства комнаты
		},
		{ -- комнатко 35
			doors = {30, 0, 0, 36}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {19, 20, 21} -- украшательства комнаты
		},
		{ -- комнатко 36
			doors = {0, 35, 0, 37}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {27, 28, 23} -- украшательства комнаты
		},
		{ -- комнатко37
			doors = {38, 36, 31, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {27, 28, 23, 25, 19, 20, 21, 12, 13} -- украшательства комнаты
		},
		{ -- комнатко38
			doors = {0, 0, 37, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = { 23, 25, 19} -- украшательства комнаты
		},
		{ -- комнатко39
			doors = {0, 34, 40, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {20, 21, 12, 13} -- украшательства комнаты
		},
		{ -- комнатко40
			doors = {39, 0, 41, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {15, 16, 22, 27, 19} -- украшательства комнаты
		},
		{ -- комнатко41
			doors = {40, 42, 0, 43}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {27, 28, 23, 25, 19, 20, 21, 12, 13} -- украшательства комнаты
		},
		{ -- комнатко42
			doors = {0, 47, 0, 41}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {1, 15, 16, 22, 27, 19, 12, 13} -- украшательства комнаты
		},
		{ -- комнатко43
			doors = {0, 41, 44, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {25, 19, 20, 21, 12} -- украшательства комнаты
		},
		{ -- комнатко44
			doors = {43, 45, 0, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {27, 19, 12, 13} -- украшательства комнаты
		},
		{ -- комнатко45
			doors = {0, 0, 46, 44}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = { 28, 23, 25, 19} -- украшательства комнаты
		},
		{ -- комнатко46
			doors = {45, 0, 0, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {1, 18, 19, 20, 21, 7} -- украшательства комнаты
		},
		{ -- комнатко47
			doors = {0, 48, 50, 42}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {26, 8, 10, 2, 5} -- украшательства комнаты
		},
		{ -- комнатко48
			doors = {49, 0, 0, 47}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {18, 19, 20, 21} -- украшательства комнаты
		},
		{ -- комнатко49
			doors = {0, 0, 48, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {1, 18, 19, 20, 21, 7} -- украшательства комнаты
		},
		{ -- комнатко50
			doors = {47, 0, 51, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {1, 19, 20, 21} -- украшательства комнаты
		},
		{ -- комнатко51
			doors = {50, 52, 0, 56}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {19, 20, 21, 12, 13} -- украшательства комнаты
		},
		{ -- комнатко52
			doors = {0, 0, 53, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {27, 28, 23, 25, 19, 20, 21} -- украшательства комнаты
		},
		{ -- комнатко53
			doors = {52, 0, 54, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {27, 28, 23, 25, 19, 20, 21, 12, 13} -- украшательства комнаты
		},
		{ -- комнатко54
			doors = {53, 0, 0, 55}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {15, 21, 20, 19} -- украшательства комнаты
		},
		{ -- комнатко55
			doors = {0, 54, 0, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {1, 18, 19, 20, 21, 7} -- украшательства комнаты
		},
		{ -- комнатко56
			doors = {0, 51, 57, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {16, 22, 27, 19} -- украшательства комнаты
		},
		{ -- комнатко57
			doors = {56, 0, 0, 58}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {23, 25, 19, 20} -- украшательства комнаты
		},
		{ -- комнатко58
			doors = {0, 57, 59, 60}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {15, 21, 20, 19} -- украшательства комнаты
		},
		{ -- комнатко59
			doors = {58, 0, 61, 67}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {26, 8, 10, 2, 5} -- украшательства комнаты
		},
		{ -- комнатко60
			doors = {0, 58, 0, 68}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {14, 27, 28, 4, 23} -- украшательства комнаты
		},
		{ -- комнатко61
			doors = {59, 62, 0, 66}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {27, 28, 23, 25, 19, 20, 21, 12, 13} -- украшательства комнаты
		},
		{ -- комнатко62
			doors = {0, 0, 63, 61}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {26, 8, 10, 2, 5} -- украшательства комнаты
		},
		{ -- комнатко63
			doors = {62, 0, 0, 64}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {1, 15, 16, 22, 27, 19, 12, 13} -- украшательства комнаты
		},
		{ -- комнатко64
			doors = {0, 63, 0, 65}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {13, 14, 6, 9} -- украшательства комнаты
		},
		{ -- комнатко65
			doors = {66, 64, 0, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {1} -- украшательства комнаты
		},
		{ -- комнатко66
			doors = {67, 61, 65, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {27, 28, 4} -- украшательства комнаты
		},
		{ -- комнатко67
			doors = {0, 59, 66, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {14, 27, 28, 4, 23} -- украшательства комнаты
		},
		{ -- комнатко68
			doors = {69, 60, 70, 71}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {15, 21, 20, 19} -- украшательства комнаты
		},
		{ -- комнатко69
			doors = {0, 0, 68, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {10, 2, 11, 17} -- украшательства комнаты
		},
		{ -- комнатко70
			doors = {68, 0, 0, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {18, 1, 11, 17} -- украшательства комнаты
		},
		{ -- комнатко71
			doors = {0, 68, 0, 72}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {7, 1, 8, 17, 12, 13} -- украшательства комнаты
		},
		{ -- комнатко72
			doors = {0, 71, 75, 73}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {26, 8, 10, 2, 5} -- украшательства комнаты
		},
		{ -- комнатко73
			doors = {74, 72, 0, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {5, 16, 11, 10} -- украшательства комнаты
		},
		{ -- комнатко74
			doors = {0, 0, 73, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {3, 2, 4} -- украшательства комнаты
		},
		{ -- комнатко75
			doors = {72, 0, 76, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {13, 14, 6, 9} -- украшательства комнаты
		},
		{ -- комнатко76
			doors = {75, 0, 0, 77}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {14, 27, 28, 4, 23} -- украшательства комнаты
		},
		{ -- комнатко77
			doors = {0, 76, 79, 78}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {5, 16, 11, 10} -- украшательства комнаты
		},
		{ -- комнатко78
			doors = {83, 77, 0, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {4, 3} -- украшательства комнаты
		},
		{ -- комнатко79
			doors = {77, 80, 81, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {23, 25, 21} -- украшательства комнаты
		},
		{ -- комнатко80
			doors = {0, 0, 82, 79}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {7, 1, 8, 17} -- украшательства комнаты
		},
		{ -- комнатко81
			doors = {79, 82, 0, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {1, 15, 27, 28, 11} -- украшательства комнаты
		},
		{ -- комнатко82
			doors = {80, 0, 0, 81}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {21, 4, 6} -- украшательства комнаты
		},
		{ -- комнатко83
			doors = {0, 0, 78, 84}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {6, 15, 16, 14} -- украшательства комнаты
		},
		{ -- комнатко84
			doors = { 86, 83, 0, 85}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {26, 8, 10, 2, 5} -- украшательства комнаты
		},
		{ -- комнатко85
			doors = {0, 84, 0, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {12, 13, 14, 15, 19, 20, 22, 24} -- украшательства комнаты
		},
		{ -- комнатко 86
			doors = {0, 0, 84, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {1, 19, 20, 21, 7, 29} -- украшательства комнаты
		},
		{ -- комнатко 87
			doors = {-1, 0, 1, 0}, -- наличие дверей, начиная с верхней и по часовой стрелке. 0 - нет двери. иначе - номер комнаты.
			trash = {27, 28, 23, 25, 19, 20, 21, 12, 13} -- украшательства комнаты
		}		
	}
}

function self.Init(_owner)
	sminigames.SetStandartScriptName(_owner, walking_in_3d_maze)
	
	stop_sound("wind_01", 0)
	-- компас 
	self.timer = __create_timer("", "qe_level")

	self.start_delay = nil
	self.compass = __cast(_owner.GetWidget("compass_face", true), sf.gui.CClipWidget)
	self.compass.SetOffset(self.params.compass_pos.X, self.params.compass_pos.Y)
	self.compass_angle = self.params.compass_start_angle
	
	local widget = __cast(_owner.GetWidget("compass", true), sf.gui.CImageWidget)
	local off = sf.misc.FloatVector(widget.GetOffset().X, widget.GetOffset().Y)
	widget.SetOffset(off.X, off.Y + 20)
	if not is_object_in_inventory("Compass") then
		self.compass.AddFlags(sf.gui.CWidget.FlagHidden)
		widget.AddFlags(sf.gui.CWidget.FlagHidden)
	end

	self.darkness = __cast(_owner.GetWidget("darkness", true), sf.gui.CImageWidget)
	self.darkness.AddFlags(sf.gui.CWidget.FlagHidden)

	self.note = __cast(_owner.GetWidget("note", true), sf.gui.CClipWidget)
	self.note_visible = true
	if not (not is_hide("clip_open_secret") and is_hide("news_mini")) then
		self.note.AddFlags(sf.gui.CWidget.FlagHidden)
		self.note_visible = false
	end

	self.path_images = {} -- виджеты с отметками о комнатах
	self.next_in_path = 0 -- номер в массиве self.params.path, в который должны зайти следующим
	self.has_wrong_widgets = nil -- если у нас стоит красный кружок, его надо удалить :)
	
	self.SetCompassAngle(self.compass_angle)
	self.EnterRoom(_owner, self.params.start_room, self.params.start_direction)
	self.back = __cast(_owner.GetWidget(self.params.back_widget), sf.gui.CImageWidget)
	__assert(self.back, "Нет картинки для возврата в предыдущую комнату")
end 
-- поворачиваем стрелку на угол
function self.SetCompassAngle(_angle)
	self.compass_angle = _angle
	self.compass.SetRotation(sf.misc.MatrixRotation(_angle, self.compass.GetClip().GetViewSize().X/2, self.compass.GetClip().GetViewSize().Y/2))
end

-- войти в комнату номер _room с направления _dir
function self.EnterRoom(_owner, _room, _dir)
	--__message("вошли в ".._room)
	if _room <= 0 or _room > #self.params.rooms then
		-- вошли в начальную комнату
		minigame_window.CloseMinigame(0)
		return
	elseif _room == self.params.finish then
		self.start_win = self.timer.Get().GetTime()
	end
	if self.next_in_path > 0 and self.note_visible then
		local path = self.params.path[self.next_in_path]
		if path.room == _room then
			-- создаем зеленый кружочек и увеличиваем next_in_path
			local img = sf.gui.CImageWidget(self.params.correct, "", 0, 0)
			img.SetOffset(path.pos.X, path.pos.Y)
			
			if self.has_wrong_widgets then -- удаляем неверный виджет, если есть
				_owner.RemoveWidget(self.path_images[#self.path_images])
				table.remove(self.path_images, #self.path_images)
				self.has_wrong_widgets = nil
			end
			
			_owner.AddWidget(img)
			table.insert(self.path_images, img)
			self.next_in_path = self.next_in_path + 1
		elseif not self.has_wrong_widgets then
			local img = sf.gui.CImageWidget(self.params.wrong, "", 0, 0)
			img.SetOffset(path.pos.X, path.pos.Y)
			_owner.AddWidget(img)
			table.insert(self.path_images, img)
			self.has_wrong_widgets = true
		end
	else -- для входа в комнату из self.Init(_owner)
		self.next_in_path = 1
	end
	
	self.cur_room = 
	{ -- текущая комната
		num = _room,
		direction = _dir,
		doors = {}
	}
	-- формируем список дверей, которые мы видим при входе в комнату.
	-- так получается, что если смотреть слева направо, то сначала идут по порядку все двери с индексами бОльшими, чем значение направления
	-- потом опять же по порядку - с индексами от 1 до направления
	local info = self.params.rooms[_room].doors
	local need_doors = {}
	local i = self.cur_room.direction + 1
	local n = #info
	while i <= n do 
		table.insert(need_doors, info[i])
		i = i + 1
	end
	i = 1
	while i < _dir do 
		table.insert(need_doors, info[i])
		i = i + 1
	end
	-- получили список дверок (или их отсутствия), теперь можно формировать видимые объекты
	-- сначала прячем все двери и мусор
	local trash = self.params.trash 
	self.HideAllById(_owner, trash)
	local doors = self.params.doors 
	self.ShowAllById(_owner, doors)
	
	-- показываем теперь новый мусор и двери
	trash = self.params.rooms[_room].trash
	local tr_names = {}
	for i = 1, #trash do
		table.insert(tr_names, self.params.trash[trash[i]])
	end 
	self.ShowAllById(_owner, tr_names)
	doors = {}
	local doors_to_keep = {}
	for i = 1, #need_doors do
		if need_doors[i] ~= 0 then
				table.insert(doors, self.params.doors[i])				
		end
		local obj = {id = self.params.doors[i], room_in = need_doors[i]} -- id - айдишник двери, room_in - в какую комнату ведет эта дверь
		table.insert(doors_to_keep, obj)
	end
	self.HideAllById(_owner, doors)
	self.cur_room.doors = doors_to_keep
	
	self.darkness.RemFlags(sf.gui.CWidget.FlagHidden)
	self.start_delay = self.timer.Get().GetTime()
	--__message("start ="..self.start_delay)
end 
-- прячет все виджеты из переданного одномерного массива id из dsfrontend 
function self.HideAllById(_owner, _id_table)
	for ind,id in ipairs(_id_table) do
--		__message("прячем "..id)
		local img = __cast(_owner.GetWidget(id, true), sf.gui.CImageWidget)
		if img then
			-- нашли такой виджет
			img.AddFlags(sf.gui.CWidget.FlagHidden) 
		end
	end
end 
-- показывает все виджеты из переданного одномерного массива id из dsfrontend 
function self.ShowAllById(_owner, _id_table)
	for ind,id in ipairs(_id_table) do
	--	__message("показываем "..id)
		local img = __cast(_owner.GetWidget(id, true), sf.gui.CImageWidget)
		if img then
			-- нашли такой виджет
			img.RemFlags(sf.gui.CWidget.FlagHidden) 
		end
	end
end
-- проверяет, показывает ли куда-нить курсор 
function self.CheckCursorPosition(_owner, _pos)
	if self.cur_room then
		local doors = self.cur_room.doors
		for i = 1, #doors do
			if doors[i].room_in ~= 0 then
				local img = __cast(_owner.GetWidget(doors[i].id, true), sf.gui.CImageWidget)
				if img and misc.GetRect(img).IsContains(_pos.X, _pos.Y) 
						and sminigames.IsVisiblePoint(img.GetImage(), 
										_pos.X - img.GetOffset().X, 
										_pos.Y - img.GetOffset().Y) then
					return i
				end
			end
		end
		
		if self.back and misc.GetRect(self.back ).IsContains(_pos.X, _pos.Y) 
				and sminigames.IsVisiblePoint(self.back .GetImage(), 
								_pos.X - self.back .GetOffset().X, 
								_pos.Y - self.back .GetOffset().Y) then
			return #self.params.cursors
		end
	end
	return 0 -- внутри или не по бокам, а на диагонали
end
-- меняет курсор
function self.OnMouseMove(_owner, _pos, _keyboard_state, _broadcast)
	if self.start_delay or self.start_win then return true end
	local ind = self.CheckCursorPosition(_owner, _pos)
	if ind > 0 then
		local cursor = sf.gui.CImageWidget(self.params.cursors[ind], "cursor", 1, 0)
		if cursor then
			sf.gui.g_Cursor.Instance().SetCustomCursor(cursor.GetImage().GetTexture())
		end
	end
	
	return true
end 
function self.OnMouseDown(_owner, _pos, _button, _keyboard_state, _broadcast)
	if self.start_delay then return true end
	local cursor_position = self.CheckCursorPosition(_owner, _pos)
	
	if cursor_position > 0 then
		local door_index = 0
		local room = 0
		-- анализируем, куда заходим
		--__message("cursor="..cursor_position)
		if cursor_position == #self.params.cursors then
			-- пошли обратно
			door_index = self.cur_room.direction
			room = self.params.rooms[self.cur_room.num].doors[door_index]
		else
			room = self.cur_room.doors[cursor_position].room_in
			for i = 1, #self.params.rooms[self.cur_room.num].doors do
				--__message("i="..i.." self.params.rooms[i]="..self.params.doors[i].." room="..room)
				if self.params.rooms[self.cur_room.num].doors[i] == room then
					door_index = i
				end
			end
		end
		self.EnterRoom(_owner, room, self.GetDirection(door_index)) -- входим в комнату
	end
	
	return true
end 

-- вычисляет, с какого направления придем, если войдем в дверь номер _i
function self.GetDirection(_i)
	if _i == 1 then
		self.SetCompassAngle( math.pi/2)
		return 3
	elseif _i == 2 then
		self.SetCompassAngle( 0)
		return 4
	elseif _i == 3 then
		self.SetCompassAngle(- math.pi/2)
		return 1
	elseif _i == 4 then
		self.SetCompassAngle(- math.pi)
		return 2
	end
end 

function self.OnUpdate(_owner)
	if  sf.core.g_Application.GetTimeManager().GetTimer(_T("qe_level")).GetK() < 0.01 then
		return
	end
	
	if self.start_win then
		local now = self.timer.Get().GetTime()
		if now - self.start_win >= self.params.win_delay then
			_owner.SetGameResult(1)
			_owner.OnEndGame()
		end
	end
	if not self.start_delay then return end
	
	local now =  self.timer.Get().GetTime()

	if now - self.start_delay >= self.params.darkness_delay then
		self.darkness.AddFlags(sf.gui.CWidget.FlagHidden)
		self.start_delay = nil
	else
		local color = sf.graphics.Color(self.darkness.GetColor())
		local cur_time = (now - self.start_delay)/self.params.darkness_delay
		color.Alpha = 255*(1 - cur_time)
		self.darkness.SetColor(color)
	end
end 