public void DrawMap(int nv)
        {
            lv = nv;
            gb.Clear(Color.Gray); int x1, y1, x2, y2;
            int em=0, wm=0, nm=0, sm=0;
            Brush[] br = new Brush[] { Brushes.Blue, Brushes.Green, Brushes.Cyan, Brushes.Red, Brushes.Purple, Brushes.Yellow, Brushes.DarkGray, Brushes.White, Brushes.SkyBlue, Brushes.LimeGreen, Brushes.Pink };
            for(int x = 0 ; x < map.lvs[lv].sqx ; x++) {
                for(int y = 0 ; y < map.lvs[lv].sqy ; y++) {
                    x1 = x * 11; x2 = x1 + 10; y1 = 34 + ((89 - y) * 11); y2 = y1 + 10; csq = map.lvs[lv].sq[x, y]; cgp = map.gps[csq.g];

                    // Floor
                    if(csq.tf == 0) {
                        gb.FillRectangle(Brushes.Black, x1, y1, 11, 11);
                        if(lv < 40 && map.lvs[lv + 1].sq[x, y].tf == 0 &&
                            map.lvs[lv + 2].sq[x, y].tf == 0 && map.lvs[lv + 3].sq[x, y].tf == 0)
                            gb.FillRectangle(Brushes.Red, x1 + 3, y1 + 3, 7, 7);
                    }

                    // Rock?
                    if(csq.r) gb.FillRectangle(Brushes.White, x1, y1, 11, 11);

                    if(cgp.sm > sm) sm = cgp.sm;
                    if(cgp.sm > 0) gb.FillRectangle(br[cgp.sm-1], x1 + 3, y1 + 3, 7, 7);
                    if(x < 89 && (csq.g != map.lvs[lv].sq[x + 1, y].g)) gb.DrawLine(Pens.Violet, x2, y1, x2, y2);
                    if(x > 0 && (csq.g != map.lvs[lv].sq[x - 1, y].g)) gb.DrawLine(Pens.Violet, x1, y1, x1, y2);
                    if(y < 89 && (csq.g != map.lvs[lv].sq[x, y + 1].g)) gb.DrawLine(Pens.Violet, x1, y1, x2, y1);
                    if(y > 0 && (csq.g != map.lvs[lv].sq[x, y - 1].g)) gb.DrawLine(Pens.Violet, x1, y2, x2, y2);

                    if(cgp.type != 0) {
                        if((cgp.type & 0x8000) != 0) gb.FillRectangle(Brushes.Blue, x1 + 4, y1 + 4, 3, 3);
                        if((cgp.type & 0x0040) != 0) gb.FillRectangle(Brushes.Red, x1 + 4, y1 + 4, 3, 3);
                        if((cgp.type | 0x8040) == 0x8040) gb.FillRectangle(Brushes.Green, x1 + 4, y1 + 4, 3, 3);
                    }

                    // Wals exist
                    if(csq.te > 0) gb.DrawLine(Pens.Blue, x2, y1, x2, y2); if(csq.te > em) em = csq.te;
                    if(csq.tw > 0) gb.DrawLine(Pens.Blue, x1, y1, x1, y2); if(csq.tw > wm) wm = csq.tw;
                    if(csq.tn > 0) gb.DrawLine(Pens.Blue, x1, y1, x2, y1); if(csq.tn > nm) nm = csq.tn;
                    if(csq.ts > 0) gb.DrawLine(Pens.Blue, x1, y2, x2, y2); //if(csq.ts > sm) sm = csq.ts;
                    //Invisible doors?
                    if(csq.te == 107) gb.DrawLine(Pens.Green, x2, y1, x2, y2);
                    if(csq.tw == 107) gb.DrawLine(Pens.Green, x1, y1, x1, y2);
                    if(csq.tn == 107) gb.DrawLine(Pens.Green, x1, y1, x2, y1);
                    if(csq.ts == 107) gb.DrawLine(Pens.Green, x1, y2, x2, y2);
                    // Doors?
                    if(csq.te == 98) gb.DrawLine(Pens.Yellow, x2, y1, x2, y2);
                    if(csq.tw == 98) gb.DrawLine(Pens.Yellow, x1, y1, x1, y2);
                    if(csq.tn == 98) gb.DrawLine(Pens.Yellow, x1, y1, x2, y1);
                    if(csq.ts == 98) gb.DrawLine(Pens.Yellow, x1, y2, x2, y2);
                    // Negative textures, maybe invisible doors?
                    if(csq.te < 0) gb.DrawLine(Pens.Red, x2, y1, x2, y2);
                    if(csq.tw < 0) gb.DrawLine(Pens.Red, x1, y1, x1, y2);
                    if(csq.tn < 0) gb.DrawLine(Pens.Red, x1, y1, x2, y1);
                    if(csq.ts < 0) gb.DrawLine(Pens.Red, x1, y2, x2, y2);
                }
            }
            //MessageBox.Show(em + ", " + wm + ", " + nm + ", " + sm);
            gb.DrawString(em + ", " + wm + ", " + nm + ", " + sm, Font, Brushes.Black, 650, 0);

            for(int q = 0 ; q < 45 ; q++) {
                gb.DrawString("Lv " + (q + 1), Font, (q == lv) ? Brushes.White : Brushes.Black, 990, q * 21 + 5 + 34);
                gb.DrawLine(Pens.Black, 990, q * 21 + 34, fx, q * 21 + 34);

            }

                gf.DrawImage(gi, 0, 0);
        }
        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            int x=0, y=0; if(nomouse) return;
            switch(mode) {
                case "DEMISEDungeon":
                    x = e.X / 11; y = 89-(e.Y-34)/11;
                    if(x < 0 || y < 0 || x > 89 || y > 89) return;
                    csq = map.lvs[lv].sq[x, y]; cgp = map.gps[csq.g];
                    gf.FillRectangle(Brushes.Black, 0, 0, 500, 30);

                    gf.DrawString("XYZ: (" + (x+1) + "," + (y+1) + "," + (lv+1) + "); TE: " + csq.te + "; TW: " + csq.tw + "; TN: " + csq.tn + "; TS: " + csq.ts +
                        "; TF: " + csq.tf + "; TC: " + csq.tc + "; M: " + csq.m + "; G: " + csq.g + "; R: " + csq.r, Font, Brushes.White, 0, 0);
                    gf.DrawString("Types: " + cgp.type.ToString("X8") + "; GID: " + cgp.id + "; LF: " + cgp.lf + "; LM: " + cgp.lm + "; GF: " + cgp.gf +
                        "; SM: " + cgp.sm + "; MV: " + cgp.mv + "; T: " + cgp.t + "; R: " + cgp.r + "; S: " + cgp.s + "; SQ: " + cgp.sq

                        , Font, Brushes.White, 0, 10);

                    break;

            }
        }