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

Real Examples

meleu edited this page Dec 1, 2017 · 21 revisions

Using ResetIf

Let's see how Super Hang-On (Mega Drive)'s achievement Speed Freak - Maintain at least 300kph for 10 seconds looks like in Achievement Editor dialog:

Addresses

  • 0x0055a: is the speed.
  • 0x0c757: is 0x00 when the game is unpaused.

speedfreak-example

In this achievement, we wish for there to be a fact or condition that is true 600 times consecutively. The reason for this is that the genesis is locked into processing 60 frames of logic per second (NTSC at least?). And the fact we're looking for is "speed is over 300". Also, we want the player to keep the speed above 300 without pausing the game.

Conditions

  1. player's speed is above 300 for 600 frames (or 10 seconds have passed).

  2. reset the hit counter if speed is under 300.

  3. reset the hit counter if the player pause the game.

Delta Values and ResetIf

Let's take Streets of Rage 2 (Mega Drive) as a case study, and Steel Grip - Defeat 10 enemies without dropping your weapon achievement. This relies on four conditions:

Addresses

  • 0xef33: holding weapon
  • 0xef37: weapon type
  • 0xef4e: number of KOs (player 1)

steelgrip-example

Conditions

  1. the player is holding a weapon. We require this to be true, once. This is actually not necessary, but it's useful to show the progression. We are saying that require the player to hold a weapon, at least once.

  2. number of KOs that the player has made. It's 16-bit (meaning the value can be more than 255), and by using the delta and 'greater than' symbols, we are saying that we require the number of KOs to be bigger than the previous value, and we need this to happen 10 unique times. Every time the current value is bigger than the previous value, the hit count will go up by one. The next frame, the 'delta' value will have increased to be the same as the current value, this ensures that after every kill, the KO counter will go up by one, and the hit count will go up by one. LIMITATION: if the number of KOs goes up by two in the same frame, the hit count will only go up by one. It's a slight flaw that does happen a little more often than expected... it's not so accurate but it's a fairly close estimate to your number of kills.

  3. reset all our progress, if the weapon type is different to the last known weapon type.

  4. reset all our progress, if the player is no longer carrying a weapon.

Using Delta Values and ResetIf to avoid load state abusing

In this example the game is Zooming Secretary (NES), and the Achievement is Great Job! - Now you can take a rest, for beating the game.

In this example the developer wants to make sure the player went through all levels to beat the game in order to earn the achievement. If the player uses a save state to go directly to the last stage and finish it, the achievement won't pop up.

Addresses

  • 0x06e9: level ID

The values are:

  1. level 1
  2. level 2
  3. level 3
  4. level 4
  5. bonus
  6. level 5
  7. level 6
  8. level 7
  9. finished the game

greatjob-zoomingsecretary

Conditions

  1. In the "game finished level".
  2. The level was increased 8 times.
  3. Reset the counter if the level decreases.

As this game has 8 levels (7 regular levels and 1 bonus stage), the value in the level ID address must be increased 8 times to beat the game. This way a player can't just start the game, load a state to go directly to the last level and then beat the game. He/she needs to go through all levels.

The ResetIf is here just to avoid the case where the player keep loading states going back and forth between levels making the hit counter to be 8. If he/she loads a state going to a lower level, the hit counter goes to zero.

Guidelines

General

Achievement Development

WIP


Portugues

Geral

Desenvolvedores


Español

General

Desarrolladores

Clone this wiki locally