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
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
#ifdefcom 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.