Find a file
2024-03-07 16:47:16 -05:00
.github/ISSUE_TEMPLATE sm64coopdx 2023-10-30 01:03:36 -04:00
actors Make dirt particle shadable 2024-03-05 21:14:01 -05:00
assets Character Animation System (#441) 2023-10-27 17:43:45 -07:00
autogen Add OBJ_LIST_EXT in place of OBJ_LIST_UNUSED_1 2024-03-04 20:09:53 -05:00
bin Added a custom hud font and a recolorable version and added dynos support to the aliased font 2024-01-22 00:06:18 +03:00
data Add OBJ_LIST_EXT in place of OBJ_LIST_UNUSED_1 2024-03-04 20:09:53 -05:00
developer Tear out External Data and make Free Cam always compile 2023-11-01 20:17:55 -04:00
docs/lua Add OBJ_LIST_EXT in place of OBJ_LIST_UNUSED_1 2024-03-04 20:09:53 -05:00
dynos/packs Add Coop Cafe pipe into the game as DynOS Pack 2023-11-11 19:47:31 -05:00
include Tidying up 2024-01-01 14:43:34 -05:00
lang Make changelog accessible through Info 2024-03-02 16:45:35 -05:00
levels Fix black railing in BBH 2023-12-15 20:15:14 -05:00
lib sm64coopdx 2023-10-30 01:03:36 -04:00
mods Make hide and seek disable the camera zoom out 2024-03-04 12:56:05 -05:00
res Hopefully fix Git corruption and readd Hide and Seek 2024-01-01 12:03:01 -05:00
sound Revert "Remove percussion, the ext soundbank handles it as normal instruments instead" 2023-12-27 17:44:15 -05:00
src Fix bouncy level bounds & nametags still showing up on coop compatibility mode (again) 2024-03-07 16:47:16 -05:00
text Allow course names/acts to be changed from Lua 2022-04-09 23:28:36 -07:00
textures Adjust the HUD fonts 2024-01-21 16:54:04 -05:00
tools Update default mods 2023-12-24 16:05:21 -05: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 Ignore libc.so.1 2023-11-12 19:30:10 +01:00
assets.json DynOS Skyboxes 2023-11-06 18:37:02 -05:00
CHANGES Update to Refresh 13 (#19) 2022-03-13 00:17:10 -08: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 Tidying up 2023-12-10 12:26:39 -05:00
Dockerfile sm64coopdx 2023-10-30 01:03:36 -04:00
dynos.mk Added DynOS v1.1 without the dynamic options 2022-03-09 18:01:03 -08:00
extract_assets.py Add Extended Soundbank (#254) 2023-03-22 19:04:16 -04:00
format.sh sm64coopdx 2023-10-30 01:03:36 -04:00
Makefile Fix macOS ARM compilation 2024-01-06 09:48:58 -05:00
Makefile.split Fix build, add fonts to dynos packs 2023-04-02 14:58:43 -07:00
pisetup.sh Update repo_url. Rename /sm64pi/sm64pc -> /sm64pc/sm64ex 2020-07-06 19:29:52 +02:00
README.md Fix coopdx-patcher link 2024-02-15 17:25:18 -05: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

sm64coopdx

Online multiplayer mod for the Super Mario 64 PC port that synchronizes all entities and every level for multiple players. Fork of sm64ex-coop.

Feel free to report bugs and contribute, but remember, there must be no upload of any copyrighted asset. Run ./extract_assets.py --clean && make clean or make distclean to clear ROM assets, however this is unnecessary for contributing because the .gitignore file already excludes ROM assets.

How to Play

The easiest way to play is by using coopdx-patcher. Simply drag and drop your ROM into the program or run coopdx-patcher "your_rom_name.z64".

How to Compile

Windows:

Download the newest version of the MSYS2 installer from here and install it.

Set up MSYS2.

Run the MINGW64 (mingw64.exe) prompt if you wish to build a 64-bit version of the executable, or the MINGW32 (mingw32.exe) prompt otherwise.

Enter pacman -Syuu in the prompt and hit Enter. Press Y when it asks if you want to update packages. If it asks you to close the prompt, do so, then restart it and run the same command again. This updates the packages to their latest versions.

Install dependencies.

Enter this command to install packages necessary to build sm64coopdx:

pacman -S unzip make git mingw-w64-i686-gcc mingw-w64-x86_64-gcc mingw-w64-i686-glew mingw-w64-x86_64-glew mingw-w64-i686-SDL2 mingw-w64-i686-SDL mingw-w64-x86_64-SDL2 mingw-w64-x86_64-SDL python3

Linux:

Install build dependencies

The build system has the following package requirements:

  • python3 >= 3.6
  • libsdl2-dev
  • libglew-dev
  • git

Debian / Ubuntu - targeting 32 bits

sudo apt install build-essential git python3 libglew-dev:i386 libsdl2-dev:i386 libz-dev:i386

Debian / Ubuntu - targeting 64 bits

sudo apt install build-essential git python3 libglew-dev libsdl2-dev libz-dev

Fedora - targeting 64 bits

sudo dnf install make gcc python3 glew-devel SDL2-devel zlib-devel

Fedora - targeting 32 bits

sudo dnf install python3.i686 glew-devel.i686 SDL2-devel.i686 zlib-devel.i686

Arch Linux

There is an AUR package (courtesy of @narukeh) avaliable under the name sm64pc-git. Install it using your AUR helper of choice.

If you want to build it yourself:

sudo pacman -S base-devel python sdl2 glew zlib-devel

Void Linux - targeting 64 bits

sudo xbps-install -S base-devel python3 SDL2-devel glew-devel libz-dev

Void Linux - targeting 32 bits

sudo xbps-install -S base-devel python3 SDL2-devel-32bit glew-devel-32bit libz-dev-32bit

Nix OS

It is recommended you create a nix-shell enviroment for compiling it. Create a file called whatever you want.nix and insert

{ pkgs ? import <nixpkgs> {} }:
  pkgs.mkShell {
    # nativeBuildInputs is usually what you want -- tools you need to run
    nativeBuildInputs = [ pkgs.gcc pkgs.python310 pkgs.SDL2 pkgs.glew pkgs.zlib pkgs.git];
}

then run nix-shell name.nix

Obtain the source code.

You can either download the ZIP file from github, or clone it with git:

git clone https://github.com/coop-deluxe/sm64coopdx.git
cd sm64coopdx

macOS (Intel)

Set up Homebrew.

Follow the Homebrew installation instructions here, pasting the given line in Terminal.

Install dependencies.

After installing homebrew, enter this command in the terminal to install packages necessary to build sm64coopdx:

brew install make mingw-w64 gcc gcc@9 sdl2 pkg-config glew glfw3 libusb audiofile coreutils

Obtain the source code.

git clone https://github.com/djoslin0/sm64ex-coop.git
cd sm64ex-coop

Assembling libjuice (optional for 10.15 and above).

Run the following script to compile the libjuice library:

sh tools/mac-intel-essential.sh

macOS (ARM)

Set up the environment

Start a terminal through Rosetta by running arch -x86_64 zsh. All commands in this tutorial must be run within this terminal.

Follow the Homebrew installation instructions here, pasting the given line in Rosetta Terminal.

TIP: To make your life easier, add the following aliases to your .zshrc

alias ibrew="arch -x86_64 /usr/local/bin/brew"
alias iarch="arch -x86_64"

Install dependencies.

After installing homebrew, enter this command in the Rosetta terminal to install packages necessary to build sm64coopdx:

/usr/local/bin/brew install make mingw-w64 gcc gcc@9 sdl2 pkg-config glew glfw3 libusb audiofile coreutils

Disable ARM dependencies

You will need to disable glew and SDL2 if you have installed them using native brew. You can do this either by uninstalling them through native brew, or by temporarily renaming the symlinks in /opt/homebrew/Cellar/[dependency]. The build system will choke on ARM dependenices without even looking for compatible x86_64 dependencies.

Copy baserom(s) for asset extraction.

For each version (jp/us/eu) that you want to build an executable for, put an existing ROM at ./baserom.<version>.z64 for asset extraction.

For example, if you want to build the US version, there should be a ROM file called baserom.us.z64 in the sm64coopdx directory (meaning next to the Makefile). The US version is highly recommended.

If during the build process you get messages saying that the ROM has an incorrect hash, there is a possibility that it's a V64 ROM that needs to be byteswapped. To do that, use this web tool.

Run make. To turn certain features on and off, append any needed build flags to your make invocation like so:

Useful Flag information:

-j[2|4|8|16]: Jobs amount, may speed up compilation.

TARGET_BITS [32|64]: Compile 32-bit or 64-bit.

DISCORD_SDK [0|1]: Enable or disable Discord Game SDK.

COOPNET [0|1]: Enable or disable the CoopNet networking system.

HEADLESS [0|1]: Enable or disable headless mode (meant for servers.)

RENDER_API [GL|GL_LEGACY|D3D11|D3D12|DUMMY]: Sets the rendering API.

WINDOW_API [SDL1|SDL2|DXGI|DUMMY] Sets the window API.

Windows / Linux:

make

macOS (Intel):

gmake OSX_BUILD=1

macOS (ARM):

gmake OSX_BUILD=1 TARGET_ARCH=x86_64-apple-darwin TARGET_BITS=64

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 interact with the same world at the same time.

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.