SPACE-NERDS-IN-SPACE(6)

πŸ“¦ version 1.1.1, in nixos 26.05, nixpkgs unstable

πŸ’« SPACE-NERDS-IN-SPACE(6) πŸ’«

okay bestie, so you know snis_server? literally the most iconic multiplayer starship bridge simulator server to ever exist? yeah, we're getting into it. this is a section 6 manual page (Games), and it's giving main character energy. buckle up πŸš€βœ¨


✨ NAME ✨

snis_server β€” a multi player cooperative star ship bridge simulator (the server version, obvi) πŸ’…


🌈 SYNOPSIS 🌈

snis_server -l lobbyhost -L location [ -m multiverse location ] [ -n
servernick ] [ --enable-enscript ]

like, that's the whole vibe. keep scrolling for the deets 🫢


πŸ¦‹ DESCRIPTION πŸ¦‹

okay so snis_server is literally a server process for the game Space Nerds In Space, which β€” in case you didn't know β€” is a multiplayer starship bridge simulator. iconic. it simulates the entire game universe and processes input data from client processes and sends outputs back to those client processes. it's the whole backbone, no cap 🫑

the location parameter is used to tell one game instance apart from another one running on the same host (and yes, multiple snis_server processes can absolutely run on the same host, we stay busy). the location should be a short human readable string that uniquely identifies the game instance and it is required. and the lobbyhost? that's the hostname of the server hosting the ssgl_server process. boom, that's the lore πŸ’–

🌸 Examples 🌸

Note: normally, you shouldn't have to start snis_server manually yourself. it should either be started by snis_client, snis_multiverse, or by the snis_launcher script. but in case you want to start it manually for whatever reason, here are some examples. (you do you, bestie πŸ’…)
  • Ordinary invocation β€” the classic, the standard, the moment.
snis_server -l lobbyhost -L location -m multiverse-location \
     -n server-nickname
  • Bare snis_server β€” running a bare snis_server instance with no lobby and no snis_multiverse, allowing WAN connections from snis_clients on port 20000. living on the edge fr fr πŸ”₯
snis_server --allow-remote-networks -L location -s solarsystem \
     -n server-nickname --nolobby -p 20000

✨ OPTIONS ✨

okay this is the part you actually need, so pay attention bestie πŸ‘‘

  • --acknowledgments β€” prints out acknowledgments and license information and exits. shoutout to the legends 🫢
  • --allow-remote-networks β€” by default, snis_server will drop connections from any client originating from a different network, allowing connections only from clients on the same network, since it's primarily a LAN game. this option allows clients to connect from different networks. there's also a tweakable variable in the console called LOCAL-NET-ONLY, which this option sets to zero. so like, if you want the whole world in your lobby, this is your moment 🌍✨
  • -e, --enable-enscript β€” enable the "enscript" command on the Demon screen. this allows clients to create files on the server so you should probably leave this off πŸ’€ like, seriously, leave it off unless you really know what you're doing
  • -g, --NAT-ghetto-mode β€” if it happens that snis_server cannot connect to snis_multiverse using the IP addresses it gets from ssgl_server, this flag makes it take a wild guess that the reason for this is NAT, so that ssgl_server has the wrong IP addresses. and then it takes another wild guess that snis_multiverse is running on the same host as ssgl_server, and so it attempts to connect using the IP address of the lobby host and the port number it got from the lobby for the snis_server on the theory that the port number will work because of port forwarding. it's giving "chaotic but might work" energy πŸ™ˆ
  • -h, --help β€” prints a usage message and exits. the classic help me help you πŸ’β€β™€οΈ
  • -l, --lobbyhost β€” set the hostname at which the lobbyhost is running. the lobby needs a home okay 🏠
  • -L, --location β€” set the "location" to be used with the lobby server. this is just an arbitrary string for human consumption to differentiate one gameserver from another. and yes, it is required. no location, no game, periodt βœ‹
  • -m, --multiverse location β€” set the 'location' of the snis_multiverse server to connect to. snis_server will monitor the lobby looking for entries with game type of 'SNIS-MVERSE' (i.e. for instances of snis_multiverse) and with the location field set to the value specified by the --multiverse option. it's literally matchmaking but make it multiverse 🌌
  • -n nickname, --servernick nickname β€” specifies a nickname for this snis_server instance. this name will be transmitted to ssgl_server, and be visible in snis_client in the lobby, and in the output of lsssgl. basically, it's your server's whole identity ✨
  • --nolobby β€” this is for running a bare snis_server instance with no lobby (no ssgl_server) and no snis_multiverse. just you and the void, bestie 🫢
  • -p port-number, --port port-number β€” specify the port number to use for incoming connections from snis_client. if not specified, a port will be chosen randomly from the default range for dynamic ports, 49152 - 65535. let the universe decide 🎲
  • -r min:max, --portrange min:max β€” by default snis_server chooses a random port in the range 49152 - 65535 but you can specify another range with this option. this is useful if you're running behind a firewall and want to open up only a smaller range of ports. very considerate of you honestly πŸ”₯
  • -s solarsystem-name, --solarsystem solarsystem-name β€” specifies the solarsystem name. this is used to select what assets to use for skybox textures, planet textures and so on. the default solarsystem name is "default". pick your aesthetic 🌸
  • -t, --trap-nans β€” trap (crash) whenever certain floating point exceptions occur. this is for debugging erroneous floating point calculations that produce NaN (not a number) values, such as divide-by-zero, overflow, and so on. it's giving "let it crash so we can fix it" energy 😭
  • -v, --version β€” print the program's version number and exit. know your roots πŸ’œ

πŸŽ€ FILES πŸŽ€

the files this thing touches, bestie, they're important:

  • /dev/input/js0 β€” the joystick device node πŸ•ΉοΈ
  • /dev/input/event5 β€” the rumble effect device. yes, rumble, we love tactile feedback πŸ’₯
  • /usr/share/snis/sounds/*.ogg β€” contain the audio data used by the game 🎡
  • share/snis/luascripts/* β€” various lua scripts which may be run to implement scenarios or missions. okay so this part is important: the file names of luascripts must be uppercase β€” use ABC.LUA, not abc.lua. one level of subdirectories is allowed β€” XXX/ABC.LUA is permitted, but not XXX/YYY/ABC.LUA. if multiple subdirectories contain scripts with the same name, the first script encountered is executed. that is to say, if you have A.LUA, X/A.LUA, Y/A.LUA, Z/A.LUA, and you execute "a" from the demon screen, A.LUA will be executed. if A.LUA didn't exist, then X/A.LUA would be executed. you can differentate by typing, e.g. "z/a" on the demon screen to execute Z/A.LUA. the lore is deep, iykyk 🧚

🌈 ENVIRONMENT VARIABLES 🌈

  • SNISRAND β€” can be set to a random seed to affect universe generation. chaos theory but make it a video game 🌌
  • SNIS_ASSET_DIR β€” can cause the program to use a different directory to read various assets (models, sounds, etc.) from a different directory allowing easy substitution of all art assets. default is to use share/snis. dress your game up however you want πŸ’…
  • SSGL_PRIMARY_IP_PROBE_ADDR β€” if you're on a dual-homed machine with multiple network interfaces on multiple networks or on a machine that is on an isolated network that can't reach the internet, you may need to use this. by default snis_server assumes that the interface to listen for connections on is one that can reach 8.8.8.8 (Google's DNS server). no packets are transmitted to 8.8.8.8, it just queries the routing table to see what interface should be used to transmit there if we wanted to. if ssgl_server is not reachable by the same interface that can reach 8.8.8.8, or if there is no interace that can reach 8.8.8.8, then this variable can be set to any IP address on the network on which ssgl_server is reachable so that the correct network interface is chosen. networking is complicated, but you got this bestie 🫢

⭐ SEE ALSO ⭐

go check out the whole squad: snis_client(6), ssgl_server(6), snis_multiverse(6), lsssgl(1). they're all part of the friend group, they all matter πŸ’–


πŸ“ GOOD LUCK πŸ“

you'll need it.

(the manual said that, not me, but honestly? valid 😭)


πŸ‘‘ AUTHOR πŸ‘‘

written by Stephen M. Cameron. the icon, the legend, the moment. we stan 🫢✨


that's the whole manual, bestie. snis_server, the Feb 2025 version, with every single detail we could possibly squeeze in. now go forth and simulate some starship bridges πŸ’–πŸš€πŸ’…

πŸ“¦ where this page comes from