Skip to content

Simple Example of How 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 we want 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. From 0 to 8 and 8 means "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, 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.


NOTE: Load State abuse is currently only an issue in RetroArch. In the standalone emulators, the hit counts are persisted with the save state, so they can't be arbitrarily manipulated as described below. In both RetroArch and the standalone emulators, save states cannot be loaded in hardcore, which further limits the impact of abuse. If your achievement misfires when using load states, we won't hold it against you but you may receive tickets. Just be aware of the problem and if you can attribute the failure to using load states and confirm the user was using load states, you can close the ticket with "Another Reason" and detail why you believe its related to using load states.

Applying a solution similar to the one above also protects against cheat codes or passwords where the user might skip right to the last level. Use your best judgment when deciding how much effort you want to apply in adding logic like this to your sets. It's much more important that the set functions appropriately in hardcore mode (where you cannot load states). You should still protect against cheat codes, passwords, and in-game saves.

Changeloglink

Last 10 changes on this page:

  • [2020-10-28 23:25] meleu: moved the warning to the bottom
  • [2020-04-24 16:36] Jamiras: add note suggesting this shouldn't be something devs get too hung up on
  • [2019-03-13 19:03] Keltron3030: Document may be deprecated.
  • [2018-03-23 01:15] meleu: Created Simple Example of How to Avoid Load State Abusing (markdown)
  • [2018-03-22 19:50] KingDice001: Updated Simple Example of How to Avoid Load State Abusing (markdown)
  • [2018-03-17 01:51] 7Mogami7: Updated Simple Example of How to Avoid Load State Abusing (markdown)
  • [2018-01-29 09:47] meleu: Updated Example of how to avoid load state abusing (markdown)