Era uma vez, os dados salvos eram imutáveis e intocáveis; quando você vendia seu cartucho de jogo ou sua bateria interna morria, seu precioso progresso se perdia para sempre. Contudo, na era moderna, os dados salvos são armazenados na nuvem, sempre acessíveis, mesmo que você mude de console.
Com a emulação se tornando uma das maneiras mais convenientes de jogar jogos clássicos, muitos de nós enfrentamos o desafio de gerenciar e migrar nossos dados salvos em várias plataformas, como dispositivos portáteis de emulação, PCs e até smartphones. O problema é que esses dados não são fáceis de gerenciar; diferentes emuladores criam diferentes arquivos de salvamento, e organizá-los à medida que você atualiza seu equipamento pode se tornar um verdadeiro pesadelo.
Euan Forrester se propôs a enfrentar essa questão complexa. Ele é o criador do indispensável Conversor de Arquivos Salvos, uma ferramenta online que permite converter dados salvos de uma ampla variedade de consoles de forma simples, para que possam ser utilizados em plataformas como Retron 5, cartuchos flash, MiSTer FPGA e muito mais.
Empolgados para aprender mais sobre esse projeto incrível, tivemos uma conversa com Forrester.
Pergunta: O que te inspirou a criar a ferramenta Conversor de Arquivos Salvos?
Resposta: Não fui atrás de fazer nada disso. Eu só queria copiar os arquivos salvos dos meus cartuchos antes que as baterias morressem. Comecei escrevendo uma ferramenta simples de linha de comando para converter arquivos salvos do Retron 5. Eu tinha visto um vídeo no My Life in Gaming sobre como preservar arquivos salvos de antigos cartuchos e comentei que o Retron 5 era a forma mais barata de começar. Então comprei um e comecei a copiar os saves dos meus cartuchos.
O Retron 5 tem a fama de corromper salvamentos, então queria testar meus salvamentos em um emulador. Escrevi meu próprio conversor para arquivos salvos do Retron 5, porque o que existia era apenas para Windows, e eu uso Mac. Como muitos programadores, fiz uma ferramenta simples de linha de comando. O problema foi que, quando comprei alguns jogos novos e retornei à minha ferramenta meses depois, havia esquecido completamente como usá-la. Parecia tão simples quando escrevi, mas ao voltar, parecia pouco intuitiva e complicada.
Eu precisava criar uma interface de usuário melhor. Fui pesquisar e descobri que poderia ler um arquivo, processá-lo e reescrevê-lo usando um navegador. Isso parecia mais simples do que tentar desenvolver um aplicativo para Mac. Reescrevi minha ferramenta como um site, registrei um domínio e coloquei no ar.
Com o tempo, eu queria outros conversores. Em Zelda Four Swords no GBA, queria jogar a nova dungeon de jogador único no meu cartucho, sem precisar fazer a parte multiplayer. Existem saves no GameFAQs que desbloqueiam isso, mas estão em um formato diferente. Queria ser capaz de pegar meu save de Suikoden do PS1 e carregá-lo no Suikoden 2 no meu PSP, pois não podia bancar uma cópia física do segundo jogo no PS1.
Essas conversões eram surpreendentemente complicadas de fazer na época. Para converter o salvamento do Zelda, teria que baixar um emulador GBA inteiro, e usei 2 ou 3 ferramentas para converter o save do PS1. Assim, resolvi investigar e entender esses formatos de arquivo. Li o código do emulador GBA e dos conversores de PS1 e usei isso para criar meus próprios conversores mais simples e colocá-los no site.
Nesse momento, percebi que esse seria um grande projeto para fazer como pai que fica em casa. Podia trabalhar em um projeto pequeno, uma ferramenta para um formato específico, e depois publicá-la. Não exigia muito tempo, mas ainda assim era uma realização. Não tenho tempo para trabalhar em um grande projeto, pois estou sempre sendo interrompido, e isso me dá uma ideia da minha vida anterior como programador de jogos.
Com o tempo, esses pequenos projetos se tornaram um grande projeto, eu acho.
Qual foi o desafio técnico mais significativo ao criar a ferramenta?
O maior desafio técnico provavelmente foi o formato de save do Sega CD, que também acabou se tornando uma das ferramentas menos usadas no site! Sinto um orgulho especial disso, no entanto, porque foi a primeira vez que alguém entrou em contato comigo com um código que eles escreveram.
O usuário dele no GitHub é superctr, e ele havia acabado de reverter o formato de save do Sega CD. Esse formato é muito difícil de ler porque os dados podem (opcionalmente) estar intercalados com informações de correção de erros, então, em um editor hex, parece tudo um caos. Anteriormente, eu entrei em contato com o autor de um dos emuladores mais proeminentes do Genesis para perguntar sobre o formato de save do Sega CD, e até ele não sabia como funcionava, dizendo que o BIOS apenas gerencia tudo isso para o emulador. Então, o trabalho de superctr foi realmente impressionante.
O repositório do superctr foi revertido a partir do BIOS do Sega CD, então o código é bastante complexo e eu achei difícil ver “através” do código para entender o formato subjacente. E embora a correção de erros fosse baseada em algoritmos comuns, eles tinham implementações personalizadas que alteravam a saída do padrão que você esperaria. Passei bastante tempo tentando encontrar bibliotecas padrão para esses algoritmos que produzissem a mesma saída antes de ter que desistir e escrever minha própria versão baseada nas implementações do superctr.
O desafio mais engraçado, no entanto, tem sido a caça ao tesouro. A fase de pesquisa de cada formato é definitivamente a minha parte favorita. Por exemplo, para as ferramentas do Sega Saturn que lancei recentemente, precisei ler um post de fórum de 15 anos atrás, alguns documentos técnicos da Sega de 30 anos, códigos em vários repositórios do GitHub, e um post do Reddit traduzido por máquina. Gosto de reunir essas informações que ninguém realmente deveria saber.
A dificuldade de fazer isso se tornou também uma das minhas principais motivações para o site: ser um único lugar de código aberto onde as pessoas podem encontrar descrições em inglês simples de todos esses formatos, juntamente com códigos funcionais e testes. Não deveria ser tão difícil encontrar informações sobre formatos de arquivos salvos, então estou tentando facilitar um pouco isso.
Além de preservar informações sobre os formatos, preservar antigos arquivos salvos se tornou uma grande motivação para mim. Eles podem estar arquivados em lugares como GameFAQs ou salvamentos de infância encontrados no hardware individual de algumas pessoas. Muitos desses arquivos eram ilegíveis sem precisar pesquisar várias ferramentas, algumas das quais podem ser difíceis de fazer funcionar em hardware moderno, e é bom ajudar a tornar esses arquivos úteis novamente.
Como tem sido o feedback da comunidade?
O feedback da comunidade mudou completamente a direção do site. Nos primeiros um ou dois anos do projeto, meu objetivo era fazer um conversor para cada formato listado no GameFAQs. Mas um dia um membro da comunidade MiSTer, birdybro, entrou em contato comigo pelo GitHub. Ele disse que era difícil para os usuários converter arquivos salvos do Sega Genesis para o MiSTer e perguntou se eu consideraria adicionar um conversor para eles no site.
O suporte para o cartucho flash Saroo do Saturno também é incluído no Conversor de Arquivos Salvos.
Há uma citação do Steve Jobs que gosto muito: “As pessoas acham que foco significa dizer sim à coisa que você precisa focar. Mas isso não é o que significa. Significa dizer não a cem outras boas ideias que existem. Você tem que escolher cuidadosamente. Estou tão orgulhoso das coisas que não fiz quanto das coisas que fiz. Inovação é dizer não a 1.000 coisas.”
Então, inicialmente, eu disse não. Era uma boa ideia, mas não se encaixava no foco que eu tinha para o site. Mas depois pensei mais sobre isso. Percebi que parte da minha rejeição era que eu não via como isso se encaixaria na interface do site: Sega Genesis no MiSTer parecia muito específico comparado a tudo o que havia lá. Refleti mais sobre isso e percebi que poderia criar uma página no site para todas as plataformas no MiSTer, algo semelhante à página que eu tinha para todas as plataformas do Wii Virtual Console (um dos formatos encontrados no GameFAQs).
Percebi que minha outra objeção era que o trabalho não soava muito interessante. O Sega Genesis tem uma peculiaridade de hardware em que lê um chip SRAM de 8 bits do cartucho por um ônibus de 16 bits. Portanto, cada byte de 8 bits lido é “expandido” para 16 bits, com os bits extras simplesmente preenchidos com 1s. O autor do núcleo do MiSTer decidiu que essa peculiaridade fosse refletida nos arquivos salvos, enquanto os autores da maioria dos emuladores de software escolheram não fazer isso. Nenhuma abordagem é mais “correta” que a outra, mas elas são diferentes, então os arquivos não são compatíveis.
Escrever um conversor para essa transformação é bem trivial e, honestamente, eu simplesmente não estava muito interessado em fazê-lo. Mas o birdybro concordou em me fornecer arquivos salvos de todos os núcleos MiSTer de consoles retro, assim, a parte da “caça ao tesouro” de examinar todos esses arquivos para encontrar outras peculiaridades foi mais interessante. Estou feliz que ele fez isso. A página do MiSTer rapidamente se tornou a mais utilizada do site e, hoje, representa quase metade dos usuários mensais totais do site.
Percebi com a experiência do MiSTer que a maioria das pessoas não queria o que eu estava construindo e, em vez disso, desejavam transferir seus próprios arquivos salvos entre seus dispositivos. Mudei completamente de direção e me concentrei em outros lugares onde as pessoas poderiam ter arquivos salvos que gostariam de transferir, como cartuchos flash e emuladores online. Mas nada disso teve tanto impacto quanto adicionar suporte para o MiSTer.
Smartphones estão se tornando cada vez mais a plataforma de emulação escolhida para muitos jogadores retro, então ser capaz de mover dados salvos é de extrema importância.
Mas, voltando ao tópico de dizer “não”, uma coisa que não adicionei suporte é o Analogue Pocket. Não porque não goste, mas devido à proliferação de núcleos: não parece haver um “principal” núcleo do Sega Genesis, por exemplo. Assim, isso parecia um pesadelo de interface. Tampouco recebi muitos feedbacks de que as pessoas gostariam que fosse adicionado, já que a página do MiSTer parece funcionar bem para o Pocket para a maioria das pessoas.
Estou tentando manter meu ponto de vista de dizer não para algumas coisas para manter o foco, mas também tentando ser um pouco mais aberto. É um equilíbrio difícil de alcançar e, às vezes, eu acerto e outras vezes, erro.
Há algum aspecto da ferramenta que você está ansioso para melhorar ou mudar?
Eu luto constantemente com a interface do site. É importante para mim que pessoas não técnicas possam utilizar o site. Conversando com quem usa o site, a vasta maioria delas não é técnica e isso é algo do qual estou realmente orgulhoso. Encontro isso muito interessante e desafiador: pegar essa coisa super técnica de reorganizar bytes em um arquivo, que pode estar em diversos formatos, cada um com suas próprias exceções, armadilhas, necessidades de dados extras e esquisitices gerais, e torná-la acessível a qualquer um.
Uma questão que vejo surgir frequentemente é alguém que diz “tenho esse arquivo e quero jogá-lo”, mas não sabe o formato do arquivo e, às vezes, nem sabe de onde ele vem ou realmente nada sobre ele. Um problema relacionado é que a interface do site cresceu bastante com uma infinidade de formatos listados no topo da tela.
Tive algumas ideias para mudar a interface para que fosse apenas uma caixa única, não muito diferente da interface do Google, onde o usuário simplesmente insere um arquivo e o site diz todas as coisas que pode fazer com aquele arquivo, permitindo que ele selecione uma.
Quando não está codificando, Forrester gosta de passar tempo com sua família (ele é o que está à direita, caso você estivesse se perguntando).
Vou ter que pensar cuidadosamente sobre o que é tecnicamente viável ou não com essa abordagem e quais são as limitações. Certamente, existem muitos arquivos, como os saves brutos da maioria dos cartuchos, em que você mal consegue identificar algo apenas olhando para eles, e você precisa de mais contexto. Portanto, continuo adiando isso até que o site esteja “concluído” e eu conheça todos os formatos que o site vai suportar, para que eu possa fazer uma melhor avaliação.
Ou talvez seja apenas procrastinação. Não consigo discernir.
O Conversor de Arquivos Salvos agora cobre uma ampla gama de plataformas e dispositivos. O que vem a seguir para o projeto?
Meus próprios objetivos pessoais para o projeto são terminar o suporte até a era do PlayStation 2, ou seja, adicionar suporte para PS2, GameCube, Xbox e Dreamcast. Consoles posteriores, na era do PS3/X360 e além, tenho menos interesse pessoal e também acho que há menos necessidade de ferramentas, pois os consoles são mais modernos, com portas USB, por exemplo. Então, há maneiras de transferir arquivos salvos para dentro e fora deles que não envolvem dispositivos esotéricos como o GameShark, que impõem seus próprios formatos aos arquivos.
A coisa mais importante que obtive com esse projeto foram as colaborações e amizades, e algo que gostaria de ter mais são encontros com mais pessoas que estão fazendo algo com arquivos salvos de jogos retro.
Trabalhei por um tempo com JanErikGunnar no GitHub que escreveu um código que utilizei em grande parte para minha conversão do Wii Virtual Console. Mas ele estava perdendo um console: o TurboGrafx-16. Então pedi a ele para dar outra olhada e, talvez, incentivei sua curiosidade um pouco, e ele encontrou uma solução que eu não havia conseguido descobrir. Mas então consegui melhorar sua solução e, em seguida, ele pôde também melhorar meu código. Esse tipo de colaboração em que cada um melhora o trabalho do outro foi muito raro na minha carreira e eu realmente valorizei isso aqui com ele.
Da mesma forma, comecei recentemente a conversar com dparrino no GitHub quando percebi que ele estava trabalhando em algumas questões de salvamento do Sega Saturn logo após eu ter cumprido meu trabalho. E novamente, poder falar sobre essas coisas com alguém que é curioso, motivado, inteligente e que também aborda problemas de maneira diferente de mim, é extremamente gratificante. Espero que possamos tornar o trabalho uns dos outros melhores também.
Para o próprio site, fiquei tão surpreso com o pedido para adicionar suporte para o MiSTer e pela resposta da comunidade para adicionar essas funcionalidades que estou ansioso para ser surpreendido novamente.
Como as pessoas podem apoiar esse projeto?
Minha coisa favorita é receber um relatório de bugs. Isso significa que alguém estava usando o site e o que estava fazendo nele era suficientemente importante para que eles dedicassem um tempo para me escrever. Isso também melhora o site para todos: é fácil escrever código para converter os básicos de um formato, mas só quando algumas milhares de pessoas testaram isso é que você encontra todas as estranhas exceções e casos extremos de que precisa para realmente escrever um código sólido. A maneira mais fácil de fazer isso é se juntar ao Discord.
O Discord também me ajuda a ficar atualizado sobre como as pessoas estão usando o site e o que está acontecendo no mundo dos jogos retro. E fazer perguntas me ajuda a preencher a FAQ que mantenho lá, o que, por sua vez, torna a FAQ mais útil para outros. É um ótimo lugar para pedir novas funcionalidades também.
A maioria das pessoas encontra o site pelo Google, então compartilhar o link ajuda a melhorar a classificação do site na pesquisa do Google, o que, por sua vez, torna mais provável que ajude alguém.
Por fim, as pessoas podem fazer doações para o site. Um dia, fiz um pequeno botão do PayPal depois que um usuário me enviou um e-mail perguntando como poderia fazer uma doação para o site, e desde então, honestamente, fico surpreso com quantas vezes isso realmente ilumina meu dia quando alguém clica nele. Eu costumava zombar quando ouvia atletas ou músicos dizendo que “fizeram isso pelos fãs”. Mas agora eu vejo a solidão de se esforçar em algo sozinho, sem saber se alguém se importa ou se vai usar. Quando alguém dedica um tempo para doar mesmo alguns dólares, sinto-me nas nuvens, e corro para contar à minha esposa e ao meu filho. Então, a criança diz: “Isso é legal, pai”, e volta a fazer coisas de criança, e eu volto um pouco à realidade.
Mas sim, é bom trabalhar em algo que as pessoas realmente usam. Não acho que teria tanta motivação para trabalhar em algo só para mim.