- A anedota do “Thank you for playing Wing Commander” em Wing Commander I diz que uma mensagem de erro ao encerrar o jogo teria sido alterada com edição hexadecimal, mas não era um bug que permaneceu na versão lançada
- O registro mais próximo da fonte original é um comentário de 2009 no artigo Dirty Coding Tricks, da Gamasutra, no qual Ken Demarest relatou ter ocultado temporariamente, durante o desenvolvimento, um erro de encerramento do EMM386
- No DOSBox, em hardware da época e em buscas por strings nos binários, essa mensagem não aparecia no encerramento normal; apenas o caminho de saída pela eclusa do alojamento exibia uma mensagem de piada separada
- Mesmo no código-fonte incompleto de Wing Commander I preservado pela Electronic Arts, a mensagem da eclusa foi confirmada como código normal do jogo, diferente do caso de edição hexadecimal do gerenciador de memória
- Ken Demarest respondeu que o hack em si foi real, mas que, depois de encontrar a causa do erro, ele o removeu antes do lançamento; assim, a história se parece mais com um truque temporário de engenharia do que com um produto lançado de forma malfeita
A origem da anedota “Thank you for playing Wing Commander”
- A história mais conhecida diz que um desenvolvedor de Wing Commander não conseguiu corrigir um erro do gerenciador de memória EMM386 durante o encerramento do jogo e então alterou, por edição hexadecimal, a string de erro para “thank you for playing Wing Commander”
- Na última década, essa anedota se espalhou pela internet como um exemplo de “hacks de software engraçados” e passou a ser usada como ilustração de um “dirty-but-functional hack”
- Alguns fãs de Star Citizen também recorreram a esse caso no contexto de críticas à competência de Chris Roberts
- O elo usado era o fato de Roberts, diferentemente de outros CEOs, continuar programando também em Star Citizen
- Fãs de Wing Commander I desconfiaram da captura de tela que circulou junto com a história
- O caminho de instalação padrão de Wing Commander I não é
c:/wc1 - A versão lançada do jogo não exibe “Thank You for Playing Wing Commander!” ao encerrar
- O caminho de instalação padrão de Wing Commander I não é
O comentário de 2009 na Gamasutra é o mais próximo do original
- Ao rastrear a origem da frase e da captura de tela, foi encontrado um comentário feito em 20 de agosto de 2009 no artigo Dirty Coding Tricks, de Brandon Sheffield, na Gamasutra
- O ponto central do comentário era o seguinte
- Em Wing Commander 1, ocorria uma exceção do gerenciador de memória EMM386 ao encerrar o jogo
- Ao limpar a tela, era exibida uma linha como “EMM386 Memory manager error...”
- Como era preciso lançar rapidamente o jogo, a string de erro dentro do gerenciador de memória foi alterada por edição hexadecimal para “Thank you for playing Wing Commander”
- A Gamasutra era um site popular entre desenvolvedores de jogos e, em 2021, passou por um rebranding para Game Developer
- O artigo original continua no novo site, mas os comentários parecem ter desaparecido durante a migração
- O autor do comentário era Ken Demarest
- Ken Demarest III trabalhou na Origin Systems como engenheiro de software do primeiro Wing Commander e depois se tornou programador líder de Ultima VII e Director of Technology da empresa
- O roteirista de Wing Commander, Jeff George, já avaliou que, com exceção de Chris Roberts, Demarest foi a pessoa que mais contribuiu para viabilizar o lançamento do jogo
O mal-entendido criado pela versão do Reddit e pela captura de tela
- A versão que se espalhou em 2015 no Reddit
/r/shittyprogrammingdiferia do comentário original de 2009 em dois pontos- O comentário original não tinha captura de tela
- A frase da mensagem de encerramento foi ligeiramente alterada, fazendo-a parecer uma reviravolta mais forte
- A versão do Reddit parece ter circulado depois de um compartilhamento feito por terceiros no LinkedIn em 2012
- A captura de tela adicionada posteriormente fez parecer que esse bug havia entrado na versão lançada, mas o comentário original não afirmava isso
- Portanto, embora a origem da anedota original fosse plausível, ainda era necessário verificar separadamente se ela havia sido um “erro que permaneceu na versão lançada”
O que foi constatado na versão lançada de Wing Commander I
- Wing Commander I não exibe “thank you for playing Wing Commander” no encerramento normal
- Testes foram feitos no DOSBox e em hardware da época
- A string foi procurada em todo o binário do jogo, mas não apareceu
- Ao pressionar
ALT-X, o jogo simplesmente volta ao prompt do DOS
- Como exceção, ao clicar na porta da eclusa do alojamento da Tiger’s Claw para sair, outro fluxo é executado
- Aparece um prompt de confirmação
y/n - O jogo retorna ao DOS exibindo a mensagem “You step out of the airlock and into…”
- Essa frase é uma piada diretamente ligada a esse modo de encerramento
- Aparece um prompt de confirmação
- Essa mensagem da eclusa existe de fato no binário do jogo
- Ken Demarest também está ligado a essa tela do alojamento
- Ele é conhecido como a pessoa que implementou o efeito das gotas de água caindo em um balde
- Esse efeito é frequentemente citado como exemplo da busca de Chris Roberts por imersão
O código-fonte e a resposta de Ken Demarest
- O código-fonte incompleto de Wing Commander I preservado pela Electronic Arts foi usado na verificação
- Esses arquivos-fonte foram usados no build de lançamento de Wing Commander I e depois também foram repassados à equipe que desenvolveu o port para FM Towns
- Alguns materiais, incluindo rotinas de gerenciamento de memória, não sobreviveram
- Mesmo apenas com o código restante, foi possível confirmar a origem da mensagem da eclusa
BARRACKS.Cconfigura as funções da tela de fluxo de jogo do alojamento- O jogo descarrega a memória e então exibe a mensagem da eclusa e quebras de linha
- Isso corresponde ao resultado real de execução e não é um caso de edição hexadecimal do gerenciador de memória
- Outro caminho de encerramento fica em
COCKPIT.Ce não exibe mensagem - Darren Xczek levantou a possibilidade de ter sido Ultima VII
- Ultima VII exibe uma mensagem “thank you for playing Ultima VII” ao retornar ao DOS
- Ken Demarest foi o programador líder de Ultima VII
- Ultima VII era famoso por problemas de gerenciamento de memória, a ponto de seu sistema interno se chamar “Voodoo Memory Manager”
- Ao confirmar diretamente com Ken Demarest, ficou estabelecido que o hack de edição hexadecimal realmente aconteceu durante o desenvolvimento
- Ele respondeu que até tinha vontade de lançar o jogo com aquele hack, mas, depois de encontrar a causa do erro, não pôde deixá-lo ali por uma questão de consciência
- Também respondeu que o processo de edição manual aumentava o tempo de conclusão do build e era ineficiente
- Em última análise, a anedota foi um truque temporário durante o desenvolvimento e não permaneceu na versão lançada
- Não é evidência de que um produto malfeito foi vendido, mas sim algo mais próximo de um hack temporário de desenvolvimento removido antes do lançamento
1 comentários
Comentários no Hacker News
Lembra o hack que a Traveller's Tales colocou em Sonic 3D Blast para Sega Genesis/Megadrive
Se você sacudisse ou batesse no cartucho o suficiente com o console ligado, aparecia a tela de "secret level select". Por muito tempo isso foi considerado um easter egg, mas na verdade era um tratador de crash personalizado que interceptava a interrupção de erro da CPU principal e mandava para a tela de seleção de fase
Foi um mecanismo criado para evitar que a build fosse rejeitada pelo QA da Sega e o lançamento atrasasse; como o QA levava semanas, um único crash significava recomeçar tudo do zero. Sacudir o cartucho fazia o contato se interromper momentaneamente, causando um erro no processador
Fonte, vídeo de 3 minutos no YouTube: https://www.youtube.com/watch?v=ZZs2HUW9tDA
O canal "Coding Secrets" no YouTube linkado tem mais vídeos sobre hacks semelhantes, e é realmente impressionante o que os desenvolvedores da época faziam para manter os jogos funcionando dentro das restrições de hardware e de negócios
Hoje em dia, às vezes parece que os publishers ou fabricantes de consoles pulam até um QA de poucos minutos em jogos AAA
Há algo realmente mágico em conseguir chegar a fontes primárias em casos assim
Especialmente quando há uma diferença de idade ou distância geográfica, como no meu caso, às vezes isso parece quase impossível
Cresci na Suécia nos anos 80 e já era obcecado por computadores naquela época. Usei um Commodore 128 e depois passei para o Amiga, mas joguei muito no modo C64 e, claro, "Uridium" [1] e "Paradroid" [2] eram quase obras obrigatórias que todo mundo conhecia
Ainda assim, acho estranho o fato de o desenvolvedor deles, Andrew Braybrook, estar no meu feed do Xitter [3] e continuar desenvolvendo jogos até hoje. Na época ele parecia um mago distante, morando no Reino Unido e mais de 10 anos mais velho que eu; hoje, pelo menos profissionalmente, ele parece de certa forma um colega
Esse tipo de coisa provavelmente já acontecia antes da internet, mas imagino que fosse muito mais difícil e raro
[1]: https://en.wikipedia.org/wiki/Uridium
[2]: https://en.wikipedia.org/wiki/Paradroid
[3]: https://twitter.com/UridiumAuthor
É muito legal que em 2023 ainda exista um site de notícias sobre Wing Commander mantido atualizado
Já ouvi a história de um desenvolvedor que estava auditando o código de um míssil. Ele rapidamente apontou que havia vazamentos de memória por toda parte, mas acabou se descobrindo que era intencional: o míssil faria sua própria coleta de lixo ao fim do voo, algo assim
O problema de falta de memória era tratado estimando-se o dobro do uso de memória esperado durante o voo do míssil
Há este comentário no tópico do Reddit linkado:
Também joguei bastante Ultima VII, então, como o artigo diz, talvez as memórias tenham se misturado
Esse tipo de mensagem de encerramento não era incomum antigamente, e só o ato de ler essa história já basta para criar uma falsa memória ou uma memória misturada
Embora essa história tenha acabado se revelando falsa, lembro de ter instalado um launcher de jogos multiplayer de Half-Life 1 em 1999/2000
Quando cliquei em "install", apareceu uma caixa de diálogo dizendo algo como: "não se preocupe se o instalador disser que a instalação falhou. O programa foi instalado corretamente"
Tirei até uma captura de tela e a guardei por anos. Talvez eu a tenha perdido, ou talvez esteja em algum computador antigo na casa dos meus pais, mas juro que era real
De fato apareceu uma mensagem de erro, e o programa estava instalado corretamente
Uma vez contei essa história no Twitter e alguém respondeu que era um problema conhecido; se minha memória não falha, tinha a ver com uma atualização do registro do Windows 97
Normalmente, isso detonava o Program Files inteiro
É estranho, porque tenho quase certeza de que vi a mensagem "Thank you for playing Wing Commander!" quando era criança. Só eu?
Pensando em retrospecto, joguei muitos jogos de DOS, então talvez tenha misturado as coisas. Imprimir alguma coisa ao sair não era tão raro
Pode ser muito irritante quando uma história vai se espalhando e ganhando pequenas distorções. Neste caso não causa dano, mas ainda assim
Tenho bastante certeza de que quem tinha essa mensagem era Wing Commander 2, não o original