Bug bizarro de física em Half-Life 2: como uma vírgula flutuante travou o jogo por anos
Uma das coisas mais legais sobre Half-Life 2 é seu motor de física, mas, como qualquer um que já jogou um game baseado em física sabe, até a tecnologia mais avançada está sujeita a peculiaridades. O lendário jogo de tiro narrativo da Valve não foi exceção, como o ex-desenvolvedor da Valve, Tom Forsyth, compartilhou em uma thread no Mastodon.
Na thread, Forsyth discute um bug que encontrou enquanto trabalhava em uma versão em VR de Half-Life 2, em 2013, quando a Valve estava considerando para onde queria ir com a tecnologia. HL2 foi uma das traduções mais fáceis para VR no catálogo da Valve—era um lançamento relativamente recente, e os ‘truques com perspectiva’ em Portal ‘eram, claro, um desastre nauseante’. O problema era que esta nova compilação em VR travava o jogador meros minutos dentro do game.
Na cena de abertura, quando um policial do metrô deveria conduzir o jogador por uma porta, a porta não abria na compilação de VR por razões que não estavam claras, congelando o jogador no lugar para esperar por um evento necessário da história que nunca chega. ‘Oh, não’, Tom Forsyth recordou em sua thread. ‘Não podemos lançar isso. Eu chamo outras pessoas, incluindo algumas que trabalharam no HL2 originalmente, e sim—está quebrado. E está quebrado quando você não está em VR também—então não é algo que Joe e eu quebramos. Mas ninguém sabe por quê—nenhum dos códigos relevantes mudou.’
A equipe logo descobriu que um guarda atrás da porta estava parado ‘muito ligeiramente perto demais—o canto da sua caixa de delimitação intersecta o caminho da porta enquanto ela abre. Então o que está acontecendo é que a porta começa a abrir, empurra levemente o dedo do pé do guarda, recua, fecha e então trava automaticamente.’ Eles moveram o NPC e consertaram o bug, mas foi necessária uma investigação muito mais longa para descobrir por que isso aconteceu em primeiro lugar; a compilação de VR não moveu o NPC, e a equipe até recompilou a compilação original para descobrir que o bug havia ‘viajado no tempo’ e existia naquela também.
A thread continua com a resposta: ‘A boa e velha vírgula flutuante’. O compilador usado para esses testes padronizou o conjunto de instruções SSE mais novo, em vez do conjunto que o original teria padronizado para as CPUs da época: x87, que tem ‘uma miscelânea maluca de precisões’. Mesmo sendo um código antigo, o novo compilador significou que o game estava calculando a física de forma diferente, embora de uma forma extremamente sutil.
Forsyth explicou: ‘Em ambas as versões, a porta tem momentum suficiente para girar o guarda muito levemente. O atrito do guarda no chão não é bem o suficiente para se opor a isso, e ele gira uma fração minúscula de um grau. Na versão x87, esta rotação minúscula é o suficiente para mover o dedo do pé dele para fora do caminho, a colisão é resolvida, e a porta continua a abrir. Tudo bem. Mas na versão SSE, um monte de pequenas precisões são muito ligeiramente diferentes, e uma combinação do atrito no chão e a massa dos objetos significa que o guarda ainda gira com a colisão, mas agora ele gira muito ligeiramente menos. Então, no próximo quadro de simulação, o dedo do pé dele ainda está no caminho da porta. A porta não tem permissão para simplesmente passar através do dedo do pé dele, então ela faz a única outra opção—ela recua… e você está travado.’
É um bug bizarro e uma grande lembrança de que essas coisas raramente são tão fáceis de resolver quanto você poderia esperar. Da próxima vez que você reclamar de um quebra-cabeça de gangorra, apenas pense em tudo que poderia ter dado errado para fazê-lo funcionar.
Share this content:



Publicar comentário