-
Notifications
You must be signed in to change notification settings - Fork 10
System X wen
This article was originally published in the RANews - November/2020
There seems to be a lot of speculation on what the next available systems to support achievements will be. With the recent announcement of a PS2 core, there have been a lot of questions regarding if/when it will be supported. If you're only interested in the answer to that question, skip to the end of this article. But if you want to understand what exactly is needed to add support for a new system, keep reading.
These are the things that are required in order to add RetroAchievements support for a new system:
- Emulation (preferably a libretro core).
- The core must expose memory.
- The core must function in RALibretro.
- Unique identification of games.
- Server support.
The first step is, obviously, to have an emulator for the system to be supported.
In the early days of RetroAchievements we used standalone emulators - one for each system. Keeping all those emulators bug-free and up-to-date requires a lot of effort and we don't have enough programmers involved on this front.
It's currently preferred to use a libretro core for emulation. This way the core developers can push new features and we can focus only on the achievement functionality. Cores can be updated and released without any additional effort for us.
Another big advantage is that libretro cores also function in RetroArch, which allows RetroAchievements to be earned on many platforms (the standalone emulators were all Windows-only applications).
Managed by: libretro core developers.
As achievement triggers are a series of conditions that watch for things that happen in the emulated RAM, another requirement is access to the system's RAM.
Without exposed memory, the Memory Inspector appears blank and achievement creators are unable to create achievements.
Additionally, as RetroAchievements only reads the memory once per frame, some systems which heavily leverage paged memory have to provide some way to access the entire memory, not just the current page of memory.
Managed by: libretro core developers with some interaction with RetroAchievements developers.
The core must function in RALibretro, as that is where the achievement developers will identify the important pieces of memory and create the achievements.
This is usually only an issue if the core relies on some functionality not yet implemented in RALibretro (like the recently added keyboard and OpenGL 3D support), but some issues are caused by the RALibretro implementation being sufficiently different from the RetroArch implementation. Unless the core can be modified to not require the missing functionality, it cannot be supported until RALibretro is updated.
This page lists the status of each core the last time they were tested.
Managed by: RetroAchievements
We must be able to uniquely identify the games for the system.
We use a method called MD5, which scans the game's file and generates a number that we usually call as "hash". With this number it's possible to confirm if two copies of a file are identical, which makes it possible to ensure the player is using a ROM that the achievements were designed or tested against.
For most systems, we are able to just hash the entire ROM file, minus any header information. For larger games (particularly those on CD or DVD) we only hash what we consider to be the most important data to minimize load times. More information on how we identify games can be found here.
For systems with writable media (mostly home computers), we have to make sure that we don't hash any files that may be modified by the game itself. Systems that write to the game file must treat the original disk file as readonly and only write changes to a copy of the disk. If the core/emulator modifies the disk file, it can no longer be identified and cannot be considered viable for achievements.
Managed by: RetroAchievements
In order to support a new system, the RetroAchievements web server must be properly configured to accept new game and achievement entries for that system.
Managed by: RetroAchievements
This page lists the status of each core the last time they were tested.
- 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