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

Leaderboards pt_BR

KingDice001 edited this page Mar 28, 2018 · 17 revisions

Leaderboards

Link para o texto em inglês: Leaderboards

Atualmente Leaderboards podem ser editadas por desenvolvedores no site. É uma interface bastante robusta e um trabalho difícil para fazer com que uma leaderboard funcione corretamente. É realmente necessário algum cuidado e atenção para obter uma boa leaderboard, então, neste documento nós vamos tentar entender como isto funciona.

Visão Geral

Isto é como uma lista de Leaderboard de um jogo aparece no site

leaderboard_list

No centro você pode ver todas as Leaderboard feitas, e na coluna direita você pode ver as Code Notes (Notas de Código). As Code Notes estão aqui para ajudar com algumas condições que veremos abaixo.

Aqui está uma breve explicação de cada canpo de uma Leaderboard:

  • Título: O título de uma Leaderboard
  • Descrição: A descrição de uma Leaderboard
  • Formato: Isto pode ser Pontuação, Tempo (Frames), Tempo (Milissecondos) or Valor. É usado para distinguir que tipo de leaderboard é (Nos vamos falar disso abaixo)
  • "LowerIsBetter" ("Abaixoémelhor") caixa de marcação: Quando marcado, isso quer dizer, um valor baixo é a melhor coisa. É geralmente usando em casos de leaderboards baseadas em tempo, enquanto uma pontuação maior geralmente é melhor.
  • **Start: Inicia as condições, aka STA
  • Cancel: Cancela as condições, aka CAN
  • Submit: envia as condiçoes, aka SUB
  • Valor: Um intérprete de valores, aka VAL

Nota: Uma leaderboard válida DEVE ter todas as quatro condições.

Esses 4 últimos campos são realmente importantes e MUITOS cuidados devem ser tomados na entrada de qualquer caracter dentro dessas linhas. É por isso que eles merecem uma explicação mais na frente:

A condição STA ou Start é uma série de valores, como uma conquista, isso deve ser verdadeiro para começar a procurar uma Leaderboard. Uma vez que o STA for verdadeiro, o jogo irá ativar os outros tres

Se a condição Cancel (CAN) for verdadeira, ela irá cancelar todo o progresso relativo a sujeição da leaderboard. Se no entanto a condição Submit (SUB) for verdadeira, entao, o placar gerado na leaderboard irá ser enviado

Finalmente, o Valor (VAL) é um caso especial, e irá ser pegado da memória usando a formula iniciada na caixa de memória (memory box)

Formato do Endereço

O Endereço de memória para STA/CAN/SUB/VAL tem o segunte formato:

location/size prefix (the letters can be in lower case) example
bit0 0xM 0xM01234
bit1 0xN 0xN01234
bit2 0xO 0xO01234
bit3 0xP 0xP01234
bit4 0xQ 0xQ01234
bit5 0xR 0xR01234
bit6 0xS 0xS01234
bit7 0xT 0xT01234
Lower4 0xL 0xL01234
Upper4 0xU 0xU01234
8bit 0xH 0xH01234
16bit 0x 0x01234
32bit 0xX 0xX01234

location: localização / size: tamanho / prefix: prefixo / the letters can be in lower case: as letras podem ser minusculas / example: exemplo

Nota do tradutor: Não foi colocado na caixa acima pois iria alterar muito do texto original

Exemplo

O melhor lugar para iniciar é olhando uma das leaderboards existentes http://retroachievements.org/leaderboardList.php e desmontar para ver como funciona. Nós iremos usar o Green Hill Act 1 (Sonic the Hedgehog) Leaderboard para este propósito. Vamos ver como fica:

new_leaderboard2

O campo Titulo/Descrição são um pouco óbvio.

O Tipo é "Tempo (Frame)". Em Sonic a cada 60 frames é 1 segundo, entao eles irao monitorar o tempo usando os frames.

A caixa marcada Lower Is Better está marcada, entao aquele que fizer o tempo mais curto será o #1.

Agora nos vamos explicar as partes mais importantes.

Iniciar Condições

STA: 0xfe10=h0000_0xhf601=h0c_d0xhf601!=h0c_0xfff0=0

  • 0xfe10=h0000: Se o endereço da RAM 0xfe10 é equivalente hex 0000,
  • _: E,
  • 0xhf601=h0c: Se o endereço da RAM 8-bits 0xf601 é equivalente para hex 0c,
  • _: E,
  • d0xhf601!=h0c: Se o endereço da RAM 8-bits anterior 0xf601 NÃO é equivalente ao 0c,
  • _: E,
  • 0xfff0=0 Se o endereço da RAM 0xfff0 é equivalente ao 0.

Esto parece ser intimidador, porque nos nao sabemos o que esse endereço diz. É por isso que o Code Note na coluna direita é de bastante ajuda! Voce pode ser como esses endereços estão classificados na memoria. Em nosso exemplo nos temos:

  • 0xfe10 é o nivel, e espera-se que seja 0 (o primeiro nivel).
  • 0xf601 é um endereço de memória de 8 bits, e nos usamos o prefixo '0xh' em vez de '0x' para significar isso. 0xf601 é o modo de tela. A segunda e terceira parte do inicio desta afirmação está dizendo "o atual modo deveria ser 'ingame' (0c) e o modo anterior NAO deve ser 'ingame'. Note que 'd' representa delta, ou "o valor do frame anterior". Em outras palavras, isto ativa se caso iniciarmos um nivel (o início do nível, quando queremos começar a testar seu tempo).
  • Finalmente nos alem de esperar que 0xfff0 seja aquivalente a 0, porque 0xfff0 é o modo de demonstração e nos não queremos enviar pontuações para a leaderboard quando a demo estiver ativa!

Condições de Cancelamento

CAN: 0xhfe13<d0xhfe13

  • 0xfe13 é o numero de vidas.

A seção de cancelamento checa se o contador de VIDAS do jogar se tormar menor. Literalmente, isto diz "Cancela se o ATUAL valor em 0xfe13 é menor que o valor ANTERIOR em 0xfe13. Nos queremos que faça isso porque voce pode alcançar o checkpoint final e correr fora do tempo, resetando seu contador para 0:00. Nos nao queremos permitir isso, porque isto nao é a forma correta de completar o nivel. Entao, se o jogardor morrer, nos resetamos o progresso do leaderboard dele.

Condiçoes de envio

SUB: 0xf7cc!=0_d0xf7cc=0

  • 0xf7cc isto é a bandeira de final de fase, não-interativo.

A seção de envio checa se o frame atual tem o marcador de 'endlevel' (fim de fase) for para verdadeiro (ou !=0, 'naozero'), e o frame anterior (delta) tem isto para ser falso (ou =0, 'zero'). Isto sugere que o jogador chegou ao fim do nivel, e provou ser um benchmark bastante robusto

Dica: isto pode ser util para observar estes valores na memória para ver como eles executam, e que tipo de valores eles terminam em diferentes circunstancias.

Interpretador de Valores

VAL: 0xhfe24*1_0xhfe25*60_0xhfe22*3600

Finalmente, valores. Uma vez que o jogador chegou ao inicio da condição, elel irão ser mostrados em uma caixa quue permanece na tela, aparecendo o progresso deles ate agora. Se é uma leaderboard de tempo, será um relógio, e se for uma pontuação, será apenas o valor. Se eles cumprirem a condição de cancelamento, eles serão informados de que eles falharam, e o pop-up será removido. Se caso o jogador chegar com sucesso à condição de envio, o valor atual será pego e submetido como pontuação. o pop-up ingame irá informar o jogador o tao longe da leaderboard, e a posição deles na leaderboard.

A condição de valor é especial em poucas maneiras. Ele é avaliado constantemente e exibido na tela o tempo todo quando a leaderboard está ativa. Isto nao funciona como as outras condiçoes. isto espera endereços da seguinte maneira:

endereço*modificador (endereço tempo modificador)

e usa o _ sublinhado como um 'plus'. O * asterisco significa 'multiplo', entao no valor

0xhfe24*1_0xhfe25*60_0xhfe22*3600

representa:

8-bit 0xfe24 vezes 1, PLUS 8-bit 0xfe25 vezes 60, PLUS 8-bit 0xfe22 vezes 3600

A razão para isso é que os valores em cada um desses endereços significam frames, segundos e minutos respectivamentes. Quando nos adicionamos esses valores juntos, nos conseguimos um grande total em frames que vamos enviar para o "Banco de dados".

Lembre que o campo 'Formato' pode ser Pontuação, Tempo (Frames), Tempo (Milisegundos) ou Valor. Tempo(Frames) é o mais comum, e representa 'frames'. Tempo (Milisegundos) espera um valor que nos podemos converver diretamente para milisegundos. (Super Mario Kart usa isso). No entanto, para converter um valor em frame dentro de um formato "para ser lidos por humanos", nos devemos dividiu o valor por 60 para uma representação de segundos correta, e um valor em milisegundos deve ser dividido por 100 para conseguir o numero de segundos. Isso é usado no site e no aplicativo para exibir o valor apropriadamente, e é importante para distinguir, para que possamos ter certeza de obter o valor mais preciso do emulador, usando qualquer formato que eles usem para registrar o tempo.

Ajuda Adicional

Infelizmente há MUITAS maneiras de este processo dar errado, entao, se voce tiver algum problema, sinta-se livre pra pedir ajuda em nosso servidor do Discord.

Se voce quer praticar, é altamente recomendado criar sua propria leaderboard e tentar alguma coisa em um novo jogo, melhor que usar uma leaderboard existente

Por favor, lembre-se que esses arquivos são puxados diretamente para o jogo de alguém se eles decidirem jogá-lo, e uma má formação de endereço de memória ou linha pode causar um crash no emulador, entao por favor, teste seu codigo da leaderboard!

Guidelines

General

Achievement Development

WIP


Portugues

Geral

Desenvolvedores


Español

General

Desarrolladores

Clone this wiki locally