public void sublight(int x, int y, VPoint pcm, VGraphics g) {
        x += 32;
        y += 32;
        int ix = x;
        int iy = y;
        x /= 64;
        y /= 64;
        int h = 20;

        int z = t(point(x, y)) * h;
        int n = t(point(x, y - 1)) * h;
        int o = t(point(x + 1, y)) * h;
        int s = t(point(x, y + 1)) * h;
        int w = t(point(x - 1, y)) * h;
        int no = t(point(x + 1, y - 1)) * h;
        int so = t(point(x + 1, y + 1)) * h;
        int nw = t(point(x - 1, y - 1)) * h;
        int sw = t(point(x - 1, y + 1)) * h;
        int xx = ((((z - h == w) | (z - h == sw) | (z - h == s)) ? z - h : z));
        int xy = ((((z - h == o) | (z - h == so) | (z - h == s)) ? z - h : z));
        int yy = ((((z - h == o) | (z - h == no) | (z - h == n)) ? z - h : z));
        int yx = ((((z - h == w) | (z - h == nw) | (z - h == n)) ? z - h : z));

        g.fillPolygon(
                VConvert.to2DPoint(x * 64 - 32 - pcm.x, y * 64 + 32 - pcm.y, (((z - h == w) | (z - h == sw) | (z - h == s)) ? z - h : z)),
                VConvert.to2DPoint(x * 64 + 32 - pcm.x, y * 64 + 32 - pcm.y, (((z - h == o) | (z - h == so) | (z - h == s)) ? z - h : z)),
                VConvert.to2DPoint(x * 64 + 32 - pcm.x, y * 64 - 32 - pcm.y, (((z - h == o) | (z - h == no) | (z - h == n)) ? z - h : z)),
                VConvert.to2DPoint(x * 64 - 32 - pcm.x, y * 64 - 32 - pcm.y, (((z - h == w) | (z - h == nw) | (z - h == n)) ? z - h : z))
        );
    }