Retina Desgastada
Idéias, opiniões e murmúrios sobre os jogos eletrônicos
Comunidade do SteamMastodonCanal no YouTubeInstagram

17 de setembro de 2017

Programação 101

iteration

Nessa quarta-feira foi o Dia do Programador! Para quem não sabe, é aquele profissional para quem um ponto e uma vírgula no final de uma linha pode significar a diferença entre um dia ganho e um dia perdido. É aquele que lida com linguagens arcanas que poucos compreendem e criam resultados fantásticos ou desastres monumentais. É aquele profissional sem o qual você não teria jogos. Na verdade, você nem estaria lendo esse texto. Ou qualquer outra coisa nessa tal de internet.

É 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 é seguido no Instagram e cujo nome você dá ESC quando chegam os créditos do jogo. Mas ele enfrenta um boss por dia para que aquele título funcione direitinho quando chega até a você e merece nosso respeito.

Exceto os da Bethesda. Vocês, não.

Trago aqui algumas histórias da linha de frente que mostram que Programação é Arte, é Guerra, é pau, é pedra, é o fim do caminho.

Atualização na Marra

RatchetClank-Up-Your-Arsenal-img.1

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 a 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

StarwarsjedistarfighterEm 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.

O 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

Force 21

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ê seguiu nossas aulas 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.

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:

if( level == 10 && object == 56 )
{
HideObject();
}

Se você não manja de programação, 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

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".

Ouvindo: Wumpscut - Wumpelstilz

2 comentários:

Gledson disse...

Programador: criando gambiarras para garantir a paz no mundo desde Ada Lovelace.

Shadow Geisel disse...

kkkkkkkkkk. Realmente, os da Bethesda merecem só puxões de orelha.

Retina Desgastada

Blog criado e mantido por C. Aquino

Wall of Insanity