public void csNaturalDisasters(Random random, ChangeSet cs, int probability) {
        if (Utils.randomInt(logger, "check for natural disasters", random, 100) < probability) {
            int size = getNumberOfSettlements();
            if (size < 1) return;
            // randomly select a colony to start with, then generate
            // an appropriate disaster if possible, else continue with
            // the next colony
            int start = Utils.randomInt(logger, "select colony", random, size);
            for (int index = 0; index < size; index++) {
                Colony colony = getColonies().get((start + index) % size);
                List<RandomChoice<Disaster>> disasters = colony.getDisasters();
                if (!disasters.isEmpty()) {
                    Disaster disaster = RandomChoice
                        .getWeightedRandom(logger, "select disaster", random, disasters);
                    List<ModelMessage> messages = csApplyDisaster(random, cs, colony, disaster);
                    if (!messages.isEmpty()) {
                        cs.addMessage(See.only(this),
                                      new ModelMessage(ModelMessage.MessageType.DEFAULT,
                                                       "model.disaster.strikes", this)
                                      .addName("%colony%", colony.getName())
                                      .addName("%disaster%", disaster));
                        for (ModelMessage message : messages) {
                            cs.addMessage(See.only(this), message);
                        }
                        return;
                    }
                }
            }
        }
    }