Zork e Z-Machine: como os desenvolvedores transferiram o jogo dos mainframes para os computadores domésticos de 8 bits


Jogos de computador existem quase tanto quanto os próprios computadores. Embora seja difícil de acreditar, a aventura de texto de Zork foi o Fortnite de seu tempo. Mas Zork também era algo mais. Por questões de portabilidade e economia de espaço, o próprio Zork foi escrito na ZIL (Zork Implementation Language), que ativamente usou o conceito completamente novo de programação orientada a objetos da época e foi executado em uma máquina virtual. E tudo isso aconteceu em 1979. Os desenvolvedores usaram todos os tipos de truques para encaixar o máximo do Império Subterrâneo possível em computadores com apenas 32 KB de RAM. No entanto, o Zork não foi apenas um avanço tecnológico, mas também um marco importante na história dos jogos de computador. Ao mesmo tempo, ele não se levantou do zero.


DEC PDP-10 Módulo de microplaqueta do computador

A revolução dos computadores começou durante a Segunda Guerra Mundial, e nas décadas de 50 e 60 não pensava em parar. Sistemas de computador cada vez mais acessíveis para empresas e universidades apareceram à venda. O Laboratório de Ciência da Computação (LCS) do Instituto de Tecnologia de Massachusetts (MIT) teve a sorte de ser afiliado à ARPA , que forneceu ao LCS e ao Laboratório de Inteligência Artificial do MIT (anteriormente parte do Projeto MAC ) recursos computacionais significativos, principalmente fornecidos pelos sistemas DEC PDP .

Como resultado, os estudantes do MIT Dynamic Modeling Group (peças LCS) obtiveram acesso ao mainframe PDP-10 KA10, a máquina mais poderosa da época. Embora esse PDP-10 em particular fosse o modelo original de 1968 com módulos de transistor Flip Chip discretos e fiação envolvente, ele foi fortemente modificado : adicionou suporte à memória virtual e às páginas de memória para expandir os 1.152 KB originais de memória do kernel.

O computador executando o sistema operacional Incompatible Timesharing System (ITS) desenvolvido no MIT era um sistema multiusuário altamente funcional.

Naturalmente, era usado principalmente para jogar.

Você está pronto para a aventura?


Na primavera de 1977, um jogo chamado Colossal Cave Adventure (ou "Adventure", abreviado) apareceu no MIT. Este jogo foi o primeiro jogo de computador do gênero de ficção interativa , permitindo que o jogador fizesse uma viagem de texto por um grande sistema de cavernas, que, segundo rumores, estava cheio de tesouros. Quase como nos livros “Escolha sua aventura” , o jogador faz a sua escolha, que o move pelas salas da caverna e, como resultado, descobre o tesouro e escapa, ou encontra sua morte prematura.

Inspirado por este jogo, um grupo de estudantes da LCS percebeu que poderia superar esse projeto de Stanford. O principal ponto fraco de Adventure foi o fato de ele ter sido escrito em FORTRAN, uma linguagem que não era famosa por seu bom trabalho com texto dinâmico, especialmente pelas necessidades de um jogo do gênero de ficção interativa. Em essência, o Adventure era completamente codificado no código, o que limitava a flexibilidade e complicava a extensibilidade e o suporte do jogo.

No Adventure, cada quarto tinha um ID numérico, ao qual a descrição na tabela estava associada. Outra mesa pediu uma breve descrição. Em outra tabela, usando IDs numéricos, foi listada a localização dos quartos em relação a outros quartos. Isso significava que, para adicionar uma sala, você teria que editar manualmente todas essas tabelas e ter cuidado para não causar problemas com essas alterações.

Competição de hackers



Usando a experiência de trabalhar com idiomas naturais disponíveis nos laboratórios LCS e AI, Dave Lebling primeiro escreveu um analisador simples e estabeleceu as bases para um mecanismo de jogo semelhante ao mecanismo Adventure. Para fazer isso, ele usou a linguagem de programação derivada do MDL LISP. Graças às poderosas capacidades de processamento de linguagem natural, Mark Blanc , Bruce Daniels e Tip Anderson criaram, com base no trabalho de Lebling, criar - o primeiro jogo de protótipo, que com o tempo se tornou o que hoje chamamos de Zork.

A revolução de Zork foi que ele, diferentemente dos simples comandos Adventure (nos quais LAMP GET e GET LAMP eram equivalentes), graças às excelentes capacidades de processamento de linguagem natural do MDL, conseguiu lidar com frases inteiras. Ele podia processar frases completas e até várias frases (equipes) combinadas em uma frase. A presença de um analisador forte combinado com a facilidade de modelar novas salas no MDL em um estilo orientado a objetos significava que, depois de escrever o analisador e o mecanismo de jogo, o mundo poderia ser expandido quase ilimitadamente.

Uma sala em Zork pode ser configurada usando um código tão simples:

 <ROOM "WHOUS" "This is an open field west of a white house, with a boarded front door." "West of House" <EXIT "NORTH" "NHOUS" "SOUTH" "SHOUS" "WEST" "FORE1" "EAST" #NEXIT "The door is locked, and there is evidently no key."> (<GET-OBJ "FDOOR"> <GET-OBJ "MAILB"> <GET-OBJ "MAT">) <> <+ ,RLANDBIT ,RLIGHTBIT ,RNWALLBIT ,RSACREDBIT> (RGLOBAL ,HOUSEBIT)> 

Isso define a "casa branca" desde o início do jogo, assim como as saídas desta sala, propriedades especiais das saídas (por exemplo, uma porta trancada) e objetos na sala. Isso garante que todas as propriedades da sala, incluindo sua descrição, descrição resumida, propriedades e rótulos, estejam em um só lugar. O mecanismo do jogo poderá alternar rótulos individuais (bits) de salas, armazenando um banco de dados central de todas as salas e seu status atual. Gerencie as conexões da sala durante a criação do design de um jogo usando seus nomes, em vez dos IDs numéricos na tabela.

Golpe alto


Basta dizer que Zork foi absolutamente fantástico em mainframes. A pedido de outros jogadores interessados, ele foi portado para o muito mais comum DEC TOPS-20 OS para PDP-10. Embora os desenvolvedores do Zork fossem tão generosos que distribuíam gratuitamente, distribuíram a versão somente leitura criptografada. Eles até armazenaram o código-fonte do Zork em uma pasta segura no mainframe da ITS, para a qual tiveram que corrigir o sistema operacional do mainframe da ITS totalmente aberto e inseguro.


Nesta fase da história dos computadores no mundo, ainda havia alguns deles. O conceito de um computador doméstico estava apenas começando a surgir: em 1977, computadores como o TRS-80 e o Apple II apareceram , mas mesmo esse sistema era incrivelmente limitado em comparação com os mainframes nos quais estudantes americanos estavam jogando jogos de aventura de texto na época. A idéia de transportar um jogo como o Zork - um arquivo executável de 1 MB - para computadores domésticos parecia muito prematura.

Embora os computadores domésticos ainda fossem raros, o conceito de venda de software para consumidores comuns também permaneceu novo. Foi nessa época que o Atari 2600 apareceu no varejo, lançando a segunda geração de consoles de jogos, na qual não era possível jogar apenas um jogo com a ajuda dos cartuchos inseridos. Esse era um mercado novo, que colocava muitas perguntas para estudantes do MIT, Stanford e outras instituições de ensino sobre a oposição da cultura hacker ao mundo do software comercial. Alguns, como Richard Stallman , não mudaram de opinião desde os dias de estudante no MIT.

Quando os desenvolvedores do Zork deixaram o instituto, perceberam que o sucesso do jogo estava em suas mãos: eles tinham a chance de comercializá-lo, direcionar sua vida e carreira em uma direção completamente nova em relação aos seus objetivos originais. Assim, quase sem o menor obstáculo, em 22 de junho de 1979 foi fundada a empresa Infocom.

Agora só precisamos portá-lo


Havia apenas uma pequena ressalva em transferir o Zork dos sistemas de mainframe PDP-10 para os pequenos computadores domésticos: naquela época, a Infocom não tinha nada para vender. Os desenvolvedores tiveram várias idéias de jogos que poderiam ser adaptadas para trabalhar em computadores domésticos, mas o principal valor foi a transferência do Zork. Eles só precisavam resolver o problema de converter 1 megabyte de código de jogo MDL em microcomputadores com 32 KB de RAM (ou até menos) e unidades pequenas.

Além disso, eles não queriam portar o jogo individualmente para o TRS-80, Apple II e, em seguida, para novos sistemas. E se você tentar usar um código MDL existente? Isso marcou o início do desenvolvimento do que logo se tornaria conhecido como Z-Machine .

Obviamente, a princípio eles queriam resolver o problema de compatibilidade do Zork com microcomputadores, reduzindo o jogo com a exclusão de conteúdo. Cortando muito, eles conseguiram se aproximar do tamanho de Adventure. Eles fizeram algo semelhante com o MDL, removendo todos os recursos que o Zork não precisava. Foi assim que a linguagem de implementação do Zork (ZIL) foi lançada, na qual eles poderiam facilmente portar o Zork com o MDL. Depois disso, o compilador ZIL pode criar arquivos executáveis ​​muito menores que o compilador MDL.

Olhando para a descrição da lanterna de latão Zork no ZIL, podemos ver que é mais fácil ler do que MDL:

  <LANTERNA DO OBJETO
 (SALA LOCAL)
 (LUZ DA LANTERNA DA LÂMPADA DE SYNONYM)
 (BRONZE ADJETIVO)
 (DESC "lanterna de latão")
 (BANDEIRAS TAKEBIT LIGHTBIT)
 (AÇÃO LANTERN-F)
 (FDESC "Uma lanterna a bateria está no troféu
 caso. ")
 (LDESC "Há uma lanterna de latão (alimentada por bateria)
 aqui. ")
 (TAMANHO 15)> 


Obviamente, isso foi maravilhoso, mas ainda não permitiu o lançamento do Zork no TRS-80. Obviamente, nesse estágio, eles poderiam escrever um compilador ZIL para cada plataforma, bem como um arquivo executável ZIL, para gastar muito tempo posteriormente, configurando cada jogo em cada plataforma de destino. Mas eles decidiram escrever uma máquina virtual: Z-Machine. Na verdade, era uma plataforma ideal para jogos de aventura baseados em texto que suportava diretamente arquivos binários ZIL e também implementava muitas otimizações, a mais importante das quais era o empacotamento de caracteres em 5 bits, que se assemelhava ao código Bodo .

Graças a todas essas otimizações, uma máquina virtual e sua própria linguagem de programação, eles conseguiram colocar o mundo truncado do Zork I em um "arquivo de histórico" de 77 kilobytes junto com um intérprete (máquina virtual). Como ainda havia mais de 32 KB de memória que os computadores populares, um sistema de memória virtual foi implementado na máquina virtual, na qual apenas dados dinâmicos (variáveis) foram carregados na RAM e todos os dados estáticos (texto) foram lidos no disquete, se necessário.

Encaminhar para o futuro



Os disquetes Apple II tinham um tamanho de 140 KB e os TRS-80 tinham um tamanho de 180 KB, ou seja, o problema com espaço foi resolvido. Somente o intérprete precisava ser otimizado para a plataforma de destino, e isso significava que, no futuro, o mesmo intérprete poderia ser usado em todos os jogos lançados pela Infocom, sem a necessidade de migrar para plataformas separadas. Eles ainda tinham muito conteúdo cortado da versão mainframe do Zork. Eles estavam prontos para a sequela.

Após o sucesso comercial do Zork I, os desenvolvedores continuaram a produzir peças cortadas da versão original do mainframe na forma de Zork II e Zork III. Ano após ano, as vendas do Zork I continuaram a crescer, e se tornou um jogo de compra obrigatória, geralmente associado a novos sistemas. Novas versões do Z-Machine foram desenvolvidas, nas quais novos recursos foram adicionados para jogos ainda mais complexos. Hoje, ainda podemos desfrutar dos jogos da Infocom sem nos preocupar com problemas de compatibilidade: as fontes do Zork no MDL foram publicadas, bem como o código-fonte para outros jogos clássicos da Infocom . Se você nunca ou nunca jogou Zork há muito tempo, tente e dê uma olhada no que está acontecendo dentro do jogo. É possível dizer, sem o menor estiramento, que um grupo de hackers de universidades americanas na década de 1970 provavelmente determinaria o futuro do mundo dos videogames e da narrativa interativa.

Source: https://habr.com/ru/post/pt479690/


All Articles