public void init(GameGraphics graphics, GameGUI gui)
	{
		m_graphics = (StandardGameGraphics)graphics;
		m_gui = (StandardGameGUI)gui;
		m_game_board = new StandardBoard(this);
		m_canUndo = false;
		movesHistory = new Stack<String>();
		repeats = new HashMap<String, Integer>();

		//initializes stuff we need for our bitboard functions
		Definitions.makeInitB();
		Definitions.makeMaskB();
		Definitions.makeInitR();
		Definitions.makeMaskR();
		Definitions.makeRankR();

		//These are some basic test scenarios we can load via FEN
		//String testFEN = "8/8/7P/8/8/8/8/k5K1 w - - 0 37"; //white to promote soon; tests promotion
		//String testFEN = "6k1/8/5r2/6K1/8/8/8/5q2 w - - 0 37"; //losing badly, tests player 2 checkmate power
		//String testFEN = "k7/7Q/K7/8/8/8/8/8 w - - 0 37"; //winning badly, can use to test checkmate/stalemate
		//String testFEN = "r1b1k2B/1p5p/2p3p1/p4p2/2BK4/8/PPP1Q1PP/R6R b - - 0 37";
		//String testFEN = "8/8/8/1Q6/8/8/8/k6K w - - 0 37"; //test queen movement on b file
		//m_game_board.FENtoPosition(testFEN);

		setupStandard();

		String[] param = { "White vs AI", "Black vs AI", "Hotseat Game", "AI vs AI" };
		String input = (String) JOptionPane.showInputDialog(null, "Game Mode?", "Choose your mode", JOptionPane.QUESTION_MESSAGE, null, param, param[0]);

		if (input == "White vs AI")
		{
			p1 = new StandardHumanPlayer("Human WHITE", Definitions.Color.WHITE, this);
			p2 = new StandardComputerPlayer("CPU BLACK", Definitions.Color.BLACK, this);
		}
		else if (input == "Black vs AI")
		{
			p2 = new StandardHumanPlayer("Human BLACK", Definitions.Color.BLACK, this);
			p1 = new StandardComputerPlayer("CPU WHITE", Definitions.Color.WHITE, this);
		}
		else if (input == "Hotseat Game")
		{
			p1 = new StandardHumanPlayer("Human WHITE", Definitions.Color.WHITE, this);
			p2 = new StandardHumanPlayer("Human BLACK", Definitions.Color.BLACK, this);
		}
		else if (input == "AI vs AI")
		{
			p1 = new StandardComputerPlayer("CPU WHITE", Definitions.Color.WHITE, this);
			p2 = new StandardComputerPlayer("CPU BLACK", Definitions.Color.BLACK, this);
		}
		else //for cases like user closing window
		{
			System.exit(0);
			return;
		}

		//TODO
		if (Debug.IsDebugging())
		{
			//just testing
			interpretMoveList("1.e4 e5 2.Nf3 Nc6 3.Bb5 a6 4.Bxc6+ dxc6 5.O-O Nf6");
		}
		
		if (m_game_board.whoseTurn() == Definitions.Color.WHITE)
			p1.promptMove();
		else
			p2.promptMove();
	}