Age of Analysis

Work In Progress

CLIAPIGUI

Age of Analysis (AoA) is a project that started as a need for a tool that does comprehensive analysis and planning for competitive games in Age of Empires IV arose. I wanted to create a one stop shop so there wouldn't be any context switching allowing for quick and accurate calculations.

Built on Python with a similar design pattern compared to Model-View-Controller (MVC). As the application is fairly large its split into 10+ modules. This whole application sits on the Qt framework (PyQt6) using it for most the visual needs.

Features & Modules

  • Statistics: Most of the useful data is parsed, stored and referenced from here.
    • Database: Anything related to managing data in the SQLite database is created here.
      • Schema: A handcrafted schema to allow for full normalisation of parsed data.
    • Sync: A parsing module for all raw data extracted from AoE IV
      • Automates a Dotnet library in order to get raw JSON/Image/Lua data from the actual game.
      • Parses and formats JSON files into a use able data structure.
      • Parses major data and normalises it for insertion into the database.
  • Calculations: Core calculations are defined and executed from here.
    • Production Calculator: Calculator for planning worker distribution in the game to upkeep a certain level of production.
  • Builds: A build planning tool that takes in calculations and generate a step-lock game in order to create an accurate estimation of a build with the help of a custom DSL.
  • External: Requests data from various APIs depending on user configuration.

Past & Present Obstacles:

  • Parsing
    • Parsed data in general is not directly ready for normalisation in a database.
    • Parsing of statistics required natural language processing in order to get the correct modifiers created.
    • Hidden mechanics are problematic and required more logic to be derived.
  • Creating graphical representation with the data that is available and the constraints of the tools that were chosen.
  • Recreating map generation correctly as raw map generation in the game is very abstract from a none-developers perspective and requires a lot of work to get working while also having optimisation issues.
  • Creating a user friendly and graphic DSL that allowed for flexibility while also being accurate and detailed in execution.
  • Having so many large modules required building of multiple custom cli application in order to increase debugging productivity.

This project although in development for a long time has been a rocky ride since it was started, as it was my largest programming project to date by a humongous margin. This built up massive technical debt which required large refactor sprints, but also reinforced my software problem solving skills in a highly effective way.

Technologies:

PythonLuaSqliteQtNumPyNltkSQLAlchemyPandasExcel