Categorias

As “gambiarras” que os desenvolvedores de jogos utilizam

Desde que começamos a estudar programação, nossa meta é criar o melhor código possível. Em um mundo utópico, todas as melhores práticas seriam seguidas, as melhores soluções seriam aplicadas, a indentação seria perfeita, os objetos e funções seriam reutilizáveis, o consumo de memória seria mínimo. Com a prática e a vida profissional descobrimos que muitas vezes o melhor código é simplesmente aquele que roda. Entregamos o produto e fechamos o expediente, esperando que ninguém descubra a “gambiarra”.

Se você é atacado pela síndrome do impostor e se acha o pior programador do mundo, relaxe. Não seja tão duro consigo mesmo. Se está funcionando, deixa quieto até a próxima versão.

Quem está acompanhando nossa série sobre as tecnologias por trás dos games ou se lembra de nosso artigo sobre esses loucos programadores e suas gambiarras maravilhosas, já sabe: até os melhores programadores de jogos de vez em quando adotam truques para ganhar tempo ou solucionar pepinos. É a arte do improviso.

Separamos aqui mais uma lista de dez truques escondidos que alguns jogos utilizaram. São gambiarras que fariam seu professor de programação suar frio, mas que estão aí até hoje e passariam desapercebidas se os próprios desenvolvedores não resolvessem confessar seus pecadinhos…

1) The Elder Scrolls 3: Morrowind

O RPG da veterana desenvolvedora Bethesda foi um dos grandes lançamentos do Xbox original, mas escondia um segredo. Apesar da empresa ter anos de estrada na criação de imensos mundos abertos, seu mais novo título era grande demais para caber na memória do primeiro console da Microsoft.

A solução encontrada pela Bethesda foi reiniciar o Xbox sem o usuário perceber. Esse truque contou com a colaboração da própria Microsoft, que mostrou o caminho das pedras para os programadores da desenvolvedora de jogos. Era comum que o usuário esbarrasse em telas de carregamento mais longas dentro de The Elder Scrolls 3: Morrowind. Porém, o que acontecia por baixo dos panos era o console inteiro reiniciando. Phil Spencer, diretor da divisão Xbox da Microsoft, classificou a gambiarra como “gerenciamento de memória”.

2) Fallout 3

Anos depois, a mesma Bethesda utilizaria toda sua “criatividade” no DLC Broken Steel, para Fallout 3. Em determinada parte do jogo, o protagonista embarca em um trem funcional nos subterrâneos de uma Washington destruída pela guerra nuclear. Entretanto, o jogo não tinha implementado trens em movimento em seu código.

Para o jogador, a viagem é perfeitamente normal. Na prática, o trem é um item de armadura, mais especificamente uma luva chamada de ‘DLC03MetroCarArmor’. Apesar de ser um objeto luva, ele é posicionado sobre a cabeça do personagem principal. Uma gambiarra no sistema de câmera do jogo faz com que o jogador ande sozinho com essa luva-chapéu abaixo dos trilhos, dando a ilusão de que o “trem” está se movendo.

3) Paratopic

A pequena desenvolvedora Arbitrary Metric utilizou um truque similar em seu jogo de horror Paratopic. Nas sequências de direção de veículo em primeira pessoa, a programadora Jessica Harvey estava enfrentando problemas de clipagem da estrada atravessando o chão do veículo na renderização.

A solução é simples: nos momentos de direção, o carro é uma arma que o protagonista carrega na sua frente e ocupa quase todo o campo de visão imediato.

4) Firewatch

O belíssimo Firewatch se destaca principalmente por sua narrativa bem amarrada e conduzida. Entretanto, por ser um jogo de exploração com visuais impressionantes, a desenvolvedora Campo Santo introduziu um modo livre para os jogadores passearem pelo mapa descobrindo detalhes. O problema era como implementar um ciclo de dia e noite nesse modo livre.

Originalmente, dentro da narrativa, o dia e a noite mudavam quando o protagonista atingia determinados pontos na história que disparavam triggers no código. Para implementar isso no modo livre, o personagem principal possui nas costas um moinho invisível que gira lentamente. Dependendo do número de rotações do moinho, são disparados os triggers que marcam a passagem do tempo.

5) Doom 3

Doom 3 é um primor de programação engendrado pelo eterno mestre John Carmack, da id Software, tirando efeitos de iluminação impossíveis para a época e levando o hardware de sua geração ao seu potencial máximo. É claro que isso tinha grandes chances de não funcionar em todos os cenários. O problema apareceu no port do jogo para o Xbox original. Segundo Brian Osman, que trabalhou no projeto, o transmissor de texturas do jogo vazava memória lentamente, mas não havia solução.

Para a maioria dos jogadores que jogaram Doom 3, o problema era imperceptível. Porém, para aqueles que tentaram maratonar o jogo, o vazamento de memória se tornava um obstáculo. Depois de atravessar mais da metade da aventura de uma vez só, Doom 3 travava o console. Como não tinha jeito, a equipe responsável pelo port colocou uma mensagem de erro: “Disco sujo ou ilegível”. O usuário inevitavelmente desligaria o Xbox, limparia o disco com uma flanela, colocaria de volta e acreditaria ter resolvido o problema…

6) Fable 2

O cachorro é um dos grandes diferenciais de Fable 2, criando vínculos emocionais com o protagonista. Apesar disso, ele era incompleto. O animal virtual não conseguia girar em torno de si mesmo no lugar porque uma animação necessária estava faltando. Por causa dessa deficiência, a Inteligência Artificial ocasionalmente entrava em loop, rodando em pequenos círculos procurando alcançar um estado que não existia.

A solução dos desenvolvedores da Lionhead Studios? Deixar como estava, porque “cachorros de verdade fazem esse tipo de coisa”. O bug passou batido pela equipe de testes e pelos usuários. Ninguém nunca reclamou.

7) Batman Vengeance

A desenvolvedora Ubisoft tem uma fama talvez injusta de deixar passar vários bugs em seus títulos. Essa história talvez explique o motivo de tantos problemas chegarem até o usuário final. Um dos membros da equipe de teste reclamou que Batman Vengeance era difícil de jogar, uma vez que estava rodando a menos de 30 frames por segundo.

Segundo um dos desenvolvedores, a equipe resolveu isso adicionando +7 no número exibido pelo mostrador de frames interno. No dia seguinte, o responsável pela reclamação original enviou mensagem dizendo que “a jogabilidade estava divertida novamente” e fechou a pendência.

8) Halo 4

No segundo nível do jogo, depois que o jogador emerge de uma longa caverna, ele é apresentado pela primeira vez à vastidão do céu aberto. Porém, o nível era grande demais para carregar rapidamente no Xbox 360, na velocidade que a cena exigia.

A solução encontrada pelos desenvolvedores foi ofuscar o jogador. Usando recursos de iluminação HDR e brilho elevado, a cena na verdade acaba ocultando o fato de que há um grande vazio branco do outro lado, uma vez que o resto do nível ainda está carregando. O resultado simula a sensação de se sair de uma caverna para a claridade, mas não passa de uma “gambiarra” que caiu como uma luva na narrativa.

9) Jak and Daxter

A solução acima não foi inédita. Problemas de carregamento de nível sempre foram solucionados com um truque maroto. A desenvolvedora Naughty Dog já usava isso lá atrás com o primeiro Jak and Daxter. Com um mundo aberto bem grande para o hardware disponível em seu lançamento, era necessário evitar que o jogador se movesse mais rápido do que o motor era capaz de gerar o nível.

A solução implementada surpreendeu os jogadores. Ocasionalmente, o personagem principal tropeçava no chão e precisava de uns dois segundos para se levantar e se recompor. Muitos pensaram que o sistema era uma forma de dar charme ou realismo à aventura, com uma certa dose de patetice, porém, na verdade, esses eram os segundos necessários para o motor terminar de gerar arredores mais complexos.

10) Silent Hill 2

Espelhos sempre foram o grande desafio da geração de gráficos em jogos. Mesmo nos dias de hoje, para se obter reflexos realistas e puros, por assim, dizer, é necessário empregar tecnologias de ray-tracing. Por causa dessas limitações, espelhos quebrados ou imundos são bastante frequentes em cenários. Nos bons e velhos tempos, os desenvolvedores tentaram fazê-los funcionar com gambiarras.

A cena de abertura de Silent Hill 2 é emblemática nesse sentido. O protagonista James contempla a si mesmo em um espelho de banheiro de bar de beira de estrada, uma analogia à intensa jornada interior que ele irá realizar. Nos bastidores, o efeito foi obtido replicando o cenário inteiro em paralelo e criando um NPC que reproduz os movimentos do jogador.

Conclusão

Nas palavras de Patrick Wyatt, desenvolvedor com quase décadas de estrada na Blizzard Entertainment e na ArenaNet:

Embora os programadores possam ficar obcecados em encontrar a solução mais pura, abstrata, limpa e até sublime para um problema, há momentos em um projeto em que alguns sacrifícios devem ser feitos. Se eles forem bem feitos, ninguém percebe os compromissos malignos que tiveram que ser feitos.