Como você pode definir o NES RNG para um estado conhecido?

Dec 23 2020

O Campeonato Mundial de Tetris Clássico usa consoles NES originais modificados para fornecer o mesmo RNG para ambos os jogadores:

Os jogadores TERÃO o mesmo RNG

Estou me perguntando como isso foi feito. Então, minha pergunta é dupla:

  1. Qual semente aleatória é usada pelo NES?
  2. Como essa semente pode ser manipulada?

Respostas

6 Tommy Feb 11 2021 at 02:26

Community Wiki, pois não está claro para mim por que @JaapJorisVens excluiu sua resposta, visto que ela parece conter as pistas necessárias:

Os carrinhos são carrinhos especiais que fizemos que contêm 1000 jogos selecionáveis. Vale a pena mencionar que os carrinhos são na verdade adaptadores - essencialmente Game Genies - que não fazem nada a menos que você tenha um carrinho NES Tetris original conectado.

Cada um dos 1000 jogos corresponde a uma semente aleatória única que inicializa o RNG para cada jogo. A semente é iterada uma vez por peça para produzir a sequência. ...

Parte do algoritmo RNG no carrinho faz uso de tabelas bastante grandes ... A cada ano, embaralhamos o conteúdo dessas tabelas para fazer um novo carrinho.

Então:

  • o Tetris original é usado;
  • um cartucho específico da competição atua como passagem para substituir o gerador de números aleatórios de Tetris; e
  • especificamente, esse dispositivo de passagem detecta quando o Tetris está realizando sua sequência de novas peças e, nesse ponto, insere o próximo número aleatório.

O próprio NES não gera números aleatórios inerentemente, é um processo por jogo, implementado da forma que cada jogo achar necessário. Para os fins desta competição, eles criaram um intermediário que substitui seus próprios números aleatórios, gerando-os exatamente sob demanda.

Por outras partes da resposta de Jaap:

A matemática envolvida na 'iteração' da semente é bastante detalhada, envolvendo um LFSR (como é usado no carrinho NES padrão), alguns contadores em loop e algumas tabelas de pesquisa. Antes de cada jogo, um número aleatório entre 0 e 999 é escolhido e os jogadores são informados sobre qual jogo escolher no carrinho. Depois que um jogo é jogado, ele nunca é jogado novamente.

Portanto, tanto a nova implementação quanto a original são registradores de deslocamento de feedback linear ('LFSR's), que são registradores de deslocamento em que o bit que sai é ORd exclusivo para alguma outra combinação de bits no estado atual. Por meio disso, um registrador de n bits pode iterar por 2 n  - 1 estados em uma sequência fixa que é suficientemente oblíqua para que um ser humano possa interpretá-la como aleatória.

Dito isso, parece que o dispositivo de passagem vai além no uso do LFSR para indexar tabelas de números aleatórios, então é provável que o LFSR esteja sendo usado apenas porque é mais fácil de juntar do que um contador de ondulação clássico.

Muito provavelmente o original apenas usa a saída de seu software LFSR diretamente.