public void mousemove(Coord c) {
        c = new Coord((int) (c.x / getScale()), (int) (c.y / getScale()));
        this.pmousepos = c;
        Coord mc = s2m(c.add(viewoffset(sz, this.mc).inv()));
        this.mousepos = mc;
        mouseAtTile = tilify(mousepos); //Kerri
        Collection<Gob> plob = this.plob;
        if (cam != null)
            cam.move(this, c, mc);

        if (grab != null) {
            try {
                grab.mmousemove(mc);
                return;
            } catch (GrabberException e) {
            }
        }
        if (plob != null) {
            Gob gob = null;
            for (Gob g : plob)
                gob = g;
            boolean plontile = this.plontile ^ ui.modshift;
            gob.move(plontile ? tilify(mc) : mc);
        }
        //Kerri
        if (pmousepos != null)
            objectUnderMouse = gobatpos(c);
        else
            objectUnderMouse = null;
        if (objectUnderMouse == null) {
            tip = null;
            tips = null;
        } else if (objectUnderMouse != null && ui.modshift) {
            String s;
            s = "Res found on gob " + objectUnderMouse.id;
            String names[] = objectUnderMouse.resnames();
            if (names.length > 0) {
                for (String name : names) {
                    if (name.contains("gfx/borka")) {
                        name = name.replace("gfx/borka/", "");
                        if (name.contains("/"))
                            name = name.substring(0, name.indexOf("/"));
                        if (name.equals("body") || name.startsWith("hair") || s.contains(name))
                            continue;
                    }
                    s += "\n" + name;
                }
            }

            if (tip == null || !tips.equals(s)) {
                tips = s;
                tip = null;
                tooltip(null, false);
            }
        }
    }