public void tick() {
        if (!player.living()) {
            return;
        }
        ArrayList<Living> deletion = new ArrayList<>();
        player.tick(this);
        if (player.use()) {
            Floor f = data[player.y()][player.x()];
            if (f instanceof Trap) {
                player.addStatus("You tried using the", ((Trap) f).name());
                if (!((Trap) f).usedBy(player)) {
                    player.addStatus("It did not work");
                }
            }
            player.setUse(false);
        }
        if (player.shouldAscend()) {
            make(width, height);
            player.setAscend(false);
            runHooks();
            return;
        }
        for (Living l : live) {
            l.tick(this);
            if (!l.living()) {
                deletion.add(l);
            }
        }
        for (Living l : deletion) {
            data[l.y()][l.x()].remove(l);
            live.remove(l);
        }
        calculateVision();
        runHooks();
        frame++;
    }