Você não está passando por déjà vu. Se parece que já leu isso antes, é porque estamos republicando algumas de nossas características favoritas do ano passado como parte das comemorações do nosso "Melhores de 2024". Se isso é novo para você, aproveite a leitura pela primeira vez! Este texto foi originalmente publicado em 5 de julho de 2024.
O que é curioso na comunidade de jogos retro? Toda a crítica que a Working Designs recebe por alterar o nível de dificuldade dos jogos que localizou. Fãs na internet protestam intensamente contra essas mudanças. Como já mostramos em artigos anteriores, nós da Time Extension adoramos a Working Designs. (Mesmo que o fundador, Victor Ireland, não responda mais nossos e-mails; ainda estamos esperando aquela entrevista, Vic, nos ligue! Queremos ser amigos!)
No entanto, apesar de tudo isso, os fãs dão um crédito a mais à Konami, mesmo sendo a empresa bem pior no que diz respeito a mutilar seus próprios jogos durante a localização. A Konami ficou conhecida por tornar os jogos mais difíceis para o mercado americano (e, portanto, também para o PAL).
The Adventures of Bayou Billy no NES foi tão difícil que os fãs o consertaram não uma, mas duas vezes! Contra III no SNES teve os códigos de cheat removidos, as continuações infinitas descartadas, além do acesso ao chefe oculto não estar mais disponível no modo Normal. Fãs também corrigiram isso com um patch de restauração. Contra: Hard Corps no Mega Drive teve a barra de vida removida para torná-lo desnecessariamente difícil – e esse jogo já era complicado mesmo com a barra de vida! Novamente, os fãs corrigiram isso. Castlevania III no NES, por sua vez, teve tantas alterações absurdas que nem sabemos por onde começar. A maioria das mudanças apenas aumentou a dificuldade, mas muitas delas simplesmente diluíram o design inteligente do original – por que, por exemplo, alteraram o dano único que cada inimigo causa, para um valor de dano padrão baseado na fase? Isso torna o jogo superficial e desinteressante.
A elevação da dificuldade durante a localização vai contra a visão da equipe original. Mas por quê? Por que os editores americanos fizeram essas mudanças? Há muito especulação na internet, mas se olharmos as citações de entrevistas, encontramos um tema recorrente.
Ayano Koshiro, em uma entrevista com a Time Extension, disse que o motivo para ActRaiser 2 ser tão difícil foi devido ao editor americano da Enix:
"O motivo para os diferentes níveis de dificuldade foi, novamente, a filial dos EUA da Enix. Eles queriam que fizéssemos o jogo mais difícil porque, aparentemente, as pessoas estavam reclamando que tiraram uma semana de folga para jogar o primeiro ActRaiser e então chegaram aos créditos após apenas dois dias. Elas compraram o jogo e demoraram bem menos do que uma semana. E essas reclamações acabaram causando a mudança na dificuldade para a versão americana. Esses são valores simplesmente muito diferentes. Nós já tínhamos tornado o jogo um pouco mais difícil do que seu predecessor. Mas então a Enix veio até nós com um feedback pedindo que fosse muito mais difícil. Assim, analisamos os valores de dano do herói e dos inimigos, ajustamos bastante e, em algum ponto, mal tínhamos mais controle. Fomos pagos para fazer assim."
Kouji Yokota, designer e artista de Gaiares para Mega Drive, descreveu durante o projeto Untold History of Japanese Game Developers como a Renovation Products nos EUA exigia maior dificuldade:
"Gaiares foi originalmente pensado para o mercado externo, desde o início. Mas no exterior, havia uma tendência das pessoas comprarem e jogarem um jogo e depois o venderem imediatamente, bem como sistemas de aluguel. O editor no exterior pediu que fizéssemos o jogo mais difícil para que não pudesse ser alugado e terminado facilmente. Então, fomos até o editor no exterior para mostrar a eles a demonstração, e então disseram: ‘Você deve torná-lo ainda mais difícil!’ A partir desse momento, começamos a nos preocupar, mas atendemos ao pedido deles. Assim, o jogo acabou se tornando muito mais difícil quando foi lançado."
Victor Ireland, da Working Designs, reafirmou isso ao explicar por que Popful Mail foi tornado mais difícil durante a localização:
"A versão japonesa era muito fácil, e não havia um real desafio ou estratégia em nenhum dos chefes. No Japão, você compra um jogo e o possui. Nos EUA, especialmente na época, as políticas de devolução eram extremamente liberais. Deixar o jogo como estava significaria garantir que uma parte substancial dos jogos seria ‘aluguel prolongado’ às nossas custas."
Masato Maegawa, da Treasure, disse o mesmo em relação a Dynamite Headdy no Mega Drive:
"Nos EUA, existe um sistema de aluguel de jogos, e se eles terminam um jogo alugado, não o comprarão… Eu pensei: ‘Isso é realmente verdade?’, mas disse: ‘Se vocês querem torná-lo difícil, vamos torná-lo o mais difícil possível’, então o fiz o mais complicado que pudéssemos."
Não temos citações explicativas para os jogos específicos da Konami mencionados no início, mas é seguro presumir que todas essas mudanças, para vários jogos, foram resultado de preocupações com a possibilidade de crianças americanas alugarem um título, terminá-lo e depois não comprá-lo. Na mente dos editores americanos, claramente, a forma de incentivar as crianças a gastar US$ 50 ou mais era tornar um jogo tão punidor que se esforçariam para passar do segundo nível… Sim, porque isso realmente nos faria querer gastar nosso dinheiro de forma limitada.
Enfim, se você explorar o catálogo da Konami, encontrará inúmeros desastres de localização – incluindo Tiny Toon Adventures: Buster Busts Loose no SNES.
A versão japonesa tinha dois níveis de dificuldade: Kids e Normal. O modo Kids cortava os níveis em cerca de 60%, então, jogando nele, você não veria o final e experienciaria menos da metade do jogo. No entanto, o movimento de impulso do Buster poderia derrotar inimigos, tornando-o mais fácil. A versão japonesa também tinha continuações infinitas e um sistema de senhas, que funcionava em ambas as dificuldades. Se você chegasse aos créditos no modo Kids, teria apenas um texto rolando em um fundo preto, enquanto no Normal, você teria o final adequado e um divertido momento final com os personagens do jogo brincando. Era um equilíbrio perfeito.
A versão americana (e, por extensão, as lançadas na Europa) adicionou um modo Challenge mais difícil, onde você tinha apenas uma única unidade de energia em vez de três. Reduziu as continuações para 5 no Normal e 3 no Challenge. O pior de tudo, desativou as senhas para o Normal; inserir uma senha automaticamente te levava para o modo Kids, o que era uma pena, já que você perderia a maior parte do jogo. Também desativou a senha do nível 5 para Buster’s Sky Jinks, já que não podia ser jogado no modo Kids. Ah, e só para dizer "f**k you" para seus clientes, a Konami dos EUA trancou o divertido crédito atrás da dificuldade Challenge! Todo o processo foi um verdadeiro desastre.
A Total! atribuiu 87% ao jogo, mas chamou o modo Challenge de "piada". Algumas pessoas disseram que perder o sistema de senhas e ser forçado a jogar o jogo inteiro de uma vez só era aceitável, uma vez que era satisfatório vencê-lo. Essa é a atitude errada. Buster Busts Loose é um jogo maravilhoso, e ter senhas após cada nível permite que você acesse os níveis posteriores apenas pela alegria de jogá-los. O nível de Futebol Americano, por exemplo, é incomum e inventivo em como subverte o tradicional estilo de plataforma. Cada nível é diferente; vale a pena apreciá-los individualmente. A visão original da equipe japonesa para o jogo era ter senhas, e a Konami dos EUA que se danasse por achar que podia simplesmente mutilar o jogo.
Após seu lançamento em 1993, a imprensa adorou. A Super Play concedeu 89%. A GamesMaster deu 92%. A GameFan pontuou quase tão alto quanto Star Fox. A Total! avaliou em 87%, afirmando que o modo Challenge era tão difícil que parecia uma brincadeira da Konami. Para qualquer jovem entusiasta do SNES (ou do desenho animado), o jogo era cativante. Mas algo sempre parecia estranho… Por que o sistema de senhas sempre retornava para o modo Kids? Anos depois, ao descobrir a versão importada, a resposta foi revelada: a Konami dos EUA fez de novo um trabalho malfeito. Obrigado, pessoal.
Embora isso não importe se você estiver emulando (pode simplesmente salvar o estado de cada nível), se estiver jogando em hardware real, isso se tornará irritante. Então, decidimos corrigir as coisas!
Inicialmente, postamos simplesmente no fórum RHDN, na thread de "ideias para hacks". É onde pessoas com grandes ideias, mas habilidades limitadas, vão fazer sugestões. Para nossa surpresa, o hacker prolífico Bankbank enviou uma mensagem privada dizendo que seria fácil implementar, e talvez devêssemos colaborar. Ele faria a maior parte do trabalho pesado, mas como um tutorial para aprender a hackear código de assembler. Como descobrimos, ele não apenas é um hacker extremamente prolífico, mas também um desenvolvedor no Steam, criando jogos para sistemas legados como o Mega Drive (além de ser uma pessoa muito legal – obrigado pela ajuda).
Isso se revelou uma grande aventura. Esperamos que, uma vez que você tenha lido como tudo isso aconteceu, se sinta encorajado a tentar algumas hackeações você mesmo. É fácil com as ferramentas certas, é muito divertido e todos que apreciam jogos deveriam hackear ao menos uma vez! Utilizamos o emulador Mesen como nossa principal ferramenta de depuração e hackeação, pois é extremamente versátil e bastante simples.
Primeira coisa: descobrir qual valor de trabalho da RAM (WRAM) define a dificuldade e por que o jogo se força a entrar no modo Kids ao inserir uma senha. Se conseguirmos corrigir isso, os senhas funcionarão no Normal e no Challenge. Isso foi fácil, já que você apenas altera a dificuldade nas opções e observa os valores da WRAM mudarem. A maioria dos emuladores irá alertá-lo sobre valores que estão mudando, e como você não está fazendo mais nada no jogo, é fácil identificar.
Acontece que o byte $6C contém a configuração da dificuldade na WRAM. Mantenha isso em mente, pois $6C vai aparecer muito – a maioria das gambiarras desastradas da Konami dos EUA aqui giram em torno desse valor. Uma vez que você sabe disso, você pode fazer com que o Mesen o alerte sempre que o código do jogo referenciar esse valor. Cada vez que o jogo verifica se está no modo Kids ou Normal, ou qualquer outra coisa, para alterar algo, ele verifica o valor de $6C, e o emulador te avisará. Assim, você poderá alterar o código nesse ponto. O Bankbank enviou uma captura de tela mostrando como, após inserir uma senha corretamente, o código do jogo se referenciava ao valor de dificuldade, e há duas instruções: STZ e $6C.
O emulador Mesen explica até as instruções de assembler se você passar o mouse sobre elas, então é super fácil. Mas o Bankbank reiterou que STZ significa armazenar o valor zero (00) em o que vier a seguir. Significando que, após digitar uma senha, o jogo altera o valor da dificuldade para 00. Assim, Normal é 01 e Challenge é 02. Então, essas duas pequenas instruções (STZ e $6C) mudam a dificuldade para Kids. A solução? Substituir essas duas instruções por NOP, significando "sem operação". Ou, se você estiver editando o código hexadecimal diretamente, digite EA para o mesmo efeito. Com esse conhecimento, este autor abriu o Mesen, fez uma busca pelo endereço 91EA80 (como mostrado na tela) e substituiu STZ $6C por NOP NOP. O resultado? Ele não armazenou mais zero em $6C, significando que não haveria mais reset para o modo Kids!
Se você é um programador veterano, nossa explicação provavelmente soará como se fosse para crianças em idade pré-escolar, mas queremos que os leitores vejam como isso pode ser simples. Você muda um valor e faz com que o emulador rastreie, para descobrir onde ele está armazenado na WRAM. Você então faz com que o emulador te informe cada vez que o código do jogo referenciar esse valor da WRAM. Depois, você pode alterar o código do jogo. Simples.
Agora que sabíamos qual valor o jogo referenciava para dificuldade, também poderíamos corrigir os créditos finais. Usando o Mesen, este autor se pôs a alcançar a tela final no Normal e no Hard, criando saves para comparar os valores da WRAM e reintegrar a sequência correta de créditos. O Bankbank realizou o trabalho tedioso de voltar e avançar entre os saves, anotando as diferenças. Os créditos são um bloco fixo de código, sem vidas ou contadores, ou posicionamento de inimigos. As únicas diferenças devem ser a dificuldade ($6C, sendo 00, 01 ou 02) e o fundo.
A próxima parte foi mais complicada. Bankbank enviou uma tela explicando que ele havia encontrado onde verifica pouco antes de rodar os créditos. Primeiro, carrega o valor $6C e então compara para verificar se seu valor é 02 (Challenge) ou não, pois os créditos completos aparecem somente no modo Challenge. A seguir, há uma instrução de ramificação – de ramificar para os créditos completos ou não. Como corrigir isso? O Bankbank explicou que a próxima instrução usava STA, significando que armazena um valor na memória. Poderíamos usar NOP novamente nas três bytes subsequentes a STA; isso resolveria na marra. Ou poderíamos inverter STA com LDA – significando que fará o oposto, carregando um valor da memória. Fomos um pouco receosos com os detalhes técnicos, mas decidimos tentar trocar STA por LDA, e funcionou perfeitamente. Agora os créditos completos apareciam independentemente da dificuldade. É verdade que isso se desviou da versão japonesa, mas ninguém deveria jogar no modo Kids de qualquer forma, já que isso corta a jogabilidade. Além disso, não queríamos mexer mais – funcionou, vamos seguir em frente.
De qualquer forma, as senhas funcionam novamente, e os créditos completos podem ser vistos no Normal, trabalho feito. Certo? Não tão rápido.
Quando você morre e escolhe "fim" em vez de continuar, deveria mostrar a senha daquele nível. Mas isso acontece apenas no Kids, uma vez que as senhas não deveriam funcionar em dificuldades mais altas. Mas para uma experiência de jogo autêntica, os jogadores precisam conseguir ver as senhas.
Armado com um conhecimento básico, estava determinado a esclarecer isso eu mesmo!
Três saves nas telas de continuação (Kids, Normal e Challenge). Fazer com que o Mesen quebrasse toda vez que referenciava $6C. Assim, encontramos outro LDA (carregando um valor) e outro BEQ (ramificar caso seja igual). A princípio, testamos com tentativas e erros, tentando se LDA trocar por STA funcionaria, ou usando NOP, ou até STZ para reverter o valor para zero.
Nada. O modo Normal ainda ia diretamente para a tela título. Houve um sucesso parcial ao mudar $6C para $68 ou $82, dois valores que naquele momento específico eram 00. Isso teve o efeito de enganar o jogo a pensar que estava carregando $6C como se fosse 00, mas você pode adivinhar o problema aqui. Sem saber o que $68 ou $82 especificamente faziam, comportamentos estranhos poderiam surgir. Era possível fazer o emulador parar nesses dois valores, para ver o que eles faziam, mas isso seria tedioso. A solução precisava ser lógica e elegante.
Então, uma ideia surgiu – e se aquela instrução de ramificação fosse alterada? Pesquisar as instruções de assembler online revelou que BEQ tem seu oposto polar, BNE, que significa "ramificar se não for igual". Você imagina o que fizemos a seguir, certo? Trocamos BEQ por BNE e agora a senha mostrava apenas se você não estivesse jogando no modo Kids. Novamente, isso se desviou da versão japonesa, mas pensamos: o modo Kids tem senhas há mais de 30 anos, então isso é retribuição! (Além disso, foi simples e funcionou.)
Exceto que a senha que apareceu agora era um monte de gibberish. De volta ao depurador. Acontece que o jogo referenciava a dificuldade ($6C) novamente depois, para chamar a senha correta. Era outro BEQ, então trocamos por BNE de novo (duas vezes agora) e, voilà – a senha correta aparecia ao selecionar terminar. Mas apenas quando não estava no modo Kids.
Trabalho terminado, certo? Não. Lembra como dissemos que o nível Sky Jinks do Buster não podia ser acessado no jogo dos EUA? Você insere a senha e o jogo apenas bip como se estivesse errado. Isso precisava ser consertado, caso contrário, reimplementar as senhas seria um desperdício de tempo.
O Bankbank fez novamente o trabalho pesado e encontrou a seção do código que governava as senhas. Este autor estava preocupado que, já que a Konami excluiu essa parte, teríamos que encontrar uma forma de programar uma nova seção… Poderíamos pegar o código da versão japonesa? Havia espaço para adicioná-lo de volta?
Acontece que o código de programação ainda estava lá, destacando o quão mal feita foi a gambiarras da Konami dos EUA. O jogo verifica a senha do Sky Jinks, como deveria, mas a Konami inseriu uma linha de assembly suja onde, se o nível acessado igualasse 04, ramificaria como se uma senha errada tivesse sido inserida (é o 5º nível, mas se o primeiro é considerado 00, então você vê porque 04 é verificado). Eles nem se deram ao trabalho de deletar o código que conferia por essa senha. Bem, aquele BEQ não era útil, tínhamos que pará-lo. NOP NOP nos endereços 91EA5D e 91EA5E, talvez? Sim, isso funcionou muito bem. O código desonesto da Konami foi substituído por "sem operação", e a senha do Sky Jinks funcionou novamente, como deveria.
Se você está curioso, descobrimos que os seguintes códigos representavam os caracteres de senha:
00 – Babs
01 – Plucky Duck
02 – Montana Max
03 – Elmira
04 – Lady Duck
05 – Tweety Bird
06 – Gogo Dodo
07 – Bookworm
08 – Coyote
09 – Road Runner
Então a senha do Sky Jinks seria lida como 06 / 08 / 09.
Certo, então as senhas agora funcionavam no Normal, e o Normal mostrava senhas ao terminar o jogo, e os créditos foram consertados, e a senha do Sky Jinks funcionava novamente. Ufa!
O Bankbank sugeriu que tentássemos reinstaurar os gráficos de finalização. Na versão japonesa, há uma imagem única do Buster ou da Babs, dependendo da dificuldade, enquanto a versão americana apenas reutiliza a tela título. Honestamente, nem estávamos certos de que os dados da ROM ainda continham aqueles gráficos. Na opinião deste autor, já estávamos perto o suficiente para um lançamento V1.0.
O resultado final não foi exatamente uma reversão à versão japonesa. Mantivemos o modo Challenge e o modo Kids perdeu a senha, e todos os modos agora têm os créditos completos. Poderia ser feito melhor? Obviamente que sim, mas como um primeiro esforço em hackear assembly, estamos satisfeitos com o resultado e pretendemos fazer mais no futuro.
Hackear código de jogos é extremamente satisfatório. Não precisa ser tão complicado assim. Se você encontrar as coordenadas X,Y de um personagem jogador, por exemplo, pode forçar os valores para colocar esse personagem fora das paredes, para experiências divertidas fora do mapa. Pode ser tão simples quanto te dar vidas extras, procurando por um valor específico.
Na verdade, me ocorre que a ajuda do Bankbank foi semelhante ao provérbio de dar a um homem uma rede de pescar. Com um pouco de orientação, começou a fazer sentido genuíno.
Conforme o Bankbank explicou:
"Eu acho que se mais pessoas tivessem exposição a assembly / depuradores, elas ficariam interessadas. Não há muitos lugares onde as pessoas possam aprender sobre isso, além daquela série de vídeos no Youtube chamada ‘Behind the Code’. Se você analisar o código, fizer anotações no desassemblador. Anote isso, entenda como a execução funciona, e tente rotular o máximo possível. Você também pode rotular endereços na WRAM, por exemplo, clique com o botão direito em $6C e pode escrever ‘dificuldade’. Uma vez que você compreende o fluxo da execução, estou falando sobre uma pequena seção do código, talvez 10 linhas, então pode descobrir como fazer modificações. Fazer coisas de maneira aleatória não é uma boa ideia; podem surgir consequências indesejadas. Apenas tome seu tempo; você pode usar o ponto e vírgula para fazer anotações no desassemblador enquanto a execução estiver pausada, e pode clicar com o botão direito e relabele as etiquetas azuis. Por exemplo, vai mostrar 80A64E, e você pode mudar isso para algo descritivo como FINAL_CREDITS."
Seguindo todo o conselho, criamos um patch IPS, submetemos online e confirmamos que o projeto estava pronto para lançamento. O Bankbank respondeu: "Viva! Mas é agridoce porque foi divertido trabalhar nisso, e agora acabou."
É um pouco, mas há muitas mais ideias de hack para brincar. Podemos voltar a isso mais tarde e talvez também ver se há anomalias nas versões do Reino Unido, Espanha ou Coreia. Enquanto isso, você pode encontrar nosso hack no Romhacks, enquanto o processo de submissão para RHDN o coloca na fila. Aproveite!
Você gostaria de mais artigos olhando para hackeação de maneira amadora? Recentemente, hackeamos o arquivo de salvamento NVRAM em Virtuoso para 3DO, e os resultados foram realmente estranhos. Também descobrimos que alguns jogos do PC Engine não usam hexadecimal nos bastidores! Além disso, brincar com os valores da WRAM de armas selecionadas em alguns jogos revelou coisas que os jogadores não deveriam acessar. Comente se você gostaria de mais.