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

Tips and Tricks es

eldexterr edited this page Apr 12, 2019 · 3 revisions

Tips en la Búsqueda de Memoria

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 usualmente 0, Stage 1 es usualmente el valor 0, Stage 2 es usualmente el valor 1 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 en CDAB 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 un 0 o un 1, así como 0 0 1 0 0 0 1 1 en la imagen de abajo. Si bit5 tiene un 1 arriba de el, entonces bit3=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.

memsizes

Tips en la Creación de Logros

También mira: Conceptos No-Bievenidos y Diseño de Logros.

  • Nunca Evita 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.

Naming Convention Tips

  • 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.

Tricks

Finding the address for Demo Mode

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.

Address Watcher

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

  1. Value 1 = Value 0; This is to prevent the achievement from ever being true, as the value 0 never equals 1.
  2. 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.
  3. 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 and Active are both checked. Now you will get a pop-up and emulation will pause each time this address changes.

Guidelines

General

Achievement Development

WIP


Portugues

Geral

Desenvolvedores


Español

General

Desarrolladores

Clone this wiki locally