Skip to content

Technicalities ​

This section covers advanced topics and internal mechanisms of aoe2_genie_tooling.

These topics are optional reading - you don't need to understand them to use the library effectively, but they can help with edge cases and advanced usage.

Topics ​

Error Handling ​

Understanding the exception types and how to handle errors gracefully.

  • InvalidIdError - When IDs are out of range or invalid
  • ValidationError - When data validation fails
  • TemplateNotFoundError - When a source for cloning doesn't exist
  • Best practices for try/except patterns

Validation ​

How the library validates data integrity.

  • Attribute allow-lists (preventing typos)
  • Reference validation (checking IDs exist)
  • Save-time validation
  • Configuring validation levels

ID Preservation (Registry) ​

Understanding the Registry system for tracking created objects.

  • UUID-based identity tracking
  • JSON export for external tools (AoE2ScenarioParser)
  • Cross-session ID mapping
  • Dependency tracking

General Best Practices ​

Always Save to a New File First ​

python
# Good - test your changes first
workspace.save("output_test.dat")

# Then if it works, you can overwrite
workspace.save("empires2_x2_p1.dat")

Check Existence Before Modifying ​

python
if workspace.unit_manager.exists(1000):
    unit = workspace.unit_manager.get(1000)
    unit.hit_points = 100
else:
    print("Unit 1000 doesn't exist")

Use Handles, Not Raw Objects ​

python
# Good - use handles
unit = workspace.unit_manager.get(4)
unit.hit_points = 100

# Avoid - direct access to dat structures
workspace.dat.civilizations[0].units[4].hit_points = 100  # Don't do this

Released under the MIT License.