1 pontos por GN⁺ 2023-07-16 | 1 comentários | Compartilhar no WhatsApp
  • Explica uma estratégia de 0,5 A press para obter a estrela Watch for Rolling Rocks em Super Mario 64 sem nenhum novo input de A, usando apenas um A hold que já vinha desde antes do início
  • O input de A se divide em press, hold e release, e se você continuar segurando o A pressionado em uma estrela anterior, isso pode contar como 0,5 em uma única estrela e como 0 input adicional no contexto da run inteira
  • O núcleo da estratégia é mover a posição de home do Scuttlebug e elevá-lo usando o limite de ativação da sala, depois garantir a altura da plataforma da estrela com misalignment e bounce
  • A velocidade horizontal necessária é criada com Hyper Speed Walking, combinando água rasa, ladeira íngreme, gate e detecção de out-of-bounds, e o acúmulo de velocidade leva cerca de 12 horas
  • A rota de deslocamento em PU é projetada para voltar ao mapa principal usando a conversão para short da floor collision, syncing speed por slope e alinhamento de QPU, além de permitir o acesso aos elevadores e à plataforma da estrela

O critério de 0,5 A press

  • A press não é um input instantâneo, mas se divide em três etapas: press, hold e release
    • press é usado para fazer o Mario pular
    • hold pode ser usado para um pequeno kick, swim debaixo d'água, queda lenta durante twirl e queda lenta com Wing Cap
    • release não tem casos úteis ou importantes no momento
  • 0,5 A press significa uma situação em que nenhum novo A é pressionado, e sim que o A já pressionado anteriormente continua em hold
  • O exemplo de Over the Rainbow mostra esse método de contagem
    • para chegar à cannon platform, basta manter o A em hold
    • o primeiro disparo de cannon e o segundo disparo de cannon exigem cada um um A press
    • olhando apenas para a estrela isoladamente, isso conta como 3 A presses
    • na run completa do A Button Challenge, é possível manter em hold um A press anterior usado para entrar na course e assim suprir a primeira exigência de hold
    • por isso, Over the Rainbow fica em 2,5 A presses para a estrela isolada e 2 A presses adicionais na run completa
  • A estratégia de Watch for Rolling Rocks também começa com o A já pressionado no início da fase, e na run completa esse input é contado como vindo de um A press anterior

Transporte e elevação do Scuttlebug

  • Scuttlebug Transportation aproveita a propriedade de que a posição de home do Scuttlebug é atualizada quando ele colide com o Mario
    • o Scuttlebug patrulha dentro de um certo raio ao redor de sua home
    • quando o Mario entra nesse raio, ele faz um lunging attack
    • se o Scuttlebug colide com o Mario, a posição dele no momento da colisão se torna a nova home
  • Existem limitações no transporte
    • o Scuttlebug não pode sair de sua native room e fica preso na door
    • se ele caminhar para uma wall estando muito abaixo da home atual, pode desaparecer, então isso deve ser evitado durante o transporte
  • O objetivo é mover o Scuttlebug e sua home para perto do corner abaixo da estrela Watch for Rolling Rocks
  • Scuttlebug Raising usa o alcance de ativação da rolling rocks room para elevar o Scuttlebug
    • a sala e os objetos dentro dela só ficam ativos quando o Mario está dentro da rolling rocks room ou na pequena yellow region do lado de fora da door
    • quando o Mario está fora dessa área, a sala aparece escura e os objetos ficam invisíveis e não se movem
    • mesmo desativado, o Scuttlebug ainda pode virar em direção ao Mario e começar um lunge
    • se o Mario entra na yellow region e ativa o Scuttlebug, depois sai da yellow region quando ele atinge o pico da trajetória, o Scuttlebug não cai e fica parado naquela altura
    • repetindo isso, dá para continuar elevando o Scuttlebug
  • O raio de detecção do Scuttlebug não é uma esfera, mas um cilindro que se estende infinitamente para cima e para baixo, então é possível continuar provocando lunges mesmo em grande altura
  • Nesta estratégia, o Scuttlebug é levado a fazer lunge em direção à home para permanecer logo acima do corner
    • se o Mario ativá-lo dentro do raio do Scuttlebug, ele fará lunge em direção ao Mario e pode se mover para o lado da door
    • esse método é mais rápido, mas não é usado aqui porque a posição perto do corner é necessária

Misalignment e ganho de altura

  • Na parte de cima do corner existe uma propriedade chamada misalignment
    • no código do jogo, floor collision checking e wall collision checking são tratados de forma diferente
    • como resultado, em uma área de 1x1 unit o Mario pode entrar sob o floor sem ser empurrado pela wall
  • Se o Mario estiver a menos de 79 units abaixo do floor, ele é reposicionado sobre o floor
  • No final, a estratégia combina o bounce do Scuttlebug com um ground pound no misalignment para obter altura suficiente para subir até a plataforma de Watch for Rolling Rocks

Hyper Speed Walking e movimento por Parallel Universe

  • A velocidade necessária é criada com Hyper Speed Walking
    • em slopes muito íngremes, normalmente o Mario não consegue ficar parado e escorrega
    • na parte submersa de uma slope coberta por água rasa, ao tentar correr morro acima o Mario corre para trás e a velocidade continua aumentando, sem limite superior
  • Normalmente é difícil acumular muita velocidade porque o Mario cai na água ou a slope termina, mas com gate e out-of-bounds é possível acumular velocidade sem sair do lugar
    • a parte de baixo do gate é tratada como ceiling
    • se o Mario tentar se mover para muito perto logo abaixo de um ceiling, o jogo rejeita a mudança de posição
    • depois de ganhar certa velocidade, ao virar o ângulo para fazer com que a intended next position ultrapasse uma wall e vá para out-of-bounds, o jogo não deixa o Mario ficar out-of-bounds e ele permanece no mesmo lugar
    • como o out-of-bounds continua indefinidamente, é possível acumular velocidade por mais tempo do que com o gate ceiling
  • Nesta estratégia, o gate é aberto e parte da velocidade é criada com o gate ceiling; depois o ângulo é virado para o lado do out-of-bounds para acumular o restante
  • O acúmulo de velocidade leva cerca de 12 horas

PU, QPU e syncing speed

  • A position do Mario é um número de ponto flutuante, mas no teste de colisão com floor ela é convertida para short
    • a fractional portion é truncada
    • valores grandes demais ou pequenos demais entram no intervalo de -32768 a 32767 por meio do operador de módulo
  • Mesmo que a posição real esteja fora desse intervalo, a posição usada na detecção de floor volta em loop para dentro da caixa original
    • mesmo que não exista terreno na posição real do Mario, se a posição usada na detecção de floor estiver sobre terreno, o jogo trata o Mario como estando no chão
    • essa região que funciona como uma cópia do mapa original é chamada de Parallel Universe, ou PU
  • Em PUs não há gráficos, nem objetos como elevator ou item block, nem enemy, coin, star ou wall
  • No console N64, a camera pode causar crash se seguir o Mario para um PU, então esta estratégia mantém a camera fixa no mapa principal para evitar isso
  • O jogo verifica a cada quarter step do movimento do Mario se ele está sobre floor
    • em um deslocamento simples por PU, é preciso atravessar 4 PUs de uma vez para que cada quarter step fique sobre terreno
    • essa distância de 4 PUs é chamada de QPU
  • A speed real e a speed de facto usada no deslocamento são diferentes
    • a speed de facto é determinada como uma parte da speed real, dependendo da steepness da slope
    • quanto mais íngreme a slope, menor a speed de facto para a mesma speed real
  • A speed em que a distância de QPU e os quarter steps se encaixam exatamente é chamada de syncing speed
    • a menor syncing speed é a que desloca exatamente 1 QPU
    • múltiplos dela também são syncing speeds, permitindo atravessar vários QPUs de uma vez
    • cada slope tem um conjunto diferente de syncing speeds
  • No exemplo de deslocamento por PU em Secret Aquarium, era necessário satisfazer em sequência as syncing speeds de várias slopes, e levava cerca de 12 horas até a primeira syncing speed e cerca de 25 horas até a segunda syncing speed
  • A rota de Watch for Rolling Rocks foi planejada para funcionar com 12 horas de acúmulo de velocidade em vez de 25
    • o path de subida pelo lake é composto por dezenas de floor triangles com slopes diferentes
    • dentre eles, foram escolhidos seis triangles, de T1 a T6, com steepness estritamente decrescente
    • as heights desses seis triangles cobrem sem lacunas a distância vertical necessária do ponto mais baixo ao mais alto
    • usando esses triangles em sequência, o blueprint da rota é completado apenas com a first syncing speed da slope inicial

Rota final e obtenção da estrela

  • A rota básica começa na slope de Hyper Speed Walking, sobe pelo path sobre o lake, usa 2 elevadores e vai até a plataforma Amazing Emergency Exit, de onde o Mario é lançado em direção à plataforma de Watch for Rolling Rocks
  • Durante o deslocamento em PU, se a speed estiver um pouco abaixo da syncing speed, o movimento é relative forward; se estiver um pouco acima, é relative backward
  • Mesmo um pequeno desvio do angle em relação a uma cardinal direction faz o sideways movement aumentar muito por causa da distância de QPU
  • Gerenciar o alinhamento de QPU é essencial
    • a grade correspondente a múltiplos de 4 PUs é chamada de grade de QPU
    • quando o Mario está sobre essa grade, ele está em estado de QPU aligned
    • outros deslocamentos positivos em PU exigem condições especiais, como out-of-bounds ou mudança de slope
    • se ficar QPU misaligned, pode ser difícil voltar ao mapa principal
  • No path do lake, em cada triangle de T1 a T6 a speed é reduzida para perto da syncing speed daquela slope, depois o Mario segue morro acima e passa ao próximo triangle
    • a cada transição entre triangles o alinhamento de QPU muda, mas a rota é planejada para que essas mudanças se anulem no fim e o Mario termine QPU aligned
    • no sexto triangle, ele se aproxima do mapa principal em zigue-zague
  • Como não há objetos em PUs, os elevadores só podem ser usados depois de voltar ao mapa principal
  • O motivo de manter o A em hold é poder apertar B para fazer um pequeno kick
    • sem o kick, o Mario atravessa o elevator
    • com o kick, ele consegue subir no elevator e ganhar altura
  • O movimento final consiste em dar kick na plataforma Amazing Emergency Exit e então virar a direção para se lançar até o Scuttlebug
    • esse movimento produz um deslocamento de 10 PUs para a direita e 3 PUs para baixo, então a posição é ajustada antecipadamente para terminar no mapa principal ficando 3 PUs acima e 10 PUs à esquerda
    • ao mesmo tempo, a posição relativa no mapa também é ajustada para permitir o movimento final
  • O Scuttlebug é ativado no instante em que se entra na versão em PU da sala, e é preciso alcançá-lo antes que ele caia demais, então a abordagem final só tem alguns frames de margem
  • Por fim, usando o bounce do Scuttlebug e um ground pound no misalignment, obtém-se altura suficiente para subir até a plataforma de Watch for Rolling Rocks e pegar a estrela com 0,5 A presses

1 comentários

 
GN⁺ 2023-07-16
Opiniões no Hacker News
  • Acho que este talvez seja o vídeo perfeito do YouTube
    Ao fundo há uma trilha sonora bacana de Mario e imagens de gameplay, gráficos feitos pelo próprio autor mostram visualmente o que está acontecendo, e a narração explica a tela
    Ele ainda usa como referência outros vídeos do YouTube e até comentários, é extremamente detalhado e profundo em conhecimento, e não tenta vender nada
    Parece feito mais por amor do que por visualizações; para mim, é o auge do YouTube

    • Os vídeos do HealthyGamerGG me passam uma sensação parecida
      São detalhados e profundos em conhecimento, transitando por neuroquímica/bioquímica, psicologia, jogos, comportamento humano, cultura e religião, e até como tudo isso mudou ao longo do tempo
      Para mim, esse tipo de coisa é o auge do YouTube
    • Acho que ficaria mais fácil de entender dizendo: “começa a fase segurando o botão A e, depois disso, não aperta o botão A de novo”
    • Sorte sua não ser sensível à música de fundo
      Eu tenho dificuldade para tolerar música de fundo
  • A profundidade de conhecimento e capacidade de análise do pannenkoek é realmente impressionante
    Depois de ver vídeos de SM64, meu padrão ficou tão alto que é muito difícil encontrar em outros jogos um nível parecido de rigor e qualidade de produção
    Até agora, o mais próximo foi um vídeo sobre como speedrunners dominaram o RNG em um quebra-cabeça de Wind Waker
    https://youtu.be/1hs451PfFzQ

  • Isto é nerd porn em estado puro, e é ótimo
    Explicações do tipo “a detecção de colisão do jogo na verdade recebe valores de ponto flutuante e os converte para short” fazem um carinho estranho no cérebro
    O fato de um jogo como SM64 ainda fascinar e prender as pessoas décadas depois de lançado diz muita coisa
    Parece que há cada vez menos jogos mainstream hoje em dia que compartilham esse grau de paixão dos jogadores

  • A história completa do desafio do botão A
    https://www.youtube.com/watch?v=yXbJe-rUNP8
    É um vídeo de mais de 5 horas, então deixo tocando em segundo plano ou assisto para passar o tempo
    A quantidade de conhecimento e o nível de exploração de bugs que essas pessoas mostram são absurdos

    • Assisti a tudo recentemente e recomendo muito para qualquer pessoa que tenha o menor interesse
      Algumas das descobertas são realmente insanas, e é surpreendente como tantos elementos só funcionam por um triz
      O Bismuth, no geral, também é um YouTuber de alta qualidade
  • Eu perdi tudo na parte de “acumular velocidade por 12 horas
    https://youtu.be/kpk2tdsPh0A?t=640
    O raciocínio é muito claro
    Gosto de ver que há tanta gente incrivelmente inteligente na internet

    • Vendo por outro lado, também parece meio desperdício
      Claro que cada um é livre para usar a própria cabeça como quiser, mas mergulhar tanto num bug extremamente obscuro de um jogo de uns 30 anos para provar que uma façanha impossível de executar na prática sem ajuda de ferramentas é tecnicamente possível me parece realmente estranho
      O vídeo explicativo é excelente, mas o objetivo por trás dele me parece absurdo
  • Se você gosta da história dos universos paralelos, recomendo muito assistir ao speedrun 1-Key de SM64 https://youtube.com/watch?v=iUt840BUOYA e, em seguida, à explicação do Bismuth https://youtube.com/watch?v=wjge1bVobN0
    É uma conquista técnica realmente incrível, muito baseada na pesquisa do pannenkoek2012

    • Acho divertidos os termos que os gamers criaram para explicar fenômenos que, no fim, são apenas bugs do jogo
      Os universos paralelos e toda a configuração ao redor deles surgem porque inteiros de 16 bits estouram dentro do código de verificação do chão
      Mario 64 normalmente armazena posições em ponto flutuante, mas na verificação de colisão converte para inteiros de 16 bits
  • Realmente impressionante
    Sempre fico admirado quando vejo pessoas movidas por alguma paixão a ponto de dedicar um esforço tão extremo
    Raramente senti uma paixão que me fizesse trabalhar com tanto afinco assim
    Às vezes penso que seria bom se pessoas assim usassem seu talento e energia em algo realmente importante, como curar doenças ou alcançar avanços científicos
    Ao menos, do ponto de vista delas, poderiam sentir que um grande potencial não foi desperdiçado
    Só o esforço colocado neste vídeo já parece que poderia ter gerado um bom artigo de pesquisa
    Eu queria ter esse nível de motivação no meu trabalho, mas, no geral, só consigo ficar impressionado

  • Gosto deste vídeo
    Mais recentemente, ele também fez um vídeo sobre aspectos técnicos específicos do N64, e cuidado com ponto flutuante
    https://youtu.be/nYDmBdUalgo

    • Este vídeo poderia até ser usado em aulas de ciência da computação como material introdutório sobre geradores de números pseudoaleatórios e ponto flutuante IEEE
  • Alguém pode recomendar mais vídeos de toca de coelho como o do post original?
    O tema pode ser qualquer um
    Gosto desse tipo de vídeo que mostra o quão fundo algo pode ir
    Meu favorito no momento é https://youtu.be/_hjRvZYkAgA

    • Recentemente achei bem divertido um vídeo em que alguém começa a descompilar um antigo jogo de PC de Lego de que me lembro da infância: https://www.youtube.com/watch?v=MToTEqoVv3I
    • Marcel Vos tem muitos vídeos no YouTube sobre as mecânicas de Roller Coaster Tycoon, especialmente quando levadas ao extremo
      https://youtu.be/KVgoy_a_gWI
    • Também há um ótimo vídeo sobre vencer Pokémon sempre usando o mesmo conjunto de inputs
      https://youtu.be/6gjsAA_5Agk
    • Gosto dos vídeos de speedrun do Karl Jobst
  • Este vídeo também explica o que é um input A de 0,5 e por que isso importa
    Como Mario 64 não se importa com a ação de soltar o botão, os runners não contam esse soltar separadamente
    Como sempre é possível escolher não soltar A, numa run de mínimo de inputs A você só solta A para poder apertá-lo de novo
    Numa narração ao vivo, dá para explicar rapidamente o que 0,5 A “significa”, mas, sem essa explicação, é bem provável que as pessoas se perguntem por que isso importa

    • Só lendo isso, para alguém que não conhece bem o jogo, não fica claro por que não basta manter A pressionado apenas depois da última vez que ele é apertado
      Também é preciso explicar que, quando A está pressionado, Mario se comporta de forma diferente de quando A não está pressionado
    • Mais precisamente, às vezes o jogo exige que A seja pressionado de novo, mas, em outras ocasiões, basta que A já esteja pressionado para que a ação aconteça
      Se, no primeiro caso, você apertar A e não soltar, o segundo caso pode reaproveitar esse input
    • Será que “Mario 64 não se importa com a ação de soltar o botão” está realmente certo?
      Se ele se importa com o estado de estar pressionado, como no planar no ar, então necessariamente também não se importa com o estado de não estar pressionado, como estar no ar sem planar?
      Para passar do estado de estar planando no ar para o de estar no ar sem planar, é preciso soltar o botão
      Entendi errado?
      Só joguei M64 por uns 5 minutos, mas está na minha lista para algum dia, e fico tentando convencer meus filhos a se interessarem para eu arranjar tempo de jogar também
    • Ele se importa, sim, com soltar o botão
      Para pular uma segunda vez, primeiro é preciso soltar o botão
      0,5 na verdade é mais a ideia de que um único input de A continua através de várias fases
    • keydown + keyup = keypress
      À primeira vista dá para pensar “o que diabos é esse 0,5?”, mas, no fim, é só uma questão de semântica