Dissecando o game: Duke Nukem 3d
Transcrição
Dissecando o game: Duke Nukem 3d
Dissecando o game: Duke Nukem 3d Escrito por Bruno Crivelari Sanches Qua, 21 de Novembro de 2012 11:00 - Última atualização Dom, 18 de Novembro de 2012 20:24 Hoje vamos conhecer um pouco mais a fundo o jogo Duke Nukem 3d , que foi lançado no inicio de 1996 e apesar da idade, possui muitos itens modernos que só veríamos novamente anos depois. O jogo chama atenção não só pelo seu gameplay que foi revolucionário para os FPSs da época, mas também pela sua tecnologia, sendo que em 1996, duke já possuia um editor WYSIWYG (“o que você ve é o que você tem”) que se compararmos com os editores da época, que mais pareciam um cad do que um editor de níveis, era fabuloso, só voltariamos a ver editores assim novamente com o CryEngine, mais tarde Unity e vários outros. Duke Nukem 3d A história do Duke Nukem é das mais simples: Duke (o protagonista) ao voltar para terra é atacado por alienigenas e logo descobre que eles estão invadindo a terra e sequestrando todas as mulheres, ele então parte numa saga por Los Angeles, bases espaciais e outros cenários para destruir os alienigenas e salvar as mulheres. Os níveis do jogo eram bem revolucionários para época, tentando retratar cenários reais (ao invés de cenários mais fantasiosos como era comum) e coisas do cotidiano. O jogo é repleto de cenários nada convencionais, como um cinema porno, um clube de strip, estudios de cinema e etc. Além de coisas banais do cotidiano, como banheiros funcionais, que realmente chamavam a atenção e eram motivo para todo mundo ficar: “oooohhhh”. 1 / 20 Dissecando o game: Duke Nukem 3d Escrito por Bruno Crivelari Sanches Qua, 21 de Novembro de 2012 11:00 - Última atualização Dom, 18 de Novembro de 2012 20:24 Sem difícil quebram, você corredor, falar nunca ver por como que viria osão éocomo, jogo, um comum lampadas, mesmo por hoje designer exemplo, com em que dia. todas resultavam usar explodindo uma asexplorar limitações cadeira em uma uma bomba da sala adamantium época bem em trazia escura. para sala, efeitos Era bloquear osprincipalmente uma vidros quegráficos época até um se hoje que é Para filmes, Aliens, completar sendo Pulp Fiction possível jogo elevel muitos tinha encontrar outros. pelos de cenários referências personagens ade cultura pop de uma filmes da como Indiana Jones, rapidamente Se soberbos não bastasse eincluindo ainda eai, tudo incluia esses isso, um itens odezenas editor jogo que vinha de iremos níveis com que uma qualquer tecnologia nesse artigo. criança revolucionária, (daépoca, época) com aprendia usar Motor Build O que tornou tudo isso possível foi o motor Build, que era um motor de jogo 2.5D, que é o termo usado para classificar jogos que não são realmente 3d. Isso quer dizer que o mundo de 2 / 20 Dissecando o game: Duke Nukem 3d Escrito por Bruno Crivelari Sanches Qua, 21 de Novembro de 2012 11:00 - Última atualização Dom, 18 de Novembro de 2012 20:24 Duke era descrito em 2d, mas era mostrado em 3 dimensões. Isso era devido aos computadores da época não conseguirem desenhar gráficos 3d descentes (apesar que isso mudaria alguns meses após lançamento do duke com a chegada de Quake). O motor foi todo escrito em C por Ken Silverman e seu primeiro projeto foi um clone de Wolfenstein3d, chamado inicialmente de “Walken” (Walk + Ken) e depois de Ken’s Labyrinth, este acabou sendo publicado pela Epic Megagames (para quem não sabe essa empresa mais tarde lançaria um tal de Unreal). Por ser um clone de Wolfenstein 3d, o motor suportava apenas cenários quadrados (era montado por cubos) e os cenários eram sempre planos. Após o lançamento do Ken’s Labyrinth Ken começou a tentar fazer um motor que tivesse suporte a paredes em qualquer ângulo, como no jogo Doom. Começou então a surgir o motor Build, que tem suporte a muitas coisas que hoje são trivias, mas para época não eram tão simples, funcionalidades como permitir o jogador olhar para cima e para baixo não eram trivias com esse tipo de tecnologia. Outro grande avanço foi que o motor não utilizava árvores BSP , que eram a base da tecnologia de Doom e mais tarde seriam também a base de motores como Quake e Unreal. Árvores BSP são extremamente práticas para determinação de visibilidade , funcionam muito bem com cenas estáticas, mas tem grandes problemas com cenas dinâmicas e o resultado foi que o motor Build lidava muito bem com ambientes dinâmicos. A facilidade do motor em lidar com cenas dinâmicas permitia aos designers criarem cenários destrutíveis, veículos, plataformas giratórias e uma gama de efeitos que até então, nunca tinham sido vistas em jogos desse tipo. Outra grande novidade do motor era permitir que o jogador “mergulhasse” em ambientes alagados, para conseguir tal efeito, quando um designer fosse criar uma piscina, ele no editor construia então a parte de cima da piscina com uma textura de água e em outro local, era construída a parte de baixo (ou a parte “submarina”). Ligaria uma cena na outra e quando o jogador mergulhasse, o motor o teletransportava de uma cena para outra, criando o efeito de que estava dentro da piscina. Muitas dessas funcionalidades, como da água, poderiam ter existido em outras tecnologias da época, mas vemos aqui como a criatividade de alguns desenvolvedores fazia toda a diferença em encontrar soluções relativamente simples, para fazer construções bem complexas. 3 / 20 Dissecando o game: Duke Nukem 3d Escrito por Bruno Crivelari Sanches Qua, 21 de Novembro de 2012 11:00 - Última atualização Dom, 18 de Novembro de 2012 20:24 No resto do artigo, pretendo focar em detalhes de como era criado o gameplay no motor Build, principalmente em técnicas que são validas até hoje e sem focar em técnicas que eram específicas para o motor devido as limitações da tecnologia e que hoje não são tão relevantes. Hoje a versão completa do jogo pode ser adquirida em alguns sites especializados em jogos antigos, como o gog.com e os saudosistas podem jogar a versão original usando um emulador como o dosbox , aqueles que quiserem algo mais moderno, podem usar um port moderno (como o ed uke3d ) com pacotes de alta resolução e ter uma experiência mais interessante: 4 / 20 Dissecando o game: Duke Nukem 3d Escrito por Bruno Crivelari Sanches Qua, 21 de Novembro de 2012 11:00 - Última atualização Dom, 18 de Novembro de 2012 20:24 Editor de Níveis Como comentado anteriormente, o jogo já vinha com seu próprio editor de níveis e estavamos em uma época onde MODs eram essenciais para jogos e criavam um mercado paralelo. Com o editor de níveis do duke era possível modificar praticamente todo o jogo, criando uma nova história, inimigos, armas, etc. Era possível criar um jogo totalmente diferente também, com novo protagonista e novos inimigos. Sem falar que o editor também incluia ferramentas para desenho de texturas, permitindo assim que o jogo fosse inteiramente modificado apenas com suas próprias ferramentas, com exceção do som, que era o unico formato de media não editável diretamente pelo jogo. 5 / 20 Dissecando o game: Duke Nukem 3d Escrito por Bruno Crivelari Sanches Qua, 21 de Novembro de 2012 11:00 - Última atualização Dom, 18 de Novembro de 2012 20:24 Ao acessar o editor, o usuário se depara com uma tela em 2d, onde pode desenhar seu mapa. Bastava ir posicionando o cursor com o mouse e pressionando barra de espaço para ir colocando pontos pela tela, ao conectar três ou mais pontos, forma-se um polígono e pode-se então acessar o ambiente em 3d, para tal, bastava pressionar ENTER do teclado numérico. No ambiente 3d o usuário já era presenteado com uma interface WYSIWYG (sigla em inglês para o que você ve é o que você tem), no modo 3d era possível então ajustar tamanho de objetos, luminosidade e ajustar a altura de salas e chão, etc. 6 / 20 Dissecando o game: Duke Nukem 3d Escrito por Bruno Crivelari Sanches Qua, 21 de Novembro de 2012 11:00 - Última atualização Dom, 18 de Novembro de 2012 20:24 Acima temos a visão 2d da primeira fase do jogo (compare com as imagens do inicio do artigo), pode parecer complicado, mas basta usar o editor um pouco para ver com é intuitivo, sem falr que editar um cenário 2d é muito mais simples do que um cenário realmente 3d. Observa na imagem acima, do lado direito o layout da entrada do cinema. As linhas brancas são paredes sólidas, que vão do chão ao teto, as vermelhas são paredes que eram chamadas de não sólidas, pois permitiam que o jogador passase por elas. As linhas vermelhas poderiam apenas ser usadas para subdivir o ambiente, sem ter uma parede na prática, ou para construir uma “parede parcial”, que poderia ser vista por cima. Observe na figura que as linhas vermelhas formam o contorno da calçada da rua. Os vários circulos coloridos são objetos do jogo ou na terminologia da época “sprites”. Eram usados para se posicionar inimigos, itens e também, para controlar o comportamento do ambiente, como marcar portas, botões, elevadores, etc. Nessa época, os jogos faziam uma separação clara entre partes estáticas e dinâmicas do cenário. A parte estática no caso do Duke são as linhas do cenário acima, que formam a geometria basica do cenário. A parte dinâmica era uma mistura de linhas que poderiam se mover e os sprites. Por exemplo, para se criar um cenário simples, com duas salas e um elevador entre elas, basta entrar no editor e criar um cenário com esse formato: 7 / 20 Dissecando o game: Duke Nukem 3d Escrito por Bruno Crivelari Sanches Qua, 21 de Novembro de 2012 11:00 - Última atualização Dom, 18 de Novembro de 2012 20:24 temos Para que linhas Observe os tal, vermelhas, 3setores setores. basta que cada irvão posicionando aparte tomando operação do forma. toda o mouse pode forma No final nos ser o que basta pontos feita com conectar jogo desejados apenas é chamado os alguns pontos e pressionar de cliques dosetor, meio barra do na para mouse. figura degerar espaços acima as Pressionando-se ENTER docenário teclado númerico já no nos deparamos com: 8 / 20 Dissecando o game: Duke Nukem 3d Escrito por Bruno Crivelari Sanches Qua, 21 de Novembro de 2012 11:00 - Última atualização Dom, 18 de Novembro de 2012 20:24 Trocando algo já menos algumas feio: texturas, mudando altura do chão e teto e rapidamente podemos construir 9 / 20 Dissecando o game: Duke Nukem 3d Escrito por Bruno Crivelari Sanches Qua, 21 de Novembro de 2012 11:00 - Última atualização Dom, 18 de Novembro de 2012 20:24 E porcomeça cursor colocarmos que fim, do mouse basta uma no alto: voltar tag sobre neste ao o setor modo setor, que 2d digite (pressionando forma 16,oque elevador, é aENTER tagpressionar quedo indica teclado aque tecla numérico), este T (de setor Tag) posicionar é um para elevador o 10 / 20 Dissecando o game: Duke Nukem 3d Escrito por Bruno Crivelari Sanches Qua, 21 de Novembro de 2012 11:00 - Última atualização Dom, 18 de Novembro de 2012 20:24 Com desce, importar, este tudo ajustar, processo isso em etc. simples, um unico já editor, criamos sem um precisar cenário iro funcional, em modelador com um 3d, elevador exportar que arquivos, sobe eusar um desafiador como level esta designer oeexemplo cenário que é botão, claro, produzem experiente éa divertido. extremamente resultados pode São em poucas simplista algumas tão rapidamente. as ferramentas se horas comparado criar hoje um com nível que qualquer são totalmente tão jogo simples funcional, moderno, de se mas Claro strings que que um eram objeto nem sempre tudo faz eram não evitadas flores, nada devido intuitivo, por exemplo, avez, seu custo eram usar computacional. números dificuldades da descrever época, pois aséforma, propriedades manipulação de e Observando número, o poderíamos pressionano do quanto 0, cenário tempo… era nomes, chamado no criar novamente o linkar mas uma de objetos. acima HiTag ele simplicidade botão aéativa imagem Mais temos (ou e colocar o Tag elevador. uma 0,16. acima, do alta), editor nele Omas era note Ou 16 usar o acabava mesmo é usada seja, que a números Tag o para hitag setor superando que para conectar indica do era dopara elevador, essa elevador usado que esses objetos. tarefa este para defeitos possui dessa não setor identificar Exemplo: um éna algo um outro maior um tão elevador, objeto prático parte Objetos de Jogo Para implementar o jogo é claro que não poderiam faltar os objetos do jogo . Já vimos que os setores do mapa possuem tags, que podem ser a “ lotag” , que é uma tag específica do jogo e indica o que o setor faz. E temos a hitag , que é definida pelo usuário e serve para identificar um determinado setor, ou seja, é usada 11 / 20 Dissecando o game: Duke Nukem 3d Escrito por Bruno Crivelari Sanches Qua, 21 de Novembro de 2012 11:00 - Última atualização Dom, 18 de Novembro de 2012 20:24 como nome. Bom sabemos que podemos criar portas, elevadores, etc, apenas usando o próprio cenário, como vimos no exemplo acima, mas como criar outros objetos? Para criar objetos, como monstros, botões, itens, etc, no jogo tinhamos os sprites, sim, é o mesmo que s prite em um jogo 2d, que é apenas uma figura com mascara. Lembre-se esse tipo de motor não era realmente 3d e para representar objetos eram usadas figuras 2d ou sprites. Para criar o efeito de 3d, como pode ser observado nos inimigos, eram gerados sprites a partir de seis ângulos diferentes, dessa forma, conforme o ângulo de visão e o ângulo do item, o motor escolhe o sprite mais apropriado. Na figura abaixo temos os sprites de um dos inimigos: Mas apenas colocar itens no cenários não cria jogabilidade, ainda falta uma forma de se criar 12 / 20 Dissecando o game: Duke Nukem 3d Escrito por Bruno Crivelari Sanches Qua, 21 de Novembro de 2012 11:00 - Última atualização Dom, 18 de Novembro de 2012 20:24 eventos e fazer com que os objetos comuniquem-se entre si. Por exemplo, pode ser desejável que um elevador seja ativado por um botão na parede, ao invés de ser ativado diretamente pelo jogador. Para se criar esse tipo de efeito, foram criados sprites especiais, que certa forma funcionam como componentes. Por exemplo, um desses sprites é chamado de activator (ou ativador), que é um sprite que ativa ou invoca uma ação de um setor. Se colocarmos ele dentro de uma porta, ela ativa a ação desta, se for colocado em um elevador, ativa o elevador. Usando-se um ativador, podemos criar uma chave para ativar o elevador que criamos anteriormente, como podemos ver abaixo: 13 / 20 Dissecando o game: Duke Nukem 3d Escrito por Bruno Crivelari Sanches Qua, 21 de Novembro de 2012 11:00 - Última atualização Dom, 18 de Novembro de 2012 20:24 Na figura aao grande letra “A” éaoose sprite activator, vai ser conectada doações lado direito temos uma chave, que adicionado também outro sprite especial, onúmero Foicaso, speed , que ele afeta pode aacima, velocidade ser usado para que o controlar elevador velocidade que as são executadas, Para dizer ao jogo que a no chave afeta activator comunicação entre para tal, basta definirmos do uma elevador, devemos criaractivator. canal de tag baixa abaixo: idêntica para eles, caso, utilizei omove. 1, como podemos conferir na nesse imagem 14 / 20 Dissecando o game: Duke Nukem 3d Escrito por Bruno Crivelari Sanches Qua, 21 de Novembro de 2012 11:00 - Última atualização Dom, 18 de Novembro de 2012 20:24 Podemos na acima claramente oveículos activator, com sua tag direita, mecanismo emobservar verde simples, temos jáfigura podemos a chave, que também operações esta com aetc. no jogo. tag baixa. baixa Com de valor este 1, a Além destes, outros sprites especiais foram criados, alguns exemplos: touchplate: um gatilho ativado automaticamente quando jogador entre no musicandfx: para tocar eoriginal música - locator: queé éutilizado usado para definir rotas que emesma alguns inimigos seguem sectoreffector: infinidade Alguns de efeitos explosões, certamente especiais, teletransporte, que ocriar mais no jogo famoso iluminação, e complexas mais eram um total responsável 36 efeitos por ativar diferentes. uma Chega efeitos aexemplos: bem ser complexos, impressionante ainda como mais alguns sesons considerarmos poucos componentes ausado, época eo tornaram osde jogos equivalentes. possível asetor. criação de Scripts Já temos uma noção razoável de como funciona o editor do jogo e de como criar mecanismos dentro do nível do jogo, mas como adicionar novos objetos? Para essa tarefa o jogo contava com um sistema de scripts próprio. Relativamente simples, mas permite adicionar novos objetos de maneira simples e rápida. O principal item que pode ser criado com os scritps são os atores, que na terminologia do jogo são os objetos do jogo que tem “vida” ou executam ações, sendo a grande maioria os monstros do jogo. Um ator possui algumas propriedades: 15 / 20 Dissecando o game: Duke Nukem 3d Escrito por Bruno Crivelari Sanches Qua, 21 de Novembro de 2012 11:00 - Última atualização Dom, 18 de Novembro de 2012 20:24 - action (ações): a mais simples de todas, define quais sprites representam o ator, a animação desta ação. - ai (IA ou inteligência artificial): define como o ator deve se comportar em um determinado momento. Para cada ator são definidos vários ai, com os parâmetros de nome, action, velocidade, função. A função é o tipo de rotina que o jogo vai executar, como perseguir o jogador, olhar para o jogador, fugir, etc. - state (estado): o nome aqui é um tanto contraditório, pois na verdade o estado funciona como uma função e não como um estado no sentido de uma maquina de estados ou como temos em Unreal Script Com essas três funcionalidades simples foram criados todos os inimigos do jogo, alguns com comportamento e ações bens distintas. Abaixo temos um exemplo de script: actor DRONE DRONESTRENGTH state checkdronenearplayer ifrnd 2 fall else soundonce DRON_JETSND ifaction 0 ai AIDRONEGETE else ifai AIDRONEGETE state dronegetstate else ifai AIDRONEWAIT { ifactioncount 4 ifrnd 16 ifcansee { sound DRON_ATTACK1 ifp phigher ai AIDRONEGETUP else ai AIDRONEGETE } } else ifai AIDRONEGETUP state dronegetstate else ifai AIDRONEPULLBACK { ifcount 32 ai AIDRONEWAIT } else ifai AIDRONEHIT { ifcount 8 ai AIDRONEWAIT } else ifai AIDRONESHRUNK state droneshrunkstate else ifai AIDRONEDODGE state dronedodgestate else ifai AIDRONEDODGEUP state dronedodgestate ifhitweapon state checkdronehitstate ifrnd 1 soundonce DRON_ROAM enda Este é o script usado para controlar o Drone, que é um tipo de robo voador que ao avistar o jogador corre em direção a este e quando esta próximo o bastante, explode. No script acima temos a palavra chave “actor” , que é usada para definir um novo ator. No caso deste jogo, ator é todo objeto do jogo que executa alguma ação, na grande maioria dos casos, um monstro. Ao se definir o ator é definido seu nome e sua força (ou energia), no exemplo acima são usados macros (como em C) para facilitar modicações. Existe um arquivo chamado DEFS.CON onde estes macros são declarados. Após definição do ator, temos o código do ator, que é executado todo quadro por cada ator deste tipo que estiver ativo. Cada ator possui uma ação em execução e uma rotina de ai. A primeira linha do script do ator chama o estado 16 / 20 Dissecando o game: Duke Nukem 3d Escrito por Bruno Crivelari Sanches Qua, 21 de Novembro de 2012 11:00 - Última atualização Dom, 18 de Novembro de 2012 20:24 checkdronenearplayer (o código deste pode ser visto abaixo), o estado simplesmente verifica se o jogador esta próximo, se sim, checa se o tempo é suficiente, se sim, explode o drone, caso contrário apenas toca um som de alarme. Em seguida temos o teste “ifrnd 2”, ifrnd é uma versão especial do if que verifica se o jogo sorteou um número aleatório, caso sim, o código do if é executado. Este bloco em particular faz com que o drone caia um pouco e toque um som de turbina. Outros estados fazem com o que drone suba, dessa forma é criado um movimento de para cima e para baixo, apenas um efeito especial. Na sequencia temos o comando “ifaction 0”, que verifica se a ação atual é a de número 0 (ou seja sem ação, o estado inicial do ator), se sim, é iniciado o ai AIDRONEGETE, que é uma abreviação para “procure inimigo”. Caso a ação atual não seja a de número zero, são checados os diversos estados do ator. Logo na sequencia é checado se a ação atual é a AIDRONEGETE, caso sim, é invocado o estado dronegetstate, que checa se o jogador esta visivel, caso sim, começa mover o drone em direção ao jogador. Na sequência o código vai checando os demais estados, onde podemos ver que é verificado se o ator esta sendo atacado, onde ele tenta então desviar das balas, caso tenha sido encolhido (o jogo possui uma arma de encolher), checa se já não é hora de crescer novamente, etc. A definição de um ai é extremamente simples, como podemos ver no exemplo abaixo: ai AIDRONEGETE DRONESCREAM DRONERUNVELS faceplayerslow getv Na declaração acima o primeiro parâmetro (AIDRONEGETE) é o nome deste ai, o segundo parâmetro a ação ( DRONESCREAM , que define a animação a ser executada), o terceiro ( DRONERUNVELS ) é um macro com a velocidade deste ai , após este três parâmetros (obrigatórios) temos as rotinas de ai , neste caso, vão ser executadas as rotinas 17 / 20 Dissecando o game: Duke Nukem 3d Escrito por Bruno Crivelari Sanches Qua, 21 de Novembro de 2012 11:00 - Última atualização Dom, 18 de Novembro de 2012 20:24 faceplayerslow e getv, sendo qua primeira faz com que o ator se vire em direção ao jogador, a segunda faz com que ele se mova verticalmente (lembra que o drone de tempos em tempo cai um pouco? Aqui ele sobe para compensar). Abaixo temos o estado checkdronenearplayer: state checkdronenearplayer ifp palive ifpdistl 1596 { ifcount 8 { addkills 1 sound DRON_ATTACK2 debris SCRAP1 8 debris SCRAP2 4 debris SCRAP3 7 spawn EXPLOSION2 sound RPG_EXPLODE hitradius 2048 15 20 25 30 killit } else ifcount 3 nullop else sound LASERTRIP_ARMING } ends O estado acima verifica primeiramente se o jogador esta vivo, caso positivo, verifica se ele esta perto o bastante, caso sim verifica se esta a tempo suficiente e explode para tentar destruir o jogador. Observe que a linguagem de script é extremamente simples, não existem expressões complexas, declarações de variáveis, etc, existem apenas blocos e testes simples. Os comandos de if são todos fixos para testes determinados, como: - ifai : verifica se o ai especificado esta ativo, caso sim, executa o bloco - ifaction : idem ao anterior, mas verifica se a ação especificada esta ativa - ifcount : todo ator possui um contador interno, incrementado todo quadro, como se fosse um relógio, este comando verifica se o contador é maior ou igual ao valor especificado. Dessa forma pode-se atrasar ou controlar o tempo de execução de ações. - ifrnd : o jogo possui internamente um valor aleatório, que vai de 0 a 255. Este comando checa a probabilidade de um valor ocorrer. Por exemplo, ifrnd 255 é o mesmo que if true, ou seja ocorre o tempo todo. ifrnd 127 ocorre 50% das vezes, etc. Observe que nem mesmo expressões lógicas existem, como ou, e, ou exclusivo, etc. Caso seja preciso fazer expressões lógicas, elas são construídas encadeando-se vários ifs. Como a linguagem não possui expressões, fica extremamente simples de se compilar. Basicamente a compilação consiste em checar os comandos em uma tabela e ir trocando pelo bytecode específico, não sendo preciso construir árvores sintáticas ou qualquer outra técnica de compilação classica. 18 / 20 Dissecando o game: Duke Nukem 3d Escrito por Bruno Crivelari Sanches Qua, 21 de Novembro de 2012 11:00 - Última atualização Dom, 18 de Novembro de 2012 20:24 Considerações Finais O jogo já possui uma certa idade e se compararmos com os grandes titulos da atualidade este fica devendo em muitos pontos. Mas por outro lado foi um jogo que marcou época, não só pelo seu gameplay revolucionário para a época, mas também pela sua tecnologia soberba. Mas ao mesmo tempo que o jogo era simples, sua tecnologia era extremamente avançada e mesmo com algumas gambiarras, ela até hoje nos traz muitas lições e ideias para design de motores 3d e ferramentas de autoria. Um dos pontos que mais me chamam a atenção é como o sistema de sprites e efeitos se assemelha a um moderno sistema de componentes, que atualmente é um dos pontos mais discutidos e considerado estado da arte na industria atual. O código fonte do jogo esta disponível para os curiosos, pode ser baixado diretamente do pontov clicando-se aqui . Este é o código original disponibilizado pela 3D Realms , construído originalmente com o Code Warrior e próprio para ser compilado para Dos. É muito útil para quem quer explorar os detalhes da implementação do gameplay e conhecer melhor um motor para Dos. Para quem quer algo mais moderno, é recomendável usar o código já portado para plataformas modernas, que pode ser encontrado no site EDuke3d . O código fonte pessoalmente considero bagunçado, existem muitas constantes diretamente no código que dificultam a leitura, conversões de ponto fixo diretamente no código, além de uma grande falta de modularidade em alguns pontos. Basta observar que o código é formado por poucos arquivos gigantes. Não é incomum encontrar grandes blocos de ifs e switchs para execução de rotinas especificas para cada inimigo / objeto. Referencias Arquivos Con (scripts): http://dukertcm.com/knowledge-base/downloads-rtcm/duke3d-faqs-con / Ken Silverman (criador do motor Build): http://advsys.net/ken/ 19 / 20 Dissecando o game: Duke Nukem 3d Escrito por Bruno Crivelari Sanches Qua, 21 de Novembro de 2012 11:00 - Última atualização Dom, 18 de Novembro de 2012 20:24 Duke3d: http://www.3drealms.com/duke3d/ FAQ sobre edição de cenários: http://www.gamefaqs.com/pc/197174-duke-nukem-3d/faqs/166 4 Tags: http://infosuite.duke4.net/index.php?page=basics_tags ´ Ótima documentação sobre os scripts: http://dukenukem.wikia.com/wiki/Con_files/Files Duke 3d (código fonte): http://www.pontov.com.br/files/arquitetura/dissecando/duke3d/duke3d source.zip 20 / 20