-
Notifications
You must be signed in to change notification settings - Fork 10
Why you shouldn't use the load state feature
Note: currently the issue described here happens only on DuckStation standalone and RetroArch versions older than 1.9.1.
Some users like to use the save/load state feature to save their progress in a game. As you may know, this feature isn't allowed when playing with hardcore mode. But some users aren't hardcore gamers and prefer to keep hardcore mode disabled (let's call this mode softcore).
From time to time some users report that an achievement isn't triggering, and when asked they say they were playing in softcore.
One thing you all have to keep in mind is:
If you use the load state feature expect to have issues of cheevos not triggering when they are expected to trigger.
Here we'll try to explain to those who don't know the details of achievements development why this kind of issue happens.
Technically an achievement is a group of conditions that must be met in a particular frame of the video game.
When you launch a game using an emulator with the RetroAchievements feature, the emulator is always checking if those conditions are met in the current frame. When all conditions for a particular achievement are met, it is awarded and the emulator stops checking the conditions for that achievement.
Examples of conditions:
- health bar is full
- health bar decreased
- have 9 lives
- currently on stage 3
- at the title screen of the game
- starting the boss fight
- the game is paused
The problem with softcore is that when you load a saved state you can ruin the logic behind an achievement.
Imagine a game with 5 stages and with the password feature.
Some probable conditions to trigger the "Beat the game without passwords" achievement are (in a real cheevo there will be more conditions, but for this explanation let's consider only these ones):
- be at stage 1 (and memorize this event as something that happened)
- be at stage 2 (memorize it)
- be at stage 3 (memorize it)
- be at stage 4 (memorize it)
- be at stage 5 (memorize it)
- finish stage 5
So to get this achievement you have to pass through all stages and then beat the game.
When you are at stage 1, the emulator memorizes it, the same thing for all other stages. And when you finish stage 5 (beat the game) you get the achievement.
Now imagine this scenario:
- a softcore player started the game and played stages 1, 2 and 3
- they needed to stop playing when at stage 4 and then they saved a state to continue later
- they closed the emulator
- later they could play again, started the game, and loaded the state they saved
- played stages 4, 5 and beat the game
In this scenario, the achievement won't trigger.
After closing the emulator it "forgets" that you passed through stages 1, 2, and 3. When you run the emulator/game again and load the state being on stage 4, the emulator won't detect that you passed through the previous stages. Then the achievement won't trigger.
Most likely the conditions to be met in a frame to make this achievement trigger are:
- entered the boss room (and memorize this event as something that happened).
- if the player takes any damage, forget they entered the boss room.
- beat the boss.
In other words: to get this achievement the emulator must "know" that you entered the boss room, didn't take any damage, and beat the boss.
The important detail to pay attention to here: when you take any damage, the emulator "forgets" that you entered the boss room. Then even if you load a state to a point where you didn't take any damage but already entered the room, the emulator won't detect that you entered the room. And then the achievement won't trigger.
When reporting a broken achievement give as many details as possible, and don't forget to mention if you are playing on hardcore mode or not.
If you want to request an admin to manually award you an achievement that didn't trigger, be sure to provide qualified proof. Especially for achievements like those in the examples above (no damage, no passwords, no death, etc).
- User Guidelines
- Developer Guidelines
- Content Guidelines
- FAQ
- Setup Guide
- Emulator Support and Issues
- Ways to Contribute
- RABot, the RA Discord Robot
- Events
- Overlay Themes
- Useful Links
- Contributing with the docs
- About Us
- Tutorials
- Developer Docs
- How to Become an Achievement Developer
- Getting Started as an Achievement Developer
- Game Identification
- Achievement Design
- Achievement Scoring
- Difficulty Scale and Balance
- Progression and Win Condition Typing
- Badge and Icon Creation
- Achievement Development Overview
- Flags
- BitCount Size
- Alt Groups
- Hit Counts
- Delta Values
- Prior Values
- Value Definition
- Condition Syntax
- Minimum Required Versions for Logic Features
- Memory Inspector
- Real Examples
- Set Development Roadmap
- Achievement Templates
- Tips and Tricks
- Leaderboards
- Rich Presence
- RATools
- Console Specific Tips
- Emulator Hotkeys for Developers
- libretro core support
- Docs To Do List
- WIP User Code of Conduct
- WIP CoC FAQ
- WIP Content Guidelines
- WIP-Jr
- WIP---Dev-Tips---Code-Notes-En-Masse
- WIP-‐-Reauthorship-Policy
- Manifesto RetroAchievements
- Código de Conduta do Usuário
- FAQ - Perguntas Frequentes
- Como contribuir se você não é um desenvolvedor
- Tutorial para Jogos Multi-Discos
- Introdução
- Primeiros Passos como um Desenvolvedor de Conquistas
- Recursos de Lógica para Achievements
- Exemplos Reais
- Dicas e Truques
- Dicas Específicas de Console
- Modelos de Achievement
- Escala de Dificuldade e Equilíbrio
- Roteiro de Desenvolvimento de um Set de Conquistas
- Criação de Ícones e Emblemas
- Leaderboards
- Rich Presence
- Design de Conquistas
- Manifesto RetroAchievements
- Código de Conducta del Usuario
- FAQ - Preguntas Frecuentes
- Tablas Globales y Reglas para la Casería de Logros
- Mi juego no esta cargando los logros
- Como contribuir si no eres un desarrollador
- Por que no deberías utilizar la función de cargar estado
- Contribuyendo con los documentos
- Como funciona la Documentación de RA
- Descargas
- Intro
- Código de Conducta del Desarrollador
- Como convertirme en un Desarrollador de Logros
- Primeros pasos como un Desarrollador de Logros
- Un vistazo al Inspector de Memoria
- Características en la Logica de un Logro
- Ejemplos Reales
- Intro
- Utilizando Hit Counts como un Temporizador
- Utilizando Valores Delta y Hit Counts para Detectar un Incremento
- Un Ejemplo Simple en como evitar el Abuso de Estados de Guardado
- Evitar el Problema de que un Contador se Incremente Dos Veces en el Mismo Frame
- Creando un Temporizador con un ResetIf Hits basándote en la Velocidad de un Juego
- Plantillas para Logros
- Tips y Trucos
- Escala de Dificultad y Balance
- Diseño de Logros
- Mapa de Desarrollo de Set
- Revisiones en Set de Logros
- Creación de Iconos y Badges
- Tablas de Clasificación
- Rich Presence
- Trabajando con el ROM apropiado
- Identificación del Juego
- Guía para Sets Bonus
- Logros para ROM hacks
- Tips Específicos por Consola