Skip to content

Modelos de Conquistas

Link para o texto em inglês: Achievement Templates

ATENÇÃO: TODO JOGO É DIFERENTE!

Aqui você irá ver exemplos de algumas conquistas tipícas. Você pode usar elas como inspiração para criar suas conquistas. Mas mantenha em mente o seguinte:

TODO O JOGO É DIFERENTE! A memória tem uma diferença de comportamento de jogo para jogo.

Então NÃO faça desses exemplos como regras. Elas estão aqui apenas para fins educacionais.

Nesses exemplos nós usamos a seguinte convenção 0xNIVEL é o endereço de memória (memory address) com o ID de nível; 0xVIDA é o endereço usado para a vida do personagem; 0xTEMPO para obter um item, etc...

Termine Nível N

Neste exemplo nós queremos premiar quando o jogador terminar o nível N e vá para o nível N+1

IDSpecial?MemoryCmpTypeMem/ValHits
10xNIVEL=ValueN(1)
20xNIVEL=ValueN+1
30xNIVEL>Delta0xNIVEL
4ResetIf0xNIVEL=ValueTITULO

Requerimentos

  • 1: No nível N pelo menos uma vez
  • 2: Atualmente no nível N+1
  • 3: O nível foi aumentado
  • 4: Resete o contador de hits quando voltar para a tela de titulo

O valor 0xTITULO significa "na tela de título do jogo". Você precisa do ResetIf indo para a tela de título para evitar uma premiação na hora errada

Aqui está um exemplo do fluxo de jogo que poderia fazer a conquista ser ativada em uma hora errada se não fosse pelo ResetIf:

  1. Inicie o jogo e chegue ao nível 2 (isso fará o contador de hits ir para 1)
  2. Obtenha um game over enquanto estiver no nível 2
  3. Volte para a tela de título
  4. Use um password para o nível 3

Se não estiver usando o ResetIf, teremos estas condições:

  1. Nível de Hit 2: VERDADEIRO
  2. Nível Atual = nível 3: VERDADEIRO
  3. Nível aumentado (Do titulo/tela de password para o nível 3): VERDADEIRO

E seria o suficiente para ativar a conquista (no momento errado). É por isso que nos estamos usando o ResetIf neste exemplo

Termine Nível N antes que o Tempo atinja T

Neste exemplo vamos considerar um jogo quando o tempo diminuir (ex: Super Mario Bros). Adaptar-lo de acordo com o tempo no seu jogo tem um comportamento diferente.

Nós queremos premiar se o jogardor finalizar o nível N enquanto o tempo for maior que T

IDSpecial?MemoryCmpTypeMem/ValHits
10xNIVEL=ValueN(1)
20xNIVEL=ValueN+1
30xNIVEL>Delta0xNIVEL
4ResetIf0xNIVEL=ValueTITULO
50xNIVEL>=ValueT

Requerimentos

Requerimentos 1-4 são os mesmos como o modelo Terminar o Nível N.

  • 5: O tempo é maior que T.

Mantenha em mente que por trás de além saber como o tempo se comporta no jogo, além disso você precisa pesqusar como se comporta na memória

Termine Nível N sem Morrer

(ou ser atingido, usando uma arma, etc.)

IDSpecial?MemoryCmpTypeMem/ValHits
10xNIVEL=ValueN(1)
20xNIVEL=ValueN+1
30xNIVEL>Delta0xNIVEL
4ResetIf0xNIVEL=ValueTITLE
50xTELA=ValueNVL_CM_INTRO(1)
6ResetIf0xVIDA<Delta0xVIDA

Requerimentos

Requerimentos 1-4 são os mesmos como o modelo Terminar o Nível N.

  • 5: um checkpoint para representar o ponto de onde o jogador supostamente iniciará o desafio de não perder uma vida. Se o jogo tem um nível na tela de introdução, isto pode ser um bom checkpoint.
  • 6: resete o contador de hits se a vida diminuir.

O requerimento 6 pode também ser usando para resetar o contador de hits se uma arma for usada, tomado dano, ou qualquer coisa além daquilo que você não quer que o jogador faça

Termine o Nível N com Item

IDSpecial?MemoryCmpTypeMem/ValHits
10xNIVEL=ValueN(1)
20xNIVEL=ValueN+1
30xNIVEL>Delta0xNIVEL
4ResetIf0xNIVEL=ValueTITULO
50xITEM=ValueVERDADEIRO

Requerimentos

Requerimentos 1-4 são os mesmos como o modelo Terminar o Nível N.

  • 5: o jogador tem o item

Colete um Item em um Nível Específico

Aqui está uma forma de checar se o item foi coletado em um nível/sala que deve ser coletado. Isto evita a premiação à "consiga item X" por carregando um savestate onde o jogador já tem o item.

IDSpecial?MemoryCmpTypeMem/ValHits
10xITEM=ValueFALSO(1)
20xITEM=ValueVERDADEIRO
3ResetIf0xNIVEL!=Valuenivl de coleta

Requerimentos

  • 1: Não tenha o item quando entrou no nível de coleta, o hit é um checkpoint então o 1&2 podem ser verdadeiro ao mesmo tempo
  • 2: Tenha o item
  • 3: Reseta o contador de hits se estiver em uma fase diferente daquela que o item deve ser obtido

Requerimentos 1 e 3 juntos significa "chegou ao nível/sala sem o item"

Mesmo se o jogador carregar um savestave e for para o nível requerido eles não poderão adicionar hits para a condição 1, portanto eles não podem conseguir exceto em gameplay normal

Não precisa ser necessariamente nível/sala. Há outras maneiras de abordar esse problema, por exemplo uma única Memória/Valor que apenas ocorre na coletagem. Etc

Cheque por um valor específico mudando para outro valor específico dez vezes

Neste exemplo nós queremos para detectar uma mudança de valor de V1 para V2 dez vezes:

IDSpecial?TypeMemoryCmpTypeMem/ValHits
1Mem0xENDEREÇO=Value0xV1(10)
2Delta0xENDEREÇO=Value0xV2(10)
3PauseIfMem0xENDEREÇO=Delta0xENDEREÇO

Resets Condicionais

Resets Condicionais podem ser usado para muitas coisas.

Vamos dizer que você quer para resetar se um jogador entrar ema certa zona X e Y de um nível:

CORE

  • O Core é qualquer condição que voce precisa para a sua conquista ser verdadeira. Isto pode tambem incluir comportamentos normais de resets

ALT1

IDSpecial?TypeMemoryCmpTypeMem/Val
1ResetIfMem0xNIVEL=ValueNIVELID
2PauseIfMem0xX-COORDS>ValueRESET-X-ZONA
3PauseIfMem0xX-COORDS<ValueRESET-X-ZONA
4PauseIfMem0xY-COORDS>ValueRESET-Y-ZONA
5PauseIfMem0xY-COORDS<ValueRESET-Y-ZONA
  • O reset irá acontecer apenas se todas as condições Pauseif não forem verdadeiras.
  • O pause é local para o alt mas o reset reseta a conquista inteira.

ALT2

IDSpecial?TypeMemoryCmpTypeMem/Val
1Mem0x1=Mem0x1
  • Qualquer condição que seja sempre verdadeira (isso é necessário para que o Alt1 tenha o comportamento que desejamos)

  • Nota: Você pode usar multiplos resets condicionais, cada um em seu próprio grupo alt para ter um controle muito maior do comportamento de reset.

Changelog

Lançado sob a Licença GPL-3. Não há ROMs protegidas por direitos autorais disponíveis para download no RetroAchievements.