public void SetupHack(int safeSize, string newSecurityType)
    {
        mapGrid.gameObject.SetActive(false);
        hackDeck     = FindObjectOfType <HackDeck>();
        hackDiscard  = FindObjectOfType <HackDiscard>();
        allHackCards = FindObjectOfType <AllHackCards>();

        List <int> cardIds = new List <int>();

        if (trapType == MapObject.TrapTypes.ParalysisAgent)
        {
            // Paralysis Agent Trap: Blocks arm and leg mods
            List <Item.ItemTypes> blockedItemTypes = new List <Item.ItemTypes> {
                Item.ItemTypes.Arm, Item.ItemTypes.Leg
            };
            cardIds.AddRange(runner.GetLoadout().GetAllCardIds(blockedItemTypes));
        }
        else if (trapType == MapObject.TrapTypes.ConcussiveBlast)
        {
            List <Item.ItemTypes> blockedItemTypes = new List <Item.ItemTypes> {
                Item.ItemTypes.Head, Item.ItemTypes.Exoskeleton
            };
            cardIds.AddRange(runner.GetLoadout().GetAllCardIds(blockedItemTypes));
        }
        else
        {
            cardIds.AddRange(runner.GetLoadout().GetAllCardIds());
        }

        // Block Hacker cards if faraday cage
        if (trapType != MapObject.TrapTypes.FaradayCage)
        {
            cardIds.AddRange(hacker.GetHackerLoadout().GetCardIds());
        }

        cardIds.AddRange(FindObjectOfType <MapData>().GetTemporaryCardIds());

        // Create a deck from here, but for now we use nonsense cards
        LogAllCardIds(cardIds);

        List <HackCard> cards = GetCardsByIds(cardIds);

        hackDeck.SetDeckPrefabs(cards);
        hackDeck.ShuffleDeck();
        hackDeck.SetTopCard();

        securityType = newSecurityType;

        hackSecurityUI = FindObjectOfType <HackSecurityUI>();
        SetupPointHolders();
        this.safeZoneSize = safeSize;
        SetupSafeSquares();

        SetupAbilityButtons();

        SetupPassiveAbilities();
    }