function starnode_setup()
	game.newStarnodeGenerator("sol",2,7)
	if game.hardcore == 0 then generator.level = 1 else generator.level = 2 end
	
	game.newMessage("WELCOME TO THE SOLAR SYSTEM", "stolenrobot")
	game.newMessage("WHILE YOU SLEPT, EARTH WAS DESTROYED BY NEMESIS ALIEN", "stolenrobot")
	game.newMessage("YOU MISSED QUITE A LOT ACTUALLY", "stolenrobot")
	
	--add any survivors that haven't already been encountered
	generator.addSurvivors()
	
	-- place gate at first room
	generator.placeRoom("gate", 0)
	actor.offsety = 42
	
	--shop right after the gate
	generator.placeRoom("shop", 1)
	
	--if we're doing this map only
	if game.playthrough == 0 then generator.startingPoints = 350 end

	-- place boss just before final layer
	--generator.placeRoom("planet_ruined", generator.het-1)
	generator.placeRoom("boss_axel", generator.het-1)
	--PRE-BATTLE (adds to whatever actor was last made in that room)
	--actor.addMessage("NEW HOME EDEN PLANET DATABANKS SOMEWHERE IN MOON ARCADE FUN COMPLEX", "stolenrobot", 0, 0, 1)
	--actor.addMessage("DATABANKS CONTAIN HIGHLY CLASSIFIED INFORMATION - - - DO NOT PERUSE UNDER ANY CIRCUMSTANCE", "stolenrobot", 0, 0, 1)
	--actor.addMessage("BRINGING DATABANKS TO GATE PARADE IS TOP PRIORITY", "stolenrobot", 0, 0, 1)
	--POST-BATTLE
	--actor.addMessage("DATABANKS RETRIEVED", "stolenrobot", 5)
	--actor.addMessage("LOCATION OF NEW HOME EDEN PLANET LOCATED", "stolenrobot", 5)
	--actor.addMessage("AUXILLERY: VULNERABLE NEMISIS COLONY ALSO LOCATED", "stolenrobot", 5)
	--actor.addMessage("EDEN CAN WAIT; MAKE A CHOICE OF GREAT REVENGE JUSTICE!", "stolenrobot", 5)
	
	
	--add a fake option. get it? the player isn't in control here. COMMENTARY MAKES IT ART.
	generator.placeRoom("gate", generator.het)
	actor.nodeName = "GATE TO EDEN"
	actor.addMessage("NO INCORRECT EDEN CAN WAIT", "stolenrobot", 1)
	actor.addEvent("returntosender", 1)
	actor.addMessage("VILE NEMESIS MUST PAY FOR HUMANITY AGAINST CRIMES; PROCEED TO NEMESIS COLONY", "stolenrobot", 2)
	actor.addEvent("returntosender", 2)
	actor.addMessage("IF YOU CANNOT DELIVER DUE PUNISHMENT YOU WILL BE REPLACED", "stolenrobot", 3)
	actor.addEvent("returntosender", 3)
	actor.addMessage("PILOT THIS IS YOUR FINAL WARNING", "stolenrobot", 4)
	actor.addEvent("returntosender", 4)
	actor.addMessage("SELF DESTRUCT IN 3...", "stolenrobot", 5)
	actor.addEvent("returntosender", 5)
	actor.addMessage("2...", "stolenrobot", 6)
	actor.addEvent("returntosender", 6)
	actor.addMessage("1...", "stolenrobot", 7)
	actor.addEvent("returntosender", 7)
	actor.addEvent("selfdestruct", 8)
	
	--add a gate at the final layer
	generator.placeRoom("gate", generator.het)
	actor.nodeName = "GATE TO NEMESIS COLONY"
	--actor.addEvent("gate", 6)
	actor.addEvent("winnerisyou", 6)
	actor.addEvent("dest_nexus")
	
	--paint some backgrounds
	for i = 0, 4 do
		generator.paintActor("terrain_saturn.lua", i)
	end
	
	-- ======== TERRAIN ======== --
	
	-- layer 0 -- backgrounds
	generator.setRoomLayer(0)
	generator.addRoom("empty", 80)
	generator.addRoom("comets", 20)
	
	-- layer 1 -- stuff
	generator.nextRoomLayer()
	generator.addRoom("empty", 60)
	generator.addRoom("crate_points", 30)
	if game.hardcore == 0 then generator.addRoom("crate_equipment", 20) end
	generator.addRoom("pixel", 40)
	generator.addRoom("shop", 20)
	generator.addRoom("cryopods", 30)
	
	-- layer 2 -- fog
	generator.nextRoomLayer()
	generator.addRoom("empty", 300)
	generator.addRoom("nebula_fog_heavy", 30)
	generator.addRoom("nebula_storm_heavy", 10)
	
	generator.nextRoomLayer()
	generator.addRoom("empty", 200)--in addition to the other fog
	generator.addRoom("nebula_fog_light", 50)
	generator.addRoom("nebula_storm_light", 20)

	-- ======== CHALLENGES======== --
	--TERRAIN
	--movement challenges
	generator.nextRoomLayer()
	generator.addRoom("empty", 20)
	generator.addRoom("asteroids_plain", 60)
	
	generator.nextRoomLayer()
	generator.addRoom("empty", 60)
	generator.addRoom("asteroids_gems", 30)
	generator.addRoom("asteroids_explode", 10)
	
	generator.nextRoomLayer()
	generator.addRoom("empty", 200)
	generator.addRoom("asteroids_hard", 30)
	generator.addRoom("mines", 60)
	generator.addRoom("gasbags", 30)
	
	
	--ENEMY GROUPS
	generator.addMobGroup("actor_interceptor.lua", "A", 8)
	generator.addMobGroup("actor_turret.lua", "A", 4)
	generator.addMobGroup("actor_blinkturret.lua", "A", 2)
	generator.addMobGroup("actor_beamturret.lua", "A", 2)

	generator.addMobGroup("actor_artillery.lua", "B", 4)
	generator.addMobGroup("actor_node.lua", "B", 4)
	generator.addMobGroup("actor_blinkturret.lua", "B", 3)
	generator.addMobGroup("actor_pillbug.lua", "B", 3)
	generator.addMobGroup("actor_interceptor2.lua", "B", 1)
	generator.addMobGroup("actor_beamturret.lua", "B", 1)
	
	generator.addMobGroup("actor_frigate.lua", "C", 2)
	generator.addMobGroup("actor_lancer.lua", "C", 4)
	generator.addMobGroup("actor_destrier.lua", "C", 3)
	generator.addMobGroup("actor_artillery2.lua", "C", 1)
	generator.addMobGroup("actor_beamturret2.lua", "C", 1)
	
	generator.addMobGroup("actor_bubbledrone.lua", "Z", 5)
	generator.addMobGroup("actor_node.lua", "Z", 2)
	generator.addMobGroup("actor_pulsardrone.lua", "Z", 2)
	
	--ENCOUNTERS
	generator.nextRoomLayer()
	--generator.addRoom("empty", 30)
	
	generator.addRoom("encounter_11", 20)
	generator.addRoom("encounter_12", 20)
	generator.addRoom("encounter_13", 20)
	generator.addRoom("encounter_14", 20)
	generator.addRoom("encounter_15", 20)
	generator.addRoom("encounter_16", 20)
	generator.addRoom("encounter_17", 20)
	generator.addRoom("encounter_18", 10)
	generator.addRoom("encounter_19", 20)
	

end