Analyzes Age of Empires 2 recorded game files.

4.2.3 2018-12-13 11:06 UTC


Packagist License Build Status Gitter chat

RecAnalyst is a PHP package for analyzing Age of Empires II recorded games.

It supports recorded game files from:

  • The Age of Kings
  • The Conquerors
  • UserPatch
  • Forgotten Empires
  • HD Editions (optionally with expansions)

And reads data such as:

  • Game settings
  • Players
  • Chat messages
  • Research and Age Advancing times
  • Map data (terrain, elevation)
  • Initial units
  • Achievements (UserPatch only)
  • Tributes

A small demo application is hosted at

License - Credits - Contributing - Requirements - Installation - Configuration - Usage Examples - API Documentation - Limitations

$rec = new \RecAnalyst\RecordedGame('recorded_game.mgx2');
foreach ($rec->players() as $player) {
    printf("%s (%s)", $player->name, $player->civName());




Originally forked from Biegleux's work:
v2.1.0 © 2007-2010 biegleux <>
Original project homepage
Original project documentation

See also


RecAnalyst is looking for contributors. Please see the Issues List for bugs or missing features and help implement them by opening a PR!

RecAnalyst is an OPEN Open Source Project:

Individuals making significant and valuable contributions are given commit-access to the project to contribute as they see fit. This project is more like an open wiki than a standard guarded open source project.

See the Contributing Guide for more.


RecAnalyst works with PHP 5.6+ and PHP 7. The Imagick or GD extensions need to be installed to generate map images.


With Composer:

composer require recanalyst/recanalyst


RecAnalyst ships with translations and image files for researches and civilizations.

If you're using RecAnalyst with Laravel, scroll down to learn about Laravel integration.

RecAnalyst contains a basic Translator class for standalone use. By default, RecAnalyst uses the English language files from Age of Empires II: HD Edition.

RecAnalyst contains icons for civilizations, units and researches in the resources/images folder. If you're using RecAnalyst standalone, and want to use the icons, you can copy that folder into your own project. You can then refer to the different categories of icons in the following ways:

Category URL
Civilizations '/path/to/resources/images/civs/'.$colorId.'/'.$civId.'.png'
Researches '/path/to/resources/images/researches/'.$researchId.'.png'


Add the RecAnalyst service provider to your config/app.php:

'providers' => [

RecAnalyst will automatically pick up the appropriate translations for your Laravel app configuration.

To copy the civilization and research icons to your public folder:

php artisan vendor:publish --tag=public

You can then refer to the different categories of icons in the following ways:

Category URL
Civilizations public_path('vendor/recanalyst/civs/'.$colorId.'/'.$civId.'.png')
Researches public_path('vendor/recanalyst/researches/'.$researchId.'.png')

API Documentation

To get started, the Usage Examples might be helpful.

Full API documentation is available at


These are some things to take into account when writing your own applications with RecAnalyst:

  • Achievements data is only available in multiplayer UserPatch 1.4 (.mgz) games. It isn't saved in single player recordings nor in any other game version.
  • RecAnalyst cannot be used to find the state of the recorded game at any point except the very start. This is because AoC stores a list of actions, so to reconstruct the game state at a given point, the game has to be simulated exactly. See #1.
  • Rarely, Age of Empires fails to save Resign actions just before the end of the game. In those cases, RecAnalyst cannot determine the resignTime property for players. See #35.