diff --git a/game/modules/tome/data/general/grids/mountain.lua b/game/modules/tome/data/general/grids/mountain.lua index a2dcb27559736f3fb384da60fa5a821258d0e6a4..d172a962b99a459406dab997cf51c848b3d916a1 100644 --- a/game/modules/tome/data/general/grids/mountain.lua +++ b/game/modules/tome/data/general/grids/mountain.lua @@ -71,6 +71,7 @@ end newEntity{ define_as = "HARDMOUNTAIN_WALL", + type = "rockwall", subtype = "rock", name = "hard rocky mountain", image = "terrain/rocky_mountain.png", display = '#', color=colors.UMBER, back_color=colors.LIGHT_UMBER, always_remember = true, @@ -90,6 +91,7 @@ for i = 1, 6 do newEntity{ base="HARDMOUNTAIN_WALL", define_as = "HARDMOUNTAIN_W ----------------------------------------- newEntity{ define_as = "ROCKY_UP_WILDERNESS", + type = "floor", subtype = "rock", name = "exit to the worldmap", image = "terrain/rocky_ground.png", add_displays = {class.new{image="terrain/worldmap.png"}}, display = '<', color_r=255, color_g=0, color_b=255, always_remember = true, @@ -100,6 +102,7 @@ newEntity{ newEntity{ define_as = "ROCKY_UP8", + type = "floor", subtype = "rock", name = "way to the previous level", image = "terrain/rocky_ground.png", add_displays = {class.new{image="terrain/way_next_8.png"}}, display = '<', color_r=255, color_g=255, color_b=0, notice = true, @@ -108,6 +111,7 @@ newEntity{ } newEntity{ define_as = "ROCKY_UP2", + type = "floor", subtype = "rock", name = "way to the previous level", image = "terrain/rocky_ground.png", add_displays = {class.new{image="terrain/way_next_2.png"}}, display = '<', color_r=255, color_g=255, color_b=0, notice = true, @@ -116,6 +120,7 @@ newEntity{ } newEntity{ define_as = "ROCKY_UP4", + type = "floor", subtype = "rock", name = "way to the previous level", image = "terrain/rocky_ground.png", add_displays = {class.new{image="terrain/way_next_4.png"}}, display = '<', color_r=255, color_g=255, color_b=0, notice = true, @@ -124,6 +129,7 @@ newEntity{ } newEntity{ define_as = "ROCKY_UP6", + type = "floor", subtype = "rock", name = "way to the previous level", image = "terrain/rocky_ground.png", add_displays = {class.new{image="terrain/way_next_6.png"}}, display = '<', color_r=255, color_g=255, color_b=0, notice = true, @@ -133,6 +139,7 @@ newEntity{ newEntity{ define_as = "ROCKY_DOWN8", + type = "floor", subtype = "rock", name = "way to the next level", image = "terrain/rocky_ground.png", add_displays = {class.new{image="terrain/way_next_8.png"}}, display = '>', color_r=255, color_g=255, color_b=0, notice = true, @@ -141,6 +148,7 @@ newEntity{ } newEntity{ define_as = "ROCKY_DOWN2", + type = "floor", subtype = "rock", name = "way to the next level", image = "terrain/rocky_ground.png", add_displays = {class.new{image="terrain/way_next_2.png"}}, display = '>', color_r=255, color_g=255, color_b=0, notice = true, @@ -149,6 +157,7 @@ newEntity{ } newEntity{ define_as = "ROCKY_DOWN4", + type = "floor", subtype = "rock", name = "way to the next level", image = "terrain/rocky_ground.png", add_displays = {class.new{image="terrain/way_next_4.png"}}, display = '>', color_r=255, color_g=255, color_b=0, notice = true, @@ -157,6 +166,7 @@ newEntity{ } newEntity{ define_as = "ROCKY_DOWN6", + type = "floor", subtype = "rock", name = "way to the next level", image = "terrain/rocky_ground.png", add_displays = {class.new{image="terrain/way_next_6.png"}}, display = '>', color_r=255, color_g=255, color_b=0, notice = true, diff --git a/game/modules/tome/data/general/grids/slime.lua b/game/modules/tome/data/general/grids/slime.lua index e5876cc9fbcc3d81a37bdc4cd001de1131458af6..8d0eee136c081df993b1a637c0f4c404e2840101 100644 --- a/game/modules/tome/data/general/grids/slime.lua +++ b/game/modules/tome/data/general/grids/slime.lua @@ -51,7 +51,8 @@ for i = 1, 5 do newEntity{ base="SLIME_WALL", define_as = "SLIME_WALL"..i, image -- Level changers ----------------------------------------- newEntity{ - define_as = "SLIME_UP", image = "terrain/slime/slime_floor_01.png", add_mos = {{image="terrain/slime/slime_stairs_up_left_01.png"}}, + define_as = "SLIME_UP", image = "terrain/slime/slime_floor_01.png", + add_displays = {class.new{image="terrain/slime/slime_stairs_up_left_01.png"}}, type = "floor", subtype = "slime", name = "previous level", display = '<', color=colors.LIGHT_GREEN, back_color=colors.GREEN, @@ -62,7 +63,8 @@ newEntity{ } newEntity{ - define_as = "SLIME_DOWN", image = "tterrain/slime/slime_floor_01.png", add_mos = {{image="terrain/slime/slime_stair_down_01.png"}}, + define_as = "SLIME_DOWN", image = "tterrain/slime/slime_floor_01.png", + add_displays = {class.new{image="terrain/slime/slime_stair_down_01.png"}}, type = "floor", subtype = "slime", name = "next level", display = '>', color=colors.LIGHT_GREEN, back_color=colors.GREEN, @@ -84,7 +86,7 @@ newEntity{ notice = true, always_remember = true, block_sight = true, --- nice_editer = slime_wall_editer, + nice_editer = slime_wall_editer, is_door = true, door_opened = "SLIME_DOOR_OPEN", dig = "FLOOR", @@ -95,7 +97,7 @@ newEntity{ name = "open slime door", display = "'", color=colors.LIGHT_GREEN, back_color=colors.GREEN, always_remember = true, --- nice_editer = slime_wall_editer, + nice_editer = slime_wall_editer, is_door = true, door_closed = "SLIME_DOOR", } diff --git a/game/modules/tome/data/zones/infinite-dungeon/grids.lua b/game/modules/tome/data/zones/infinite-dungeon/grids.lua index 7eb01835ba74dad271e2c625f4f3191fa1be9a2b..4a13bce258376921cca5268ba92b7c2b03dfa93c 100644 --- a/game/modules/tome/data/zones/infinite-dungeon/grids.lua +++ b/game/modules/tome/data/zones/infinite-dungeon/grids.lua @@ -50,7 +50,7 @@ newEntity{ newEntity{ define_as = "UNDERGROUND_ROCK", type = "wall", subtype = "underground", - name = "huge loose rock", image = "terrain/underground_floor.png", add_mos = {{image="terrain/huge_rock.png"}}, + name = "huge loose rock", image = "terrain/underground_floor.png", add_mos = {{image="terrain/maze_rock.png"}}, display = '+', color=colors.GREY, back_color={r=44,g=95,b=43}, notice = true, always_remember = true, @@ -63,7 +63,7 @@ newEntity{ newEntity{ define_as = "CRYSTAL_ROCK", type = "wall", subtype = "crystal", - name = "huge loose rock", image = "terrain/crystal_floor1.png", add_mos = {{image="terrain/huge_rock.png"}}, + name = "huge loose rock", image = "terrain/crystal_floor1.png", add_mos = {{image="terrain/maze_rock.png"}}, display = '+', color=colors.GREY, back_color={r=44,g=95,b=43}, notice = true, always_remember = true, @@ -76,7 +76,7 @@ newEntity{ newEntity{ define_as = "DESERT_ROCK", type = "wall", subtype = "sand", - name = "huge loose rock", image = "terrain/sandfloor.png", add_mos = {{image="terrain/huge_rock.png"}}, + name = "huge loose rock", image = "terrain/sandfloor.png", add_mos = {{image="terrain/maze_rock.png"}}, display = '+', color=colors.GREY, back_color={r=44,g=95,b=43}, notice = true, always_remember = true, @@ -86,10 +86,23 @@ newEntity{ dig = "SAND", } +newEntity{ + define_as = "SAND_ROCK", + type = "wall", subtype = "sand", + name = "huge loose rock", image = "terrain/sand.png", add_mos = {{image="terrain/maze_rock.png"}}, + display = '+', color={r=203,g=189,b=72}, back_color={r=93,g=79,b=22}, + notice = true, + always_remember = true, + block_sight = true, + is_door = true, + door_opened = "UNDERGROUND_SAND", + dig = "UNDERGROUND_SAND", +} + newEntity{ define_as = "CAVE_ROCK", type = "wall", subtype = "grass", - name = "huge loose rock", image = "terrain/cave/cave_floor_1_01.png", add_mos = {{image="terrain/huge_rock.png"}}, + name = "huge loose rock", image = "terrain/cave/cave_floor_1_01.png", add_mos = {{image="terrain/maze_rock.png"}}, display = '+', color=colors.GREY, back_color={r=44,g=95,b=43}, notice = true, always_remember = true, @@ -112,6 +125,47 @@ newEntity{ dig = "JUNGLE_GRASS", } +newEntity{ + define_as = "AUTUMN_ROCK", + type = "wall", subtype = "autumn_grass", + name = "huge loose rock", image = "terrain/grass/autumn_grass_main_01.png", add_mos = {{image="terrain/huge_rock.png"}}, + display = '+', color=colors.GREY, back_color={r=44,g=95,b=43}, + notice = true, + always_remember = true, + block_sight = true, + is_door = true, + door_opened = "AUTUMN_GRASS", + dig = "AUTUMN_GRASS", +} + +newEntity{ + define_as = "LAVA_ROCK", + type = "wall", subtype = "lava", + name = "huge loose rock", image = "terrain/lava_floor.png", add_mos = {{image="terrain/maze_rock.png"}}, +-- display = '+', color=colors.GREY, back_color={r=44,g=95,b=43}, + display = '+', color=colors.GREY, back_color=colors.DARK_GREY, + shader = "lava", + notice = true, + always_remember = true, + block_sight = true, + is_door = true, + door_opened = "LAVA_FLOOR_FAKE", + dig = "LAVA_FLOOR_FAKE", +} + +newEntity{ define_as = "BURNT_DOOR", + type = "wall", subtype = "burnt", + name='burnt passage', + display='.', color=colors.UMBER, back_color=colors.DARK_GREY, image="terrain/grass_burnt1.png", + add_mos = {{image="terrain/burnt_floor_deco6.png"},{image="terrain/trees/small_burned_tree_01_trunk.png", display_w=0.5, display_h=.5, display_x=0.5, display_y=0.5}, {image="terrain/trees/burned_tree_01_trunk.png", display_w=0.5, display_h=.5, display_x=0, display_y=0.5}, {image="terrain/trees/small_burned_tree_01_trunk.png", display_w=0.5, display_h=.5, display_x=0.5, display_y=0}, {image="terrain/trees/burned_tree_01_trunk.png", display_w=0.5, display_h=.5, display_x=0, display_y=0}}, + notice = true, + always_remember = true, + block_sight = true, + is_door = true, + door_opened = "BURNT_GROUND", + dig = "BURNT_GROUND", +} + -- add snowy door newEntity{ define_as = "SNOWY_GRASS_2", @@ -147,9 +201,38 @@ for i = 1, 30 do newEntity(class:makeNewTrees({base="SNOWY_TREE_2", define_as = "SNOWY_TREE_2"..i, image = "terrain/grass/snowy_grass_main_01.png"}, snowy_treesdef)) end +newEntity{ define_as = "ROCKY_SNOWY_DOOR", + type = "wall", subtype = "rock", + name='snowy passage', + display= '+', color=colors.UMBER, back_color=colors.LIGHT_UMBER, + image = "terrain/rocky_ground.png", + add_mos = {{image="terrain/icecave/icecave_rock_2_01.png", display_w=1, display_h=1.5, display_x=0, display_y=-0.5}, {image="terrain/icecave/icecave_rock_3_01.png", display_w=1, display_h=1.5, display_x=0, display_y=-0.5}}, + notice = true, + always_remember = true, + block_sight = true, + is_door = true, + door_opened = "ROCKY_GROUND", + dig = "ROCKY_GROUND", +} + +newEntity{ define_as = "SNOWY_DOOR", + type = "wall", subtype = "snowy_grass", + name='snowy passage', + display= '+', color=colors.LIGHT_GREEN, back_color={r=44,g=95,b=43}, + image = "terrain/grass/snowy_grass_main_01.png", + add_mos = {{image="terrain/trees/narrow_cypress_trunk.png", display_w=1, display_h=1, display_x=-0.25, display_y=-0}, {image="terrain/trees/narrow_cypress_trunk.png", display_w=1, display_h=1, display_x=0.25, display_y=-0}, {image="terrain/icecave/icecave_rock_5_01.png", display_w=1.5, display_h=1.5, display_x=-.5, display_y=-0.5}, {image="terrain/trees/narrow_cypress_foliage_winter_01.png", display_w=1, display_h=1, display_x=-0.25, display_y=-0.25}, {image="terrain/trees/narrow_cypress_foliage_winter_02.png", display_w=1, display_h=1, display_x=0.25, display_y=-0.25}}, + notice = true, + always_remember = true, + block_sight = true, + is_door = true, + door_opened = "SNOWY_GRASS", + dig = "SNOWY_GRASS", +} + newEntity{ define_as = "RIFT2", - name = "Temporal Rift", add_mos={{image="terrain/demon_portal2.png"}}, + name = "Temporal Rift", + add_displays = {class.new{image="terrain/demon_portal2.png"}}, display = '&', color_r=255, color_g=0, color_b=220, back_color=colors.VIOLET, notice = true, always_remember = true, @@ -247,7 +330,8 @@ newEntity{ base = "WATER_DOOR_OPEN_FAKE", define_as = "WATER_DOOR_OPEN_VERT_FAKE newEntity{ define_as = "WATER_DOWN_FAKE", - image = "terrain/underwater/subsea_floor_02.png", add_mos = {{image="terrain/underwater/subsea_stair_down_03_64.png"}}, + image = "terrain/underwater/subsea_floor_02.png", + add_displays = {class.new{image="terrain/underwater/subsea_stair_down_03_64.png"}}, name = "next level", display = '>', color_r=255, color_g=255, color_b=0, notice = true, @@ -287,7 +371,8 @@ for i = 1, 6 do newEntity{ base="LAVA_WALL_FAKE", define_as = "LAVA_WALL_FAKE".. newEntity{ define_as = "LAVA_DOWN_FAKE", type = "floor", subtype = "lava", - name = "next level", image = "terrain/lava_floor.png", add_mos = {{image="terrain/stair_down.png"}}, + name = "next level", image = "terrain/lava_floor.png", + add_displays = {class.new{image="terrain/stair_down.png"}}, display = '.', color=colors.RED, back_color=colors.DARK_GREY, shader = "lava", nice_tiler = { method="replace", base={"LAVA_FLOOR_FAKE", 100, 1, 16}}, diff --git a/game/modules/tome/data/zones/infinite-dungeon/zone.lua b/game/modules/tome/data/zones/infinite-dungeon/zone.lua index 387690aded7aa444ea3598259b6cab123b37c044..f553f03c7625a3d7fe895384c5b549f4b010b350 100644 --- a/game/modules/tome/data/zones/infinite-dungeon/zone.lua +++ b/game/modules/tome/data/zones/infinite-dungeon/zone.lua @@ -99,7 +99,7 @@ return { }, }, alter_level_data = function(zone, lev, data) -print("Infinite Dungeon: alter_level_data", lev, "data:", data) table.print_shallow(data) +--print("Infinite Dungeon: alter_level_data", lev, "data:", data) table.print_shallow(data) -- Randomize the size of the dungeon, increasing it slightly as the game progresses. local size = 60 + math.floor(30*lev/(lev + 50)) -- from 60 to 90, 70 @ level 25, 75 @ level 50 @@ -189,25 +189,29 @@ print("Infinite Dungeon: alter_level_data", lev, "data:", data) table.print_shal {id_grids_name="tree", floor="GRASS", wall="TREE", door="GRASS_ROCK", down="GRASS_DOWN2", desc="sylvan"}, {id_grids_name="underground", floor="UNDERGROUND_FLOOR", wall="UNDERGROUND_TREE", door="UNDERGROUND_ROCK", down="UNDERGROUND_LADDER_DOWN", desc="subterranean"}, {id_grids_name="crystals", floor="CRYSTAL_FLOOR", wall={"CRYSTAL_WALL","CRYSTAL_WALL2","CRYSTAL_WALL3","CRYSTAL_WALL4","CRYSTAL_WALL5","CRYSTAL_WALL6","CRYSTAL_WALL7","CRYSTAL_WALL8","CRYSTAL_WALL9","CRYSTAL_WALL10","CRYSTAL_WALL11","CRYSTAL_WALL12","CRYSTAL_WALL13","CRYSTAL_WALL14","CRYSTAL_WALL15","CRYSTAL_WALL16","CRYSTAL_WALL17","CRYSTAL_WALL18","CRYSTAL_WALL19","CRYSTAL_WALL20",}, door="CRYSTAL_ROCK", down="CRYSTAL_LADDER_DOWN", desc="crystalline"}, - {id_grids_name="sand", floor="UNDERGROUND_SAND", wall="SANDWALL", door="UNDERGROUND_SAND", down="SAND_LADDER_DOWN", desc="sandy"}, + {id_grids_name="sand", floor="UNDERGROUND_SAND", wall="SANDWALL", door="SAND_ROCK", down="SAND_LADDER_DOWN", desc="sandy"}, {id_grids_name="desert", floor="SAND", wall="PALMTREE", door="DESERT_ROCK", down="SAND_DOWN2", desc="arrid"}, {id_grids_name="slime", floor="SLIME_FLOOR", wall="SLIME_WALL", door="SLIME_DOOR", down="SLIME_DOWN", desc="slimey"}, {id_grids_name="jungle", floor="JUNGLE_GRASS", wall="JUNGLE_TREE", door="JUNGLE_ROCK", down="JUNGLE_GRASS_DOWN2", desc="humid, tropical"}, {id_grids_name="cave", floor="CAVEFLOOR", wall="CAVEWALL", door="CAVE_ROCK", down="CAVE_LADDER_DOWN", desc="unhewn"}, - {id_grids_name="burntland", floor="BURNT_GROUND", wall="BURNT_TREE", door="BURNT_GROUND", down="BURNT_DOWN6", desc="burned"}, + {id_grids_name="burntland", floor="BURNT_GROUND", wall="BURNT_TREE", door="BURNT_DOOR", down="BURNT_DOWN6", desc="burned"}, {id_grids_name="mountain", floor="ROCKY_GROUND", wall="MOUNTAIN_WALL", door="DOOR", down="ROCKY_DOWN2", desc="mountainous"}, - {id_grids_name="mountain_forest", floor="ROCKY_GROUND", wall="ROCKY_SNOWY_TREE", door="ROCKY_GROUND", down="ROCKY_DOWN2", desc="alpine"}, - {id_grids_name="snowy_forest", floor="SNOWY_GRASS_2", wall="SNOWY_TREE_2", door="SNOWY_GRASS_2", down="snowy_DOWN2", desc="cold, wooded"}, + {id_grids_name="mountain_forest", floor="ROCKY_GROUND", wall="ROCKY_SNOWY_TREE", door="ROCKY_SNOWY_DOOR", down="ROCKY_DOWN2", desc="alpine"}, + {id_grids_name="snowy_forest", floor="SNOWY_GRASS_2", wall="SNOWY_TREE_2", door="SNOWY_DOOR", down="snowy_DOWN2", desc="cold, wooded"}, {id_grids_name="temporal_void", floor="VOID", wall="SPACETIME_RIFT2", door="VOID", down="RIFT2", desc="empty"}, {id_grids_name="water", floor="WATER_FLOOR_FAKE", wall="WATER_WALL_FAKE", door="WATER_DOOR_FAKE", down="WATER_DOWN_FAKE", desc="flooded"}, - {id_grids_name="lava", floor="LAVA_FLOOR_FAKE", wall="LAVA_WALL_FAKE", door="LAVA_FLOOR_FAKE", down="LAVA_DOWN_FAKE", desc="molten"}, - {id_grids_name="autumn_forest", floor="AUTUMN_GRASS", wall="AUTUMN_TREE", door="AUTUMN_GRASS", down="AUTUMN_GRASS_DOWN2", desc="temperate"}, + {id_grids_name="lava", floor="LAVA_FLOOR_FAKE", wall="LAVA_WALL_FAKE", door="LAVA_ROCK", down="LAVA_DOWN_FAKE", desc="molten"}, + {id_grids_name="autumn_forest", floor="AUTUMN_GRASS", wall="AUTUMN_TREE", door="AUTUMN_ROCK", down="AUTUMN_GRASS_DOWN2", desc="temperate"}, } zone:triggerHook{"InfiniteDungeon:getGrids", grids=vgrids} -- select layout and grids for the level from those set previously (default 1) local layoutN = ((zone.layoutN or 1) - 1)%#layouts + 1 local vgridN = ((zone.vgridN or 1) - 1)%#vgrids + 1 + +--vgridN = 12 -- debugging +--layoutN = 6 -- debugging + layout = layouts[layoutN] vgrid = vgrids[vgridN] print("[Infinite Dungeon] using zone layout #", layoutN, layout.id_layout_name) table.print(layout) @@ -221,7 +225,7 @@ print("Infinite Dungeon: alter_level_data", lev, "data:", data) table.print_shal -- for i = 1, 2 do -- !debugging layoutN = rng.normal(layoutN + 1, 2)%#layouts + 1 --statistically rotate through all sets vgridN = rng.normal(vgridN + 1, 2)%#vgrids + 1 -game.log("#LIGHT_BLUE# selected alternate down variables[%s]: %s, %s", i, layouts[layoutN].id_layout_name, vgrids[vgridN].id_grids_name) -- debuggins +game.log("#LIGHT_BLUE# selected alternate down variables[%s]: %s, %s", i, layouts[layoutN].id_layout_name, vgrids[vgridN].id_grids_name) -- debugging data.alternate_exit[i] = {layoutN=layoutN, layout=layouts[layoutN], vgridN=vgridN, grids=vgrids[vgridN]} end @@ -254,7 +258,7 @@ game.log("#LIGHT_BLUE# selected alternate down variables[%s]: %s, %s", i, layout -- Scale enemy count according to map or with map area local enemy_count = layout.enemy_count or math.ceil(vx * vy *34/4900) -- avg: 25 @ 60x60, 34 @ 70x70, 57 @ 90x90 data.generator.actor.nb_npc = {enemy_count-5, enemy_count+5} -game.log("#LIGHT_BLUE#Setting up variable map (%s, %s) (%dw, %dh, %s rooms, %s enemies) data:%s", data.generator.map.id_layout_name, data.generator.map.id_grids_name, vx, vy, enemy_count, layout.nb_rooms, data) -- debugging +game.log("#LIGHT_BLUE#Setting up variable map (%s, %s) (%dw, %dh, %s rooms, %s enemies) data:%s", data.generator.map.id_layout_name, data.generator.map.id_grids_name, vx, vy, layout.nb_rooms, enemy_count, data) -- debugging print(("[Infinite Dungeon] alter_level_data: (%dw, %dh) %s rooms, %d enemies, layout:%s, grids:%s"):format(vx, vy, layout.nb_rooms, enemy_count, data.generator.map.id_layout_name, data.generator.map.id_grids_name)) game.state:infiniteDungeonChallenge(zone, lev, data, data.generator.map.id_layout_name, vgrid.id_grids_name) end, @@ -308,14 +312,22 @@ game.log("#LIGHT_BLUE# Adding stair guard to alternate exit [%d] at (%d, %d)", i end end - if x and y and ex and ex.change_level then + if x and y and ex and ex.change_level then -- update the exit tile game.log("#LIGHT_BLUE# Adding Alternate exit[%d] [%s, %s] at {%d, %d)", i, ae.layout.id_layout_name, ae.grids.id_grids_name, x, y) table.print(ae) -- debugging ex = ex:clone() ex.show_tooltip = true ex.desc = (ex.desc or "")..("\nAppears to lead to:\n%s%s"):format(ae.grids.desc or "indistinct", ae.layout.desc or "continuation of the Infinite Dungeon") -- make sure the exit is clearly marked (in case the nice tiler hides it) - ex.add_displays = ex.add_displays or {} ex.add_displays[#ex.add_displays+1] = marker + if ex.add_displays then -- migrate graphics up, but below actor and nice tiler 3d z levels + for i, d in ipairs(ex.add_displays) do + d.z = math.min(9, (d.z or 0) + 6) + end + else ex.add_displays = {} + end + ex.add_displays[#ex.add_displays+1] = marker -- add extra marker just in case + ex.desc = (ex.desc or "")..("\n[Alternate Exit[%d] (%s[%s], %s[%s])]"):format(i, ae.grids.id_grids_name, ae.vgridN, ae.layout.id_layout_name, ae.layoutN) -- debugging + ex.layoutN, ex.vgridN = ae.layoutN, ae.vgridN ex.change_level_check = function(self, player) game.zone.layoutN = self.layoutN