Compare commits

...

5 Commits

Author SHA1 Message Date
consultoria-as
a3bd1ac2e6 feat: add Dolphin traversal server for GameCube/Wii netplay
Some checks failed
Deploy / deploy (push) Has been cancelled
Self-hosted NAT hole-punching relay for Dolphin emulator netplay.
Enables online play for ALL GameCube and Wii games without players
needing to open ports (Mario Party 4-7, MKDD, Smash Melee, etc).

Multi-stage Docker build compiles only the traversal_server target.
UDP ports 6262 (primary) and 6226 (NAT probe).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 10:26:49 +00:00
consultoria-as
9436bb2faf feat: add gopher64 N64 netplay server for Mario Party
Lightweight Go relay server (k4rian/gopher64-netplay-server) for N64
netplay. Supports Mario Party 1-3 with up to 4 players per room.
Players connect via gopher64/RMG emulator with their own ROM.

Ports: TCP+UDP 45000-45004 (lobby + 4 concurrent game sessions)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 09:36:46 +00:00
consultoria-as
d4d22e987b chore: increase OpenFusion log verbosity for debugging
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 06:53:56 +00:00
consultoria-as
1cc3baf58b feat: add sm64coopdx headless dedicated server
Multi-stage Docker build compiles sm64coopdx from source with HEADLESS=1.
Includes patches for GCC 11 float.h and upstream platform.c fallback bug.
Server runs on UDP 7777, supports 16 players, comes with bundled mods.

Also hardcodes OpenFusion SHARD_IP (was using PUBLIC_HOST variable).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 06:53:51 +00:00
consultoria-as
ad8fcae10c fix: MapleStory 2 channel config — INSTANCED_CONTENT and port mapping
INSTANCED_CONTENT: "true" caused the game channel to register as
instanced (channelId=0), but FirstChannel() only returns non-instanced
channels, resulting in "server not found" on character select.

Changed to INSTANCED_CONTENT: "false" so channel registers as id=1.
Updated port mapping from 20002/21002 to 20003/21003 (base + channelId).
Added GRPC_LOGIN_IP env var to world service.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 06:53:44 +00:00
8 changed files with 181 additions and 5 deletions

View File

@@ -90,7 +90,7 @@ services:
dockerfile: Dockerfile
restart: unless-stopped
environment:
SHARD_IP: ${PUBLIC_HOST:-192.168.10.234}
SHARD_IP: 192.168.10.234
MOTD: ${OPENFUSION_MOTD:-Bienvenido a Project Afterlife - FusionFall Academy}
ports:
- "23000:23000"
@@ -172,6 +172,62 @@ services:
volumes:
- afc_bridge_data:/data
sm64coopdx:
build:
context: ../servers/sm64coopdx
dockerfile: Dockerfile
restart: unless-stopped
container_name: sm64coopdx
environment:
SM64_PORT: ${SM64_PORT:-7777}
SM64_PLAYERS: ${SM64_PLAYERS:-16}
ports:
- "7777:7777/udp"
volumes:
- sm64_save:/server/save
- sm64_mods:/server/mods
deploy:
resources:
limits:
memory: 2G
n64-netplay:
image: k4rian/gopher64-netplay-server:latest
container_name: n64-netplay
restart: unless-stopped
environment:
G64NS_NAME: "Afterlife N64 - Mario Party"
G64NS_PORT: 45000
G64NS_MAXGAMES: 4
G64NS_MOTD: "Bienvenido a Project Afterlife - Mario Party N64"
G64NS_LOGPATH: "gopher64-server.log"
G64NS_DISABLEBROADCAST: "false"
G64NS_ENABLEAUTH: "false"
ports:
- "45000-45004:45000-45004/tcp"
- "45000-45004:45000-45004/udp"
volumes:
- n64_netplay_data:/home/gopher64
- /etc/localtime:/etc/localtime:ro
deploy:
resources:
limits:
memory: 128M
dolphin-traversal:
build:
context: ../servers/dolphin-traversal
dockerfile: Dockerfile
container_name: dolphin-traversal
restart: unless-stopped
ports:
- "6262:6262/udp"
- "6226:6226/udp"
deploy:
resources:
limits:
memory: 64M
volumes:
postgres_data:
minio_data:
@@ -179,6 +235,9 @@ volumes:
minecraft_ftb_data:
geth_data:
afc_bridge_data:
sm64_save:
sm64_mods:
n64_netplay_data:
certbot_etc:
external: true
name: docker_certbot_etc

View File

@@ -52,6 +52,7 @@ services:
- ../servers/maple2/.env
environment:
DB_IP: maple2-mysql
GRPC_LOGIN_IP: maple2-login
maple2-login:
build:
@@ -104,15 +105,15 @@ services:
maple2-world:
condition: service_started
ports:
- "20002:20002"
- "21002:21002"
- "20003:20003"
- "21003:21003"
env_file:
- ../servers/maple2/.env
environment:
DB_IP: maple2-mysql
GRPC_GAME_IP: maple2-game-ch0
GRPC_WORLD_IP: maple2-world
INSTANCED_CONTENT: "true"
INSTANCED_CONTENT: "false"
volumes:
maple2_mysql:

View File

@@ -0,0 +1,2 @@
*.md
.git

View File

@@ -0,0 +1,51 @@
# Dolphin Emulator Traversal Server
# Lightweight NAT hole-punching relay for Dolphin netplay
# Supports ALL GameCube/Wii games via Dolphin
# --- Build stage ---
FROM debian:bookworm AS build
RUN apt-get update && apt-get install -y \
build-essential cmake git pkg-config \
libfmt-dev libenet-dev libcurl4-openssl-dev \
libbz2-dev liblzma-dev libzstd-dev zlib1g-dev \
liblzo2-dev liblz4-dev libspng-dev \
libusb-1.0-0-dev libevdev-dev libpugixml-dev libxxhash-dev \
libminiupnpc-dev libhidapi-dev libsystemd-dev libudev-dev \
glslang-dev glslang-tools \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /dolphin
RUN git clone --depth 1 https://github.com/dolphin-emu/dolphin.git . \
&& git submodule update --init --recursive --depth 1
RUN mkdir build && cd build && cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DENABLE_QT=OFF \
-DENABLE_NOGUI=OFF \
-DENABLE_CLI=OFF \
-DENABLE_TESTS=OFF \
-DUSE_DISCORD_PRESENCE=OFF \
-DENABLE_AUTOUPDATE=OFF \
-DENABLE_ANALYTICS=OFF
RUN cd build && cmake --build . --target traversal_server -j$(nproc)
# --- Runtime stage ---
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y \
libfmt9 libstdc++6 \
&& rm -rf /var/lib/apt/lists/*
RUN useradd -r -s /bin/false dolphin
COPY --from=build /dolphin/build/Binaries/traversal_server /usr/local/bin/traversal_server
USER dolphin
EXPOSE 6262/udp
EXPOSE 6226/udp
CMD ["traversal_server"]

View File

@@ -1,5 +1,5 @@
# OpenFusion Server Configuration (Docker)
verbosity=1
verbosity=3
sandbox=false
[login]

View File

@@ -0,0 +1,2 @@
*.md
.git

4
servers/sm64coopdx/.gitignore vendored Normal file
View File

@@ -0,0 +1,4 @@
# SM64 ROM — copyrighted, not distributable
*.z64
*.n64
*.v64

View File

@@ -0,0 +1,57 @@
# sm64coopdx headless dedicated server
# Requires baserom.us.z64 (SM64 US ROM) in build context
# --- Build stage ---
FROM ubuntu:jammy AS build
RUN apt-get update && apt-get install -y \
binutils-mips-linux-gnu \
bsdmainutils \
build-essential \
libcapstone-dev \
pkgconf \
python3 \
libz-dev \
libcurl4-openssl-dev \
git \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /sm64
RUN git clone --depth 1 https://github.com/coop-deluxe/sm64coopdx.git .
COPY baserom.us.z64 .
# Patch: add missing float.h include (GCC 11 strictness)
RUN sed -i '1i #include <float.h>' src/engine/math_util.c
# Patch: fix platform.c fallback — upstream renamed functions but forgot the #else branch
RUN sed -i 's/const char \*sys_exe_path(void) {/const char *sys_exe_path_dir(void) {\n return ".";\n}\n\nconst char *sys_resource_path(void) {\n return ".";\n}\n\nconst char *sys_exe_path(void) {/' src/pc/platform.c
RUN make HEADLESS=1 DISCORD_SDK=0 COOPNET=0 -j$(nproc)
# --- Runtime stage ---
FROM ubuntu:jammy
RUN apt-get update && apt-get install -y \
libcurl4 \
libz1 \
&& rm -rf /var/lib/apt/lists/*
RUN useradd -m -s /bin/bash sm64
WORKDIR /server
COPY --from=build /sm64/build/us_pc/ .
COPY --from=build /sm64/baserom.us.z64 .
RUN mkdir -p /server/mods /server/save && chown -R sm64:sm64 /server
USER sm64
EXPOSE 7777/udp
ENV SM64_PORT=7777
ENV SM64_PLAYERS=16
ENTRYPOINT ["sh", "-c", "./sm64coopdx --server ${SM64_PORT} --headless --playercount ${SM64_PLAYERS} --skip-intro"]