0 Compartilhamentos 508 Views 1 Comments

Esses loucos programadores de jogos e suas gambiarras maravilhosas

Todo dia é uma gambiarra diferente. O prazo estourou, o projeto está atrasado, não dá tempo de debugar, não dá tempo de implementar uma nova solução, de fazer bonitinho como está nos livros, de comentar, de jogar o pepino pra comunidade e aguardar uma luz. Tem que resolver. E aí o que você faz? Improvisa.

Entretanto, você não é o único a improvisar na árdua tarefa de matar um dragão por dia e trazemos aqui algumas histórias reais de programadores de jogos que atingiram soluções inesperadas para problemas inexplicados!

Atualização na Marra

Hoje em dia os jogadores reclamam que no mesmo dia que o jogo sai já tem correção para baixar. Em um  mundo ideal, é claro que os desenvolvedores publicariam o jogo sem falhas ou erros, mas não é o que acontece. Na verdade, os jogadores tem muito a agradecer por essa possibilidade de baixar atualizações quase em tempo real: antigamente, no PC, o jogador precisava ficar atento ao site oficial e fazer o download no braço, muitas vezes de um servidor lento como uma tartaruga. Jogadores de console? Torcer pelo melhor.

Ratchet and Clank: Up Your Arsenal foi lançado em uma época em que já era possível atualizar jogos remotamente e, sendo o título online, deveria ser uma ferramenta óbvia, correto? Exceto que o estúdio Insomniac desenvolveu o jogo sem qualquer funcionalidade de atualização. E, surpresa!, o jogo precisava ser corrigido.

Mas o título baixava da internet um documento de termos de uso toda vez que iniciava uma sessão e exibia o documento para o jogador (o que, no meu entendimento, já classificaria como bug ou, no mínimo, desperdício de banda). E os desenvolvedores viram ali uma saída para seus problemas…

O código original não tinha nenhum tipo de controle sobre o documento de EULA que era baixado, uma vez que seria baixado sempre do mesmo endereço e a possibilidade de interceptação era mínima. Então, os desenvolvedores sabotaram o próprio arquivo de termos de uso com um tamanho acima do normal, causando um estouro de buffer e provocando o download e execução de código remoto. É exatamente a mesma técnica utilizada por muitos vírus, mas, no caso da Insomniac, o que eles injetaram foi um atualizador no jogo através da vulnerabilidade.

E nunca mais publicaram um título sem um sistema normal de atualizações…

O Bug Fantasma

Em 2002, o jogo Star Wars: Jedi Starfighter estava pronto para ser lançado. Faltava, entretanto, um único e específico bug que não seria aprovado pela Sony para o jogo chegar no PlayStation 2.

Durante o carregamento das cenas após cada missão, o analógico parava de funcionar e a luz apagava no centro do controle. Ninguém sabia o motivo: o problema surgira ao atualizar um componente do jogo, uma biblioteca de código, para atender uma exigência da Sony. O programador responsável pelo carregamento de filmes e pelo código de entrada/saída do controle era o mesmo sujeito. E ele não trabalhava mais na empresa havia meses…

Brett Douville ficou encarregado de desvendar aquele mistério e ele conta que usou uma técnica muito comum para debugar: colorir a borda da tela com diferentes tons para cada segmento de código executado e, assim, marcar o momento exato em que o analógico parava de funcionar.

E o bug sumiu. Misteriosamente.

Faltando dois ou três dias para entregar o produto para o controle de qualidade da Sony, Douville desistiu de tentar entender. Coloriu a borda de preto e entregou.

bug nunca mais apareceu.

Caçador do Fundo Perdido

Richard Morwood não revela o nome do jogo mas conta que ele tinha diferentes fundos que rolavam, na medida que o personagem avançava, de onde concluo que provavelmente era um jogo de plataforma. Ele tinha uma lista de texturas de fundo para serem passadas, mas uma sempre pulava. Depois de um longo tempo tentando descobrir o motivo, seu grande inimigo apareceu: o cronograma. Sem tempo para entender a falha, Morwood não hesitou. Ele duplicou o fundo que pulava na listagem de texturas e resolveu o problema: um deles era pulado, mas o outro não. E o jogo está aí funcionando até hoje.

A Melhor Unidade do Jogo

Embora o jogo de estratégia Force 21 dificilmente seja lembrado, ele certamente possui uma das mais poderosas unidades já vistas em um título do gênero.

Uma das funcionalidades de Force 21 era a câmera capaz de seguir automaticamente a movimentação do esquadrão selecionado pelo jogador. Mas, em determinados momentos, a câmera simplesmente parava de funcionar e ficava estática em um ponto do mapa enquanto o esquadrão prosseguia. Investigando a fundo, o programador responsável descobriu que o bug era disparado após um bombardeio pesado.

Acontece que a câmera era construída a partir da classe PhysicalObject e, se você entende qualquer coisa sobre orientação a objetos, deve imaginar que ela estava herdando propriedades. A câmera tinha velocidade e aceleração para seguir seu pelotão pelo campo de batalha. Mas também tinha pontos de vida. Ou seja, quando o pelotão sofria um bombardeio com dano de área, algumas vezes a câmera era literalmente morta pelo fogo inimigo.

A solução encontrada pelo programador foi aumentar estupidamente os pontos de vida e a blindagem da câmera. Então, sem saber, sempre que acompanhava a movimentação de suas tropas, o jogador estava acompanhando também uma unidade praticamente imortal, mas invisível e sem capacidade ofensiva.

Cavalo de Tróia

Ultima Online, o segundo MMORPG criado, também teve sua cota de problemas com objetos.

Por alguma bizarra decisão do time de programadores, todo personagem de jogador é, na verdade, uma instância do objeto “container”. Um container que não pode ser aberto, mas, ainda assim, um container. Foi a solução que encontraram para o inventário do personagem: você é um baú ambulante.

Para piorar a esquisitice, todo objeto “container” por sua vez era um derivado do objeto “mapa”. Você não guardava objetos em slots no seus containers, mas em coordenadas, igual a um mapa. Seu personagem era um baú ambulante, que na verdade era um mapa de uma superfície muito pequena.

Mas funcionava.

Para comprovar que seus programadores deviam mesmo consumir psicotrópicos exóticos, ficou decidido que o cavalo ficaria guardado dentro do jogador (já que este era um container). A existência do cavalo no inventário geraria um par de calças idênticas ao visual do cavalo, que seriam vestidas(!) e conduziriam o jogador.

Mas um dia é da caça e outro é do caçador e essa gambiarra não funcionou como esperado: os programadores se esqueceram que o jogador-baú também era um mapa, por questões de herança de objetos.

O resultado era que o cavalo virtual ficava passeando dentro do inventário do jogador, comendo(!) itens que eram comestíveis, tirando itens do lugar e até mesmo saindo(!!) do jogador e caindo no limbo, porque o sistema de coordenadas era pequeno e suas bordas não eram intransponíveis. Muitos servidores travaram até o time de desenvolvimento entender o que estava acontecendo e refazer a burrada.

Não Confie na Engine!

Essa anedota nem o programador quis se identificar, mas, aparentemente, um certo motor gráfico tem um bug fruto da mais pura preguiça. O jogo principal que utilizava a engine precisava ter um objeto escondido em um determinado nível, mas os programadores não queriam ter que reexportar o nível já pronto ou fazer outras manobras mais complexas e alguém teve a brilhante ideia de inserir míseras quatro linhas no próprio código fonte do motor:

Se você manja de programação, já entendeu: as linhas querem dizer que todo objeto identificado pelo número 56 em um nível 10 devem ser escondidos. Sempre.

Um ano depois, um desenvolvedor que utilizou a mesma engine veio reclamar nos fóruns da empresa que não conseguia de jeito nenhum fazer aparecer um objeto no décimo nível do seu jogo…

Obrigado por Jogar!

Wing Commander precisava ser lançado dentro do cronograma, mas, ao encerrar a sessão do jogo, o gerenciador de memória insistia em limpar a tela e exibir uma grotesca mensagem de erro: “MM386 Memory manager error” e vários termos técnicos. Não havia tempo para descobrir o motivo, que não afetava em nada a jogabilidade.

Então, um programador foi lá e mudou a mensagem de erro: “Obrigado por jogar Wing Commander”.

A Gambiarra em Mim Saúda a Gambiarra em Você!

O programador de jogos, como qualquer programador de outras áreas, é aquele que lida com linguagens arcanas que poucos compreendem e cria resultados fantásticos ou desastres monumentais. É aquele profissional sem o qual você não teria jogos.

É um herói anônimo, que costuma viver à sombra do Diretor Criativo ou do CEO do estúdio, que não ganha troféu e não veste smoking, não sobe no palco na E3, não é seguido no Instagram e cujo nome você dá ESC quando chegam os créditos do jogo. Mas ele enfrenta um boss por dia, do jeito que dá, para que aquele título funcione direitinho quando chega até a você e merece nosso respeito.

Viva o improviso!

Carregando...

Você pode se interessar

Como usar a internet de forma segura com os novos DNS da Cloudflare
Dicas
7 visualizações
Dicas
7 visualizações

Como usar a internet de forma segura com os novos DNS da Cloudflare

Carlos L. A. da Silva - 28 de novembro de 2020

Serviço oferece de forma gratuita duas opções reguladas para navegar de forma protegida.

Promoções de Jogos do Final de Semana (27/11) – Edição da Black Friday
Notícias
14 visualizações
Notícias
14 visualizações

Promoções de Jogos do Final de Semana (27/11) – Edição da Black Friday

Carlos L. A. da Silva - 27 de novembro de 2020

Confira as melhores ofertas de jogos de PC para o final de semana.

Como a Nvidia está usando rede neural no lugar de codecs de vídeo
Artigos
13 visualizações
Artigos
13 visualizações

Como a Nvidia está usando rede neural no lugar de codecs de vídeo

Carlos L. A. da Silva - 25 de novembro de 2020

Maxine é uma solução de aprendizado de máquina na nuvem que reduz a quantidade de dados transmitidos, deduzindo e gerando as partes que faltam.

One Response

Deixe um Comentário

Your email address will not be published.

Mais publicações

Promoções de Jogos do Final de Semana (20/11)
Notícias
17 visualizações
17 visualizações

Promoções de Jogos do Final de Semana (20/11)

Carlos L. A. da Silva - 20 de novembro de 2020
Top 10 soft skills para desenvolvedores
Artigos
18 visualizações
18 visualizações

Top 10 soft skills para desenvolvedores

Carlos L. A. da Silva - 20 de novembro de 2020
Como detectar um bloqueador de anúncios usando uma linha de Javascript
Dicas
22 visualizações
22 visualizações
Promoções de Jogos do Final de Semana (13/11)
Notícias
27 visualizações
27 visualizações

Promoções de Jogos do Final de Semana (13/11)

Carlos L. A. da Silva - 13 de novembro de 2020