HN
Today

Age of Empires: 25 years of pathfinding problems with C++ [video]

This talk delves into the enduring pathfinding challenges faced by Age of Empires over 25 years, tracing the evolution of its C++ codebase from 1997 to modern 64-bit systems. It's popular on HN for its deep dive into legacy code modernization, particularly highlighting the struggles and solutions in maintaining original gameplay while updating ancient C++ code. The presentation offers valuable lessons in "code archeology" for developers porting venerable applications, a topic always relevant to the HN crowd.

7
Score
0
Comments
#22
Highest Rank
3h
on Front Page
First Seen
Feb 13, 7:00 PM
Last Seen
Feb 13, 9:00 PM
Rank Over Time
262224

The Lowdown

Raymi Klingers' talk at Meeting C++ 2025, titled "Age of Empires: 25+ years of pathfinding problems with C++", explores the fascinating journey of a core game system over two and a half decades. The presentation chronicles how a single C++ pathfinding system, initially crafted in 1997, underwent numerous iterations and adaptations by different developers, transitioning from a C-with-classes style with inline assembly to modern 64-bit C++ while striving to preserve the original gameplay experience. This technical deep dive reveals the bumpy road of maintaining and evolving legacy code.

  • The talk focuses on the pathfinding system within the Age of Empires series, detailing its technical evolution over 25 years.
  • It started as a C++ codebase in 1997, featuring a "C with classes" style and even inline assembly.
  • The system was subsequently modernized to a 64-bit C++ code style, undergoing changes by various developers.
  • Significant challenges encountered included the loss of institutional knowledge regarding algorithms and issues like the unintended dropping of extended floating-point precision due to compiler flag changes in the 64-bit transition.
  • Klingers emphasizes the process of "code archeology" used to identify, tackle, and resolve these intricate issues.
  • The aim of sharing these experiences is to equip other developers with insights to avoid similar pitfalls when porting older applications to contemporary C++ environments.

Ultimately, this presentation offers a compelling case study in the longevity and complexities of game development, demonstrating the persistent technical hurdles in modernizing foundational systems without compromising the essence of their original design.