Stendhal Achievement Development
From Arianne
Stendhal Achievements
- Existing Achievements
- New Achievement Ideas
- Coding Achievements
Contents |
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
- calculate a score on difficulty of an achievement (killing x rats gets less points than reaching max xp for example)
- 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 expensiveapproach 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 achievementsusing 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 ChatConditionsAchievements 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 itemalready 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 questalready 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 creaturesalready tracked - killed creature without a weapon
-
killed x creaturesalready 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 achievementhardcoded 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 namezones have a method isInterior() to check -
zones starting with a number >-1 are above ground, region is within zone name<del> exterior zones have a method getLevel()to check - <del>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 playersimplemented
-
