#Challenges

Challenges are stored in the following format:

challs: {
  rows: # of rows
  cols: # of columns
  11: {
    [insert challenge info here]
  }
  etc
}

Each challenge should have an id where the first digit is the row and the second digit is the column. Individual upgrades can have these features:

name: Name of the challenge

desc: A description of what makes the challenge a challenge

reward: A description of the reward's effect

effect() - Optional, calculate and return the values of this upgrade's effects or effects.

effectDisp(x) - Optional, returns a display of the current effects of the upgrade with formatting. Default behavior is to just display the number appropriately formatted.

goal: A Decimal for the goal of the challenge's value.

currencyDisplayName: Optional, if using a goal currency other than basic Points, the name to display for that currency
currencyInternalName: The internal name for that currency
currencyLayer: The internal name of the layer for that currency. If it's not in a layer, omit.

unl() - Return a bool to determine if the challenge is unlocked or not.

onComplete() - Optional, this function will be called when the challenge is newly completed.

countsAs: An array of ids of other challenges in this layer that being in this challenge "counts as" being in.