Skip to content
This repository was archived by the owner on Jun 2, 2024. It is now read-only.

Achievement Templates

meleu edited this page Jan 3, 2018 · 59 revisions

WARNING: EVERY GAME IS DIFFERENT!

Here you'll see examples of some typical achievements. You can use them as inspiration to create your own achievement. But keep in mind the following:

EVERY GAME IS DIFFERENT! The memory has a different behavior from game to game.

So do NOT take these examples as a rule. They are here just for educational purposes.

In these examples we use the following convention 0xLEVEL is the memory address with the level ID; 0xLIFE is the address used for the character life; 0xTIME for time, 0xITEM for getting an item, etc...

Finish Level N

In this example we want to award when the player finish the level N and goes to level N+1.

ID Special? Memory Cmp Type Mem/Val Hits
1 0xLEVEL = Value N (1)
2 0xLEVEL = Value N+1
3 0xLEVEL > Delta 0xLEVEL
4 ResetIf 0xLEVEL = Value TITLE

Conditions

  1. On level N at least one time
  2. Currently at level N+1
  3. The level has been increased
  4. Reset the hit counter when back to title screen

The value 0xTITLE means "at game's title screen". You need to ResetIf going to the title screen to avoid the awarding at a wrong time.

Here is an example of game flow that could make the achievement trigger at a wrong time if it wasn't for that ReseIf:

  1. Start the game and reach level 2 (this make the hit counter goes to 1)
  2. Get a game over while on level 2
  3. Go back to the title screen
  4. Use a password for level 3

If not using the ResetIf we will have these conditions:

  1. Hit level 2: TRUE
  2. Current level = level 3: TRUE
  3. Level increased (from title/password screen to level 3): TRUE

And it would be enough to trigger the cheevo (at a wrong time). That's why we're using the ResetIf in this example.

Finish Level N before Time reaches T

In this example we consider a game where the time decreases (e.g.: Super Mario Bros). Adapt it accordingly the time on your game has a different behavior.

We want to award if the player finishes the level N while time is greater than T.

ID Special? Memory Cmp Type Mem/Val Hits
1 0xLEVEL = Value N (1)
2 0xLEVEL = Value N+1
3 0xLEVEL > Delta 0xLEVEL
4 ResetIf 0xLEVEL = Value TITLE
5 0xTIME >= Value T

Conditions

Conditions 1-4 are the same as Finish Level N template.

  1. time is greater than T

Keep in mind that besides knowing how the time behaves in game you also need to research how it behaves in memory.

Finish Level N without Dying

ID Special? Memory Cmp Type Mem/Val Hits
1 0xLEVEL = Value N (1)
2 0xLEVEL = Value N+1
3 0xLEVEL > Delta 0xLEVEL
4 ResetIf 0xLEVEL = Value TITLE
5 0xSCREEN = Value LVL_N_INTRO (1)
6 ResetIf 0xLIFE < Delta 0xLIFE

Conditions

Conditions 1-4 are the same as Finish Level N template.

  1. a checkpoint to represent the point from where the player is suposed to start the chalenge of not losing a life. If the game has a level intro screen, it can be a good checkpoint.
  2. reset hit count if life decreased.

Finish Level N with Item

ID Special? Memory Cmp Type Mem/Val Hits
1 0xLEVEL = Value N (1)
2 0xLEVEL = Value N+1
3 0xLEVEL > Delta 0xLEVEL
4 ResetIf 0xLEVEL = Value TITLE
5 0xITEM = Value TRUE

Conditions

Conditions 1-4 are the same as Finish Level N template.

  1. the player have the item

Finish Level N without using Weapon

ID Special? Memory Cmp Type Mem/Val Hits
1 0xLEVEL = Value N (1)
2 0xLEVEL = Value N+1
3 0xLEVEL > Delta 0xLEVEL
4 ResetIf 0xLEVEL = Value TITLE
5 ResetIf 0xWEAPON = Value TRUE

Conditions

Conditions 1-4 are the same as Finish Level N template.

  1. reset hit count if the weapon was used

Battery Save Protected Collect Item

Here's a way to check if an item is collected in the level/room ID it is supposed to be collected. It avoids awarding an "get item X" by loading a savestate where player already has the item.

ID Special? Memory Cmp Type Mem/Val Hits
1 0xITEM = Value FALSE (1)
2 0xITEM = Value TRUE
3 ResetIf 0xLEVEL != Value collect level

Conditions

  1. Do not have the item while on the collect level, the hit is a checkpoint so 1&2 can both be true at once.
  2. Have the item
  3. Reset hit counter if in a level different than the one where the item must be obtained

Conditions 1 and 3 together mean "arrived the level/Room ID without the item".

Even if the player loads a savestate and goes to the required level they will not be able to add hits to condition 1, thus they can't get it except in normal gameplay.

It does not necessarily have to be level/Room ID. There are other ways to approach this problem, for example a unique Mem/Val that only occurs on collection. Etc.

Check for a specific value changing to another specific value ten times

In this example we want to detect a value changing from 2f to ff ten times:

ID Special? Type Memory Cmp Type Mem/Val Hits
1 Mem 0xADDRESS = Value 0xff (10)
2 Delta 0xADDRESS = Value 0x2f (10)
3 PauseIf Mem 0xADDRESS = Delta 0xADDRESS

Concept For Not allowing worn mask in Majora's Mask in 3 certain zones and collecting and depositing all eggs

Core:
Egg in fortress 1 hit (not collected)
Egg not in fortress 1 hit (collected)
"" above 2 for each egg
Delta was Great Bay Area ID 1 hit (a checkpoint for before getting egg 1)

ALT 1 
ResetIf mask on
PauseIf != Zone ID1

ALT 2
ResetIf mask on
PauseIf != Zone ID2

ALT 3
ResetIf mask on
PauseIf != Zone ID3

ALT 4
All eggs turned in 0 hits

Guidelines

General

Achievement Development

WIP


Portugues

Geral

Desenvolvedores


Español

General

Desarrolladores

Clone this wiki locally