public DungeonRoomEditorForm(ref XmlDocument general_rooms, string general_paths)
        {
            InitializeComponent();

            roomwidth  = 5;
            roomheight = 5;

            doodads                   = new List <doodad_type>();
            doodad_coords             = new List <matrix_coord>();
            doodad_appearance_chances = new List <int>();

            monsters                   = new List <monster_type>();
            monster_coords             = new List <matrix_coord>();
            monster_appearance_chances = new List <int>();

            general_room_list = general_rooms;
            general_room_path = general_paths;

            current_brush_mode = brush_mode.None;

            general_room_list = general_rooms;
            general_room_path = general_paths;

            reset_picture_and_matrix();
        }
        private void picture_brush_picture_Click(object sender, EventArgs e)
        {
            PictureBox pb      = (PictureBox)sender;
            string     tagData = pb.Tag.ToString();

            current_brush_mode = brush_mode.Tiles;

            switch (tagData)
            {
            case "StoneFloor":
                current_tile     = tile_type.Stone_Floor;
                current_tile_img = stn_floor_brush.Image;
                break;

            case "StoneWall":
                current_tile     = tile_type.Stone_Wall;
                current_tile_img = stn_wall_brush.Image;
                break;

            case "Gravel":
                current_tile     = tile_type.Gravel;
                current_tile_img = gravel_brush.Image;
                break;

            case "DirtFloor":
                current_tile     = tile_type.Dirt_Floor;
                current_tile_img = dirt_floor_brush.Image;
                break;

            case "DirtWall":
                current_tile     = tile_type.Dirt_Wall;
                current_tile_img = dirt_wall_brush.Image;
                break;

            case "ShallowWater":
                current_tile     = tile_type.Shallow_Water;
                current_tile_img = shallow_water_brush.Image;
                break;

            case "DeepWater":
                current_tile     = tile_type.Deep_Water;
                current_tile_img = deep_water_brush.Image;
                break;

            case "ShallowBlood":
                current_tile     = tile_type.Shallow_Blood;
                current_tile_img = shallow_blood_brush.Image;
                break;

            case "VoidTile":
                current_tile     = tile_type.Void;
                current_tile_img = void_tile_brush.Image;
                break;
            }
        }
        private void doodad_brush_picture_Click(object sender, EventArgs e)
        {
            PictureBox pb = (PictureBox)sender;

            c_doodad_name      = pb.Tag.ToString();
            current_brush_mode = brush_mode.Doodads;

            switch (c_doodad_name)
            {
            case "BloodSplat":
                current_doodad     = doodad_type.Blood_Splatter;
                current_doodad_img = blood_splatter_brush.Image;
                break;

            case "Armor":
                current_doodad     = doodad_type.Armor_Suit;
                current_doodad_img = armor_suit_brush.Image;
                break;

            case "DestroyedArmor":
                current_doodad     = doodad_type.Destroyed_Armorsuit;
                current_doodad_img = destroyed_armor_brush.Image;
                break;

            case "Cage":
                current_doodad     = doodad_type.Cage;
                current_doodad_img = cage_brush.Image;
                break;

            case "Altar":
                current_doodad     = doodad_type.Altar;
                current_doodad_img = altar_brush.Image;
                break;

            case "CorpsePile":
                current_doodad     = doodad_type.Corpse_Pile;
                current_doodad_img = corpse_pile_brush.Image;
                break;

            case "Bookshelf":
                current_doodad     = doodad_type.Bookshelf;
                current_doodad_img = bookshelf_brush.Image;
                break;

            case "DestroyedBookshelf":
                current_doodad     = doodad_type.Destroyed_Bookshelf;
                current_doodad_img = destroyed_bookshelf_brush.Image;
                break;
            }
        }
        private void monster_brush_picture_Click(object sender, EventArgs e)
        {
            PictureBox pb = (PictureBox)sender;

            c_monster_name     = pb.Tag.ToString();
            current_brush_mode = brush_mode.Monsters;

            switch (c_monster_name)
            {
            case "Zombie":
                current_monster     = monster_type.Zombie;
                current_monster_img = zombie_brush.Image;
                break;

            case "ZombieFanatic":
                current_monster     = monster_type.Zombie_Fanatic;
                current_monster_img = zombie_fanatic_brush.Image;
                break;

            case "GoreHound":
                current_monster     = monster_type.Gore_Hound;
                current_monster_img = gore_hound_brush.Image;
                break;

            case "GoreWolf":
                current_monster     = monster_type.Gore_Wolf;
                current_monster_img = gore_wolf_brush.Image;
                break;

            case "Necromancer":
                current_monster     = monster_type.Necromancer;
                current_monster_img = necro_brush.Image;
                break;

            case "Boneyard":
                current_monster     = monster_type.Boneyard;
                current_monster_img = boneyard_brush.Image;
                break;

            case "ArmoredSkel":
                current_monster     = monster_type.Armored_Skeleton;
                current_monster_img = arm_skel_brush.Image;
                break;

            case "Skel":
                current_monster     = monster_type.Skeleton;
                current_monster_img = skel_brush.Image;
                break;

            case "VoidWraith":
                current_monster     = monster_type.Void_Wraith;
                current_monster_img = void_wraith_brush.Image;
                break;

            case "Ghost":
                current_monster    = monster_type.Ghost;
                current_doodad_img = ghost_brush.Image;
                break;

            case "RedKnight":
                current_monster     = monster_type.Red_Knight;
                current_monster_img = red_knight_brush.Image;
                break;

            case "HollowKnight":
                current_monster     = monster_type.Hollow_Knight;
                current_monster_img = hollow_knight_brush.Image;
                break;
            }
        }
        public DungeonRoomEditorForm(ref XmlDocument general_rooms, string general_paths)
        {
            InitializeComponent();

            roomwidth = 5;
            roomheight = 5;

            hall_anchors = new List<matrix_coord>();
            boss_spawns = new List<matrix_coord>();

            doodads = new List<doodad_type>();
            doodad_coords = new List<matrix_coord>();
            doodad_appearance_chances = new List<int>();

            monsters = new List<monster_type>();
            monster_coords = new List<matrix_coord>();
            monster_appearance_chances = new List<int>();

            monster_families = new List<monster_family_type>();
            m_family_coords = new List<matrix_coord>();
            m_family_appearance_chances = new List<int>();

            general_room_list = general_rooms;
            general_room_path = general_paths;

            current_brush_mode = brush_mode.None;

            general_room_list = general_rooms;
            general_room_path = general_paths;

            reset_picture_and_matrix();
        }
        //Click events
        private void picture_brush_picture_Click(object sender, EventArgs e)
        {
            PictureBox pb = (PictureBox)sender;
            string tagData = pb.Tag.ToString();
            current_brush_mode = brush_mode.Tiles;
            current_tile_img = pb.Image;

            switch (tagData)
            {
                case "StoneFloor":
                    current_tile = tile_type.Stone_Floor;
                    break;
                case "StoneWall":
                    current_tile = tile_type.Stone_Wall;
                    break;
                case "Gravel":
                    current_tile = tile_type.Gravel;
                    break;
                case "DirtFloor":
                    current_tile = tile_type.Dirt_Floor;
                    break;
                case "DirtWall":
                    current_tile = tile_type.Dirt_Wall;
                    break;
                case "ShallowWater":
                    current_tile = tile_type.Shallow_Water;
                    break;
                case "DeepWater":
                    current_tile = tile_type.Deep_Water;
                    break;
                case "ShallowBlood":
                    current_tile = tile_type.Shallow_Blood;
                    break;
                case "VoidTile":
                    current_tile = tile_type.Void;
                    break;
                case "Shallow_Sewage":
                    current_tile = tile_type.Shallow_Sewage;
                    break;
                case "Deep_Sewage":
                    current_tile = tile_type.Deep_Sewage;
                    break;
                case "Entrance":
                    current_tile = tile_type.Entrance;
                    break;
                case "Exit":
                    current_tile = tile_type.Exit;
                    break;
                case "RubbleFloor":
                    current_tile = tile_type.Rubble_Floor;
                    break;
            }
        }
        private void monster_family_brush_picture_Click(object sender, EventArgs e)
        {
            PictureBox pb = (PictureBox)sender;
            c_monster_family_name = pb.Tag.ToString();
            current_brush_mode = brush_mode.Monster_Family;
            current_m_family_img = pb.Image;

            switch (c_monster_family_name)
            {
                case "Skeleton":
                    c_monster_family = monster_family_type.Skeleton;
                    break;
                case "Large_Undead":
                    c_monster_family = monster_family_type.Large_Undead;
                    break;
                case "Mimic":
                    c_monster_family = monster_family_type.Mimic;
                    break;
                case "Goredog":
                    c_monster_family = monster_family_type.Goredog;
                    break;
                case "Grendel":
                    c_monster_family = monster_family_type.Grendel;
                    break;
                case "Ghost":
                    c_monster_family = monster_family_type.Ghost;
                    break;
                case "Necromancer":
                    c_monster_family = monster_family_type.Necromancer;
                    break;
                case "SpiritKnight":
                    c_monster_family = monster_family_type.SpiritKnight;
                    break;
                case "Spirit":
                    c_monster_family = monster_family_type.Spirit;
                    break;
                case "Zombie":
                    c_monster_family = monster_family_type.Zombie;
                    break;
            }
        }
        private void monster_brush_picture_Click(object sender, EventArgs e)
        {
            PictureBox pb = (PictureBox)sender;
            c_monster_name = pb.Tag.ToString();
            current_brush_mode = brush_mode.Monsters;
            current_monster_img = pb.Image;

            switch (c_monster_name)
            {
                case "Zombie":
                    current_monster = monster_type.Zombie;
                    break;
                case "ZombieFanatic":
                    current_monster = monster_type.ZombieFanatic;
                    break;
                case "GoreHound":
                    current_monster = monster_type.GoreHound;
                    break;
                case "GoreWolf":
                    current_monster = monster_type.GoreWolf;
                    break;
                case "Necromancer":
                    current_monster = monster_type.Necromancer;
                    break;
                case "Boneyard":
                    current_monster = monster_type.Boneyard;
                    break;
                case "ArmoredSkel":
                    current_monster = monster_type.Armored_Skeleton;
                    break;
                case "Skel":
                    current_monster = monster_type.Skeleton;
                    break;
                case "VoidWraith":
                    current_monster = monster_type.VoidWraith;
                    break;
                case "Ghost":
                    current_monster = monster_type.Ghost;
                    break;
                case "RedKnight":
                    current_monster = monster_type.RedKnight;
                    break;
                case "HollowKnight":
                    current_monster = monster_type.HollowKnight;
                    break;
                case "Schrodingers_HK":
                    current_monster = monster_type.Schrodingers_HK;
                    break;
                case "Gangrenous_Shambler":
                    current_monster = monster_type.Gangrenous_Shambler;
                    break;
                case "Rotting_Amalgam":
                    current_monster = monster_type.Rotting_Amalgam;
                    break;
                case "CorpseMimic":
                    current_monster = monster_type.CorpseMimic;
                    break;
                case "Lesser_Revenant":
                    current_monster = monster_type.LesserRevenant;
                    break;
                case "WereGoreHound":
                    current_monster = monster_type.WereGoreHound;
                    break;
            }
        }
        private void doodad_brush_picture_Click(object sender, EventArgs e)
        {
            PictureBox pb = (PictureBox)sender;
            c_doodad_name = pb.Tag.ToString();
            current_brush_mode = brush_mode.Doodads;
            current_doodad_img = pb.Image;

            switch (c_doodad_name)
            {
                case "BloodSplat":
                    current_doodad = doodad_type.Blood_Splatter;
                    break;
                case "Armor":
                    current_doodad = doodad_type.Armor_Suit;
                    break;
                case "DestroyedArmor":
                    current_doodad = doodad_type.Destroyed_Armorsuit;
                    break;
                case "Cage":
                    current_doodad = doodad_type.Cage;
                    break;
                case "Altar":
                    current_doodad = doodad_type.Altar;
                    break;
                case "CorpsePile":
                    current_doodad = doodad_type.Corpse_Pile;
                    break;
                case "Bookshelf":
                    current_doodad = doodad_type.Bookshelf;
                    break;
                case "DestroyedBookshelf":
                    current_doodad = doodad_type.Destroyed_Bookshelf;
                    break;
                case "HallAnchor":
                    current_doodad = doodad_type.HallAnchor;
                    break;
                case "Ironbar_Door":
                    current_doodad = doodad_type.Ironbar_Door;
                    break;
                case "Ironbar_Wall":
                    current_doodad = doodad_type.Ironbar_Wall;
                    break;
                case "BossSpawn":
                    current_doodad = doodad_type.Boss_Spawn;
                    break;
            }
        }