IN PROGRESS

Overview

Achievements are a tried and true mechanic for tracking and encouraging player advancement. Unlike game stats, which are per game, achievements are per player. Once a player has earned an achievement in a game, they have it on their record permanently.

Achievements are defined in an adventure or extension (but not a library). The definition includes text and images to show the achievement when the player unlocks it (but not necessarily the code to unlock it).

During the game, code in the extension can unlock the achievement (in response to whatever trigger). We show a notification in the game to tell the player they unlocked the achievement.

We show achievements in the Records page in the game and in the player's profile on the Multiverse. In both cases the achievements are categorized by adventure/extension.

We implement unlockable player ships with achievements. See: https://ministry.kronosaur.com/record.hexm?id=54321

Defining Achievements

Achievements are defined in XML. We define a new design type:

<AchievementDesc unid="..." 
    id=      "PirateKiller"
    hidden=  "false"
    >

    <Image imageID="..." .../>

    <Language>
        <Text id="name">"Pirate Killer"</Text>
        <Text id="desc">"Destroyed 3 or more pirate frigates in one game."</Text>
    </Language>
</AchievementDesc>

When a TDB is uploaded to the Multiverse we scan its contents and look for all achievements. Any achievements found are entered into an achievements database. We update this database when achievements are added or modified by tracking the TDB modified date.

Achievements in the Multiverse are indexed by a concatenation of extension UNID and achievement ID. Thus an achievement ID need not be unique across extensions.

Implementation Notes

  • We scan the TDB inside TransArc. We should create a way of returning a table of all achievements for a given TDB.
  • Once we have a list of achievement definitions, we can update the Aeon table appropriately.
  • Achievement images probably need to be pulled out of the TDB and stored separately in the Aeon table. Otherwise, we would have to crack open the TDB each time an image is requested.
  • The achievements table needs enough data to be able to categorize and display achievements. For example, we'll need the name of the extension and possibly a sort order.
  • Note also that the Multiverse need to support achievements for several games (e.g., CSC America). We probably need an additional field listing the game that owns the given achievement.

Displaying Achievements

Unlocking Achievements

Steam Considerations

Steam does not have support for programmatically creating achievements, thus we need to define each achievement manually. Because of this, we cannot support non-official achievements on Steam.

Achievements: Phase I

The is the list of achievements for the initial implementation:

Progress

These achievements track the player's progress through the main storyline and the game.

Benedict & Fiona

  • Finished training with Benedict
  • Rescued Fiona
  • Infiltrated Penitent station
  • Rescued Benedict
  • Rescued children

Eridani

  • Killed Arco Vaughn
  • Liberated Raisu Station
  • Destroyed Centauri Settlement
  • Spared Centauri Settlement

Battle Arena

  • Visited the Battle Arena
  • Became a gladiator
  • Rescued Katami
  • Defeated the Slicer

Black Market

  • Joined the Black Market

Mining

  • Mined ore

St. Kats

  • Visited New Victoria Arcology
  • Found inert metal sphere

Huari

  • Befriended the Huari

Feats

These achievements track skillful actions.

Superlatives

These are achievements aims at completionists.