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