// Use this for initialization
    void Start()
    {
        // Initialize hand display
        GameObject[] card_frames = GameObject.FindGameObjectsWithTag("Hand");
        hand_display = new HandScript[DeckManager.MAX_HAND_SIZE];

        for (int idx = 0; idx < card_frames.Length; ++idx) {
            hand_display[idx] = card_frames[idx].GetComponent<HandScript>();
        }

        musicSlider = GameObject.Find ("Slider");
        UI.GetComponentInChildren<Canvas> ().enabled = false;
        shopCanvas.enabled = false;

        units = new List<UnitScript>();

        // give starting deck specifications
        DeckManager d1 = new DeckManager( new CardScript.CardType[] {CardScript.CardType.Currency1, CardScript.CardType.Currency2, CardScript.CardType.HumanInfantry, CardScript.CardType.HumanTank}, new int[] {7, 2, 2, 1} );
        DeckManager d2 = new DeckManager( new CardScript.CardType[] {CardScript.CardType.Currency1, CardScript.CardType.Currency2, CardScript.CardType.AlienInfantry, CardScript.CardType.AlienTank}, new int[] {7, 2, 2, 1} );

        // player setup
        Player1 = new PlayerScript(d1);
        Player2 = new PlayerScript(d2);
        Player1.getDeck().deck.shuffle();
        Player2.getDeck().deck.shuffle();
        turn = 1;

        getPlayer().getDeck().deal();
        drawCards();

        Map = new MapManager(SceneTransitionStorage.map_width, SceneTransitionStorage.map_height, SceneTransitionStorage.map_type, SceneTransitionStorage.fog);

        // map setup
        Map.generatePseudoRandomMap();

        // place alien base
        turn = 2;
        HexScript hex = Map.hex_at_offset_from(Map.map[0][0], false, false, System.Math.Min(Map.width / 2, Map.height / 2));
        p2Base = placeUnit ( UnitScript.Types.A_Base, (int)hex.position.x, (int)hex.position.y );
        //int unit = 4;
        // place one of each unit
        /*for (int adj_idx = 0; adj_idx < 6; ++adj_idx) {
            HexScript adj_hex = Map.adjacentHexTo(hex, adj_idx);

            if (adj_hex != null && adj_hex.getOccupied() == 0) {
                placeUnit((UnitScript.Types)unit, (int)adj_hex.position.x, (int)adj_hex.position.y );
                ++unit;
            }

            if (unit > 7) { break; }
        }*/

        turn = 1;

        if (Map.FOG_OF_WAR) { Map.fog_of_war(true); }

        // place human base
        hex = Map.hex_at_offset_from(Map.map[Map.width - 1][Map.height - 1], false, false, System.Math.Min(Map.width / 2, Map.height / 2));
        p1Base = placeUnit ( UnitScript.Types.H_Base, (int)hex.position.x, (int)hex.position.y );
        // place one of each unit
        /*unit = 0;
        for (int adj_idx = 0; adj_idx < 6; ++adj_idx) {
            HexScript adj_hex = Map.adjacentHexTo(hex, adj_idx);

            if (adj_hex != null && adj_hex.getOccupied() == 0) {
                placeUnit((UnitScript.Types)unit, (int)adj_hex.position.x, (int)adj_hex.position.y );
                ++unit;
            }

            if (unit > 3) { break; }
        }*/
    }