Este artigo é um fragmento do meu livro Bug Voyage: A Tour of Classic Game Glitches. O livro também contém informações sobre a geração de números pseudo-aleatórios, realizando cálculos de baixo nível com números binários e decimais, bem como sobre como causar uma falha em qualquer máquina Galaga, mesmo sem cair moedas lá.Se você tem o Pac-Man Arcade Machine perto de você, Sra. Pac-Man ou algo assim, você está com sorte, hoje eles estão em falta. Até mesmo as máquinas mais comuns de "Reunião de 20 anos" no passado, nas quais a Sra. É instalada em conjunto Pac-Man e Galaga agora são menos comuns.
Mas, para entender o que será discutido, basta baixar um vídeo do YouTube sobre um desses jogos e assistir em apenas um minuto:
Você já reparou? Como Pac-Man e fantasmas se movem suavemente pelo labirinto? Eles deslizam com tanta confiança e clareza.
Essa fluidez, como veremos, é uma ilusão, e isso não é tudo. Aqui está outro vídeo do YouTube:
Ele foi enviado por Jamey Pittman, autor do artigo
do Pac-Man Dossier , que tem sido a fonte de grande parte das informações do Pac-Man para o meu livro. O vídeo foi rebobinado um pouco para economizar seu tempo. Dê uma olhada nisso. Em particular, fique de olho no Pac-Man e no fantasma vermelho (o manual diz que o nome dele é Blinky). Observe o que acontece por volta do quadragésimo segundo!
Você viu? Pac-Man atravessou um fantasma vermelho sem nenhum problema! Como isso aconteceu? É possível garantir que isso aconteça o tempo todo?
Calma, agora vou explicar tudo, e sim, esse é um comportamento constante. Se você seguir exatamente as instruções de Pittman no primeiro nível, isso sempre acontecerá.
Pac-manO que é um sprite?
Uma parte do equipamento gráfico bidimensional usava objetos gráficos especiais em jogos chamados sprites. Você provavelmente já ouviu esse termo nas conversas modernas sobre os gráficos de pixel dos personagens.
Porém, antes, o significado do termo era diferente: denotava um objeto gráfico em movimento independente que podia ser colocado em qualquer lugar da tela ou em cima do restante dos gráficos, chamado de plano de fundo ou abaixo dele. O sprite recebe as coordenadas X e Y, a imagem e sua cor. Muitas vezes, eles eram usados para personagens do jogo, mas também usados como adições ao plano de fundo e para outros fins.
A maioria dos sistemas suporta múltiplos ou (no caso de Galaga) muitos sprites. Eles tinham outros nomes: Atari os chamou pela primeira vez de "gráficos de mísseis de jogadores" e, na documentação inicial do Commodore, eles eram chamados de "MOBs (Movable Object Blocks"). No entanto, gradualmente quase todos começaram a chamá-los de sprites.
A máquina de arcade de equipamentos Pac-Man suporta gráficos de sprite. Ele pode ser exibido na tela até oito sprites por vez, e isso sem usar truques com linhas de varredura. Um dos sprites é a imagem do próprio Pac-Man, e mais quatro são usados por fantasmas. Quando Pac-Man come o fantasma, seus olhos voltando para casa usam o sprite fantasma.
Nem tudo o que muda na tela é um sprite. Outro tipo de gráfico usado pelo equipamento da época é o
fundo do bloco. Era apenas uma grade de elementos gráficos individuais armazenados na memória. Ao alterar o conteúdo de um local de memória, uma pequena parte da tela correspondente a essa parte da grade também muda imediatamente. Portanto, trabalhar com essas grades é simples.
Os pontos no jogo Pac-Man são peças (peças) do fundo, apagadas quando o Pac-Man as come. A cintilação do Energizer, que dá força ao Pac-Man, é feita colorindo essas células de preto e branco, a cada poucos quadros. Mas esses objetos não se movem, eles só podem ser removidos ou substituídos.
O problema com os gráficos dos blocos de caracteres é que eles não podem se mover sem problemas. Ele está localizado na grade, de modo que um objeto em segundo plano em movimento não será capaz de se mover pela tela sem problemas, como fazem o Pac-Man e os fantasmas. Só pode se mover entre células da grade. É impossível mover parte do espaço da grade; está lá ou não.
Bem, sim, isso é interessante. Mas e daí?
Noções básicas do mundo do Pac-Man
Quando criança, escrevi pequenos jogos no Microsoft BASIC para o meu Commodore 64. Essa implementação do BASIC teve problemas. Os programas eram executados lentamente e quase nunca usavam os recursos sonoros e gráficos do computador, que eram incríveis para a época. Se você queria fazer algo com gráficos e som, tinha que aprender os comandos de acesso direto à memória técnica chamados POKEs, ou aprender a escrever no código da máquina.
Uma solução foi usar objetos de caracteres em vez de gráficos do sistema de sprites, como descrevi acima. Os objetos faziam saltos do tamanho de ladrilhos, mas era muito mais fácil trabalhar com eles. Foi possível começar a criar um jogo usando gráficos de personagens e, quando o projeto já se tornou grande e sério, e eu queria mostrá-lo às pessoas, mudar para o uso de sprites de hardware.
Um objeto na memória ainda pode pular no mesmo incremento de oito pixels, mas o player não viu isso. Tudo o que ele viu foi uma imagem de sprite tremeluzente que poderia ser maior que o bloco de caracteres e ocultou o que estava realmente acontecendo. Aproximando-se da programação com sabedoria, foi possível interpolar a posição do sprite para que seu movimento parecesse mais suave. Se você fez bem o suficiente, o jogador nunca notou a diferença. Só você saberia a verdade.
Você deve ter adivinhado o que estou levando. Porque
foi assim que o Pac-Man foi programado .
De fato, tanto o Pac-Man quanto os fantasmas tinham duas posições. Esta é a posição dos gráficos em sprite que se movem suavemente na tela que o jogador vê. Essa informação é dada ao jogador quando ele joga o jogo, mas isso é apenas uma sombra, uma ilusão. Se você quer entender como o Pac-Man realmente funciona, é necessário olhar mais profundamente.
Nos bastidores do jogo, Pac-Man também leva em consideração quais células de personagens são ocupadas por Pac-Man e fantasmas. Não há traços dessas coordenadas na tela. Suspeito que, nos estágios iniciais do Pac-Man, ao experimentar a jogabilidade, os desenvolvedores pudessem desenhar peças diretamente na tela. Jamie Pittman descobriu que essas coordenadas são usadas para inteligência artificial de todos os fantasmas, e também são usadas para reconhecer todas as colisões no jogo.
Para manter essa ilusão, o jogo tem que ser enganado. Ela rastreia até que ponto o Pac-Man e os fantasmas se mudaram de sua célula atual no nível do assinante e os muda para uma nova posição quando estão longe o suficiente. Um objeto um pouco mais rápido terá uma velocidade que torna a troca de células um pouco mais frequente.
Esses elementos - coordenadas da grade, rastreamento entre células e a posição do sprite na tela - criam a ilusão de movimento suave. Mas, do ponto de vista do jogo, o movimento é realizado exatamente da mesma maneira que no meu caso, quando programei os gráficos das células dos personagens no Commodore 64.
Acerto de contas
Agora, temos todas as informações necessárias para entender como o Pac-Man pode passar por fantasmas.
As colisões do Pac-Man são reconhecidas pela comparação das coordenadas da grade com as coordenadas dos fantasmas. Se eles são iguais, ocorre uma colisão e um come o outro. Se forem diferentes, não haverá colisão. Isso é tudo, nem mais, nem menos.
Você pode ver que o motivo dessa decisão é a velocidade do reconhecimento de colisão nos ciclos do processador. Em cada quadro, ele compara os números X e Y de um personagem do Pac-Man com os números de cada um dos quatro fantasmas. Graças a isso, ele não precisa se preocupar com distâncias e situações de risco. Colisões são correspondências exatas de coordenadas no sistema de grade.
Essa grade (aproximadamente) corresponde ao sistema de coordenadas do bloco, representando as posições reais dos personagens do jogo. A detecção de colisão usa essa grade. O jogo registra uma colisão somente quando as coordenadas dos blocos de ambos os personagens coincidem. Isso significa que eles devem ocupar uma célula da grade.O problema ocorre quando as posições do Pac-Man e do fantasma se movendo uma em direção à outra alternam para a próxima célula no mesmo quadro. A verificação de colisão é realizada depois que todos os objetos foram movidos no quadro atual. Se o Pac-Man for para a célula Blinky e o Blinky for para a célula anterior do Pac-Man no mesmo quadro, ocorrerá um erro quando uma colisão for detectada. Eles trocaram de lugar!
Como esse é o único nível de realidade que realmente significa algo no jogo, o que o jogador
vê não
é importante. Pac-Man e o fantasma simplesmente passam, "divergindo como navios no mar".
A inteligência artificial (IA) no jogo tem uma natureza determinística, para que você possa identificar um padrão para a repetição de comportamento. Apesar do fato de que o tempo para a manifestação de um erro na passagem deve ser preciso para o quadro, o
jogador não precisa ser preciso para o quadro se seguir as regras para executar os padrões de movimento do Pac-Man. Foi assim que o vídeo de Jamie Pittman foi gravado.
Eu dei uma descrição tão detalhada para enfatizar um fato importante. É muito fácil perceber objetos no jogo como reais. Pac-Man é
um objeto na tela, fantasmas também são objetos como uma nave espacial, Mario, Sonic, Solid Snake, um soldado de Call of Duty. Todos eles são objetos. Mas isso é uma ilusão.
De fato, todos eles apenas dão uma dica de um sistema interno e mais profundo. Nesse sistema, o computador precisa realizar um trabalho sério apenas para determinar se dois objetos
estão se tocando . O que você vê na tela é uma ilustração do mundo abstrato, e parte do jogo transmite ao jogador informações deste mundo através da tela, de maneira apropriada ao seu senso de realidade.
É muito fácil esquecer o quão fina é essa conexão. Como você sabe qual objeto você controla na tela? Ele é diferente dos outros e responde à gerência. Mas e se exatamente o mesmo aparecer na tela? Ou seu objeto às vezes se move aleatoriamente, responde aos sinais de controle com atraso, às vezes se transforma em invisibilidade, se divide em dois, se torna como um dos inimigos?
A tarefa do designer é fazer a conexão entre o mundo interno do jogo e o que você vê na tela o mais simples e imediato possível (é claro, se ele não estiver tentando obter algum efeito especial). É isso que significa
imersão , ou deveria significar.
Informações Adicionais
Insira uma moeda na máquina de fliperama “20 Year Reunion” e entre com o joystick do primeiro jogador: cima, cima, cima, baixo, baixo, baixo, esquerda, direita, esquerda, direita, esquerda. Se o fantasma na tela Game Select ficar rosa e você ouvir um som, tudo será feito corretamente. Agora, se você escolher o jogo Ms. Pac-Man, então você jogará o Pac-Man original.
Em alguns hardwares gráficos, você pode usar truques com linhas de varredura para criar uma mágica poderosa. Por exemplo, em um sistema que pode exibir apenas oito sprites, mais pode ser alcançado, embora com o custo do tempo do processador e flexibilidade reduzida.
Nesse sentido, o console Atari VCS / 2600 é mais digno de nota, porque a maioria dos gráficos do sistema foram criados usando truques com linhas de varredura. Leia mais sobre essas técnicas no livro
Racing The Beam .
Fontes:
Dossiê do Pac-Man: http://www.gamasutra.com/view/feature/3938/the_pacman_dossier.php?print=1
Canal do YouTube de Jamie Pittman: https://www.youtube.com/user/jameypittman/videos