public boolean mousedown(Coord c, int button) {
        setfocus(this);
        Coord c0 = c;
        c = new Coord((int) (c.x / getScale()), (int) (c.y / getScale()));
        Gob hit = gobatpos(c);
        // PF
        if (path != null && button != 3) {
            path.clear();
            path_moving = false;
            path_step = 0;
            path_interact_object = null;
        }
        //Kerri
        if (objectSelecting) {
            objectUnderMouse = hit;
            objectSelecting = false;
            return true;
        }
        Coord mc = s2m(c.add(viewoffset(sz, this.mc).inv()));
        if (grab != null) {
            try {
                grab.mmousedown(mc, button);
                return true;
            } catch (GrabberException e) {
            }
        }

        if ((cam != null) && cam.click(this, c, mc, button)) {
            /* Nothing */
        } else if (plob != null) {
            Gob gob = null;
            for (Gob g : plob)
                gob = g;
            wdgmsg("place", gob.rc, button, ui.modflags());
        } else {
            //Kerri
            if (button == 1 && ui.modctrl && ui.modmeta) {
                KerriUtils.addOL(hit);
            }
            //Kerri
            if (button == 1 && ui.modctrl && ui.modshift) {
                if (hit != null)
                    hit.setDrawOlay(!hit.getDrawOlay());
            }
            // PF
            if (button == 3 && ui.modctrl && ui.modshift) {
                if (hit == null)
                    path_interact_object = null;
                else
                    path_interact_object = hit;
                path = APXUtils._pf_find_path(mc, path_interact_object != null ? path_interact_object.id : 0);
                update_pf_moving();
                return true;
            }
            if (hit == null) {
                if (button == 1 && ui.modshift) {
                    glob.oc.enqueue(mc);
                    glob.oc.checkqueue();
                } else {
                    glob.oc.movequeue.clear();
                    if (Config.assign_to_tile) {
                        mc = tilify(mc);
                    }
                    wdgmsg("click", c0, mc, button, ui.modflags());
                }
            } else {
                //Kerri: option
                if (ui.modmeta && Config.objectBlink)
                    ui.chat.getawnd().wdgmsg("msg", "@$[" + hit.id + "]");
                if (Config.assign_to_tile) {
                    mc = tilify(mc);
                }
                wdgmsg("click", c0, mc, button, ui.modflags(), hit.id,
                        hit.position());
            }
        }
        return (true);
    }