A realidade por trás do multiplayer online do Mario
A maioria dos tutoriais que você vê na internet sobre jogar Super Mario Brothers online são superficiais e deixam passar coisas importantes que só ficam claras quando você tentou rodar isso de verdade e deu problema. Eu passei horas tentando fazer coop funcionar com diferentes configurações de rede, então vou explicar o que realmente funciona e o que vai te dar dor de cabeça.
O que é super mario brothers online play
Basicamente, você está usando um emulador de NES com uma camada de sincronização de rede que permite que dois jogadores joguem ao mesmo tempo em máquinas diferentes. A tecnologia envolvida se chama netcode baseado em input locking, e a ideia é simples em teoria: o host envia os comandos de ambos os jogadores para cada máquina, e o cliente apenas processa. Na prática, isso funciona razoavelmente bem em conexões locais ou com latência muito baixa, mas qualquer coisa acima de 80ms de ping já começa a causar dessincronizações visíveis no jogo. O problema mais comum que eu encontrei foi com a emulação da ROM. Se o seu emulador não estiver usando os mesmos ajustes de frame timing que o host está usando, mesmo com input sincronizado perfeitamente, o jogo vai travar ou pular quadros em momentos específicos do level. A solução foi configurar o emulador do lado do cliente para usar frame advance manual em vez de auto, e travar o framerate em 60fps fixo com desabilitação de v-sync no sistema operacional. Isso eliminou quase todos os travamentos que eu estava tendo.
Existem basicamente três abordagens principais. A primeira é usar emuladores como NESTS ou FCEUX com patches de netplay embutidos. A segunda é a plataforma Netplay.nesdev.org que concentra vários servidores de matchmaking. A terceira e mais confiável, na minha experiência, é o uso de emuladores como Nestopia UE com plugins de netplay configurados via configuração manual de host e cliente. Uma coisa que poucos mencionam é a questão da escolha da ROM. Nem todas as ROMs de Super Mario Brothers funcionam igual em todos os emuladores porque existem múltiplas versões com checksums diferentes. A versão mais comum, a de NTSC com checksum $5f023d2c, é a que tem melhor compatibilidade cross-emulator. Se você usar uma versão PAL ou qualquer hack de ROM, as chances de dessincronização aumentam dramaticamente porque os timing de hardware podem variar ligeiramente entre regiões.
Outro ponto que merece atenção é a largura de banda. Muita gente acha que online play para um jogo de 8 bits não precisa de nada, mas o netcode precisa enviar inputs a 60 frames por segundo para cada jogador. Isso significa aproximadamente 720 pacotes de dados por segundo por jogador. Em conexões com perda de pacotes significativa, como algumas redes WiFi domésticas, isso causa micro-travamentos que parecem lag mas na verdade são retries de rede. A solução prática é usar cabo Ethernet quando possível, ou no mínimo estar na banda de 5GHz do WiFi. Se a sua intenção é jogar competitivamente, existem servidores organizados como o NESPlay, mas eles exigem configuração manual de port forwarding no seu roteador. Você precisa abrir as portas TCP e UDP na faixa de 50000 a 51000 para o emulador. Sem isso, a maioria dos ISPs e roteadores residenciais vai bloquear ou degradar a conexão, especialmente em redes CGNAT onde seu IP público não é diretamente acessível. Nesse caso, o workaround foi usar um serviço como Hamachi ou ZeroTier para criar uma rede VPN virtual entre os jogadores, o que contorna completamente o problema do port forwarding e funcionou consistentemente.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Configuração passo a passo prática
Vamos começar pelo emulador. O Nestopia UE é a escolha mais equilibrada entre compatibilidade e facilidade de uso. Você baixa a versão compilada mais recente do site oficial do projeto no GitHub. Durante a instalação, marque a opção de incluir os plugins de netplay se disponível. Após instalar, abra o emulador e vá em Configuration > Netplay. Aqui você vai encontrar duas abas: Host e Client. Como host, configure o modo de jogo como Player 1 e Player 2, selecione a ROM do Super Mario Brothers, e anote a IP e porta que o servidor vai gerar. No lado do cliente, a configuração é mais crítica. Você precisa ter exatamente a mesma ROM com o mesmo checksum. Para verificar, use uma ferramenta como md5sum ou um comparador de ROMs online. Se os checksums não forem idênticos, o jogo vai dessincronizar inevitavelmente. No menu de netplay do cliente, selecione Join and conecte-se ao endereço do host. O emulador vai sincronizar os inputs e o jogo vai começar.
O timing é tudo. Um erro comum é o cliente iniciar o jogo antes do host terminar o handshake de sincronização. Isso causa um desfasamento que nunca se corrige sozinho. Espere sempre o host dar o comando de start. Se acontecer dessincronização durante a partida, o único workaround confiável é reiniciar ambos os lados e reconectar. Tentar corrigir no meio do jogo não funciona porque o estado interno do emulador já divergiu. Para quem quer uma solução mais automatizada, existem sites como NesOnlinePlay.com que oferecem netplay sem necessidade de configuração manual. Você sobe a ROM, escolhe o jogo, e o site gerencia o servidor. A desvantagem é que a latência costuma ser maior porque o servidor pode estar geograficamente distante, e você depende da disponibilidade do serviço. Para partidas casuais entre amigos na mesma cidade, a configuração manual com Nestopia dá resultados muito superiores.
Outro aspecto negligenciado é a configuração de input lag. No Nestopia, vá em Configuration > Video e desative todas as opções de post-processing. Depois, em Configuration > Input, defina o polling rate para 1000Hz. Isso reduz o atraso entre o pressionamento do botão e a resposta no jogo de aproximadamente 33ms para cerca de 10ms em condições ideais de rede. A diferença é perceptível especialmente em seções de precisão como o final do World 8-4. Se você estiver jogando via Wi-Fi em um notebook, desative o modo economizador de energia do processador. Muitos notebooks reduzem a frequência do CPU automaticamente quando estão na bateria, e isso quebra o frame timing do emulador. Trave o processador na frequência máxima e use o adaptador conectado. Esse ajuste específico resolveu um problema de travamentos intermitentes que eu levava semanas para diagnosticar.
O que funciona e onde isso falha
O online play do Super Mario Brothers funciona bem para partidas casuais entre 2 jogadores com boa conexão. A latência média que consigo manter entre São Paulo e Lisboa via configuração manual é de cerca de 120-150ms, e mesmo nesse cenário o jogo permanece jogável, embora com alguma quebra na fluidez. Para competições sérias ou torneios, a experiência é frustrante porque qualquer flutuação de ping quebre a sincronia. Não existe solução mágica para isso. O netcode de input locking simplesmente não foi projetado para altas latências. Alternativas como rollback netcode, comuns em jogos fighting modernos, são tecnicamente viáveis mas extremamente complexas de implementar para um emulador de NES, e nenhuma implementação amplamente disponível atualmente as usa para títulos clássicos da Nintendo.
A melhor recomendação que posso dar é jogar com pessoas em redes similares, preferencialmente na mesma região geográfica. Se isso não for possível, a configuração com VPN como Hamachi tende a estabilizar mais a conexão do que conexões diretas através de ISPs diferentes, porque a VPN criptografa e roteia o tráfego de forma mais previsível, reduzindo a variação de jitter que é muito mais prejudicial do que o ping em si.