Go to file
roddy db3a7e3483
Update sockets and structs for full IPv6 support (#198)
* 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.
2024-09-01 12:48:24 -04:00
.github/ISSUE_TEMPLATE sm64coopdx 2023-10-30 01:03:36 -04:00
actors Fix snowman cap 2024-07-05 22:47:22 -04:00
assets Remove Waluigi anims 2024-07-01 18:32:27 -04:00
autogen Add rotation interpolation (#208) 2024-07-21 18:58:38 -04:00
bin extract assets from rom at runtime (#4) 2024-03-23 16:11:30 -04:00
data Disable DynOS compression for non-dev again 2024-07-03 18:38:06 -04:00
developer Delete developer/recompile-and-restart.sh 2024-04-22 19:33:03 -04:00
docs/lua Add rotation interpolation (#208) 2024-07-21 18:58:38 -04:00
dynos/packs/Coop Cafe Pipe remove this 2024-05-08 09:47:27 +10:00
include Remove Waluigi anims 2024-07-01 18:32:27 -04:00
lang Update sockets and structs for full IPv6 support (#198) 2024-09-01 12:48:24 -04:00
levels Some changes 2024-07-14 11:37:48 -04:00
lib update coopnet linux library (#64) 2024-06-09 21:59:40 +10:00
mods Update built-in mods 2024-09-01 12:44:29 -04:00
palettes Fix Waluigi 2024-06-30 15:09:07 -04:00
res Add macOS icon by EmeraldLockdown 2024-03-18 18:03:01 -04:00
sound Fix let's a go & okie dokie character sounds 2024-06-27 11:09:28 -04:00
src Update sockets and structs for full IPv6 support (#198) 2024-09-01 12:48:24 -04:00
text extract assets from rom at runtime (#4) 2024-03-23 16:11:30 -04:00
textures Change toad head sprite for consistency 2024-06-21 19:39:28 -04:00
tools Fix convert_skybox.py on Linux 2024-07-08 17:50:50 -04:00
.clang-format Refresh 1 2019-09-01 15:50:50 -04:00
.clang-tidy Refresh 1 2019-09-01 15:50:50 -04:00
.gitattributes Merge pull request #42 from krmeet/luac 2024-01-01 12:53:32 -05:00
.gitignore Streamlined Development and Enhanced Customization: Updates to .gitignore, and Keyboard Controls in Chat (#17) 2024-04-22 19:32:28 -04:00
CHANGES Update to Refresh 13 (#19) 2022-03-13 00:17:10 -08:00
Dockerfile Add curl to Dockerfile 2024-06-08 08:07:47 -04:00
Makefile Mumble Positional Audio Integration (#247) 2024-09-01 12:45:43 -04:00
Makefile.split extract assets from rom at runtime (#4) 2024-03-23 16:11:30 -04:00
README.md Fix a small grammar mistake (#181) 2024-07-08 10:58:44 -04:00
assets.json DynOS Skyboxes 2023-11-06 18:37:02 -05:00
charmap.txt refresh 5 2020-01-03 10:38:57 -05:00
charmap_menu.txt refresh 5 2020-01-03 10:38:57 -05:00
credits.txt Update credits 2024-06-30 11:16:46 -04:00
dynos.mk Added DynOS v1.1 without the dynamic options 2022-03-09 18:01:03 -08:00
extract_assets.py extract assets from rom at runtime (#4) 2024-03-23 16:11:30 -04:00
format.sh sm64coopdx 2023-10-30 01:03:36 -04:00
sm64.eu.sha1 init2 2019-08-25 00:46:40 -04:00
sm64.jp.sha1 init2 2019-08-25 00:46:40 -04:00
sm64.sh.sha1 Refresh 7 2020-03-01 22:42:52 -05:00
sm64.us.sha1 sm64coopdx 2023-10-30 01:03:36 -04:00
util.mk Update to Refresh 13 (#19) 2022-03-13 00:17:10 -08:00

README.md

sm64coopdx Logo

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.