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>
This commit is contained in:
consultoria-as
2026-03-03 06:53:51 +00:00
parent ad8fcae10c
commit 1cc3baf58b
4 changed files with 85 additions and 1 deletions

View File

@@ -90,7 +90,7 @@ services:
dockerfile: Dockerfile dockerfile: Dockerfile
restart: unless-stopped restart: unless-stopped
environment: environment:
SHARD_IP: ${PUBLIC_HOST:-192.168.10.234} SHARD_IP: 192.168.10.234
MOTD: ${OPENFUSION_MOTD:-Bienvenido a Project Afterlife - FusionFall Academy} MOTD: ${OPENFUSION_MOTD:-Bienvenido a Project Afterlife - FusionFall Academy}
ports: ports:
- "23000:23000" - "23000:23000"
@@ -172,6 +172,25 @@ services:
volumes: volumes:
- afc_bridge_data:/data - 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
volumes: volumes:
postgres_data: postgres_data:
minio_data: minio_data:
@@ -179,6 +198,8 @@ volumes:
minecraft_ftb_data: minecraft_ftb_data:
geth_data: geth_data:
afc_bridge_data: afc_bridge_data:
sm64_save:
sm64_mods:
certbot_etc: certbot_etc:
external: true external: true
name: docker_certbot_etc name: docker_certbot_etc

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"]