# Achievements

The Achievement module allows the developer to grant achievements to the player, to clear achievements, and to determine if an achievement has been granted. It also allows the recording of progress towards an achievement.

By default, the achievement stores information in the persistent file. If Steam support is available and enabled, achivement information is automatically synchronized with Steam.

`achievement.``Sync`()

  An action that calls achievement.sync(). This is only sensitive if achievements are out of sync.

`achievement.``clear`(name)

  Clears the achievement with name.

`achievement.``clear_all`()

  Clears all achievements.

`achievement.``grant`(name)

  Grants the achievement with name, if it has not already been granted.

`achievement.``has`(name)

  Returns true if the player has been granted the achievement with name.

`achievement.``progress`(name, complete)

  Reports progress towards the achievement with name, if that achievement has not been granted. The achievement must be defined with a completion amount.

  name
    The name of the achievement. This should be the name of the achievement, and not the stat.
  complete
    An integer giving the number of units completed towards the achievement.

`achievement.``register`(name, **kwargs)

  Registers an achievement. Achievements are not required to be registered, but doing so allows one to pass information to the backends.

  name
    The name of the achievement to register.

  The following keyword parameters are optional.

  steam
    The name to use on steam. If not given, defaults to name.
  stat_max
    The integer value of the stat at which the achievement unlocks.
  stat_modulo
    If the progress modulo stat_max is 0, progress is displayed to the user. For example, if stat_modulo is 10, progress will be displayed to the user when it reaches 10, 20, 30, etc. If not given, this defaults to 0.

`achievement.``sync`()

  Synchronizes registered achievements between local storage and other backends. (For example, Steam.)