É possível carregar um nível intransitável no Super Mario Maker?

Esta entrada é uma recontagem gratuita do vídeo. É possível fazer o upload de um nível impossível no Super Mario Maker? . Há um link para o vídeo The Impossible Level no vídeo, então eu vou recontá-lo também. Minha recontagem não pretende ser precisa, só quero compartilhar material interessante.

O que será discutido


Encontrar bugs no software pode ser muito diferente. Eu procuro erros nos códigos-fonte, nos arquivos binários, nos grandes complexos de software e até em alguns hardwares. Mas há uma área em que quase nunca fiz nada - a busca por erros em jogos de computador.

As pessoas passam muito tempo encontrando bugs nos jogos. Estes podem ser erros lógicos, matemáticos e até programadores. Alguém faz isso para olhar o jogo de um novo ângulo, enquanto alguém tenta passar o jogo pelo menos alguns segundos mais rápido do que qualquer outro jogador. Parece-me que foi a comunidade de velocistas (pessoas que jogam jogos de velocidade) que deu uma enorme contribuição à busca de falhas e erros no jogo. Mas economizaremos tempo durante a passagem em outro momento. Hoje é apenas uma história sobre como encontrar erros na lógica do jogo.

Em setembro de 2015, a Nintendo lançou o Super Mario Maker, um jogo de plataformas sobre o famoso encanador Mario. Uma das principais características do jogo foi a capacidade de os usuários criarem níveis (eles são chamados de cursos) e compartilhá-los com outros jogadores. Alguém cria níveis, rastreia a porcentagem de sucessos e alguém, de fato, passa por esses níveis. Foi nesse momento que os atores dos pesquisadores vasculharam as mãos - é possível publicar um nível intransitável?


Não faz sentido desenhar algo assim, embora o nível seja realmente intransitável, também não poderemos publicá-lo.

A Nintendo enfrentou uma tarefa bastante interessante - como impedir que a biblioteca fosse “desordenada” com níveis vazios e intransitáveis. E eles lidaram bem com ela. A solução é bastante elegante e foi usada mais de uma vez em jogos com um conceito criativo semelhante: você precisa passar pelo nível antes de publicar e enviá-lo ao servidor. E uma vez desde o início e uma vez em cada posto de controle. De fato, a tarefa se resume ao fato de que é necessário desenvolver um curso que o autor possa seguir durante a publicação, mas não após.

Tentativa número 1. Bloqueio de código


O jogo tem muitos objetos que interagem entre si de acordo com regras conhecidas. Você pode tentar reproduzir algo como um bloqueio de código.

Por exemplo, você pode pegar a seguinte peça de trabalho:


Um kupa (1) não pode passar por um enxame de monstros em seu caminho (3), com exceção de fantasmas (2). Os monstros, enquanto estão na cabeça um do outro, não se dispersam e ficam parados. Se Mario atingir um bloco de tijolos (4), o monstro mais baixo da pilha morrerá, deixando o fantasma um bloco abaixo. Se o fantasma estiver na mesma linha do compartimento, ele poderá ir além. O autor do nível sabe o número de monstros antes de cada fantasma, e ele sabe quantas vezes você precisa acertar cada bloco para abrir caminho para o compartimento. Assim que o cupê passa por todos os monstros, ele ativa o gatilho e limpa a passagem para Mario.

Este exemplo é apenas para fins ilustrativos - em tentativas reais de bloquear um código, tudo ficou mais complicado. O jogador não vê monstros, o nível é dividido em segmentos independentes, em cada um dos quais você precisa saber quantas vezes e qual tijolo bater. E somente a passagem exata de todos os segmentos abre a passagem para a saída do percurso.

Infelizmente, essa abordagem tem várias desvantagens significativas:

  • Algum tipo de entusiasta nerd pode gastar muito tempo e resolver tudo quantitativamente.
  • Um jogador bem-sucedido simplesmente bate nos blocos selecionados aleatoriamente e, SUDENDO, esses serão os mesmos blocos que precisam ser atingidos no mesmo número de vezes.
  • Os jogadores podem simplesmente baixar o curso e abri-lo no editor. Depois de estudar, com a devida diligência, eles aprenderão o "código".

Continuamos a busca por um método intransponível de carregamento de nível.

Tentativa número 2. Moedas vermelhas


O usuário ReflectivistFox publicou um vídeo de The Impossible Level, no qual ele propôs uma idéia interessante para publicar um nível intransitável. É verdade que há uma limitação significativa: seguiremos seu curso se você o tocar do início até a saída, e ABSOLUTAMENTE PRECISÃO TOTALMENTE TODA ficará intransitável se você usar o ponto de verificação. Parece que sob essas restrições não é tão interessante considerar o conceito de nível, mas, de fato, mesmo esse passo é muito importante. Você ainda se lembra que durante o carregamento do nível é necessário passar por ele não apenas desde o início, mas também em cada ponto de verificação? O ReflectivistFox superou metade da limitação - seu nível pode ser alcançado no momento da inicialização, mas não no modo normal.

A idéia principal é usar o elemento do jogo "moeda vermelha" (eu vou esclarecer imediatamente que os jogadores os chamam de "vermelho" e "rosa".) Eles eram vermelhos nos jogos anteriores da série Mario e rosa no Super Mario Maker. O princípio do trabalho deles é o mesmo, portanto, daqui em diante usarei apenas “vermelho”). Em níveis comuns, moedas vermelhas são usadas como parte da chave coletada. O autor do curso possui várias moedas desse tipo em locais de difícil acesso. Assim que Mario coleta todos (o jogador sabe o número exato de moedas), ele recebe a chave de uma porta especial, atrás da qual pode haver alguns bônus ou uma passagem mais acima no nível.

Uma característica importante é que esses pontos são particularmente afetados por esses pontos. O ponto de verificação salva o jogo quando Mario o ativa. Se o jogador perder, o personagem morre, e o carregamento do último ponto de verificação ocorre. Todos os elementos do jogo são restaurados: inimigos, bônus e muito mais. Mas não moedas vermelhas. Eles não são restaurados, embora o número de moedas coletadas permaneça. E esse não é o recurso completo. Se você coletar todas as moedas vermelhas e perder, o comportamento mudará - o contador será zerado e as moedas estarão em seus lugares originais.

O ReflectivistFox no seu nível usou dois recursos do jogo.


Observe que o ponto de verificação (bandeira vermelha no centro) está meio fechado pelo quarteirão. Esse cenário cria um efeito interessante - você pode ativá-lo alcançando o bloco superior e, ao carregar o jogo, não será capaz de criar um personagem dentro do bloco, e ele "cairá" abaixo, perto das portas e do dinossauro.

Assim, o jogador que inicializa do ponto de verificação será levado para uma rota alternativa. Nesta rota, o seguinte espera por ele:


Existem muitos elementos e é muito difícil descrever brevemente, então destacarei apenas as coisas mais importantes.

Mario aparece da porta e seu olhar é direcionado da mesma maneira que na foto, mas ele precisa chegar à porta à direita (4). Para fazer isso, ele precisa percorrer as setas à esquerda, subir e percorrer os blocos de cima para a direita (na captura de tela, o caminho sobe e para a direita ao longo da borda, mas você não consegue dar um tiro com mais sucesso). A construção especial dos objetos (1) proíbe o personagem de virar, se ele o fizer, o objeto (2) desaparecerá e a parede em movimento acima dele fechará a passagem. Todos os outros métodos estão ligados ao dragão usando o bloco de prisioneiros de guerra (3) - ele vai empurrar e mover as costas, o que lhe permitirá chegar à esquerda sem antes provocar o grupo (1). Infelizmente, mover a unidade POW (3) torna impossível usar a porta (4). Para entrar na porta, o jogador precisa colocar algo embaixo da porta para estar no mesmo nível dela. O jogador pode tentar pegar o bloco de prisioneiros de guerra (3) com uma mão e levá-lo até a porta, mas o autor também cuidou disso - a parte vertical da rota é alta demais para ser superada com um salto normal. Todas as opções disponíveis para o jogador levarão a uma explosão de prisioneiros de guerra ou a incapacidade de trazer esta unidade para a porta (4). São precisamente essas situações insolúveis que um jogador encontra e decide passar esse nível a partir de um ponto de verificação. Mas como o próprio autor o passou após a publicação?

Preste atenção ao bloco (vazio), que eu marquei com o número 5. Inicialmente, uma moeda vermelha está localizada neste local. Durante a passagem, antes do ponto de verificação, o jogador não pode passar e certamente pegará esta moeda, e é por isso que neste local agora está vazio. Durante a verificação, o jogo não pode determinar quais moedas vermelhas o jogador coletou; portanto, ao carregar o estado do jogo no ponto de verificação, ele restaura todas as moedas vermelhas, permitindo que o jogador gawning colete todas elas, se necessário. A segunda moeda vermelha é colocada na parede e é impossível coletar, garantindo assim a incapacidade de redefinir o contador de moedas e, portanto, durante o jogo, não haverá moeda no lugar do bloco (5) quando necessário. E no momento da publicação, será garantido lá - o que permite que você o utilize em vez do bloco de prisioneiros de guerra (3) para mover para a esquerda e sair calmamente da porta (4). E já existe uma saída do percurso nas proximidades.

O resultado desta tentativa:

  • Você pode passar de nível se não usar o ponto de verificação. Portanto, este método não nos convém.
  • A passagem do nível durante a publicação e durante o jogo ainda tem diferenças de jogabilidade, o que significa que devemos continuar pesquisando.

Não desanime, continue e olhe.

Tentativa número 3. Cogumelo estranho


A diferença foi encontrada! Este é o chamado "cogumelo estranho". Com uma probabilidade de 1%, um cogumelo estranho aparece em vez do usual.


É assim que um cogumelo estranho se parece.


Mas Mario depois, hmm ... usando o cogumelo. Mario Estranho difere dos habituais saltos significativamente maiores e mais longos. Além disso, se Mario come primeiro um cogumelo comum e depois estranho, ele se torna estranho. Se você fizer o oposto, ele ainda permanecerá estranho - um cogumelo comum não terá nenhum efeito.

Se tudo fosse tão simples, qualquer um poderia criar um nível como este:


O comprimento do fosso é especialmente projetado para que o Mario comum não pule sobre ele, e o estranho é fácil. Basta repetir várias vezes até que um cogumelo estranho caia. Infelizmente, esse método não nos convém, pois fornece 1% de probabilidade de aprovação. Felizmente, o nível da Nintendo também não está feliz devido ao fato de que em 99% é intransitável e eles decidiram consertar essa situação. No momento da publicação, cogumelos estranhos nunca aparecerão.

Aqui está! Nós apenas precisamos inverter a lógica. Se durante a passagem habitual o cogumelo cair, mas não durante a publicação, você precisará trazer tudo ao absoluto. É necessário forçar o cogumelo a aparecer e, no modo usual, o estranho Mario sempre tocará, e no momento da publicação - o habitual.


Isso pode parecer uma "fazenda de cogumelos" inteira, que forçará Mario a coletar cerca de 200 cogumelos (um limite de 100 blocos de um tipo, mas você pode colocar 100 no mundo principal e outros 100 no outro).


E aqui está um exemplo de uma "armadilha" para o estranho Mario. Devido a um salto mais alto, ele não será capaz de se transformar em um galho à esquerda e ficará bloqueado até o cronômetro terminar (para ser mais preciso, existe um sistema astuto de bombas e obstáculos que forçam Mario a saltar mais alto, e para o estranho Mario isso é suficiente para se trancar, e o habitual apenas ativa a bomba e pode sair do curso).

Juntando e resumindo:

  • Uma tentativa muito boa, que com apenas uma enorme probabilidade não permitirá passar o jogo no modo normal.
  • E, no entanto, existe uma probabilidade de 13,4% (0,99 ^ 200 ~ 0,134, se acreditarmos que tudo é gerado com uma probabilidade igual) de que o cogumelo estranho não cairá e o nível ainda será ultrapassado. E mesmo que não seja uniforme, ainda há uma chance, e o nível pode ser potencialmente alcançado.

O que fazer? Última chance.

Tentativa número 4. Blocos com uma entidade dupla


Você se lembra da primeira foto deste artigo? Vou repetir:


Este nível foi realmente publicado entre outros níveis. E pode ser publicado ainda.

A Nintendo fez um bom trabalho quando surgiu a lógica de verificar os níveis, mas esse nem sempre foi o caso. Quando o jogo acabou de ser lançado, havia bugs. E se usarmos um deles, seremos capazes de cumprir nosso plano.

Primeiro você precisa limpar todos os dados no Wii U e instalar o Super Mario Maker v1.0. Você deve fazer isso offline para que o jogo não seja atualizado. E será possível jogar o jogo como era no momento do lançamento.

Agora precisamos conversar sobre blocos com uma entidade dupla. Essa é uma falha que permitiu que os blocos parecessem de uma maneira, enquanto na verdade eles são completamente diferentes. Para criar um, você tinha que pegar um dos três tipos de blocos - uma moeda, uma nuvem ou um bloco intransponível sólido, colocá-lo no mapa e colocar outro bloco no topo do mesmo conjunto, mas movendo-se ao longo da rota e removendo a rota (os blocos com uma rota inicialmente têm maneira pequena).


Colocamos um bloco contínuo com uma rota na nuvem.

Esses blocos entrarão em colapso e se comportarão como o bloco original e parecerão sobrepostos. Depois de algum tempo, a Nintendo corrigiu o problema, o que quebrou todos os níveis que usavam esse bug, porque o reparo de blocos praticamente duplos deixava apenas sobreposições.


Os blocos (1) só parecem sólidos, mas logicamente são moedas comuns.

Após a criação desse nível, não é necessário publicá-lo imediatamente. Mais precisamente, vale a pena tentar - o jogo oferecerá nosso curso, o que faremos facilmente. Mas o envio ao servidor falhou, não ativamos a Internet. De qualquer forma, o nível será marcado como passado e enviado ao servidor sem verificações adicionais. Mesmo depois de atualizar o jogo para a versão atual. No qual o curso já é impossível de concluir.

Feito! Aqui está - carregado e absolutamente certamente de maneira alguma e sob nenhuma circunstância é um nível aceitável. Na quarta tentativa, o sucesso foi alcançado. Isso conclui nossa curta jornada ao mundo da exploração do jogo Super Mario Maker.

Conclusão


Obrigado por ler esta folha de texto com fotos. Tentei falar sobre o processo de encontrar erros na lógica do aplicativo. Nesse caso, este é um jogo, mas as abordagens gerais são preservadas se forem transferidas para o sistema e o software aplicativo. O código pode ser escrito bem, mas isso não significa que tudo funcionará como pretendido. As vulnerabilidades lógicas são muito perigosas e difíceis de detectar, mas isso também é interessante.

Todos os bons jogos, vulnerabilidades e bom!

Source: https://habr.com/ru/post/pt433424/


All Articles