terça-feira, 1 de março de 2016

Introdução básica ao emulador lsnes

Introdução


Lsnes é um emulador de Super Nintendo e GBC com rerecording, baseado nos cores bsnes e gambatte, respectivamente. Inclui todas as ferramentas necessárias para se fazer um tool-assisted speedrun. A principal diferença em relação aos demais emuladores com rerecording é que um movie está sempre ativo, ainda que o usuário não inicie um formalmente. Assim, é sempre possível recuperar o input após um glitch feito acidentalmente.
Futuramente, será feito um tutorial mais avançado e completo. Porém, esta página poderá receber atualizações, cujo histórico será listado no final. No presente tutorial, usaremos a versão rr2-beta23.

Download



Instalação


Baixe o instalador ou o pacote 7z, que não requer instalação; o que preferir.
Se for instalar, evite a pasta Arquivos de Programas, já que o emulador loga todas as informações num arquivo que fica no mesmo diretório e, para poder fazer isso nessa pasta, precisaria de permissão de administrador.
Então, clique no executável que se encontra na pasta de escolha, dependendo da plataforma desejada:
  • SNES: lsnes-bsnes.exe
  • Gameboy & variantes: lsnes-gambatte.exe
Duas janelas aparecerão, a principal pro jogo em si e uma auxiliar, com mensagens de log e para depuração, que pode ser fechada a qualquer momento.
A janela principal possui um painel lateral, que mostra o input e outras informações. Tal painel pode ser ocultado através de Configure > Show status panel.

tela de início do lsnes


Configurações


Clicando em Configure > Settings > All as tabs... permite configurar quase todas as opções do emulador. A seguir, enumeraremos de modo breve o propósito de cada aba:

Advanced: cada linha possui um nome autoexplicativo sobre seu propósito. Basta dar um click duplo para alterar/digitar o valor dessa opção.
Aliases: um alias é uma sequência de comandos internos do emulador. Executar um alias significa executar cada comando ordenadamente. Exemplo:
Alias: ResetLuaVM
Conteúdo (cada comando numa linha):
reset-lua
repaint
Bindings: um binding associa uma hotkey a um comando interno do emulador ou alias. Usando o exemplo anterior, poderíamos associar Shift + L ao alias ResetLuaVM. Assim, toda vez que o usuário apertar essa combinação de botões, o emulador executa o alias (que reseta o console Lua e apaga da tela quaisquer desenhos).

Controllers: atribui botões do teclado (ou joystick) aos botões virtuais do console em questão. É possível atribuir que mais de um botão do teclado seja usado pro mesmo propósito. Os modificadores (alt, ctrl, shift, meta) agem como as outras teclas. É possível também configurar autofire, hold e type com um duplo clique sobre o botão.
Hotkeys: para quem não quer mexer com bindings, essa aba oferece as opções mais usadas. Quaisquer modificações vão parar na aba Bindings.
Joysticks: autoexplicativo. Útil para configurar eixos.
URI shortcuts: cria pseudônimos para endereços web que contém um arquivo de movie. Por exemplo, o nome movie1 pode ser usado para a seguinte URL. Após fazer essa associação, vá em File > Load > Download Movie e digite movie1: (o dois pontos é necessário se for um pseudônimo) ou cole o endereço real.
Video: configura o tamanho da tela, tipo de escala e orientação.

Carregar ROM


Para iniciar um jogo, há duas maneiras principais:
  • carregando o arquivo do jogo e soltando sobre a janela do emulador
  • usando File > Load > ROM...
Alguns jogos (que usam chips especiais) necessitam de firmwares para funcionarem. Isso pode ser configurado através de Configure > Settings > Advanced, no campo Paths > Firmware, de modo que o emulador procurará na pasta selecionada os firmwares necessários. Alguns jogos exóticos ainda poderão requerer firmwares adicionais: File > Load > Multifile ROM.

Iniciar movie

Para iniciar um movie, basta ir em File > New > Movie. Uma janela aparecerá:


Alternate poll timings: aumenta a precisão da emulação em alguns casos bem específicos, como na execução de código arbitrário. Faltam detalhes sobre como isso funciona.
Don't support delayed resets: marque caso não queira resetar (usando o interruptor reset) o jogo durante o TAS.
Emulate saving each frame: salva cada frame virtualmente após a emulação. Faltam detalhes sobre como isso funciona.
Random initial state: Não marque, a menos que saiba o que estás fazendo. Faz com que a RAM do jogo se inicie num estado aleatório (por padrão, cada byte começa como $#55). A maioria dos jogos zera a RAM durante a inicialização, mas caso isso não ocorra, o estado inicial pode causar diferenças mais tarde (e dessincronizações).
Support hard resets: marque caso queira que o emulador leve em conta resets frios, em que o jogo é desligado e ligado.
Support mouse speeds: caso se utilize o mouse do SNES.
Port n Type: configure o tipo de controle em cada porta do sistema. Em geral, apenas a porta 1 é usada, como gamepad.
Initial RTC value: não faz diferença e pode ser deixado como está. Apenas um jogo utiliza o chip S-RTC.
Game name: escreva o nome do jogo.
Save prefix: escreva o prefixo usado nos savestates desse movie. É útil para não misturar com states de outros movies, portando é bom ter um nome único.
Anchor savestate: estado inicial do sistema. Em geral, deve ficar em branco. Caso queira começar o movie de um snapshot, é preciso salvar um state antes, abri-lo com um compactador de arquivos (7-zip recomendado) e extrair o membro savestate. Usar o arquivo lsmv diretamente irá causar problemas. Ainda não há uma opção de começar o movie "from now", como em outros emuladores.
SRAM srm: memória duradoura do cartucho. Num TAS oficial, deve ser deixado em branco.
Authors: deve conter um autor por linha. A parte antes de "|" é o nome real, após o nick. Exemplo:
Clark Kent|Superman
Bruce Wayne|Batman

Salvar/carregar states e movies

A configuração de hotkeys oferece o meio mais prático de salvar e carregar states numéricos. É possível fazer isso para arquivos quaisquer usando File > Load > State/Movie e File > Save > State/Movie. Além disso, cada state é um movie, pois registra todo o input anterior.

Ferramentas

Lua

Lua é uma linguagem de programação e também o nome do interpretador embutido no emulador, que permite um controle muito maior do usuário sobre o aplicativo. É possível executar um ou mais arquivos Lua, feitos por terceiros. Um tutorial sobre Lua está aqui. O pacote de download oferece um pdf com quase todas as funções disponíveis.
Para executar um comando Lua através da janela de mensagens, basta digitar L <comando> ou evaluate-lua <comando>.

Macros


Macros são ativados através de hotkeys (vide seção hotkeys acima). Um savestate decora se tal macro está ativo ou não. Essa correspondência entre hotkey e macro pode ser feita em Tools > Edit macros e ser salva num arquivo. Cada macro deve possuir um nome e um combo de botões. A sintaxe dos combos é simples:
  • Um botão que não está entre colchetes é injetado sozinho
  • Uma sequência de botões entre colchetes é injetado de uma vez
  • Um número após um botão, chave ou colchete indica que o botão ou sequência deverá ser repetido esse número de vezes
Exemplo: (<B)4Ss^2[>A]3      < , B , < , B , < , B , < , B , S , s , ^ , ^ , >A , >A , >A

A opção enabled serve apenas para permitir que o macro haja.
A opção Overwrite indica que o combo irá ser o único input levado em conta, ignorando aquilo que o usuário pressiona.
A opção OR indica que o combo irá se somar ao que o usuário pressionar.
A opção XOR indica que combo irá se somar ao que o usuário pressionar se, e somente se, determinado botão não está pressionado em ambos.

Memory Watch


Esta ferramenta permite mostrar ao usuário os valores da memória do jogo ao vivo, seja num painel a parte, seja na tela. Alguns cuidados importantes:
  • a área de memória deve ser especificada (na maioria dos casos deve ser WRAM)
  • Address pode ser em decimal (exemplo 0015) ou em hexadecimal (0x000F)
  • Format deve especificar como o valor deve ser mostrado. Deixar em branco mostra em decimal, usar %x mostra em hexadecimal. Outros formatos aqui.
Caso se opte por mostrar os valores no memory watch, deve-se clicar em Configure > Dedicated memory watch para visualizar.

Memory Search

Ferramenta de pesquisa na memória, de natureza eliminatória. Primeiramente, deve-se eliminar áreas de memória indesejáveis, clicando com o botão direito e selecionando Enabled VMAs. Clicar num botão compara cada valor da memória com seu valor durante o clique anterior. Se a comparação é falsa, então o endereço é eliminado. Apenas quando o número de resultados for pequeno, eles aparecem na parte debaixo da janela.

Edit movie


Permite editar o futuro de um movie no modo readonly. Também serve para a edição de branches.
  • O fundo vermelho indica que tal botão já foi computado, não sendo possível sua edição.
  • Clicar num botão modifica seu status. No caso de um eixo, cria uma janela para a edição de seu valor.
  • O botão F no início determina se o input seguinte será usado como frame, ao invés de ser usado como subframe. Tenha em mente que praticamente todos os jogos pedem por input apenas uma vez por frame de vídeo, e os subframes são inúteis nessas situações.
  • O botão R determina se o sistema será resetado logo em seguida, sendo que os números que o seguem determinam em quanto tempo isso ocorrerá.
  • Ao clicar com o botão direito, várias opções de edição aparecem.
  • Uma dessas opções é Branches. Um branch é uma ramificação do movie, uma sequência alternativa de inputs. Ao final, apenas um branch será rodado. Só é possível mudar de um branch para outro se ambos possuem um passado idêntico.

Um comentário: