2 pontos por GN⁺ 2024-01-08 | 1 comentários | Compartilhar no WhatsApp

O AoE foi escrito em assembly? - Isso é verdade?!

  • Escrita de código assembly em AoE e AoK: foram escritas cerca de 13.000 linhas de código assembly x86 de 32 bits. A maior parte corresponde a cerca de 11.500 linhas do "núcleo de renderização", que desenhava sprites SLP de várias formas.
  • Compilação do código assembly: os arquivos .asm eram "compilados" em arquivos .obj usando o Microsoft Macro Assembler 6.1.
  • Assembly inline dentro do código C++: o compilador suportava "assembly inline", permitindo adicionar blocos de código assembly dentro de funções com a palavra-chave __asm { }.
  • Melhoria de desempenho do núcleo de renderização: o núcleo de renderização usando assembly oferecia velocidade de desenho de sprites cerca de 10 vezes maior do que a implementação de referência em C++.
  • Projeto técnico do código assembly: foi projetado levando em conta a arquitetura de cache e o pipeline U/V, aproveitando as características dos processadores Pentium.
  • Código assembly na edição AoK:HD: a edição AoK:HD (jogo de 32 bits) também usava código assembly.
  • Reescrita em C++ nas Definitive Editions: nas Definitive Editions, que são programas de 64 bits, as funções em assembly foram reescritas em C++.

Comunidade e recursos de AoE

  • Transmissões ao vivo: lista de transmissões ao vivo relacionadas a AoE na Twitch e no Facebook, em vários idiomas.
  • Jogo online: é possível jogar várias versões do game, incluindo Age of Empires 2 Definitive Edition, pela Steam e pela Microsoft Store.
  • Patch atual: informações do patch atualizadas em 26 de julho de 2023.
  • Torneios e eventos: informações sobre torneios por meio do AoEZone, AoE2 Liquipedia e calendário de eventos.
  • Sites da comunidade: links para vários sites da comunidade, como a página oficial de Age of Empires, fóruns, Discord e AoK Heaven.
  • Estatísticas de unidades e construções: links para wikis e materiais com informações sobre unidades e counters, correções de bugs, dicas de jogo e informações de patch.
  • Canais no YouTube: lista do canal oficial e de YouTubers famosos de AoE2.

Opinião do GN⁺

  • Importância do código assembly: nas primeiras versões da série AoE, o código assembly teve grande impacto no desempenho do jogo. Especialmente no processamento gráfico, ele implementava otimizações difíceis de alcançar com linguagens de alto nível modernas.
  • Impacto da evolução tecnológica: com o passar do tempo, o avanço dos compiladores de 64 bits e a introdução do processamento multicore reduziram a necessidade de código assembly. Isso mostra como a evolução das linguagens de programação e do hardware afeta o desenvolvimento de software.
  • Papel da comunidade: a comunidade de AoE tem papel importante na popularidade e na evolução contínua do jogo. Por meio de diversos recursos e discussões, ela oferece uma plataforma para que os fãs compartilhem sua paixão pelo game e troquem conhecimento.

1 comentários

 
GN⁺ 2024-01-08
Comentários do Hacker News
  • Um usuário do Hacker News compartilhou sua experiência, entre 1999 e 2000, portando jogos da Konami do PSX para PC. Segundo ele, o código escrito em C tinha muitos #ifdef com assembly inline, mas o código C original foi preservado. Esse código C original teria ajudado bastante no trabalho de portabilidade. Ele também mencionou sua experiência usando instruções SIMD em trabalho de desenvolvimento de software para o processador Intel Katmai e falou sobre tarefas de otimização em assembly. Nesse processo, o VTune da Intel teria sido de grande ajuda. No entanto, ele relembrou que, em alguns casos, o código escrito em assembly era mais lento do que o código gerado pelo compilador.

  • Outro usuário mencionou o NAC5, um grande torneio de 'Age of Empires 2' (AoE2) que está acontecendo atualmente em Berlim, e compartilhou um link relacionado.

  • Citando uma entrevista com um desenvolvedor, foi expressa a opinião de que, se você sabe antes do lançamento que um jogo vai precisar de patch, então ele não deveria ser lançado.

  • Foi mencionado que uma das técnicas de aceleração de 'Age of Empires' foi discutida durante um almoço com Michael Abrash, programador da id Software e especialista em otimização, e houve um lamento pela perda desse tipo de interação espontânea por causa da internet.

  • Foi compartilhado o fato surpreendente de que, no caso de um núcleo gráfico usando assembly, foi alcanhado um aumento de cerca de 10 vezes na velocidade de desenho de sprites em comparação com C++.

  • Foi expressa a opinião de que Michael Abrash parece aparecer em qualquer lugar onde tenha havido inovação gráfica.

  • Um usuário comentou que isso talvez ajude a entender por que 'Age of Empires 2: Definitive Edition' tem desempenho ruim no Wine.

  • Foi dito que 'Age of Empires 2: Definitive Edition', embora não seja o próprio código do jogo, ainda inclui assembly escrito manualmente que descompacta o código do jogo em tempo de execução. Por causa disso, todo o código permanece em um estado legível, gravável e executável (RWX), o que foi apontado como uma séria vulnerabilidade de segurança.

  • Um usuário que está lendo sobre a história da Borland disse que o compilador Turbo Pascal foi escrito em grande parte em assembly e também foi usado no Delphi 1.0. Como ninguém dentro da Borland conseguia fazer grandes mudanças no código, ele acabou sendo reescrito para o Delphi 2.0. Ele comentou que acha que programadores que escreveram software para CPUs complexas em linguagem assembly têm características bem particulares.