Second Age

For macOS 13 and later · Apple Silicon & Intel

The Battle for Middle-earth, ready to play on your Mac.

Second Age is a native Mac app that installs BFME, BFME II and The Rise of the Witch-king, sets up CrossOver for you, and works around the startup crashes and fullscreen problems these games run into on macOS.

Free and open source. Uses CrossOver when it is installed, or downloads Wine for you.

BFMEBattle for Middle-earth
BFME IIBattle for Middle-earth II
ROTWKRise of the Witch-king
C&C3Command & Conquer 3

The battle begins

The Battle for Middle-earth II

Return to Middle-earth. Lead your army.

ModsGame OptionsSavesScreenshotsGame DataLua settings
Ready to play · patch 1.09CrossOver bottle · borderless 1512×982

Everything between buying the game and your first battle

These games were made for Windows PCs from 2004 to 2008. Second Age handles the setup and the macOS-specific problems, so you can press Play.

Install in one step

Downloads the games from the community BFME archive, checks every file against its checksum, and writes the registry entries and settings each game expects.

A Wine setup that fits each game

Games run in dedicated CrossOver bottles. You can switch Direct3D 9 to Vulkan (DXVK), turn on faster texture loading, or give the game its own macOS Space.

Fixes for Apple Silicon

Works around the known Rosetta startup crash, picks fullscreen sizes your display really supports, and offers a Medium preset with lighter effects for smoother battles.

Mods and maps

  • Guided setup for Edain and Age of the Ring
  • Browse and install mods from GameFront
  • Search and install community maps from BFME II Heaven
  • Switch between mod profiles without reinstalling

Your saves, screenshots and settings

Browse saves with their date and map, view screenshots in a gallery, and edit graphics, audio and controls without opening Options.ini by hand. Every edit makes a backup first.

Second Age Runtime built in

Turn on the Second Age Runtime for BFME II and Rise of the Witch-king to add scripting, controller support and an in-game console. Its settings get their own editor, with toggles instead of code.

Four games, one library

Each game has its own card, settings and tools. Your choice is remembered, and Silent mode can start your last game the moment you open the app.

The Battle for Middle-earth

lotrbfme.exe

Installed and patched in its own bottle.

The Battle for Middle-earth II

lotrbfme2.exe · 1.06 / 1.09

Switch between the base game and the 1.09 community patch.

The Rise of the Witch-king

lotrbfme2ep1.exe · 2.01

Supports Edain and Age of the Ring profiles.

Command & Conquer 3

Steam app 24790

Sign in with your Steam account to download it. It then plays without the Steam client running.

Second Age Runtime

A script runtime that loads inside BFME II and Rise of the Witch-king. It embeds Lua 5.4 in the game, so you can write scripts against live game state, and it ships with controller support and gameplay options ready to use.

Scripting inside the game

Drop .lua files into the dev folder. Scripts react to every frame and every key press, and reload in seconds without restarting the match.

An in-game console

Run Lua while you play, with command history kept between sessions. An on-screen log shows script output and a live frame counter.

Play with a controller

A layout modelled on the Xbox 360 edition: the triggers open the Palantir, the D-pad cycles heroes and builders, and the sticks pan, rotate and zoom the camera.

Live game data

Read units, buildings and gold, use powers, and respond to events such as construction finishing, buildings falling and units dying.

Gameplay options

Rebalance walls, gates and fortresses, add a one-click builder button, and skip the intro videos. In LAN games the host's rules apply.

Encrypted save sync

Keep saves in step between computers through your own server. Files are encrypted with AES-256-GCM before they leave the game.

dev/builder_hotkey.luaLua 5.4
local bfme = import("bfme")

return {
    onInput = function(event)
        -- F8 selects your next builder
        if event.key == "F8" and event.pressed then
            local ok, reason = bfme.selectBuilder()
            if not ok then bfme.log(reason) end
        end
    end,
}
`Open the Lua console
Ctrl Shift F5Reload every script
Ctrl F9Show or hide the on-screen log

Second Age installs the runtime for you and keeps a backup of the original game files. If a game version doesn't match what a feature expects, that feature switches itself off instead of risking a crash.

Beyond the Mac

The same project also takes BFME II to the Steam Deck and includes a small launcher for Windows.

Steam Deck

A self-contained package that runs BFME II through Proton at 1280×800. Run the installer once in Desktop Mode. It adds the game to your Steam library with cover art, then updates the Second Age Runtime on every start and launches without prompts.

./install.sh

Windows

A minimal launcher with four buttons: install BFME II 1.09, install or update the Second Age Runtime, restore the original files, and play. It needs only Python, and you can test it on a Mac.

py -3 launcher.py

Requirements and setup

The app is signed for local use but not notarized by Apple, so macOS asks for confirmation the first time you open it.

macOS13 Ventura or later
MacApple Silicon or Intel
RuntimeCrossOver (recommended), or Wine, which the launcher downloads for you
Apple SiliconRosetta 2, which macOS installs when asked
Disk space4–7 GB per game
Command & Conquer 3A Steam account that owns the game
  1. Download the appGet the latest release from GitLab and move Second Age.app to Applications.
  2. Open it the first timeControl-click the app, choose Open, then confirm. After that it opens normally.
  3. Choose a game and press DownloadSecond Age installs the game and sets up its bottle. It takes a few minutes per game.
  4. Press PlayAdjust graphics, mods and fullscreen later from the game's tools.

Ready to return to Middle-earth?

Free download for macOS 13 and later.

Download for Mac