Tag Info

Hot answers tagged

28

I think a kind of robust solution would be to go the object oriented way. Depending on what kind of achievement you want to support, you need a way to query the current state of your game and/or the history of actions/events the game objects (like the player) have made. Let's say you have a base Achievement class such as: class AbstractAchievement { ...


23

What you do depends on the nature of the achievement. Unless your achievements all fit a simple pattern (collect X number of Ys), you're going to have to special-case them to some degree. Using a message-based communication system, you can provide hooks that makes the special-case coding localized. You can have certain actions fire messages to listeners who ...


19

I personally witnessed the latter happening in Starcraft 2; a section of the achievements would have you win hundreds of games against their AI opponents (boring!) That presupposes that you're actually trying to get that achievement. Most people that get this achievement play AI matches in order to practice and get better at the game. Your overall ...


18

Are you asking from the perspective of technicalities of implementing or the ramifications of the design? Either way, the answer to your question is "yes". From the technical side of things, generally speaking you just find the hooks in your code that are responding to your achievement events and put in your stat tracking code there. You might have to ...


13

Well, in short, achievements are unlocked when a certain condition is met. So you need to be able to produce if statements to check the condition you want. For example, if you want to know that a level was completed or a boss was defeated, you'd need to have boolean flag turn true when these events happen. Then: if(GlobalFlags.MasterBossDefeated == true ...


11

Progress should be shown whenever possible, with achievements and with other goals. Part of the great thing about explicit achievements is that it gives the player/user something to strive for, and a feeling of, yes, progress toward that goal. Each time the player makes a step toward her goal, she can get a micro-reward of a progress update, which encourages ...


9

An achievement system can be pretty complex. Many of the achievements are special cases that need to be watched for. That means special code, just for that achievement. Some will be easy to code for, like finishing a level under a certain amount of time or total number of coins collected. As simple as having a timer or a global counter. The more complex ...


7

What if you every action the player takes posts a message to the AchievementManager? Then the manager can check internally whether certain conditions have been met. First objects post messages: AchievementManager::PostMessage("Jump", "162"); AchievementManager::PostMessage("Slice", "Strawberry"); AchievementManager::PostMessage("Slice", "Watermelon"); ...


5

I haven't seen an explicit statement about this for XBL achievements, but when using Xbox Live, it's plainly clear that the system itself doesn't display achievement progress. Some games do show progress towards achievements as you mention yours does, but it's done from within the game, not as part of the overall achievement framework. As for why, my guess ...


5

Provided that your game engine is designed well and uses some kind of observable event system (where events are generated and listened for by interested parties), it should be quite easy to "plug-in" an achievement system at a later point (by adding appropriate listeners). This kind of design is very flexible.


4

I think one method to implement something like this could be event-driven. This means, you will have points in your code where specific events are called. It must be somewhat extended to allow to pass parameters, but I think it’s not uncommon that event-systems can handle parameters. First you will have to define some events in your code that can happen. ...


3

Kongregate have an achievement system. It works a lot like Steam, so you can get multiple achievements from different games on different platforms (Flash, Unity, etc.) and you can show them off. Sign up for an account and play a game that has achievements to see how it works. Kongregate is also an incredibly popular online community, so your game will also ...


3

When I implemented achievements in my last game, I made it all statistic based. Achievements are unlocked when our statistics reach a certain value. Consider Modern Warfare 2: the game is tracking tons of stats! How many shots have you taken with the SCAR-H? How many miles have you sprinted while using the Lightweight perk? So in my implementation, I simply ...


3

The last design I used was based around having a set of per-user persistent counters and then have achievements key off a certain counter hitting a certain value. Most were a single achievement/counter pair where the counter would only ever be 0 or 1 (and the achievement triggered on >=1), but you can use this for "killed X dudes" or "found X chests" too. It ...


3

Depending on the nature of your achievements you could also introduce some kind of "marker achievements". If you have for example 3 consecutive achievements: Wood 1 - Collect 100 wood Wood 2 - Collect 500 wood Wood 3 - Collect 1k wood Then it would make sense to just register an OnChange event for the first achievement until the player completed it. Upon ...


2

Why don't you just register events? Different objects act upon events they listen to, and you can attach some datas to these events (an object like {key: 'value', key2: 'value2'}, for example). If basic events (click, change, etc) don't satisfy you, you can register custom events. An example of how to do this here : ...


2

Knytt Stories and Spelunky do this: They store records and unlockables in an unencrypted text file. To prevent curious people (who like to read random text files) from accidentally spoiling the game for themselves, it only adds things to the text file once the player encounters them. The file has lines such as SpidersKilled=2, but only if the player has ...


2

In my opinion, the number of achievements is not important, what is important is that there is something for everyone. In my mind, there are two objectives for achievements in games. Keep people playing (to gain more achievements) Give palyers bragging rights Without servicing both goals adding achievements is not worth the effort. As long as you have ...


2

Is there a reference for this statement about Xbox Live achievements? The Xbox system pretty clearly does not provide a mechanism to track or display the progress of achievements (although some games may do this themselves via their own internal technology). I don't know of any official public statement anywhere that indicates that Microsoft ...


2

Use Event Calculus. Then make some preconditions and actions which are applied after preconditions are met: preconditions: you killed 1000 enemies, you have 2 legs actions: give me lollypop, give me super-duper-shotgun-13 first-time-actions: say "you are so awesome!" Use it like (non-optimized for speed!): Store all statistics. Query statistics for ...


1

Disclaimer: I am a co-founder of Clay.io (mentioned in question). Since January we've added search and made the site a bit less cluttered, here are some useful links to look through. Developer Info Page Documentation Achievements Documentation I hope this helps. You hit the nail on the head for the platforms we're emulating, only for HTML5 games. One more ...


1

Google has announced its Google Play game services which offer Achievements Leaderboards Cloud Save Matchmaking across Android, iOS, and web (via RESTful apis).


1

Balancing is too vague a problem to be answered here, but this might work for your first question: Define actionLog, an array of the form actionID => numberOfFinishedActionsOfThatType data structure to store how often the player has already completed each action. Add a property called "restrictions" to your actions. Restrictions is a list, with each ...


1

Break it down into concrete systems, an achievement is abstract, but an achievement to gather/do/kill/rescue/stalk X amount of T can be represented as an instance of an achievement with a predicate. So essentially any achievement could be represented by a function, and a set of attributes. If you want to enable arbitrary achievements you're talking about ...



Only top voted, non community-wiki answers of a minimum length are eligible