public static Set<Player> run(GameState state, GameSettings gSettings)
	{
		//Setup global game settings
		settings = gSettings;
		
		//Launch the GUIs
		state.launchGUIs();
		
		//Hello!
		state.log("The game is starting!\nLook for a log of game events here");
		
		//get the list of all the drawable cards
		ArrayList<Integer> availibleCards = state.getDeck().allCards();
		
		for(int week = state.getWeek(); 
				week < settings.weekAmt(); week++)
		{
			state.setWeek(week);
			
			if(!state.checkDraw())
			{
				state.getBag().resetBag();
				placeTreasures(state);
				distributeInitialGold(state, 
						settings.initialGold());
				//this section either draws the initial hand (at the start of the game)
				//or adds six cards to the existing hands
				drawCards(state, availibleCards,
						settings.cardAmt(week));
			}
			
			state.updateGUIs();
			
			state = weekLoop(state);
		}
		
		int max = Integer.MIN_VALUE;
		HashSet<Player> winners = new HashSet<Player>();
		
		//determine the winners of the game!
		for(Player p : state.getPlayerList())
		{
			if(p.getScore() == max)
			{
				winners.add(p);
			}
			else if(p.getScore() > max)
			{
				winners.clear();
				winners.add(p);
				max = p.getScore();
			}
		}
		
		for(Player p : winners)
		{
			state.log((Faction.getPirateName(p.getFaction()) + 
					" won with a score of " + p.getScore() + "!"));
		}
		
		return winners;
	}