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

12 de novembro de 2014

Introdução a Orientação a Objetos

Canguru do Inferno

Agora que os bugs estão no centro das atenções com o desastroso lançamento de Assassin's Creed: Unity, é importante entender como alguns deles nascem. Esses aqui não são os piores bugs, mas, sem dúvida, são os mais engraçados quando você descobre o motivo do erro.

Existe em programação um conceito chamado de "objetos". Não programo por opção, mas por necessidade, e tampouco sou professor então não irei explicar os detalhes mais profundos do método. Basta você saber que objetos são uma unidade básica de um elemento e todos os seus derivados, herdam características do objeto-pai. Assim, um programador de RPG pode determinar que todo objeto "arma" causa dano nos personagens, nos ambientes ao redor, tem um custo em dinheiro para compra e outro para venda e desenvolver dezenas de espadas, machados, montantes, lanças, alabardas, maças e foices que herdam essas características. Se, no futuro, o programador quiser introduzir o conceito de deterioração, ele altera apenas o objeto "arma" e todos as dezenas de variações herdam esse atributo, sem que ele tenha que abrir um por um e editar.

Mas herança é um negócio complicado, principalmente se você não prestar atenção.

Existe uma lenda urbana que fala de um sistema de treinamento virtual da Força Aérea da Austrália que deu errado por causa de objetos e suas heranças. Na anedota, o departamento de tecnologia teve que criar nos anos 90 uma variação do programa que iria treinar pilotos de helicóptero para interagir com tropas no solo. O programa mapeava todo o vasto território australiano com base em dados geológicos e era um primor. Mas foi pedido que o programa simulasse também o comportamento de cangurus, abundantes na região, como todo mundo sabe. Supostamente, o movimento de aeronaves rente ao solo poderia assustar os animais e sua debandada poderia revelar a posição do helicóptero.

E os programadores, com prazo apertado, pegaram o objeto "soldado", trocaram o sprite para representar o marsupial e mudaram o movimento para pulo. Teria dado tudo muito certo se, durante uma demonstração para convidados americanos, a herança não tivesse falado mais alto. Em um rasante controlado pelo piloto americano dentro da simulação, os cangurus fugiram para trás de uma colina. Um dos mamíferos puxou uma bazuca e abateu o helicóptero.

O pior de tudo: não é uma lenda urbana. O fato realmente aconteceu e foi mencionado em uma palestra em 1999, ministrada pelo chefe do projeto. A parte falsa da história é que os programadores introduziram os cangurus na simulação por diversão, não por necessidade, e que o bug foi descoberto na hora, não durante uma demonstração para pilotos americanos. Ninguém passou vergonha. Mas a bazuca é verdadeira. Ainda que disparasse bolas de vôlei de praia, como era padrão em todas as simulações.

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.

Até introduzirem montarias no jogo.

Cavalo

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. Gambiarra define.

Entretanto, os programadores se esqueceram que o jogador-baú também era um mapa, por questões de herança de objetos. Resultado: o cavalo de verdade 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.

História verdadeira...

Ouvindo: Welle Erdball - VW-Kafer !++

5 comentários:

Gledson A. disse...

"Basta você saber que objetos são uma unidade básica de um elemento e todos os seus derivados, herdam características do objeto-pai."

Não seria "classe-pai", Aquino?

Gledson A. disse...

HAHAHAHAHA!

Caramba, tenho que compartilhar isso daqui! Isso sim é uma Introdução perfeita para O.O..

Perfeito, Aquino. Perfeito!

xD

Hawk disse...

Sensacional! Você poderia contar mais histórias como essas. Adorei.

C. Aquino disse...

Gledson, não vamos complicar muito... o termo certo é classe-pai mesmo, mas, para fins, digamos, literários, deixei "objeto" mesmo.

Hawk, eu já conhecia essa do canguru tinha uns dez anos. Mas só recentemente esbarrei na do Ultima Online. A ideia da postagem foi juntar as duas e tentar achar uma terceira história também sobre objetos e herança. Não achei... :(

Mas pode ficar certo que outros "causos" dos bastidores do desenvolvimento de jogos vão continuar aparecendo por aqui! :)

Gledson A. disse...

Ah sim, desculpa então Aquino. Mas aí, a iniciativa foi ótima! Muito boa!

xD

Retina Desgastada

Blog criado e mantido por C. Aquino

Wall of Insanity