https://github.com/goto-bus-stop/aocmultiny
[wip] Tiny NAT-traversing Age of Empires 2 Multiplayer client.
https://github.com/goto-bus-stop/aocmultiny
age-of-empires directplay matchmaking multiplayer
Last synced: about 1 year ago
JSON representation
[wip] Tiny NAT-traversing Age of Empires 2 Multiplayer client.
- Host: GitHub
- URL: https://github.com/goto-bus-stop/aocmultiny
- Owner: goto-bus-stop
- License: gpl-3.0
- Created: 2016-05-27T10:38:44.000Z (about 10 years ago)
- Default Branch: master
- Last Pushed: 2016-12-27T21:14:50.000Z (over 9 years ago)
- Last Synced: 2025-04-16T00:04:52.608Z (about 1 year ago)
- Topics: age-of-empires, directplay, matchmaking, multiplayer
- Language: C++
- Homepage:
- Size: 508 KB
- Stars: 6
- Watchers: 4
- Forks: 1
- Open Issues: 13
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# aocmultiny
Tiny NAT-traversing Age of Empires 2 Multiplayer client.
> VERY work in progress, it's probably pretty difficult to get it to compile.
The idea is to get a single portable zero-install executable that you can hand
to a few friends and immediately start playing. No creating accounts, no
installation, no router configuration, etc. Just the bare minimum.
## Design
Fluctuating. I wanted to build the matchmaking part using IRC, but that's
turning out to be a bit difficult, because you would need server-side
adjustments to get IP addresses for the NAT traversal stuff (…I think.)
Anyway, it comes in two parts: matchmaking and connecting. Matchmaking will be
using a nickname (no real authentication), and using public or passworded rooms
(like IRC channels). Players can chat in rooms and the first player to join a
room (the host) can start the game. Initially, up to 8 players can join a room,
but in the future there'll have to be more for UserPatch spectator mode.
(≤8 players + ≤32 spectators.) Connecting is probably going to be using ICE
somehow (libnice?), but I don't know yet how to direct Age of Empires traffic
onto an ICE-established socket. All in due time :D
UserPatch includes automatic port forwarding using UPNP, but that doesn't always
cut it, and you still need to exchange IP addresses manually.
## Building
On Linuxes:
1. Install Wine and Mingw32. Something like
`apt-get install wine mingw32 mingw32-binutils`.
2. Download and build [wxWidgets][] 3.1.0 using [MinGW][mingwbuild].
3. Download the last [DirectX SDK with DirectPlay (August 2007)][].
4. Symlink `dxguid.lib` and `dplayx.lib` from the DirectPlay SDK into `lib/`.
5. `make` to build
6. `make run` to run
On Windowses with Visual Studio:
1. Download and build [wxWidgets][] using [Visual Studio][vsbuild]. Import one of
the VS project files that comes with wxWidgets and build it.
2. Download the last [DirectX SDK with DirectPlay (August 2007)][].
3. Configure environment variables:
- `WXWIN=` path to your wxWidgets build base directory.
4. Import the AoCMultiny.sln solution file.
## Credits/References
- IRC: Took clues (and an IRC message parser) from [Fredi/IRCClient][]
- DirectPlay: I used [@biegleux]'s Delphi [DPLobbySystem][] as a reference for
most of the DirectPlay lobby/game setup. I'm not sure if the sources are
still online, but I'll link them here if I can find them.
- DirectPlay: The DirectPlay sections in the [DirectX 7 SDK documentation][].
- nicesp: Took clues from [@RazZziel]'s [dpwsockx implementation][dpwsockx] and
[@solemnwarning][]'s [ipxwrapper][].
## License
[GPL 3.0][]
[Fredi/IRCClient]: https://github.com/Fredi/IRCClient
[@biegleux]: https://github.com/biegleux
[DPLobbySystem]: https://web.archive.org/web/20140519214627/https://code.google.com/p/dplobbysystem/
[wxWidgets]: https://wxwidgets.org/
[DirectX SDK with DirectPlay (August 2007)]: https://www.microsoft.com/en-us/download/details.aspx?id=13287
[mingwbuild]: https://wiki.wxwidgets.org/Cross-Compiling_Under_Linux#Cross-compiling_under_Linux_for_MS_Windows
[vsbuild]: https://wiki.wxwidgets.org/Microsoft_Visual_C%2B%2B_Guide
[DirectX 7 SDK documentation]: http://idlebeaver.ninja/dx7/
[@RazZziel]: https://github.com/razzziel
[@solemnwarning]: https://github.com/solemnwarning
[ipxwrapper]: https://github.com/solemnwarning/ipxwrapper
[dpwsockx]: http://github.com/razzziel/wine-dplay/tree/gsoc/dlls/dpwsockx
[GPL 3.0]: ./LICENSE