AGE OF EMPIRES II: DE // STEAM

COMMAND
THE
BATTLE.

A focused command layer for Age of Empires II: Definitive Edition, with a managed Lua environment for people who want to build their own ideas.

Steam edition · Instant delivery · 30-day access

Age of Empires II match with WololoLabs ESP, resource intelligence, and Remove Fog controls visible
LIVE MATCH / TACTICAL OVERVIEWAOE II: DE
ESP · RESOURCE INTEL · REMOVE FOG READY

02 / BUILT-IN CAPABILITIES

A sharper view.
A deliberate response.

Start with the built-in command tools, then extend the experience with scripts that match the way you play.

01 // LIVE INTEL

Read the field.

See useful match information at a glance and keep your attention where it belongs.

02 // COMMAND TOOLS

Act with intent.

Focused controls for repeated actions, unit control, and resource management.

03 // SCRIPTABLE

Make it yours.

Use the managed Lua API to create, configure, and share custom micro-features.

03 / MANAGED LUA API

Your playstyle
has an API.

Build small, focused features with a documented scripting surface. Query game state, issue bounded commands, add settings, and draw interface output from one managed runtime.

  • Lifecycle-awareLoad, initialize, update, render, and shut down predictably.
  • Feature-readyPackage scripts with options, hotkeys, and a simple manifest.
  • DocumentedBrowse commands, facts, types, rendering, settings, and enums.
Open Lua API documentation
DEER-PUSHER.LUAMANAGED SCRIPT
local tracker = ResourceTracker()
local elapsed = 0

function Update(delta)
  elapsed = elapsed + (tonumber(delta) or 0)
  if elapsed < 0.35 then return end
  elapsed = 0
  tracker:Update()

  local player = GetAssignedPlayer()
  local town = player and player:GetTownCenters()[1]
  if not town then return end

  local scout
  for _, unit in ipairs(player:GetObjectsByClass(UnitClass.SCOUT)) do
    if unit:IsAlive() and unit:IsGarrisoned() ~= true then
      scout = unit
      break
    end
  end
  if not scout then return end

  local home = town:GetPosition()
  local deer = home and tracker:GetPreyNear(home, 40, 1)[1]
  local pos = deer and deer:GetPosition()
  local scout_pos = scout:GetPosition()
  if not pos or not scout_pos then return end

  local dx, dy = pos.x - home.x, pos.y - home.y
  local distance = math.sqrt(dx * dx + dy * dy)
  if distance < 1 then return end

  local behind = Vector2(pos.x + dx / distance * 2,
    pos.y + dy / distance * 2)
  local waypoint = scout_pos:Distance2D(behind) > 0.8
    and behind or pos
  UnitsMove({ scout }, waypoint)
end

04 / IN THE FIELD

See the command layer at work.

Built-in controls, tactical overlays, and automation settings sit alongside the match—ready when you need them.

Age of Empires II match with WololoLabs ESP controls and tactical overlays visible
01 / TACTICAL OVERVIEWESP & RESOURCE INTELLive overlays bring the important signals forward.
Age of Empires II match with WololoLabs Auto Eco Options open
02 / AUTOMATIONAUTO ECOEnable an AI player to take over the economy while you stay in the match.
WololoLabs command menu showing available built-in features
03 / COMMAND MENUONE PLACE TO STARTFeature controls stay close at hand.

WOLOLOLABS // ACCESS WINDOW

ENTER THE COMMAND LAYER.

One payment. Thirty days of AoE II: DE Steam access.

Price shown securely in DePay checkout
Pay with crypto ↗