db3a7e3483
* Initial IPv6 support The address struct was changed to use sockaddr_in6 instead of sockaddr_in. Resolving domains also uses getaddrinfo() instead of the deprecated gethostbyname(), and if the returned address is IPv4, transform it to an IPv6-mapped address to make it work with the AF_INET6 socket. * Direct Connection input box behaviour change This makes the Direct Connection input box accept all types of addresses. IPv4, IPv6 and hostnames are now supported. Direct IPv6 addresses must be enclosed in square brackets [IPv6]:port to be able to separate IP from port, otherwise it will be treated as an IPv4 address or hostname. * sanity checks This fixes a weird error while reconnecting when using direct IPv6 addresses. getaddrinfo() doesn't like square brackets on the host IP, so remove those when found. This commit also fixes a problem where gGetHostName wasn't being properly set when connecting through a hostname. * cleanup and bugfix Small code cleanup removing some debugging comments. This also fixes a bug where initializing the game without the --join argument (which initializes network as NT_NONE) was still calling a piece of code where it was resolving a domain and copying an empty gGetHostName to configJoinIp, which made coop_join_ip be cleared on the config file. * fix rare cases of binding errors Due to some options in the sockaddr_in6 struct that doesn't need to be set, rare cases can happen that there will be some random data that will interfere with such values. This made binding randomly or persistently fail. This commit makes that before binding, make sure to fill the entire struct with 0 before setting it up. * Translations for WARN_SOCKET This provides translations for the new text when hosting a server. I cannot guarantee the accuracy of the translations, except English, Portuguese and German, where it was written by native speakers. * Update socket_windows.c yeah right. resolving conflicts and stuff. |
||
---|---|---|
.github/ISSUE_TEMPLATE | ||
actors | ||
assets | ||
autogen | ||
bin | ||
data | ||
developer | ||
docs/lua | ||
dynos/packs/Coop Cafe Pipe | ||
include | ||
lang | ||
levels | ||
lib | ||
mods | ||
palettes | ||
res | ||
sound | ||
src | ||
text | ||
textures | ||
tools | ||
.clang-format | ||
.clang-tidy | ||
.gitattributes | ||
.gitignore | ||
CHANGES | ||
Dockerfile | ||
Makefile | ||
Makefile.split | ||
README.md | ||
assets.json | ||
charmap.txt | ||
charmap_menu.txt | ||
credits.txt | ||
dynos.mk | ||
extract_assets.py | ||
format.sh | ||
sm64.eu.sha1 | ||
sm64.jp.sha1 | ||
sm64.sh.sha1 | ||
sm64.us.sha1 | ||
util.mk |
README.md
sm64coopdx is an online multiplayer project for the Super Mario 64 PC port that synchronizes all entities and every level for multiple players. The project was started by the Coop Deluxe Team. The purpose is to actively maintain and improve, but also continue sm64ex-coop, created by djoslin0. More features, customization, and power to the Lua API allow modders and players to enjoy Super Mario 64 more than ever!
Feel free to report bugs or contribute to the project.
Initial Goal (Accomplished)
Create a mod for the PC port where multiple people can play together online.
Unlike previous multiplayer projects, this one synchronizes enemies and events. This allows players to interact with the same world at the same time.
Interestingly enough though, the goal of the project has slowly evolved over time from simply just making a Super Mario 64 multiplayer mod to constantly maintaining and improving the project (notably the Lua API.)
Lua
sm64coopdx is moddable via Lua, similar to Roblox and Garry's Mod's Lua APIs. To get started, click here to see the Lua documentation.