Program: 70500
Project: 70500
Buggy source:
@Override public void update(){
  if (!AbstractDungeon.isScreenUp) {
    this.duration-=Gdx.graphics.getDeltaTime();
    updateBlackScreenColor();
  }
  if ((!this.selectedCard) && (!AbstractDungeon.gridSelectScreen.selectedCards.isEmpty())) {
    CardCrawlGame.sound.play("String_Node_Str");
    AbstractCustomCardWithType card=(AbstractCustomCardWithType)AbstractDungeon.gridSelectScreen.selectedCards.get(0);
    AbstractCustomCardWithType newCard=card.getOpposite(card.upgraded);
    AbstractDungeon.player.masterDeck.removeCard(card);
    AbstractDungeon.effectsQueue.add(new ShowCardAndObtainEffect(newCard,Settings.WIDTH / 2,Settings.HEIGHT / 2));
    AbstractDungeon.gridSelectScreen.selectedCards.clear();
    this.selectedCard=true;
    ((RestRoom)AbstractDungeon.getCurrRoom()).fadeIn();
  }
  if ((this.duration < 1.0F) && (!this.openedScreen)) {
    this.openedScreen=true;
    CardGroup fire_ice_cards=new CardGroup(CardGroup.CardGroupType.UNSPECIFIED);
    for (    AbstractCard card : AbstractDungeon.player.masterDeck.group) {
      if (card instanceof AbstractCustomCardWithType) {
        AbstractCustomCardWithType typeCard=(AbstractCustomCardWithType)card;
        if (typeCard.colorType == AbstractCustomCardWithType.CardColorType.ICE || typeCard.colorType == AbstractCustomCardWithType.CardColorType.FIRE) {
          fire_ice_cards.group.add(card);
        }
      }
    }
    AbstractDungeon.gridSelectScreen.open(fire_ice_cards,1,ExchangeOption.LABEL,false);
  }
  if (this.duration < 0.0F) {
    this.isDone=true;
    if (CampfireUI.hidden) {
      com.megacrit.cardcrawl.rooms.AbstractRoom.waitTimer=0.0F;
      AbstractDungeon.getCurrRoom().phase=AbstractRoom.RoomPhase.COMPLETE;
      ((RestRoom)AbstractDungeon.getCurrRoom()).cutFireSound();
    }
  }
}

Fixed version (ground truth):
@Override public void update(){
  if (!AbstractDungeon.isScreenUp) {
    this.duration-=Gdx.graphics.getDeltaTime();
    updateBlackScreenColor();
  }
  if ((!this.selectedCard) && (!AbstractDungeon.gridSelectScreen.selectedCards.isEmpty())) {
    CardCrawlGame.sound.play("String_Node_Str");
    AbstractCustomCardWithType card=(AbstractCustomCardWithType)AbstractDungeon.gridSelectScreen.selectedCards.get(0);
    AbstractCustomCardWithType newCard=card.getOpposite(card.upgraded);
    AbstractDungeon.player.masterDeck.removeCard(card);
    AbstractDungeon.effectsQueue.add(new ShowCardAndObtainEffect(newCard,Settings.WIDTH / 2,Settings.HEIGHT / 2));
    AbstractDungeon.gridSelectScreen.selectedCards.clear();
    this.selectedCard=true;
    ((RestRoom)AbstractDungeon.getCurrRoom()).fadeIn();
  }
  if ((this.duration < 1.0F) && (!this.openedScreen)) {
    this.openedScreen=true;
    CardGroup fire_ice_cards=new CardGroup(CardGroup.CardGroupType.UNSPECIFIED);
    for (    AbstractCard card : AbstractDungeon.player.masterDeck.group) {
      if (card instanceof AbstractCustomCardWithType) {
        AbstractCustomCardWithType typeCard=(AbstractCustomCardWithType)card;
        if (typeCard.colorType == AbstractCustomCardWithType.CardColorType.ICE || typeCard.colorType == AbstractCustomCardWithType.CardColorType.FIRE) {
          fire_ice_cards.group.add(card);
        }
      }
    }
    AbstractDungeon.gridSelectScreen.open(fire_ice_cards,1,ExchangeOption.LABEL,false,false,true,true);
  }
  if (this.duration < 0.0F) {
    this.isDone=true;
    if (CampfireUI.hidden) {
      com.megacrit.cardcrawl.rooms.AbstractRoom.waitTimer=0.0F;
      AbstractDungeon.getCurrRoom().phase=AbstractRoom.RoomPhase.COMPLETE;
      ((RestRoom)AbstractDungeon.getCurrRoom()).cutFireSound();
    }
  }
}