Skip to content

Recursos de lógica para achievements

Link para o texto em inglês: Achievement Logic Features

Existem várias ferramentas e opções disponíveis para o desenvolvedor, saber como utilizá-las adequadamente melhorará a qualidade de seus sets. Essas ferramentas/opções podem ser usadas no Achievement Editor:

achievement_editor

Para ajuda sobre esses, o nosso servidor do Discord estará sempre aberto para ajudar.

Valores Delta

Um valor Delta é o valor do frame anterior.

Exemplos de como ele pode ser usado:

  • Detectar se o nível foi aumentado: level > delta level. Significa que "o nível atual é maior que o nível do frame anterior".
  • Detectar danos: health < delta health. Significa que "a saúde atual é menor do que a saúde do frame anterior". Ou você pode apenas tornar o valor do frame anterior um requisito. delta health = 1 significa que "o valor do frame anterior para a saúde deve ser 1". Você pode ver como isso funciona no Exemplos Reais

Hit Counts

No Achievement Editor, o campo do lado direito é Hit Count.

Zero é o valor padrão. Isso significa que a condição deve ser verdadeira quando a conquista aparecer.

Se você definir manualmente uma contagem (hit), por exemplo 1, significa que a condição deve ser verdadeira por pelo menos 1 frame e, uma vez que a contagem de hits seja atendida, ela não precisa ser atendida novamente em outro momento.

ATENÇÃO: se uma condição tiver uma contagem de hits e atingir o número necessário, esta condição não é mais testada. Ela é verdadeira e permanece verdadeira, A MENOS que você tenha um ResetIf, o qual discutiremos abaixo.

Você pode ver como isso funciona no Exemplos Reais

Special Flags

No Achievement Editor, é o campo intitulado como Special?.

Essas flags condicionais só funcionam se você definir uma contagem de hits para uma condição.

PauseIf

Isso pausará a atividade para todas as condições no mesmo grupo.

Nota: tenha em mente que isso não irá pausar as condições em outros grupos.

O PauseIf é usado para pausar a contagem de hits em uma situação específica (como pausar o jogo). É usado quando você deseja manter a contagem de hits previamente conquistada, mas não deseja reiniciá-la quando alguém simplesmente faz uma pausa no jogo, por exemplo.

ResetIf

Isso irá zerar a contagem de hits para todas condições em que você definiu uma contagem de hits. Ele é muito mais comum de usar do que PauseIf

Nota: Ao contrário do PauseIf, le irá zerar as condições em todos os grupos

Você pode ver como isso funciona no Real Examples

AddSource

Quando uma condição tem a flag AddSource o valor daquele endereço de memória é adicionado ao valor do endereço na condição logo abaixo, e a comparação é feita na condição abaixo daquela com o AddSource. Isso pode soar um pouco confuso, mas o exemplo a seguir vai esclarecer como funciona:

 Example

Neste exemplo o valor em 0x8010 será adicionado ao valor em 0x8020 e a comparação é se esta soma é maior ou igual a zero.

Se o valor em 0x8010 é 1 e o valor em 0x8020 é 2, a comparação será 1 + 2 > 0, ou 3 > 0.

Nota: todos os campos de comparação na condição com a flag AddSource são ignorados.

Tentando resumir esta explicação com uma imagem:

 Explained

Nota: você pode usar AddSource para somar mais endereços, como no exempo abaixo:

addsource1

SubSource

Funciona muito semelhante ao AddSource, porém o SubSource faz o valor naquele endereço de memória ser negativo.

Nota 1: SubSource NÃO é um flag de subtração. Ele apenas torna o valor negativo.

Nota 2: A linha final (sem AddSource ou SubSource) ainda é adicionada para a comparação final.

Usando aquele exemplo de uso de AddSource example, se nós o substituíssemos por SubSource e com os mesmos valores (valor(0x8010) = 1 e valor(0x8020) = 2), a comparação seria -1 + 2 > 0, or 1 > 0.

AddHits

Também funciona de maneira de similar ao AddSource, porém relacionado aos hitcounts.

O AddHits adiciona o hitcount da condição atual à próxima condição. O hitcount total a ser checado será aquele definido na condição logo após a última condição com AddHits. Se a condição logo após o último AddHits não tiver um hitcount definido, todas as condições com AddHits serão ignoradas.

Diferentemente do AddSource, todos os campos são usados numa condição AddHits, inclusive os campos de comparação. Se uma condição é verdadeira, o hitcount para esta condição é incrementada (e parará de incrementar se assim que o número de hitcount definido for atingido).

As condições com AddHits não precisam ser verdadeiras para a conquista disparar. Porém primeira condição após o último AddHits, sim, precisa ser verdadeira.

Groups

Os achievements podem ter grupos adicionados a eles que podem atuar como requisitos alternativos para desbloquear um achievement. Estes são chamados de Alt Groups.

Uma coisa extremamente importante a notar: para uma conquista desbloquear, deve ter o Core group E pelo menos um Alt group ser verdadeiro. Se não houver nenhum grupo Alt presente, apenas as condições do Core group's precisam ser verdadeiras.

Dica: devido ao grupo Core sempre precisar ser verdadeiro, normalmente você colocaria lá condições que sejam à todos os requisitos alternativos. No entanto, um truque que você pode usar para basicamente para ignorar a necessidade de um grupo Core é dar-lhe uma condição que é sempre verdadeira, como:

Mem 0x0001 = Mem 0x0001

Como o grupo Core agora é sempre verdadeiro, agora você pode se concentrar em diferenciar os grupos Alt.

Changelog

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