Skip to content

Add Windrose egg - #271

Open
nezorflame wants to merge 6 commits into
pelican-eggs:mainfrom
nezorflame:add-windrose-egg
Open

Add Windrose egg#271
nezorflame wants to merge 6 commits into
pelican-eggs:mainfrom
nezorflame:add-windrose-egg

Conversation

@nezorflame

@nezorflame nezorflame commented Apr 14, 2026

Copy link
Copy Markdown

Description

Adding a new egg for the freshly released Windrose EA survival game's dedicated server.

AI disclosure

This was made with the help from Claude Code when I was debugging the egg on my own Pelican instance.
Code is my own (heavily inspired by the other published eggs), but few edits and changes were made by Claude and reviewed/adapted/tested by myself.
Pterodactyl egg was autogenerated by the https://redthirten.github.io/scramble-egg-converter/ tool.

Checklist for all submissions

  • Have you followed the guidelines in our Contributing document?
  • Have you checked to ensure there aren't other open Pull Requests for the same update/change?
  • Have you tested and reviewed your changes with confidence that everything works?
  • Did you branch your changes and PR from that branch and not from your master branch?
  • You verify that the start command applied does not use a shell script
    • If some script is needed then it is part of a current yolk or a PR to add one
  • The egg was exported from the panel

New egg Submissions

  1. Does your submission pass tests (server is connectable)?
  2. Does your egg use a custom docker image?
    • Have you tried to use a generic image?
    • Did you PR the necessary changes to make it work?
  3. Have you added the egg to the main README.md and any other README files in subdirectories of the egg (e.g /game_eggs) according to the alphabetical order?
  4. Have you added a unique README.md for the egg you are adding according to the alphabetical order?
  5. You verify that the start command applied does not use a shell script
    • If some script is needed then it is part of a current yolk or a PR to add one
  6. The egg was exported from the panel

@nezorflame nezorflame mentioned this pull request Apr 14, 2026
@nezorflame

Copy link
Copy Markdown
Author

Server stats with 1 player active:
image

@KenshiHH

KenshiHH commented Apr 14, 2026

Copy link
Copy Markdown

Just tested it, works so far except for one error

":/home/container$ wine ./WindroseServer.exe & WS_PID=$! ; tail -c0 -F ./R5/Saved/Logs/WindroseServer.log --pid=$WS_PID
tail: cannot open './R5/Saved/Logs/WindroseServer.log' for reading: No such file or directory"

cpu is a i5 12400, 4 cores dedicated to the windrose server.
1 active player
grafik

@nezorflame

Copy link
Copy Markdown
Author

@KenshiHH just updated the PR with the fix - had a typo on the log name + added a loop to watch for the log creation

@KenshiHH

Copy link
Copy Markdown

just updated it, log works fine now :)

@uncaught

Copy link
Copy Markdown

What ports does it need?

@QWp6t

QWp6t commented Apr 14, 2026

Copy link
Copy Markdown

What ports does it need?

From the README:

Server Ports

The dedicated server uses NAT punch-through / UPnP for connectivity — fixed port assignment is not supported. Ensure UPnP is enabled on your router, or configure port forwarding manually.

@hackles

hackles commented Apr 14, 2026

Copy link
Copy Markdown

gross. i think the inability to set ports is untenable for most pelican users. the devs have not made it clear which ports are randomly selected but one user in Discord tested several reboots of his server and believes it's ports 42000 - 45000, so that might be worth documenting in the README. I guess we'll just have to allocate that entire range when creating a server, and good luck running more than one instance of this game. 🤷

@hackles

hackles commented Apr 14, 2026

Copy link
Copy Markdown

The devs are looking into bugs and issues related to dedicated servers. I know that the limitations around specifying dedicated server ports is something that the devs have been made aware of. So it might make sense to hold off on this PR until these issues are resolved. The reason is because many people import eggs via the Pelican UI, so they might not have the full context of the issues surrounding port allocation. People desperate for an egg before then can still grab it from this PR.

See:
image

@uncaught

Copy link
Copy Markdown

well, you can't even connect to an IP in the game. it all goes through the steam network. My local proxmox pelican instance works great with this egg but the traffic goes an extra round I guess 😄

@KenshiHH

Copy link
Copy Markdown

Quick Info,
the Usaged Skyrockets when there are 0 Players, it is a reported bug for the dedicated server itself and not an Egg problem

@nezorflame

nezorflame commented Apr 15, 2026

Copy link
Copy Markdown
Author

Apart from the obvious launch issues, my play session yesterday with 3 ppl on the server went almost flawlessly without any tinkering.
And yes, you don't need to assign any ports to the server. see response below

@hackles

hackles commented Apr 17, 2026

Copy link
Copy Markdown

And yes, you don't need to assign any ports to the server.

This isn't quite accurate. Ports are still assigned; they're just assigned dynamically at start-up. This might work for your infrastructure but it doesn't work for everyone's.

@Kastello1

Kastello1 commented Apr 19, 2026

Copy link
Copy Markdown

Seems like they added Direct Connection now within ServerDescription.json:
"UseDirectConnection": false,
"DirectConnectionServerAddress": "",
"DirectConnectionServerPort": 7777,

Just opened 7777 TCP + UDP and it worked without problems for me
(Changing UseDirectConnection": true + setting IP based on my setup to 0.0.0.0)

@uncaught

Copy link
Copy Markdown

Did the game add a direct connect by ip, yet?

@Kastello1

Kastello1 commented Apr 19, 2026

Copy link
Copy Markdown

@uncaught

I've literally said so just above your comment, so yes they added it with the latest update

@uncaught

Copy link
Copy Markdown

Sorry, I meant the game client. I wasn't home, yet. I see there is a direct connect option in the client, too, now :)

@Voronsky

Copy link
Copy Markdown

Having an issue where, It seems to have an error trying to load a missing file, but the server does not properly start up. If i try to use an invite code or direct IP, it just kicks me back to the main menu after loading. This is all my server shows:

Unloading Steam API...OK
First launch will throw some errors. Ignore them
Installing vcrun2022
_XSERVTransmkdir: ERROR: euid != 0,directory /tmp/.X11-unix will not be created.
Executing cd /usr/sbin
Using winetricks 20260125-next - sha256sum: c88d0ebe7fcdbda355a1c02fb0571a28db0eb1dde97500e1646060559c30d728 with wine-11.6 (Staging) and WINEARCH=win64
Executing w_do_call vcrun2022
vcrun2022 already installed, skipping
:/home/container$ wine ./WindroseServer.exe & WS_PID=$! ; while [ ! -f ./R5/Saved/Logs/R5.log ]; do sleep 1; done; tail -c0 -F ./R5/Saved/Logs/R5.log --pid=$WS_PID
wine: Unhandled illegal instruction at address 0000000140001E8B (thread 01a0), starting debugger...
01b8:err:wgl:egl_init Failed to load libEGL.so.1: libEGL.so.1: cannot open shared object file: No such file or directory

@Kastello1

Copy link
Copy Markdown

@Voronsky Did you try to restart the server? it says "First launch will throw some errors" and I had the same but it worked after the restart

@Voronsky

Copy link
Copy Markdown

@Voronsky Did you try to restart the server? it says "First launch will throw some errors" and I had the same but it worked after the restart

Yes, i gave it a couple restarts and it crashes at the same spot actually.

@uncaught

Copy link
Copy Markdown

"illegal instruction" sounds like an arch type problem. Are you running this on an arm cpu?

@QuintenQVD0

Copy link
Copy Markdown
Contributor

Or proxmox with a cpu mode not set to host

@Voronsky

Copy link
Copy Markdown

Thanks you two! It was indeed due to the proxmox setting not set to 'host'. It was also documented in these docs: https://playwindrose.com/dedicated-server-guide/

under the proxmox section.

Switching it to 'host' allowed me to connect.

image

@Styxbleich

Copy link
Copy Markdown

I feel silly, I was working on this as well and for some reason didn't even see your pull request until after I submitted mine. I went ahead and closed mine. But I would like to also offer a slightly different approach rather than using wine, I (and by me I mean me guiding Claude Code as well just so we are all clear) used proton. The server seems very stable. I have attached my current working proton version as well. Mainly I would be curious to see if proton or wine does better long term hosting a server. Also note that I haven't really done much in the realm of egg creation so not only is there probably things wrong in here but there may be a very good reason why we want to use wine instead of proton.

Just wanted to share and put this in a place for others to see and test rather than muddy things up by having a basically duplicate PR.

egg-windrose_proton.json

@nezorflame

Copy link
Copy Markdown
Author

@Styxbleich thanks, I'll take a look on the weekend.
I was unable to successfully launch it with Proton so I had to use Wine.

@Styxbleich

Copy link
Copy Markdown

@Styxbleich thanks, I'll take a look on the weekend.
I was unable to successfully launch it with Proton so I had to use Wine.

I had some issues as well, took some time before I got a version that was running well.

No worries! Just wanted to share a different solution to the same problem.

@phws642

phws642 commented May 1, 2026

Copy link
Copy Markdown

Hello I’m running the official Windrose egg on Pelican (Wine yolk), and ran into a reproducible startup bug that seems to come from incorrect paths in the egg’s startup command and log file.

With the stock egg, the server either:
exits immediately and is marked as crashed (exit code 0), or stays stuck in starting because the log tail never reads from the actual server log.
After correcting two paths in the startup command, the server starts reliably and Pelican shows it as running.

I have change the Startup-Command from:
wine ./WindroseServer.exe & WS_PID=$! ; tail -c0 -F ./R5/Saved/Logs/WindroseServer.log --pid=$WS_PID
to:
wine R5/Binaries/Win64/WindroseServer-Win64-Shipping.exe -log & WS_PID=$! ; tail -c0 -F R5/Saved/Logs/R5.log --pid=$WS_PID

With this Startup-Command my Pelican Server is running.

And Direct IP Access with my own domain is only working if forward UDP and TCP for port.
Tested via Zoraxy Reverse Proxy with Proxy Stream Rule for UDP & TCP. R5/ServerDescription.json:
....
"P2pProxyAddress": "127.0.0.1",
"UseDirectConnection": true,
"DirectConnectionServerAddress": "sub.domain.com:7777",
"DirectConnectionServerPort": 7777,
"DirectConnectionProxyAddress": "0.0.0.0"
...
Source: https://haruhost.com/guides/windrose/direct-connection-tunnel-setup/

I have also tested InviteID. This was only working without my NextDNS Provider. But NextDNS is not a Problem vor Direct IP. Here was the missing TCP Port the Problem.

@Volyz

Volyz commented May 8, 2026

Copy link
Copy Markdown
Contributor

Tried to import the pterodactyl file via the UI importer, got a 500 :

[2026-05-08 14:34:51] production.ERROR: Could not save Pterodactyl\Models\EggVariable[]: failed to validate data: {"default_value":["The default value must be a string."]} {"userId":1,"exception":"[object] (Pterodactyl\\Exceptions\\Model\\DataValidationException(code: 0): Could not save Pterodactyl\\Models\\EggVariable[]: failed to validate data: {\"default_value\":[\"The default value must be a string.\"]} at /var/www/pterodactyl/app/Models/Model.php:53)

Your Claude mismatched the types and default values.
The Pterodactyl validation do not pass and prevent importing the pterodactyl egg

@nezorflame

@nezorflame

nezorflame commented May 8, 2026

Copy link
Copy Markdown
Author

@Volyz Pterodactyl version was auto-generated from my Pelican config by https://redthirten.github.io/scramble-egg-converter/ tool, so Claude had nothing to do with it. And since I don't use Pterodactyl, I had no way of testing it, sorry about that.
I'll try to regenerate it once again when I adopt the Proton change suggested above.

@nezorflame

nezorflame commented May 8, 2026

Copy link
Copy Markdown
Author

@Styxbleich so basically my issue was running the "wrong" server binary.
Using the one you use in the startup command fixed my launch issues. Thanks again!

Pushed the updated config with the DirectIP envs, as well as the regenerated through Scramble Pterodactyl config.

@Volyz

Volyz commented May 8, 2026

Copy link
Copy Markdown
Contributor

@nezorflame NP dude :) I assumed it was claude as you said you used it to help you ;)

Anyway => same problem. It seems that redthirteen tools does not take into account that pterodactyl does need the default_values in the exported egg to be quoted and presented as strings otherwise the import does not work (at least for me). You'll find attached the file that worked on the import => all default_values are quoted
corrected-pterodactyl-egg-windrose.json

@nezorflame

Copy link
Copy Markdown
Author

@Volyz gotcha, I'll update the PR once I'm near my PC

@Styxbleich

Styxbleich commented May 10, 2026

Copy link
Copy Markdown

@Styxbleich so basically my issue was running the "wrong" server binary.
Using the one you use in the startup command fixed my launch issues. Thanks again!

Pushed the updated config with the DirectIP envs, as well as the regenerated through Scramble Pterodactyl config.

Glad to help wherever I can!

@phws642

phws642 commented May 17, 2026

Copy link
Copy Markdown

Can Recon or the player-counter plugin be used for player connect and disconnect events?
In the log "/home/container/R5/Saved/Logs/R5.log" they are player events.
Example:
Connected Accounts

  1. Name 'USER1. AccountId '914715.....
    Disconnected Accounts
    1. Name 'USER1'. AccountId '914715......'. State 'SaidFarewell'. ...

@QuintenQVD0 QuintenQVD0 linked an issue Jun 8, 2026 that may be closed by this pull request
@claudetking

Copy link
Copy Markdown

Got this egg working in a Pelican homelab and hit two install-script issues that both surface as the same Missing configuration / exit-8 error from steamcmd. They happen to be masked by Wings' AUTO_UPDATE=1 runtime pass (the runtime container pulls the game anyway), so the server eventually starts — but the install container exits in ~33 seconds with only the SDK redist on disk, which doesn't survive a Reinstall.

1. +@sSteamCmdForcePlatformType windows is rejected for this app under anonymous login.

Steam doesn't expose a Windows-platform depot for app 4129620 to anonymous users — the flag short-circuits the depot lookup and exits with Missing configuration. Dropping the flag and letting Steam serve the default depot works fine; the resulting tree still contains the Win64 binary (R5/Binaries/Win64/WindroseServer-Win64-Shipping.exe) which the runtime then launches under Proton/Wine.

2. +app_update 1007 (Steamworks SDK Redist) needs to be prefetched.

Without app 1007 already installed, +app_update 4129620 also exits with Missing configuration. Prefetching 1007 in the same steamcmd invocation resolves it.

Both fixes in one line — drop the platform flag, prefetch 1007:

-./steamcmd.sh +force_install_dir /mnt/server +login ${STEAM_USER} ${STEAM_PASS} ${STEAM_AUTH} +@sSteamCmdForcePlatformType windows +app_update ${SRCDS_APPID} $( [[ -z ${SRCDS_BETAID} ]] || printf %s "-beta ${SRCDS_BETAID}" ) $( [[ -z ${SRCDS_BETAPASS} ]] || printf %s "-betapassword ${SRCDS_BETAPASS}" ) ${INSTALL_FLAGS} validate +quit
+./steamcmd.sh +force_install_dir /mnt/server +login ${STEAM_USER} ${STEAM_PASS} ${STEAM_AUTH} +app_update 1007 +app_update ${SRCDS_APPID} $( [[ -z ${SRCDS_BETAID} ]] || printf %s "-beta ${SRCDS_BETAID}" ) $( [[ -z ${SRCDS_BETAPASS} ]] || printf %s "-betapassword ${SRCDS_BETAPASS}" ) ${INSTALL_FLAGS} validate +quit

Confirmed end-to-end on a fresh install (Pelican panel, Wings runtime, AUTO_UPDATE left at default). Install container now downloads the full ~3 GB game payload and exits cleanly; first boot reaches UEngine::LoadMap Load map complete. With the old script the install container completes in ~33 sec with only ~/.steam/sdk* populated, and the runtime container is what eventually pulls the game.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Egg Request]: Windrose