HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
glouw
openempire
C2019–2020
glouw / openempire

openempire

A multiplayer lockstep RTS engine compatible with the Age of Empires II Trial assets

2Distinct people
7Mentions
0Explicit recommenders
548GitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

A multiplayer lockstep RTS engine compatible with the Age of Empires II Trial assets

GitHub

Where it is used

No documented product use has been verified yet.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 3:56:07 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by week7 dated mentions

Observed mentions: 2019-12-27 01:36:59 UTC to 2020-06-18 16:45:38 UTC. Weeks start Monday, UTC.

012019-12-23 00:00:00 UTC to 2019-12-30 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 commentsDec 232019-12-30 00:00:00 UTC to 2020-01-06 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2020-01-06 00:00:00 UTC to 2020-01-13 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-01-13 00:00:00 UTC to 2020-01-20 00:00:00 UTC (exclusive): 1 mentions; 1 submissions, 0 comments2020-01-20 00:00:00 UTC to 2020-01-27 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-01-27 00:00:00 UTC to 2020-02-03 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-02-03 00:00:00 UTC to 2020-02-10 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-02-10 00:00:00 UTC to 2020-02-17 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-02-17 00:00:00 UTC to 2020-02-24 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-02-24 00:00:00 UTC to 2020-03-02 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-03-02 00:00:00 UTC to 2020-03-09 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-03-09 00:00:00 UTC to 2020-03-16 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2020-03-16 00:00:00 UTC to 2020-03-23 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 commentsMar 162020-03-23 00:00:00 UTC to 2020-03-30 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2020-03-30 00:00:00 UTC to 2020-04-06 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-04-06 00:00:00 UTC to 2020-04-13 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-04-13 00:00:00 UTC to 2020-04-20 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-04-20 00:00:00 UTC to 2020-04-27 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-04-27 00:00:00 UTC to 2020-05-04 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-05-04 00:00:00 UTC to 2020-05-11 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-05-11 00:00:00 UTC to 2020-05-18 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-05-18 00:00:00 UTC to 2020-05-25 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-05-25 00:00:00 UTC to 2020-06-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-06-01 00:00:00 UTC to 2020-06-08 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-06-08 00:00:00 UTC to 2020-06-15 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-06-15 00:00:00 UTC to 2020-06-22 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 commentsJun 15

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
Dec 232019-12-23 00:00:00 UTC2019-12-30 00:00:00 UTC101
Dec 302019-12-30 00:00:00 UTC2020-01-06 00:00:00 UTC101
Jan 62020-01-06 00:00:00 UTC2020-01-13 00:00:00 UTC000
Jan 132020-01-13 00:00:00 UTC2020-01-20 00:00:00 UTC110
Jan 202020-01-20 00:00:00 UTC2020-01-27 00:00:00 UTC000
Jan 272020-01-27 00:00:00 UTC2020-02-03 00:00:00 UTC000
Feb 32020-02-03 00:00:00 UTC2020-02-10 00:00:00 UTC000
Feb 102020-02-10 00:00:00 UTC2020-02-17 00:00:00 UTC000
Feb 172020-02-17 00:00:00 UTC2020-02-24 00:00:00 UTC000
Feb 242020-02-24 00:00:00 UTC2020-03-02 00:00:00 UTC000
Mar 22020-03-02 00:00:00 UTC2020-03-09 00:00:00 UTC000
Mar 92020-03-09 00:00:00 UTC2020-03-16 00:00:00 UTC101
Mar 162020-03-16 00:00:00 UTC2020-03-23 00:00:00 UTC101
Mar 232020-03-23 00:00:00 UTC2020-03-30 00:00:00 UTC101
Mar 302020-03-30 00:00:00 UTC2020-04-06 00:00:00 UTC000
Apr 62020-04-06 00:00:00 UTC2020-04-13 00:00:00 UTC000
Apr 132020-04-13 00:00:00 UTC2020-04-20 00:00:00 UTC000
Apr 202020-04-20 00:00:00 UTC2020-04-27 00:00:00 UTC000
Apr 272020-04-27 00:00:00 UTC2020-05-04 00:00:00 UTC000
May 42020-05-04 00:00:00 UTC2020-05-11 00:00:00 UTC000
May 112020-05-11 00:00:00 UTC2020-05-18 00:00:00 UTC000
May 182020-05-18 00:00:00 UTC2020-05-25 00:00:00 UTC000
May 252020-05-25 00:00:00 UTC2020-06-01 00:00:00 UTC000
Jun 12020-06-01 00:00:00 UTC2020-06-08 00:00:00 UTC000
Jun 82020-06-08 00:00:00 UTC2020-06-15 00:00:00 UTC000
Jun 152020-06-15 00:00:00 UTC2020-06-22 00:00:00 UTC101

What Hacker News says

7 sources
I've spent the last 2 years writing an age of empires 2 clone in C: github.com/glouw/openempires and my time spent with C has really just been manually implementing min heaps, circular buffers, ad hoc vectors, and a tier 1 dummy garbage collector. All this stuff is readily available in C++, and I could have saved hundreds of hours by just using C++. But, to one benefit, since I did all this work myself, I understand the machine better, and my compilation times are orders of magnitude faster than what I would have had if I chose C++. Additionly, since so few calls are even being made to the C standard library, the majority of the code exists in text, and easily inlines across all translations units with link time optimization. With C++, as except for templated library code, the majority of link time optimizations go to waste as calls to th
Read the rest
e standard library are binary linked.
In Why I’m Using C
I highly admire projects like this. Something even as simple as a core engine rewrite is a spiritual undertaking. I do not recall if Heroes 3 was multiplayer or not, but making the game multiplayer over TCP required the engine to limit itself to the use of integers since a single floating point would butterfly effect its way into destabilizing the lockstep system used in peer to peer networking. AMD / INTEL / POWERPC systems of the day (and even today) have millions of flags to configure the FPU at compile time. As a shameless plug, and if anyone's interested, I'm doing something similar with Age of Empires 2: https://github.com/glouw/openempires
In Open-Source Engine for Heroes of Might and Magic 3
Agreed, I'm currently taking a similar approach, but forgoing pointers as much as possible as well. This leads to structs being passed by value, and const abuse. Ray h_cast(const Hero hero, const Hit hit, const Sheer sheer, const int yres, const int xres) { const Point end = p_sub(hit.where, hero.where); const Point corrected = p_turn(end, -hero.yaw); const Line trace = { hero.where, hit.where }; const Projection projection = p_project(yres, xres, hero.fov.a.x, hero.pitch, corrected, hero.height); const Ray ray = { trace, corrected, p_sheer(projection, sheer), hit.surface, hit.offset, hero.torch }; return ray; } It leads to some nice somewhat functional styles. I estimate its 80% pure, given its C99 alone. I've adopted this style in my Age of Empires 2 engine rewrite if anyone
Read the rest
is curious: https://github.com/glouw/openempires As for performance I am heavily relying on LTO. I seem to get a 50% performance boost with pass by values on structs - as I've sedded openempires to replace occurrences of _Type name_ with C++'s _Type& name_ for all functions arguments - and the added pointer aliasing and de-references bogged the engine down in heavily forested areas. Compilers love singly assigned const values, and seem to suffer under heavy pointer aliasing.
In Single-Assignment C

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.