So we just played this: http://pastats.com/chart?gameId=225629 hosted on the server of pastats.com How to join a custom server: Simply install PA Stats or faster server browser. It adds custom servers to the browser. How to host a dedicated server on your own machine, assuming linux: Read the guide made by @Quitch from Exodusesports here: http://exodusesports.com/guides/planetary-annihilation-dedicated-server-setup/ or continue with my version that's a little less organized and a little less friendly to the reader: First download the game via the gopatcher: https://bitbucket.org/papatcher/papatcher To be able to run the server you also need to install some opengl library, so on ubuntu I had to install this: sudo apt-get install libgl1-mesa-glx Then download the node js based pa dedicated server controller: http://nanodesu.info/stuff/pa/mods/NodePAMaster.zip (actually so far this isn't really very powerful, it is not ready to use for unattended dedicated servers) Install nodejs and configure the conf.json of the NodePAMaster. At minimum you need to change: serverip: external ip of your server serverport: port the server is running on server: needs to point at the server executable serverversion at the version.txt of the pa installation serverparams now needs to be ["--headless", "--game-mode", "Config", "--allow-lan","--server-name", "yourServerName"] to make it listen at 0.0.0.0 Now modify the server itself: modifiy limits away in sim_utils.js the client that joins as host will also have to have them removed in new_game.js (just use this mod: https://forums.uberent.com/threads/rel-unlimited-players.65302/) to add more player slots in lobby.js there is a MAX_PLAYERS. You know what you want to do with that number put this code block into lobby.js of the server (at the top after the first var definitions) Code: setInterval(function() { if (server.beacon) { console.log("<BACON>"+JSON.stringify(server.beacon)+"</BACON>"); } }, 5000); Once you've configured NodePAMaster, configured the server, added the code into the lobby.js of the server-script start NodePAMaster with nodejs control.js This should start the server and quickly make it visible on http://pastats.com/servers That's where pastats gets the custom servers from to be added to the server browser. If the server exists NodePAMaster will automatically restart a new instance. Server performance So before it was said the server would only use 2 threads. This does not entirely seem to be the case. In the 17 players game linked above the server ended up at 300% cpu according to top. It also ate away so much memory that it started to swap on the 16gb machine. So my current recommendation would be: A heavily overclocked core i5 with at least 32gb of ram on a pretty fast network, pastats.com has 100mbit and it was not having bandwidth issues with the game linked above. It's quite possible that for bigger games more be required. Not sure. EDIT: So after a 32 player game on a 16 core amazon server it turns out that it in fact CAN use more than 3 cores. It topped at ~850% cpu. The sim speed still sucked with roughly 2fps at the worst time though. So I guess the sim is probably only one thread, but it does use more threads for stuff like managing per player data and whatever else it has to do. Guess a perfect setup would have 12 cores that are as fast as possible, as the per core speed will limit the sim speed. :/ EDIT: Also see this post by @fuzzels with additional info: https://forums.uberent.com/threads/wip-dedicated-servers.65077/page-2#post-1019398
Pretty exciting and promising stuff. A bit hackish for the time being, but still gets the job done among friends. Can't wait until we have official support for this stuff!
This just got easier, the ssh tunnel is no longer required, see my added info about configuring the server parameters. With this it now should be possible to just start NodePAMaster via init.d or similar and have it stay all day.
Interesting. There are occasional issues listed below Players unable to connect to the dedicated server (with ports correctly forwarded, Seems to happen with slots above 10+ max players.) Client Occasionally crashing during successful connect (not sure why this happens other then clicking the background during the connecting screen will cause crashing for the client)
a little help for many player games, color generating script, replace team_colors_table.js: Code: exports.data = (function() { var MAX_COLORS = 100; /** * HSV to RGB color conversion * * H runs from 0 to 360 degrees * S and V run from 0 to 100 * * Ported from the excellent java algorithm by Eugene Vishnevsky at: * http://www.cs.rit.edu/~ncs/color/t_convert.html */ function hsvToRgb(h, s, v) { var r, g, b; var i; var f, p, q, t; // Make sure our arguments stay in-range h = Math.max(0, Math.min(360, h)); s = Math.max(0, Math.min(100, s)); v = Math.max(0, Math.min(100, v)); // We accept saturation and value arguments from 0 to 100 because that's // how Photoshop represents those values. Internally, however, the // saturation and value are calculated from a range of 0 to 1. We make // That conversion here. s /= 100; v /= 100; if(s == 0) { // Achromatic (grey) r = g = b = v; return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)]; } h /= 60; // sector 0 to 5 i = Math.floor(h); f = h - i; // factorial part of h p = v * (1 - s); q = v * (1 - s * f); t = v * (1 - s * (1 - f)); switch(i) { case 0: r = v; g = t; b = p; break; case 1: r = q; g = v; b = p; break; case 2: r = p; g = v; b = t; break; case 3: r = p; g = q; b = v; break; case 4: r = t; g = p; b = v; break; default: // case 5: r = v; g = p; b = q; } return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)]; } function randomColors(total) { var i = 360 / (total - 1); // distribute the colors evenly on the hue range var r = []; // hold the generated colors for (var x=0; x<total; x++) { r.push(hsvToRgb(i * x, 100, 100)); // you can also alternate the saturation and value for even more contrast between the colors } return r; } var p = randomColors(MAX_COLORS); var result = []; for (var i = 0; i < MAX_COLORS; i++) { result.push({ primary: p[i], secondary: [p[p.length-1-i]] }); } return result; }());
Or for a high-quality alternative, go to burntcustards hand-crafted colours shop and pick up a FREE* colour_table.js that contains a whopping 32 unique and lovingly created colours.
known bug: Servers are removed from the list if a player with utf-8 chars like Ħ joins the game. Working on a fix
"Fix" released, people running server should download the new version of NodePAMaster from the OP. I admit all the "fix" does is filter out those pesky special chars. Something is wrong with how nodejs does a post request to pastats.com. No idea what though. Also note I massively simplified the required code for lobby.js. The new PA build makes that possible.
note to self, maybe helpful to others, list of the more prominent commands to setup a server on an aws ubuntu instance: Code: wget https://bitbucket.org/papatcher/papatcher/raw/a7b8b4febb491d6fc6c45155b238fd42ee34fcc8/papatcher.go sudo add-apt-repository ppa:duh/golang sudo apt-get update sudo apt-get install golang chmod +x papatcher.go go run papatcher.go <login> <download> sudo apt-get install libgl1-mesa-glx <modify server: /media/server-script/states/lobby.js, /media/server-script/sim_utils.js, /media/server-script/team_color_table.js> (also don't forget to install the ui mod "Unlimited Players" in pamm to get rid of client side limits) wget http://nanodesu.info/stuff/pa/mods/NodePAMaster.zip sudo apt-get install unzip unzip NodePAMaster.zip sudo add-apt-repository ppa:chris-lea/node.js sudo apt-get update sudo apt-get install nodejs byobu nodejs control.js also for aws I think I had to modify the servers security settings on the aws control panel to open up ports. I went with simply disabling the whole firewall
Ugh... I still can't force client/server to increase the player limit. Got colors working, some other stuff that I wanted, but everything involved with player limit just simply doesn't work. Changed new_game.js and lobby.js and I am still unable to add more than 10 players. Any help?
so a little less lazy hint is: /media/ui/main/new_game/new_game.js look for code that does comparisons with 10 and 5 and up those numbers as much as you want. That's the client side. Only the host needs this. If you made a mistake here the client will disable the "add slot" button when the limit is reached. /media/server-script/states/lobby.js has a value "MAX_PLAYERS". Change it to 9001. If you made a mistake here you will be able to click add slot, but nothing will happen as the server will refuse the request for more players /media/server-script/sim_utils has planet limitations
So I've been trying to get this to work, I'm able to get it to show up on pastats.com but when I try to connect I (slowly) get a failed to connect to server error. Using netstat -a I see that I am listening on port 6543 for 0.0.0.0 and I have set up port forwarding from my modem to my router to my pc. I have disabled/configured all firewalls and still no joy. I was able to connect to someone else's locally hosted online game just not my own. Any thoughts? I am simply running the PAManager which I presume runs the server automatically. Haven't had a chance to try and connect from a different computer yet though.
If it is listing on pa stats the server is running 100% You yourself get a connection error as well when connecting to yourself? Weird. I've not had any such issues, though all servers I have run where on linux servers. As a test you can put in 127.0.0.1 as the ip of your server in the NodePAMaster config, will it connect to that (obviously that would only work for you)?
Hmm, was able to give it a shot, was able to connect to the 127.0.0.1 (local_host) so maybe my dmz/portforwarding/firewalling is wrong. Can anyone else connect with the same pc as they are hosting the game on when using their global ip? Also do you always see two instances in the lobby browser? For me I see the local server as well as "custom: your moms house" for regions. (your moms house instead of the paStats by default).
The two instances are because you have the server on your local machine. One of them is from PA Stats, the other is the normal lan one. For players not in your LAN the normal lan one won't be there.
I just want to play some larger AI games, I have changed the new_game.js like you said, also lobby.js but still dosent let me create more than 10 slots. So I must be missing something.
No, those are the only 2 issues. Are you sure you modified the lobby.js of the server you are playing on? Is it not reacting to the add slot button or is it not allowing you to click it in the first place?