Stendhal Achievement Development: Difference between revisions

From Arianne
Jump to navigation Jump to search
Content deleted Content added
imported>Madmetzger
No edit summary
imported>Madmetzger
 
(19 intermediate revisions by the same user not shown)
Line 3: Line 3:
{{Stendhal Achievements}}
{{Stendhal Achievements}}
== How to add achievements to the game? ==
== How to add achievements to the game? ==
{{TODO|describe the steps towards adding new achievements}
{{TODO|describe the steps towards adding new achievements

* Conditions
* Tracked data
* How to check for new reached achievements?
** Quests needs manual work
** item looting, zone changes trigger automatically achievement checks}}

== Development Idea Collection ==
== Development Idea Collection ==
Within this section you find ideas and concepts on initial development of achievements.
Within this section you find ideas and concepts on initial development of achievements.

Latest revision as of 17:27, 4 January 2011


Stendhal Achievements

How to add achievements to the game?

TODO: describe the steps towards adding new achievements

  • Conditions
  • Tracked data
  • How to check for new reached achievements?
    • Quests needs manual work
    • item looting, zone changes trigger automatically achievement checks

Development Idea Collection

Within this section you find ideas and concepts on initial development of achievements.

Collecting Ideas

  • collect more achievement ideas and nice titles at Stendhal Achievement Ideas
    • gives hints for further design decisions
    • can help structuring achievements into categories
  • should fulfilling an achievement be rewarded?

Client and Website

  • Should achievements be visible within the game? (low prio)
    • look action on player could be extended by a title based on the amount of fullfilled achievements
  • Website should be extended with a hall of fame section on achievements
    • calculate a score on difficulty of an achievement (killing x rats gets less points than reaching max xp for example)
      • basic score for each achievement
      • actual score for each reached achievement = basic score / number of players having reached that achievement
    • display medals on character pages; different colours or design in relation to the calculate point
  • Have a log about recently reached achievements on the website? (i.e. player has reached Junior Explorer achievement)
    • Add reaching achievements to recent events page
  • Have a audio notice when someone reaches an achievement?

Design Ideas

There are several things to consider when developing the achievements handling.

Database and Class Model

  • database table(s) to display achievements on website
    • table for achievment types? maybe not needed, strings could be applied in the reached achievements table
    • table for player has reached achievement
    • possible class model draft and a corresponding table draft

CREATE TABLE achievement IF NOT EXISTS (
    id INTEGER AUTO_INCREMENT NOT NULL,
    identifier VARCHAR,
    title VARCHAR,
    category VARCHAR,
    description VARCHAR,
    base_score INTEGER,
    PRIMARY KEY(id)
)
CREATE TABLE reached_achievement IF NOT EXISTS (
    id INTEGER AUTO_INCREMENT NOT NULL,
    charname VARCHAR,
    timedate TIMESTAMP default CURRENT_TIMESTAMP,
    achievement_id INTEGER,
    PRIMARY KEY(id)
)

Ingame tracking and checking

  • check if player has fulfilled an achievement
    • "polling" every x turns via TurnListener, but could be a bad idea as checking might be expensive approach discarded --Madmetzger 07:20, 29 July 2010 (UTC)
    • "telling" when to check, similar to tutorial events or when raising game events (we have possibly the type here)? approach discarded --Madmetzger 07:20, 29 July 2010 (UTC)
    • store reached achievements as string set in player object: load reached achievements from database on login into a volatile set in player object
    • how to store progress for a certain achievement?
      • using a map?
      • key = achievement name, value progress value? statistics should be tracked for everything that might be checked for an achievement --Madmetzger 07:20, 29 July 2010 (UTC)
      • add data recording that can be checked
  • find a way to conveniently add new achievements using ChatConditions and the factories makes it easy to add new achievements
    • loading system for achievements like stendhal quest system? AchievementNotifier loads achievements on initialization
    • building block system using existing ChatConditions Achievements use the ChatConditions for checking stuff
      • categorized by type of event to determine what to check, i.e. killed x creatures of type y condition should only be checked when having killed a creature but not on looting an item already implemented by categorizing achievements and checking only the right category at each event
Quest Achievements
  • number of finished quests already tracked
  • repeatable quests should all count the completions of a player
  • missing counting: Elf Princess Quest (more missing?)
  • finished x times a quest already implemented
Item Achievements
  • looted items should be tracked in a map for each player with key item name and value number of loots
  • looting items (not yet tracked)
  • putting items into bank (not yet tracked)
  • collected x items
  • looted certain collection of items
Fighting Achievements
  • killed creatures already tracked
  • killed creature without a weapon
  • killed x creatures already implemented
  • killed x of y different creatures --> is extension of existing condition possible?
Zone Achievements
  • for zone visit achievements, how to check them:
    • hardcoded list of zones to visit for the achievement hardcoded zone name lists don't seem to be maintainable
    • exclude all zones including "house", "apartment"
    • zones starting with "int" are interiors, region is within zone name zones have a method isInterior() to check
    • zones starting with a number >-1 are above ground, region is within zone name exterior zones have a method getLevel()to check
    • zones starting with a number <-1 are below ground, region is within zone name exterior zones have a method getLevel()to check
    • use zone level attribute, area is in name/xml file, and add a flag to zone xml for accessibility to all players implemented