From cb259e4ffa6ad048d1b583164ea35404ba672af4 Mon Sep 17 00:00:00 2001 From: mattman107 <65982675+mattman107@users.noreply.github.com> Date: Wed, 3 Apr 2024 05:34:04 -0400 Subject: [PATCH] Add SuperTuxKart egg (#2823) * Create egg-super-tux-kart.json * Create ReadMe.md * Update README.md * Update ReadMe.md * Update egg-super-tux-kart.json * Update README.md * Update ReadMe.md * Update egg-super-tux-kart.json * Update ReadMe.md * Update ReadMe.md * Update egg-super-tux-kart.json * more input validation --------- Co-authored-by: Quinten <67589015+QuintenQVD0@users.noreply.github.com> --- README.md | 2 + game_eggs/README.md | 2 + game_eggs/SuperTuxKart/ReadMe.md | 33 +++++++ .../SuperTuxKart/egg-super-tux-kart.json | 92 +++++++++++++++++++ 4 files changed, 129 insertions(+) create mode 100644 game_eggs/SuperTuxKart/ReadMe.md create mode 100644 game_eggs/SuperTuxKart/egg-super-tux-kart.json diff --git a/README.md b/README.md index 61e13809..e859e5a3 100644 --- a/README.md +++ b/README.md @@ -349,6 +349,8 @@ If you are reading this it looks like you are looking to add an egg to your serv * [VEIN](game_eggs/steamcmd_servers/vein) * [Wurm Unlimited](game_eggs/steamcmd_servers/wurm_unlimited/) +[SuperTuxKart](game_eggs/SuperTuxKart) + [Teeworlds](game_eggs/teeworlds) * [Teeworlds](game_eggs/teeworlds/teeworlds) diff --git a/game_eggs/README.md b/game_eggs/README.md index 78e93475..5a79f98b 100644 --- a/game_eggs/README.md +++ b/game_eggs/README.md @@ -247,6 +247,8 @@ * [VEIN](steamcmd_servers/vein) * [Wurm Unlimited](steamcmd_servers/wurm_unlimited/) +[SuperTuxKart](SuperTuxKart) + [Teeworlds](teeworlds) [Terraria](terraria) diff --git a/game_eggs/SuperTuxKart/ReadMe.md b/game_eggs/SuperTuxKart/ReadMe.md new file mode 100644 index 00000000..693a4e4c --- /dev/null +++ b/game_eggs/SuperTuxKart/ReadMe.md @@ -0,0 +1,33 @@ +# SuperTuxKart + +SuperTuxKart is a 3D open-source arcade racer with a variety characters, tracks, and modes to play. + +## [Documentation](https://github.com/supertuxkart/stk-code/blob/master/NETWORKING.md) + +Essentially this is a standard build of the regular SuperTuxKart client but with a special flag when being compiled that produces a GUI-less binary optimized for size and memory usage. + +## Install notes + +First install will take a while because the games source code and assets will be downloaded and the games executable will have to be compiled. + +## Installation/System Requirements +| | Bare Minimum | Recommended | +|---------|---------|---------| +| RAM | 1GiB | 1GiB | +| Storage | 3GiB | 5GiB | + +## Server Ports + +| Port | default | +|---------|---------| +| Game | 2759 | + +### Notes + +To change server settings, stop the server then edit the 'config.xml' file in the root of the container. When done save the file and start the server. + +2759 is the default port, but any port can be used. You will have to manually change it in the config.xml file. + +To update the server (only should have to be done when the games code or assets are updated) in panel as an admin go to Servers > SuperTuxKart Server > Manage > Reinstall. If you are a standard user go to SuperTuxKart Server > Settings > Reinstall Server. This will download the updated code/assets (should exclude anything that didn't change) and recompile the executable. + +Currently this is setup to run a local lan server. To make this a wan server (available in the SuperTuxKart online lobby list) read the document at this link and make the necessary changes to the [startup command](https://github.com/supertuxkart/stk-code/blob/master/NETWORKING.md). diff --git a/game_eggs/SuperTuxKart/egg-super-tux-kart.json b/game_eggs/SuperTuxKart/egg-super-tux-kart.json new file mode 100644 index 00000000..f51642cd --- /dev/null +++ b/game_eggs/SuperTuxKart/egg-super-tux-kart.json @@ -0,0 +1,92 @@ +{ + "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", + "meta": { + "version": "PTDL_v2", + "update_url": null + }, + "exported_at": "2024-03-24T19:19:23+01:00", + "name": "SuperTuxKart", + "author": "mattamn107@github.com", + "description": "Egg for hosting a SuperTuxKart Server.", + "features": null, + "docker_images": { + "ghcr.io\/parkervcp\/yolks:debian": "ghcr.io\/parkervcp\/yolks:debian" + }, + "file_denylist": [], + "startup": ".\/bin\/supertuxkart --server-config={{CONFIG_NAME}} --lan-server={{SERVER_NAME}} --network-console --port=\"{{SERVER_PORT}}\" --difficulty={{DIFFICULTY}} --mode={{MODE}} --max-players={{MAX_PLAYERS}} --motd=\"{{MOTD}}\"", + "config": { + "files": "{}", + "startup": "{\r\n \"done\": \"Available command:\"\r\n}", + "logs": "{}", + "stop": "quit" + }, + "scripts": { + "installation": { + "script": "#!\/bin\/bash\r\n\r\n# Install build tools\r\necho \"deb http:\/\/deb.debian.org\/debian bullseye-backports main\" >> \/etc\/apt\/sources.list && \\\r\napt-get update && apt-get -y full-upgrade && \\\r\n apt-get install -y build-essential cmake libbluetooth-dev libsdl2-dev \\\r\n libcurl4-openssl-dev libenet-dev libfreetype6-dev libharfbuzz-dev \\\r\n libjpeg-dev libogg-dev libopenal-dev libpng-dev \\\r\n libssl-dev libvorbis-dev libmbedtls-dev pkg-config zlib1g-dev subversion\r\n\r\nif [ ! -d \"\/mnt\/server\/stk-code\" ] && [ ! -d \"\/mnt\/server\/stk-assets\" ]; then\r\n \r\n #clone code repo\r\n git clone https:\/\/github.com\/supertuxkart\/stk-code \/mnt\/server\/stk-code\r\n \r\n #get assets\r\n svn co https:\/\/svn.code.sf.net\/p\/supertuxkart\/code\/stk-assets \/mnt\/server\/stk-assets\r\n \r\n # go into the stk-code directory\r\n cd \/mnt\/server\/stk-code\r\n \r\n # create and enter the cmake_build directory\r\n mkdir cmake_build\r\n \r\nelse\r\n\r\n #update existing stuff\r\n cd \/mnt\/server\/stk-assets\r\n svn up\r\n \r\n cd \/mnt\/server\/stk-code\r\n git pull\r\n\r\n\r\nfi\r\n\r\n#build the server\r\ncd cmake_build\r\ncmake .. -DSERVER_ONLY=ON\r\nmake\r\n\r\n#copy binary to root\/bin and make it executable\r\nmkdir \/mnt\/server\/bin\r\ncp \/mnt\/server\/stk-code\/cmake_build\/bin\/supertuxkart \/mnt\/server\/bin\/supertuxkart\r\nchmod +x \/mnt\/server\/bin\/supertuxkart\r\n\r\n#copy data folder\r\ncp -r \/mnt\/server\/stk-code\/data \/mnt\/server\/data\r\n\r\n#copy extra assets to data folder\r\ncd \/mnt\/server\/stk-assets\r\ncp -r library models music sfx textures tracks karts \/mnt\/server\/data\/\r\n\r\n# Delete repo's to save disk space.\r\n#rm -rf \/mnt\/server\/stk-code && rm -rf \/mnt\/server\/stk-assets", + "container": "ghcr.io\/parkervcp\/installers:debian", + "entrypoint": "bash" + } + }, + "variables": [ + { + "name": "Server Name", + "description": "The Name of the Server", + "env_variable": "SERVER_NAME", + "default_value": "Pterodactyl_Server", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|max:50", + "field_type": "text" + }, + { + "name": "Config File Name", + "description": "Name of the Config File.", + "env_variable": "CONFIG_NAME", + "default_value": "config.xml", + "user_viewable": true, + "user_editable": true, + "rules": "required|regex:\/^([\\w\\d._-]+)(\\.xml)$\/", + "field_type": "text" + }, + { + "name": "Mode", + "description": "0 = Normal Race\r\n1 = Time Trial\r\n2 = Battle\r\n3 = Soccer\r\n4 = Follow The Leader\r\n5 = Capture the Flag", + "env_variable": "MODE", + "default_value": "0", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|in:0,1,2,3,4,5", + "field_type": "text" + }, + { + "name": "Difficulty", + "description": "Speed of the carts and AI difficulty\r\n0 = Beginner\r\n1 = Intermediate\r\n2 = Expert\r\n3 = SuperTux", + "env_variable": "DIFFICULTY", + "default_value": "0", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|in:0,1,2,3", + "field_type": "text" + }, + { + "name": "Max Players", + "description": "How many players can there be in the server.", + "env_variable": "MAX_PLAYERS", + "default_value": "8", + "user_viewable": true, + "user_editable": true, + "rules": "required|numeric|between:1,24", + "field_type": "text" + }, + { + "name": "Message of the Day", + "description": "Message of the Day displayed in the server.", + "env_variable": "MOTD", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|max:100", + "field_type": "text" + } + ] +} \ No newline at end of file