1 pontos por GN⁺ 2023-09-21 | 1 comentários | Compartilhar no WhatsApp
  • 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 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/shittyprogramming diferia 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
  • 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.C configura 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.C e 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

 
GN⁺ 2023-09-21
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

    • É significativo que, mesmo numa época em que a estrutura dos jogos era muito mais simples do que hoje, o QA fosse um processo de semanas
      Hoje em dia, às vezes parece que os publishers ou fabricantes de consoles pulam até um QA de poucos minutos em jogos AAA
    • Esses vídeos são refrescantes por serem curtos. Parece que hoje todos os canais do YouTube que assino fazem vídeos de 45 minutos
  • 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

    • "Memória do míssil insuficiente, alternando para canhões"
    • Sinceramente, é difícil acreditar
  • Há este comentário no tópico do Reddit linkado:

    Lembro de ter jogado Wing Commander I por horas na primeira vez que o executei... depois de uma longa sessão, ao sair, li aquela frase e pensei: "ah, que simpático"
    Agora que sei a verdade, fico me perguntando se é mentira ou se a pessoa simplesmente está lembrando errado

    • Provavelmente é o efeito Mandela. Eu também me lembro dessa mensagem que, na verdade, não existe
      Também joguei bastante Ultima VII, então, como o artigo diz, talvez as memórias tenham se misturado
    • Posso verificar se meus disquetes ainda funcionam e ver se são diferentes da versão GOG/Kilrathi Saga. Mas provavelmente não vão funcionar
    • Claro que é uma lembrança errada. A memória é notoriamente pouco confiável e muito mais instável do que imaginamos
      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
    • É bem provável que estejam usando um lançamento muito posterior. As versões mais fáceis de encontrar online são de bem depois
  • 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

    • Desinstalar o Sierra Utilities incluído em Half-Life 1 apagava o diretório um nível acima daquele em que ele havia sido instalado
      Normalmente, isso detonava o Program Files inteiro
    • Windows 97
      Acho que encontramos o problema

  • É estranho, porque tenho quase certeza de que vi a mensagem "Thank you for playing Wing Commander!" quando era criança. Só eu?

    • Acho que essa mensagem de "thank you for playing" existia mesmo em Wing Commander 2
    • Também pareceu muito familiar quando li pela primeira vez
      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
    • Eu também me lembro claramente de ter visto aquela frase de agradecimento. Obviamente penso no efeito Mandela, mas a lembrança é tão vívida que dá arrepios
  • 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