function starnode_setup()
	game.newStarnodeGenerator("deepspace",2,6)
	if game.hardcore == 0 then generator.level = 1 else generator.level = 2 end
	
	--game.newMessage("WAKE UP PILOT HUMAN", "stolenrobot")
	game.newMessage("HELLO SPACE POPSICLE", "stolenrobot") --CRYOPOD DESIGNATION '" .. game.pilotname .. "'", "stolenrobot")
	game.newMessage("ARE YOU ENDLESSLY FLOATING IN SPACE WHEN EVERYONE YOU EVER KNEW IS LIKELY DEAD?", "stolenrobot")
	--if game.hardcore == 1 then game.newMessage("...", "pilot_eyesclosed") end
	game.newMessage("GOOD NEWS! **YOU** HAVE BEEN PRE-APPROVED TO SAVE HUMANITY!!!", "stolenrobot")
	game.newMessage("SMALL STEP : CLICK A NODE         GIANT LEAP : SAVE MANKIND", "stolenrobot")
	
	--add any survivors that haven't already been encountered
	generator.addSurvivors()
	
	--nothing at the start
	generator.placeRoom("empty", 0)
	generator.paintActor("tutorial_text.lua", 1)
	
	-- place "boss" at almost-final room
	generator.placeRoom("boss_lancersquad", generator.het-1)
	
	--add a gate right past the boss
	generator.placeRoom("gate", generator.het)
	--actor.addEvent("gate", 6)
	actor.addEvent("winnerisyou", 6)
	actor.addEvent("dest_sol")
	actor.nodeName = "GATE TO SOL"
	
	--paint some backgrounds
	for i = 0, generator.het do
		generator.paintActor("terrain_wizardnebula.lua", i)
	end
	
	-- ======== TERRAIN ======== --
	
	-- layer 0 -- backgrounds
	--generator.setRoomLayer(0)
	--generator.addRoom("empty", 80)
	
	-- layer 1 -- stuff
	generator.nextRoomLayer()
	generator.addRoom("empty", 80)
	generator.addRoom("crate_points", 30)
	if game.hardcore == 0 then generator.addRoom("crate_equipment", 30) end
	
	generator.nextRoomLayer()
	generator.addRoom("empty", 80)
	generator.addRoom("gravitywells", 10)
	generator.addRoom("pixel", 30)
	generator.addRoom("comets", 10)
	generator.addRoom("mines", 20)
	
	-- layer 2 -- fog
	generator.nextRoomLayer()
	generator.addRoom("empty", 200)
	generator.addRoom("nebula_fog_light", 50)
	generator.addRoom("nebula_storm_light", 20)
	
	generator.nextRoomLayer()
	generator.addRoom("empty", 300)--in addition to the other fog
	generator.addRoom("nebula_fog_heavy", 30)
	generator.addRoom("nebula_storm_heavy", 10)
	
	-- events
	generator.nextRoomLayer()
	generator.addRoom("empty", 100)
	generator.addRoom("asteroids_biggem", 10)
	
	generator.nextRoomLayer()
	generator.addRoom("empty", 100)
	generator.addRoom("cuttlefish", 10)
	
	-- ======== CHALLENGES======== --
	--TERRAIN
	generator.nextRoomLayer()
	generator.addRoom("empty", 60)
	generator.addRoom("asteroids_plain", 30)
	
	generator.nextRoomLayer()
	generator.addRoom("empty", 100)
	generator.addRoom("asteroids_gems", 30)
	generator.addRoom("asteroids_explode", 30)
	
	generator.nextRoomLayer()
	generator.addRoom("empty", 100)
	generator.addRoom("micrometeors", 5)
	
	
	--ENEMY GROUPS
	generator.addMobGroup("actor_interceptor.lua", "A", 7)
	generator.addMobGroup("actor_turret.lua", "A", 4)
	generator.addMobGroup("actor_beamturret.lua", "A", 1)

	generator.addMobGroup("actor_artillery.lua", "B", 3)
	generator.addMobGroup("actor_node.lua", "B", 2)
	generator.addMobGroup("actor_blinkturret.lua", "B", 2)
	generator.addMobGroup("actor_beamturret.lua", "A", 1)
	
	generator.addMobGroup("actor_frigate.lua", "C", 1)
	generator.addMobGroup("actor_destrier.lua", "C", 3)
	generator.addMobGroup("actor_lancer.lua", "C", 1)
	generator.addMobGroup("actor_pillbug.lua", "C", 1)

	generator.addMobGroup("actor_bubbledrone.lua", "Z", 6)
	generator.addMobGroup("actor_node.lua", "Z", 1)
	generator.addMobGroup("actor_pulsardrone.lua", "Z", 1)
	
	--ENCOUNTERS
	generator.nextRoomLayer()
	--generator.addRoom("empty", 30)
	
	generator.addRoom("encounter_61", 20)
	generator.addRoom("encounter_62", 20)
	generator.addRoom("encounter_63", 20)
	generator.addRoom("encounter_64", 20)
	generator.addRoom("encounter_65", 20)
	generator.addRoom("encounter_66", 20)
	generator.addRoom("encounter_67", 20)
	generator.addRoom("encounter_68", 10)
	generator.addRoom("encounter_69", 20)
end