--luacheck: ignore local Public = {} local math_random = math.random local starting_items = {['iron-plate'] = 32, ['iron-gear-wheel'] = 16, ['stone'] = 20, ['pistol'] = 1, ['firearm-magazine'] = 128, ['rail'] = 16} function Public.init_teams() game.create_force('north') game.create_force('south') game.create_force('spectator') game.forces.spectator.set_friend('north', true) game.forces.spectator.set_friend('south', true) end function Public.configure_teams(mountain_race) for _, force_name in pairs({'north', 'south'}) do local force = game.forces[force_name] force.reset() force.share_chart = true force.technologies['artillery'].enabled = false force.technologies['artillery-shell-range-1'].enabled = false force.technologies['artillery-shell-speed-1'].enabled = false force.technologies['land-mine'].enabled = false force.technologies['railway'].researched = true force.manual_mining_speed_modifier = 1 end game.forces.north.set_friend('spectator', true) game.forces.south.set_friend('spectator', true) local y = mountain_race.playfield_height * 0.5 + mountain_race.border_half_width game.forces.north.set_spawn_position({32, y * -1}, game.surfaces.nauvis) game.forces.south.set_spawn_position({32, y}, game.surfaces.nauvis) end function Public.teleport_player_to_spawn(player) local surface = game.surfaces.nauvis local position position = surface.find_non_colliding_position('character', player.force.get_spawn_position(surface), 48, 1) if not position then position = player.force.get_spawn_position(surface) end player.teleport(position, surface) end local function assign_force_to_player(player) if #game.forces.south.connected_players > #game.forces.north.connected_players then player.force = game.forces.north return end if #game.forces.north.connected_players > #game.forces.south.connected_players then player.force = game.forces.south return end if math_random(1, 2) == 1 then player.force = game.forces.south else player.force = game.forces.north end end function Public.setup_player(mountain_race, player) if player.force.name == 'player' then assign_force_to_player(player) player.print("You have been assigned to team " .. player.force.name .. "!") if player.character then if player.character.valid then player.character.destroy() end end player.character = nil player.set_controller({type = defines.controllers.god}) player.create_character() for item, amount in pairs(starting_items) do player.insert({name = item, count = amount}) end Public.teleport_player_to_spawn(player) end end function Public.update_spawn_positions(mountain_race) if not mountain_race.locomotives.north then return end if not mountain_race.locomotives.south then return end local surface = game.surfaces.nauvis for _, force_name in pairs({'north', 'south'}) do local force = game.forces[force_name] local p = mountain_race.locomotives[force_name].position force.set_spawn_position({p.x, p.y + 2}, surface) end local p = mountain_race.locomotives['north'].position game.forces.player.set_spawn_position({p.x, p.y + 2}, surface) end return Public