-
Notifications
You must be signed in to change notification settings - Fork 10
Tips and Tricks es
También mira: Un vistazo al Inspector de Memoria.
-
Empieza con la vista de 8-bit en el Visor de Memoria. Buscar pedazos grandes de memoria solo complica las cosas, pero haría un trabajo mas fácil para un desarrollador experimentado. Si tu estas empezando y no estas consciente de términos como endianess y bit ordering (o cuando los ojos están cansados), es mejor hacer observaciones usando la vista de 8-bit. Es simplemente mas fácil!
-
Desmarca la casilla "Show Decimal Values" en el Editor de Logros (Achievement Editor) para así poder introducir los valores hex que encuentres en el Visor de Memoria (Memory Viewer). Es mejor que estar utilizando una calculadora de programador!
-
Si encuentras una variable, también busca en los alrededores de la misma podrías encontrar muchas variables utiles.
-
Puedes introducir valores en el Visor de Memoria para ver si afectan al juego.
-
Incluso si algo esta visiblemente decrementando en el juego, como la vida, la memoria podría tener diferencias. Podría ser posible que este incluso incrementando, así que como es algo de lo que no estas del todo seguro, es preferible que utilices los filtros
!=
y=
. -
Si tu absolutamente no puedes reducir los resultados de un filtro, puedes intentar adivinar algunos valores o mínimo como esta actuando ese valor (
>
o<
). Por ejemplo, cero vida es usualmente0
, Stage 1 es usualmente el valor0
, Stage 2 es usualmente el valor1
dependiendo el tipo de juego. -
Vista de 16/32 bit: Recuerda que cuando trabajas con variables de 16 o 32 bit las variables de la derecha son primero. Por Ejemplo: si en 8bit se mira de esta manera
AB CD WX YZ
, en 16 bit se convierte enCDAB YZWX
. A esto se le llama "ordenado de bits big endian". Sin preocupaciones puedes ignorar esta platica geek, solamente recordando que las cosas se almacenan al revés en la vista de 16 bit y superiores. -
Bit fields: Utiliza single bits para cosas que solamente cambian en un bit. En el Inspector de Memoria (Memory Inspector), cuando una variable es seleccionada, vas a encontrar
Bits: 7 6 5 4 3 2 1 0
arriba de las variables. Y abajo de esos números va a ver ya sea un0
o un1
, así como0 0 1 0 0 0 1 1
en la imagen de abajo. Sibit5
tiene un1
arriba de el, entoncesbit3=1
para esa variable. El uso de Single bit es muy común en un juego para items/eventos/desbloqueos/etc. Tal vez suene un poco confuso , pero es muy importante que lo entiendas. Algunos juegos con espacio en memoria muy limite usan los campos de bits (Bit fields) muchísimo! Es una técnica importante de aprender.
También mira: Conceptos No-Bievenidos y Diseño de Logros.
-
NuncaEvita utilizar solo una condición lo mas que puedas. Cuando utilizas solo una condición el logro es muy probable que salga en el momento equivocado. Este es el error mas común de un desarrollador. -
Si el juego tiene un modo demo (El CPU juega después que hubieras esperado un tiempo en la pantalla de titulo), percatate de buscar la variable para ello y agrega la condicion para que tus logros no salgan en modo demo. Tal vez necesites saber como se utiliza un PauseIf y ResetIf.
-
PauseIf
cheat codes: Si el juego tiene un cheat code para incrementar vidas, seleccionar stages, etc. Percatate de encontrar las variables para ello y agregar alguna especie de protección a tus logros. -
Si quieres crear un logro para colecciona un ítem único y especifico en el juego, agrega algunas condiciones para asegurarte que el jugador consiguió el ítem donde se supone que se tiene que conseguir, como en este ejemplo de aquí. De otra manera podría saltar utilizando un password, cargando un archivo de guardado, etc.
-
Condiciones Ó: si necesitas condiciones Ó, vas a necesitar Alt groups.
-
Evita el exceso de Logros. Si un juego tiene 100 levels, no hagas un logro por cada nivel. Haz cada 25 o parecido. Considera el tiempo en el que un jugador casual podría desbloquear esos logros. Si generalmente puedes desbloquear todos los logros de un set de progreso en medio hora y siendo un jugador casual, eso es diseño de puro relleno, y no es recomendable.
-
Se Creativo y Divertido: Se lo mas creativo posible con tus logros. "Vence a X sin utilizar/hacer Y", "Vence a X en 5 segundos", "pásate el juego con solo 3 corazones". Ten en mente que incluso el jugador casual puede sacarse todos los logros si pone su mejor esfuerzo. No es divertido para un jugador casual si es demasiado difícil! (Mira: Tips para Sets Bonus mas abajo para retos de verdad!). Hay una pagina completa sobre Diseño de Logros hay puedes conseguir buenas ideas para pensar en como hacer buenos logros.
-
Glitchless, por favor!: No hagas logros donde requieras el uso de glitches. Glitches, en la mayoría de los casos, corrompen y destabilizan la RAM y memoria del juego. Para agregar básicamente rompen todo el set de logros. Por eso es, sabio agregar protección a esto para así detener a los jugadores de utilizarlos y conseguir los logros fácilmente.
-
Evita utilizar solamente texto y gráficas: La mayoría de las veces, un logro que requiere que pase cierto evento especial puede estar atado a una event flag (usualmente un single bit or byte), or to an item received by the player. It is better practice to use these values than to check the ID of text being displayed in a text box, or, even worse, video RAM (memory tied to the actual graphics displaying on the screen) as they are often less stable. Especially between different versions of a single game, and they are more difficult to debug.
-
We love Art: Pretty badges are rewarding badges! It should visually represent the achievement itself, or hint at the location in the game for secrets. Matching to the game's art style works well. Google Image searches for "Sprite Sheets" is an useful tip to include some game art. If you're a good graphics artist, updating badges is your time to shine! More info can be found at the Badge and Icon Creation page.
-
No Symbols: Do not use accented/special characters like the
é
in Pokemon, as they currently break a few things (like feed). They are also not visible in search without the special character. Same for UTF-8 Universal Emoji codes. Allowed exception: Rich Presence Scripts. -
Mind your English: avoid grammar mistakes. As RetroAchievements is an international community, using English for Code Notes is a good practice, as another developer can use your notes in the future.
An usual trick to start filtering addresses to find the Demo Mode is to let the demo begin and then start to filter =
"Last Known Value" and press "Filter" many times, stopping right before the demo ends (be careful to not filter after the demo ends).
Now start the game normally and when you're able to control the character change the filter to !=
and then filter one single time. The filtered addresses are the ones that has changed since the demo mode.
Now change the filtering back to =
and then start a sequence of play-and-filter. Which means play a bit, move around then scenario, defeat some enemies, and then filter.
Pro tip: It is very very very useful to have savestates in different levels of the game, so you can do the play-and-filter in different scenarios and make the filtering more effective.
After getting a few addresses as result, quite often the demo value will be 1
(sometimes it's also ff
). If you find a potential address edit it to 0
and check if you become able to control the character. If yes, BINGO!, that's the address you're looking for.
Here's an easy trick using a dummy achievement to watch an address for any changes, which is something you'll quite often want to know.
Conditions Explained
-
Value 1 = Value 0
; This is to prevent the achievement from ever being true, as the value 0 never equals 1. -
Value 1 = Value 1
; For this trick to work the achievement needs hits to reset. When 1 = 1 hits will be added to this condition. -
ResetIf Mem 0x10 != Delta 0x10
; This is the address you want to watch. Any time there is a change the achievement will reset.
- Last of all make sure that
Pause on Reset
andActive
are both checked. Now you will get a pop-up and emulation will pause each time this address changes.
- 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