         opp.discard = opp.discard.concat(drawn)
         state.handleDiscards(opp, drawn)
         state.log("...#{opp.ai} discards #{drawn}.")
-        
+
   ai_playValue: (state, my) -> 136
   ai_multipliedValue: (state, my) ->
     if my.actions > 0 then 1480 else -1

    if (ct = this.getCoinTokens(state)) > 0
      state.log("#{state.current.ai} gains #{ct} Coin Token#{if ct > 1 then "s" else ""}")
    this.playEffect(state)
  
  # Similarly, these are other ways for the game state to interact
  # with the card. Cards should override the `Effect` methods, not these.
  onDuration: (state) ->
    this.durationEffect(state)
  
  onCleanup: (state) ->
    this.cleanupEffect(state)

  onBuy: (state) ->
    this.buyEffect(state)
  
  onGain: (state, player) ->
    this.gainEffect(state, player)

  onTrash: (state, player) ->
    this.trashEffect(state, player)
  
  # A card's string representation is its name.
  #
  # If you have a value called

# The `makeCard` function will define a new card and add it to the card list.
# `makeCard` works by copying an existing card object and applying a few new
# properties to it.
#
# `name` is the name of the card, which will be the card's string
# representation and the key that you look it up in the card list `c` by.
#
# To define a card independently of any existing card, let `origCard` be the
# abstract card called `basicCard`. To define a card in terms of another card,
# let `origCard` be that card object (probably a member of `c`, such as
# `c.Estate`).
#
# `props` are the properties of the card that differ from its parent.
#
# `fake` is true when this should be an abstract card, not a card in the
# supply. Fake cards are simply returned, not added to `c`.

