▲
- O Windows 11 24H2 trouxe de volta um bug de 20 anos que afeta GTA San Andreas.
- Isso pode atrapalhar sua experiência de jogo com o clássico GTA.
- A falha faz com que o Skimmer desapareça do mapa, gerando frustração nos jogadores.
- Jogadores podem corrigir o problema editando manualmente um arquivo do jogo.
Com a chegada do Windows 11 24H2, um problema antigo em GTA San Andreas ressurgiu, afetando a experiência de jogadores. A atualização, que trouxe melhorias como o Copilot e suporte a arquivos TAR e 7z, ironicamente, reintroduziu uma falha de 20 anos no clássico jogo. Descubra como essa inesperada reviravolta aconteceu e como você pode solucionar este problema.
O Mistério do Sumiço do Skimmer
Logo após o lançamento do Windows 11 24H2 em outubro passado, jogadores de GTA San Andreas notaram algo estranho: o hidroavião Skimmer simplesmente desapareceu do mapa. O veículo, que costumava ser encontrado em um local específico, não estava mais lá, gerando confusão e frustração na comunidade.
Silent, um desenvolvedor conhecido pelo projeto SilentPatch, que corrige bugs e melhora a performance de jogos antigos no PC, decidiu investigar o caso. Inicialmente, ele pensou que poderia ser um problema causado por outros mods ou configurações específicas dos usuários. No entanto, os relatos persistiram, mesmo em instalações limpas do jogo após a atualização do Windows 11 24H2.
Um usuário do GTAForums expressou a confusão geral: “Configurei uma máquina virtual com Windows 11 23H2 e o avião aparece normalmente. Ao atualizar para a versão 24H2, o Skimmer some. Ninguém sabe como uma pequena atualização de 2024 pode quebrar um avião aleatório de um jogo de 2005.”
Diante da insistência dos relatos, Silent decidiu verificar pessoalmente. Ele instalou o Windows 11 24H2 e o GTA San Andreas em um ambiente de teste. Para sua surpresa, o Skimmer realmente não estava no lugar de costume.
Leia também:
A situação ficou ainda mais bizarra quando ele tentou criar o avião usando um comando do jogo. Em vez de aparecer normalmente, o personagem do jogador era lançado a distâncias astronômicas no céu. Sem o SilentPatch, a câmera do jogo entrava em colapso visual; com o SilentPatch, o jogo simplesmente congelava.
A Investigação do Bug em GTA San Andreas
Esse comportamento caótico de lançamento ao céu indicava erros numéricos, provavelmente envolvendo valores de ponto flutuante, na lógica do jogo. Com o SilentPatch instalado, Silent conseguiu identificar o ponto exato da falha no código: dentro da função CPlane::PreRender, em um loop tentando ajustar o ângulo da hélice do avião.
O valor usado para a velocidade da hélice (m_fBladeSpeed) era incrivelmente alto, cerca de 3.73e+29. Esse número impossivelmente grande tornava os ajustes ineficazes, levando ao congelamento do jogo. A origem desse valor de velocidade estava na altitude do avião, confirmando que o lançamento ao céu era um sintoma de um problema fundamental com as propriedades do veículo.
Silent rastreou a origem do problema até o código que configura a física de um veículo ao ser carregado pela primeira vez. Esse processo calcula a “caixa delimitadora” do veículo, uma caixa invisível que define seus limites físicos. Uma parte crucial dessa configuração é ajustar o limite vertical da caixa (o valor Z) com base na suspensão do veículo.
No caso do Skimmer, esse cálculo usava números incorretos, resultando em um valor Z corrompido para a caixa delimitadora, algo como -4.30747210e+33. Esse valor impossível fazia o jogo pensar que o avião estava em uma altura extrema, desencadeando o lançamento ao céu e os erros numéricos subsequentes.
A Raiz do Problema no Código do Jogo
Quanto mais Silent investigava, mais percebia que a raiz do problema estava na definição do Skimmer no arquivo de configuração do jogo, o vehicles.ide. A entrada do Skimmer nesse arquivo era mais curta do que a de outros aviões, faltando alguns números importantes necessários para sua configuração, especificamente o tamanho de suas rodas.
Essa omissão provavelmente era uma herança de Grand Theft Auto: Vice City, onde o Skimmer era classificado como um barco e não precisava desses parâmetros de “roda”. Quando a Rockstar o transformou em um avião em San Andreas, eles se esqueceram de atualizar sua linha no vehicles.ide para incluir esses valores agora necessários.
A função do jogo para carregar dados de veículos, CFileLoader::LoadVehicleObject, usa sscanf para ler os parâmetros da linha vehicles.ide em variáveis locais. A falha crucial aqui é que o código do jogo não inicializava as variáveis locais destinadas aos parâmetros de tamanho da roda para um valor padrão (como 0.0), nem verificava se sscanf havia lido valores para eles com sucesso.
Isso significava que, quando o jogo lia a linha do Skimmer, que não possuía esses parâmetros, as variáveis locais na pilha do programa destinadas aos tamanhos das rodas simplesmente mantinham quaisquer dados que já estivessem presentes nesses locais de memória de chamadas de função anteriores. Isso é um erro grave em programação, pois depende de puro acaso – o conteúdo de variáveis não inicializadas são imprevisíveis.
A Coincidência Que Escondeu o Bug por Anos
Aqui é onde o Windows 11 24H2 entra em cena e expõe essa falha oculta. Por quase vinte anos, em muitas versões do Windows, incluindo o Windows 10, uma estranha coincidência evitou que esse bug aparecesse no PC. O arquivo vehicles.ide é lido sequencialmente. A entrada da van ‘Topfun‘ vem logo antes da entrada do Skimmer. A van Top Fun tem valores de tamanho de roda definidos, e ambos são 0.7.
Por pura coincidência, em versões mais antigas do Windows, a memória na pilha usada para armazenar os tamanhos das rodas da Topfun após o processamento de sua entrada não era sobrescrita por outras operações antes que o código do jogo começasse a ler a entrada do Skimmer. Então, quando o jogo examinava os locais da pilha não inicializados para os tamanhos das rodas do Skimmer, ele acidentalmente captava os valores 0.7 deixados para trás pela Topfun. Os cálculos então prosseguiam usando 0.7, resultando em uma configuração tecnicamente incorreta, mas funcional para o Skimmer.
No Windows 10, os valores da pilha não mudavam muito entre as chamadas.
No entanto, o Windows 11 24H2 trouxe algumas mudanças internas. Uma pequena mudança foi em como uma função do Windows de baixo nível (LeaveCriticalSection), parte da biblioteca de tempo de execução C e envolvida na organização após a leitura de arquivos linha por linha, usava memória temporária na pilha. Essa função começou a usar um pouco mais de espaço na pilha. Essa pequena mudança foi suficiente para que, quando o jogo terminasse de processar a linha da Topfun e passasse para a linha do Skimmer, aquele local específico da pilha onde os valores 0.7 costumavam permanecer fosse agora sobrescrito por essa chamada de função interna do Windows antes que as variáveis do Skimmer fossem acessadas.
Assim, no Windows 11 24H2, quando o jogo ia ler a linha do Skimmer e carregava suas variáveis locais não inicializadas da pilha, aquele ponto de memória não continha mais o 0.7 da Topfun. Ele continha dados arbitrários deixados pela função atualizada do Windows. Esses dados imprevisíveis eram então usados no cálculo para a configuração física do Skimmer, resultando em um valor drasticamente incorreto para sua coordenada Z da caixa delimitadora, fazendo com que o avião essencialmente desaparecesse ou lançasse o jogador para o espaço.
No Windows 11 24H2, mais espaço na pilha foi modificado por uma nova implementação de Critical Sections.
Silent esclarece que este não é um bug no Windows 11 24H2. A forma como as funções internas do sistema operacional usam a memória da pilha não é algo em que os programas devam confiar; esses detalhes podem mudar a qualquer momento em que a Microsoft atualiza as coisas.
O verdadeiro bug sempre esteve em Grand Theft Auto: San Andreas, que estava incorretamente dependendo de um layout de memória fortuito que persistiu por anos. Silent incluirá uma correção de código adequada para isso na próxima atualização do SilentPatch.
Para os jogadores que desejam corrigir esse problema por conta própria agora, antes da próxima atualização do SilentPatch, é possível editar manualmente o arquivo vehicles.ide do jogo. Basta abrir data\vehicles.ide no diretório San Andreas com o Bloco de Notas, encontrar a linha que começa com “460, skimmer” e substituí-la por:
460, skimmer, skimmer, plane, SEAPLANE, SKIMMER, null, ignore, 5, 0, 0, -1, 0.7, 0.7, -1
Salve o arquivo e o Skimmer deverá reaparecer. Silent observa que um problema semelhante ocorreu com Bully Scholarship Edition quebrando no Windows 10 por razões análogas. Esse problema também pode afetar quem deseja saber AMD Anuncia Eventos da Computex 2025 com Novas Tecnologias em IA.
Primeira: Este conteúdo foi auxiliado por Inteligência Artificiado, mas escrito e revisado por um humano.
Segunda: Via Neowin