Desenvolvedor original de Age of Empires 2 fala sobre o uso de código assembly

O uso intenso de assembly x86 escrito à mão no núcleo de renderização de Age of Empires II — supostamente rendendo cerca de 10x de velocidade em relação ao C++ em 1999 — serve de ponto de partida para revisitar como os engines de jogos antes dependiam de otimização de baixo nível para desempenho. Os comentaristas contrastam essa era com compiladores modernos, intrínsecos SIMD, bibliotecas especializadas e decodificação de vídeo por hardware, apontando onde o assembly ainda vence e onde foi em grande parte superado. Ao lado das histórias técnicas (de blits em DirectDraw a ajustes com VTune) há uma forte nostalgia pela cultura de desenvolvimento de jogos dos anos 1990, das trocas em Usenet e IRC às conversas presenciais no almoço que moldavam grandes títulos.

Papel do Assembly em AoE2 e no desenvolvimento de jogos nos anos 1990

  • AoE2 teria obtido um desenho de sprites cerca de 10x mais rápido ao reescrever o núcleo de desenho em assembly.
  • No fim dos anos 90, era comum escrever os caminhos críticos em assembly e manter a versão em C/C++ sob #ifdef para portabilidade.
  • Na época, alguns compiladores — especialmente para SIMD — geravam código muito ineficiente, tornando o assembly ajustado manualmente claramente superior.
  • Hoje, comentaristas dizem que os compiladores estão muito melhores; o assembly vence principalmente em casos limitados (vetorização manual, uso cuidadoso de registradores, exploração de garantias específicas do domínio).

SIMD, intrínsecos e ajuste de desempenho

  • Decodificação de vídeo e cargas de trabalho semelhantes ainda usam grandes quantidades de assembly ou intrínsecos SIMD, com ganhos de ordem de magnitude relatados.
  • Linguagens e runtimes modernos expõem APIs explícitas de SIMD porque a auto-vetorização é limitada.
  • Ferramentas mencionadas: superotimizadores (por exemplo, um projeto baseado em LLVM), VTune, IACA, uiCA, llvm-mca. Elas ajudam a analisar pipelines, stalls e escalonamento.
  • Várias anedotas descrevem otimização manual minuciosa que acaba ficando mais lenta que a saída do compilador, mas também ganhos raros de 2–10x que justificam o esforço.

Pipelines gráficos: DirectDraw, texturas e formatos

  • AoE2 provavelmente usava DirectX/DirectDraw para apresentar pixels, com código personalizado para visibilidade, transformações de sprites, espelhamento, pontilhado etc.
  • O DirectDraw oferecia blits acelerados por hardware em casos simples, mas com suporte irregular de drivers e overhead para sprites pequenos.
  • A discussão aborda layouts de textura amigáveis ao cache (swizzling em blocos/texturas), mipmapping e recursos clássicos da demoscene sobre roto-zoomers.
  • Um comentarista observa que a renderização ingênua de sprites SLP é muito lenta, então as otimizações de AoE2 fazem sentido.

Bases de código, toolchains e segurança

  • Nota histórica: dizia-se que um grande compilador Pascal/Delphi era em sua maior parte assembly, depois reescrito porque se tornou difícil de manter.
  • A edição Definitive de AoE2 supostamente vem com um empacotador de executável que descriptografa código em tempo de execução, deixando páginas RWX, o que é criticado como inseguro.

Filosofia de patches e atualizações modernas de jogos

  • A cultura de desenvolvimento antiga supostamente via a necessidade de um patch como uma falha; patches eram raros e distribuídos por revistas.
  • Isso é contrastado com grandes patches modernos de reequilíbrio (dezenas de GB), embora alguns argumentem que jogos online e o equilíbrio em evolução justificam atualizações contínuas.

Comunidade, comunicação e nostalgia

  • Debate sobre se almoços presenciais produziam uma melhor troca técnica do que hoje em Discord/Slack/IRC.
  • Alguns veem a comunicação online moderna como muito mais rica; outros lamentam a fragmentação, a falta de indexação pública e a dinâmica superficial dos chats.
  • O tópico também observa a cena competitiva ativa de AoE2, torneios LAN e uma forte nostalgia tanto pelo jogo quanto pela cultura de desenvolvimento dos anos 90.