function kill_nonstarters()
  for f in factions() do
    if f.lastturn==1 then
      kill_faction(f, true)
    end
  end
end

function kill_multis(multis, destructive)
  for idx, fno in ipairs(multis) do  
    local f = get_faction(fno)
      if f~=nil and f.email=="doppelspieler@eressea.de" then
        kill_faction(f, destructive)
      end
  end
end

function mark_multis(multis, block)
  if multis~=nil then
    for idx, fno in ipairs(multis) do
      local f = get_faction(fno)
      if f~=nil and f.email~="doppelspieler@eressea.de" then
        print("* multi-player " .. tostring(f))
        mark_multi(f, block)
      end
    end
  end
end

-- destroy a faction 
-- destructive: kill all of its buildings and the home region, too.

function kill_faction(f, destructive)
  for u in f.units do
    local r = u.region
    local b = u.building
    unit.destroy(u)
    if destructive and b~=nil then
      building.destroy(b)
      local nuke = true
      for v in r.units do
        if v.faction.id~=f.id then
          -- print("cannot nuke: " .. tostring(v.faction))
          nuke = false
          break
        end
      end
      r.terrain_name = nil
      if nuke and num_oceans(r)<=1 then
        -- print("nuke!")
        r.terrain = "ocean"
      else
        -- print("cannot nuke: > 1 oceans")
        r.terrain = "glacier"
        r.peasants = 10
        r:set_resource("money", 100)
        b = building.create(r, "monument")
        b.size = 1
        b.name = "Memento Mori"
        b.info = "Eine kleine " .. translate("race::" .. f.race .."_x") .. "-Statue erinnert hier an ein verschwundenes Volk"
      end
    end
  end
  faction.destroy(f)
end

local function mark_multi(f, block)
  f.password = "doppelspieler"
  f.email = "doppelspieler@eressea.de"
  f.banner = "Diese Partei steht wegen vermuteten Doppelspiels unter Beobachtung."
  for u in f.units do
    u.race_name = "toad"
    if block and u.building~=nil then
      local found = false
      for u2 in u.region.units do
        if u2.faction.id~=u.faction.id then
          found = true
          break
        end
      end
      if not found then
        u.region.terrain_name = "firewall"
        u.region:set_flag(2) -- RF_BLOCKED
      end
    end
  end
end

local function num_oceans(r)
  local oceans = 0
  local p = r:next(5)
  for d = 0,5 do
    local n = r:next(d)
    if p.terrain~="ocean" and n.terrain=="ocean" then
      oceans = oceans +1
    end
    p = n
  end
  return oceans
end