SPACE-NERDS-IN-SPACE(6)
๐ NAME ๐
okay so this is the manual page for SPACE-NERDS-IN-SPACE(6), and the main character is snis_client โ a Multi player cooperative star ship bridge simulator (client). ๐ซ
๐ SYNOPSIS ๐
snis_client [ OPTIONS ]
๐ DESCRIPTION ๐
snis_client` is the client process for the game Space Nerds In Space, which is a multiplayer starship bridge simulator. The server process simulates the game universe and processes input data from client processes and sends updated game state information to client processes. ๐ฐ๏ธ
The serverhost parameter is the hostname of the host running the ssgl_server game lobby process. The shipname parameter is the name of the ship in the game universe to which the client should connect (if the ship does not exist, one is created). The password is the password for the ship in the game.
๐จ Security tea: this is an insecure "password", transmitted in plaintext. Not encrypted, not cute, not private.
The first client on a ship establishes a ship name and password, subsequent clients join the ship. (Mistyping either the shipname or the password will result in a new ship being created with the wrong name/password.) ๐ญ
๐ Examples ๐
- Ordinary invocation:
snis_client
- Connect to a remote
ssgl_server, start up in fullscreen mode, and skip the process launcher screen:
snis_client --lobbyhost mycloudserver.example.com --fullscreen \
--no-launcher
- Connect to a remote bare
snis_serverinstance on port20000with no lobby and nosnis_multiverse:
snis_client --nolobby --no-launcher --starship Enterprise \
--pw tribbles -s myserver.example.com -p 20000
๐ OPTIONS ๐
okay bestie, here is the whole flag menu โ yes, all of it, no skipping. ๐ซถ
--acknowledgmentsโ Prints out acknowledgments and license information and exits. ๐-rx:y,--aspect-ratiox:y โ Specify a requested aspect ratio. By default, the window manager is queried to determine the display dimensions, and the aspect ratio is made to match. Other arbitrary aspect ratios may be specified. This may be desirable if you have a display that is significantly different from the display the game was designed on (16:9). Common aspect ratios (circa 2015) are5:4,4:3,16:10and16:9(according to wikipedia). The values specified forxandymust be integers greater than zero and must be separated by a comma or a colon. Specifying an aspect ratio will disable the--fullscreenoption. > โ ๏ธ Note: you may experience some problems with widget and text placement with aspect ratios significantly different than16:9.-A,--allrolesโ Thissnis_clientshould be able to display all roles. ๐-C,--commsโ Request this client process support the COMMS (communication) role. ๐ฌ--debugโ Request this client process support the DEBUG role. ๐-E,--engineeringโ Request this client process support the ENGINEERING role. ๐ง-f,--fullscreenโ Use the full display, with no window borders. This option is ignored if the--aspect-ratiooption is also specified. ๐ฅ๏ธ-jjoystick-device,--joystickjoystick-device โ Specify the joystick device file to use. Typically something like/dev/input/by-id/something-or-other. ๐น๏ธ-J,--projectorโ Request this client support the PROJECTOR role. ๐ฝ๏ธ-M,--mainโ Request this client process support the MAIN SCREEN role. ๐-mm,--monitorm โ If your system has multiple monitors, the--monitoroption allows you to specify which one you want to use. It takes an integer argument, with0being the first monitor,1being the second, etc. The default monitor may be designated by-1(or by omitting the--monitoroption entirely). > ๐ NOTE: this option is broken sincesnis_clientwas converted from GTK2 to SDL2.-N,--navigationโ Request this client process support the NAVIGATION role. ๐งญ-lhostname,--lobbyhosthostname โ Specify the hostname or IP address of the machine running thessgl_servergame lobby. ๐-L,--nolobbyโ Do not use the lobby server. This option requires that the--serverportand--serverhostoptions be used and that the--lobbyhostoption is not used. It also requires that the--starshipand--pwoptions be used as the network setup screen will be skipped. It also requires that thesnis_serveryou will be connecting to was started with the--portand--nolobbyoptions. ๐ซ--no-launcherโ Suppress the SNIS process launcher screen that appears whensnis_clientstarts up. If you are only running thesnis_client, and other processes are all on another machine, what appears on the launcher screen is superfluous. If you are using thesnis_launcherscript to start SNIS processes it uses this flag when starting SNIS client, assnis_launchercan do everything thesnis_clientlauncher screen can do and more. ๐--no-texturesโ Do not load all the ordinarily used textures. Instead load the same small texture for every texture in the game. This can be useful when running stations that do not use textures on memory constrained systems. (E.g. NAV, ENGINEERING, DAMAGE CONTROL, SCIENCE and COMMS). This can save approximately400Mbof memory usage. ๐-S,--scienceโ Request this client process support the SCIENCE role. ๐ฌ-shost,--serverhosthost โ Specify the hostname of the server to contact. This option requires the--nolobbyand--serverportoptions are also used, and requires that the--lobbyhostoption is not used. ๐-pportnumber,--serverportportnumber โ Specify the portnumber of thesnis_serverprocess. This option requires the--nolobbyand--serverhostoptions are also used, and requires that the--lobbyhostoption is not used. ๐-nshipname,--starshipshipname โ Specifies the name of your space ship. Theshipnametogether with thepasswordidentify your space ship. ๐-Ppassword,--pwpassword โ Specifies the password to be used to connect to asnis_serverprocess. ๐--solarsystemsolarsystem โ Load the specifiedsolarsystemassets instead of the default assets. These are defined by"$SNIS_ASSET_DIR/solarsystems/*/assets.txt". ๐-g,--NAT-ghetto-modeโ In the event thatsnis_clientcannot connect tosnis_serverusing the IP addresses it gets fromssgl_server, take a wild guess that the reason is because of NAT, and take another wild guess that thesnis_serverprocess is probably running on the same host as the lobby server, and just use the lobby server's IP address, but the port number fromssgl_server, on the theory that it will work because of port forwarding. ๐ต๏ธ-a,--soundserverโ Request this client process support the SOUNDSERVER role. ๐--auto-download-assetsโ Automatically download art assets fromspacenerdsinspace.com. โฌ๏ธ-W,--weaponsโ Request this client process support the WEAPONS role. ๐ฅ-v,--versionโ Print the program's version number and exit. ๐ท๏ธ-q,--quickstartโ Allows connecting to the first entry inssgl_serverautomatically. This option is deprecated and will likely be removed soon. > ๐ซ deprecated era, bestie.-t,--trap-nansโ This option is for debugging floating point problems, and will cause the program to trap (crash) on divide by zero, invalid or overflow conditions instead of propagatingNaN(not-a-number) values through floating point calculations. ๐-x,--no-splash-screenโ Suppress the splash screen on start up. ๐ โโ๏ธ-ynumber โ Requested aspect ratio y dimension. This option is deprecated and will likely be removed. > ๐ซ also deprecated, no cap.
๐ธ ENVIRONMENT VARIABLES ๐ธ
SNIS_ASSET_DIRโ if set controls the directory from which sounds and 3D models are read. By default,"share/snis"is used. ๐SNIS_COLORSโ if set, the file$SNIS_ASSET_DIR/$SNIS_COLORSis read to obtain color information instead of reading the default file of$SNIS_ASSET_DIR/user_colors.cfgAdditionally, if$SNIS_ASSET_DIR/custom_user_colors.cfgexists it will be read instead of overuser_colors.cfg, as the latter is in danger of being overwritten by software updates. ๐จSNIS_SUPPRESS_RENDER_TO_TEXTUREโ if set, suppresses the use of OpenGL's render to texture feature even if the driver claims to support it. ๐งSNIS_SUPPRESS_MSAAโ if set, suppresses the use of OpenGL's MSAA feature even if the driver claims to support it. โจSNIS_SUPPRESS_RENDER_TO_FBOโ if set, suppresses the use of OpenGL's render to fbo feature even if the driver claims to support it. ๐ฆSNIS_AUDIO_DEVICEโ if set, manually selects an audio device. Ordinarily a default device is chosen. This variable allows the default device to be overridden. This value should be an integer between0and the number of sound devices you have minus one. You can see which audio devices you have by running"aplay -l", or"pactl list". Note: Text-to-Speech functionality (e.g. "the computer" within the game) will not honorSNIS_AUDIO_DEVICEas text to speech is implemented by an external program (eitherpico2wave(plusplayoraplay) orespeak) which figures out which sound device to use on its own. ๐ง
๐ FILES ๐
$XDG_DATA_HOME/space-nerds-in-spaceis a directory used to store various user defaults. If$XDG_DATA_HOMEis not set,$HOME/.local/shareis assumed. Old versions ofsnis_clientwould use~/.space-nerds-in-space. Seehttps://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html๐$XDG_DATA_HOME/space-nerds-in-space/default_ship_name.txtThis file preserves the ship name field between runs so that you do not have to re-type it each time in the login screen. ๐ข$XDG_DATA_HOME/space-nerds-in-space/role_defaults.txtThis file preserves the selected roles between runs so that you do not have to fill in the checkboxes each time in the login screen. โ$XDG_DATA_HOME/space-nerds-in-space/snis_ui_position_offsets.txtThis file preserves positions of UI elements if the user moves them and saves them. ๐$SNIS_ASSET_DIR/sounds/*.ogg, various audio files used by the game. ๐ต$SNIS_ASSET_DIR/models/*.stl, various 3D models used by the game. ๐ง$SNIS_ASSET_DIR/solarsystems/*/assets.txt, per-solarsystem art assets. ๐$SNIS_ASSET_DIR/replacement_assets.txtโ the glow-up file ๐ it lets you swap standard assets for your own. Each line holds exactly two filenames, separated by any combination of spaces and tabs. First filename = the original asset file name, e.g../share/snis/models/cruiser.stl, second filename = the replacement asset file, e.g../share/snis/models/my_fancy_model.obj. Comments beginning with#and blank lines are permitted, so annotate away bestie.
Ok but listen, rn this asset replacement system only works for textures, ship models and sounds โ no cap. And note that replacement models should be similarly scaled and oriented as the original models. Normally the orientation should be such that the positive X axis is forward and the positive Y axis is up. Some models may deviate from this (e.g. snis3006.obj) and have some compensation applied via ship_types.txt. Replacement models should have the same deviation in orientation. โจ
Note: likely this system does not yet work well when SNIS_ASSET_DIR has a value that deviates from the default. ๐
$SNIS_ASSET_DIR/joystick_config.txtand$SNIS_ASSET_DIR/custom_joystick_config.txtโ the joystick configuration files, your controller's whole personality ๐ฎ Ifcustom_joystick_config.txtexists, it will be used, otherwisejoystick_config.txtwill be used. If you wish to customize the joystick configuration, you should start by copyingjoystick_config.txttocustom_joystick_config.txtand modify the latter. Like, important: thejoystick_config.txtfile is in danger of being overwritten by software updates, whilecustom_joystick_config.txtis not. Protect your work, queen ๐.
The format of these files are as follows.
- A
device:line begins the configuration for a new device (i.e. a particular kind of joystick). The device names on thedevice:lines are regular expressions which should match the names of the devices as they appear in/dev/input/by-id/*. - A "mode" is a name or a number that refers to a terminal (screen) in the game. The modes are described in comments in the joystick config file example below.
- An
axisline defines how an axis is to be interpreted for the current (last specified) device by mapping the axis to a "function" (defined below). Optionally, an axis may also specify a deadzone value (default is6000), a range in the axis which will have no effect. If you do not want a deadzone (as is common for throttle controls), specify the deadzone as0. - A
buttonline defines how a button is to be interpreted for the current (last specified) device by mapping the button to a "function" (defined below). - A "function" is one of several predefined words:
yaw, roll, pitch, phaser, torpedo, missile, weapons-yaw, weapons-pitch,
damcon-pitch, damcon-roll, throttle, warp, weapons-wavelength, damcon-gripper,
nav-engage-warp, nav-standard-orbit, nav-docking-magnets,
nav-attitude-indicator-abs-rel, nav-starmap, nav-reverse, nav-lights,
nav-nudge-warp-up, nav-nudge-warp-down, nav-nudge-zoom-up, nav-nudge-zoom-down,
weapons-wavelength-up, weapons-wavelength-down, nav-change-pov, eng-preset-1,
eng-preset-2, eng-preset-3, eng-preset-4, eng-preset-5, eng-preset-6,
eng-preset-7, eng-preset-8, eng-preset-9, eng-preset-10, eng-shield-toggle,
eng-deploy-flare, left-arrow, right-arrow, up-arrow, down-arrow, sci-left-arrow,
sci-right-arrow, sci-up-arrow, sci-down-arrow, sci-next-target, sci-prev-target,
cycle-station-forward, cycle-station-backward
And here's the example file in all its glory, verbatim, comments and all ๐ซถ:
#
# Joystick config file for Space Nerds In Space
# The code that reads this file is in joystick_config.c
#
# If you add any new joystick configs to this file, please
# consider forwarding the new config to stephenmcameron@gmail.com
#
# The modes are as follows:
# (See DISPLAYMODE_* #defines in snis_packet.h)
#
# mode main - main screen
# mode navigation - navigation
# mode weapons - weapons
# mode engineering - engineering
# mode science - science
# mode comms - comms
# mode demon - demon screen
# mode damcon - damage control
# mode all - all screens
#
# Instead of names, you may also use numbers
#
# mode 0 # means the same as mode main
# mode 1 # means the same as mode navigation
# mode 2 # means the same as mode weapons
# mode 3 # means the same as mode engineering
# mode 4 # means the same as mode science
# mode 5 # means the same as mode comms
# mode 6 # means the same as mode demon
# mode 7 # means the same as mode damcon
# mode 9 # means the same as mode all
#
# You can set the mode by itself, or on lines that also set axis or button functions.
# Once a mode is set, it remains in effect until you change it again.
#
device:usb-ยฉMicrosoft_Corporation_Controller_05EB4AD-joystick
# main screen
mode main axis 3 roll
mode main axis 4 pitch
mode main axis 0 yaw
mode 0 button 3 phaser
mode 0 button 2 torpedo
mode navigation
axis 3 roll
axis 4 pitch
axis 0 yaw
mode weapons
axis 3 weapons-yaw
axis 4 weapons-pitch
axis 0 weapons-yaw
mode damcon
axis 3 damcon-roll
axis 4 damcon-pitch
button 1 damcon-gripper
button 0 damcon-gripper
mode 2 button 3 phaser
mode 2 button 2 torpedo
device:usb-Thrustmaster_TWCS_Throttle-joystick
# main screen
mode 0 axis 2 throttle 0
mode 0 axis 5 yaw
# navigation
mode 1 axis 2 throttle 0
mode 1 axis 5 yaw
# weapons
mode 2 axis 5 weapons-yaw
mode 2 axis 5 damcon-roll
device:usb-Thrustmaster_T.16000M-joystick
# main screen
mode 0 axis 0 roll
mode 0 axis 1 pitch
mode 0 axis 2 yaw
mode 0 button 0 phaser
mode 0 button 1 torpedo
# navigation
mode 1 axis 0 roll
mode 1 axis 1 pitch
mode 1 axis 2 yaw
# weapons
mode 2 axis 0 weapons-yaw # yaw, not roll, weapons doesn't have roll
mode 2 axis 1 weapons-pitch
mode 2 axis 2 weapons-yaw
mode 2 button 0 phaser
mode 2 button 1 torpedo
# damcon
mode 7 button 1 damcon-gripper
mode 7 button 0 damcon-gripper
mode 7 axis 0 damcon-roll
mode 7 axis 1 damcon-pitch
mode 7 axis 2 damcon-roll
Kind of a lot, I know, but like โ all of this is still somewhat preliminary and the format of this file will likely change ๐ญ so don't get too attached to it.
/dev/input/by-id/*โ the joystick device nodes. That's where thedevice:regexes go looking ๐/dev/input/event5โ the rumble effect device. Yes, it rumbles. Iconic./tmp/snis-natural-language-fifoโ a named pipe which the client reads from. Anything sent into this pipe is forwarded tosnis_serveras a natural language request. This is useful for sending the output of a speech recognition system tosnis_server. So like, you can literally just talk to your spaceship ๐ฃ๏ธ๐ซ/tmp/snis-demon-fifoโ a named pipe which the client reads from. Anything sent into this pipe is forwarded tosnis_serveras a command to be run on the demon screen. Spooky little pipe, love that for it ๐$XDG_DATA_HOME/space-nerds-in-space/snis-keymap.txtโ the keyboard remapping configuration file โจ๏ธ
The format of the keyboard remapping file is as follows:
Lines beginning with a # are comments.
Key mappings are defined by lines of the form map stationlist key action
Valid actions are:
none, down, up, left, right, torpedo, transform,
fullscreen, thrust, quit, pause, reverse,
mainscreen, navigation, weapons, science,
damage, debug, demon, f8, f9, f10, onscreen,
viewmode, zoom, unzoom, phaser, rendermode,
keyrollleft, keyrollright, keyschiball_yawleft,
keysciball_yawright, keysciball_pitchup,
keysciball_pitchdown, keysciball_rollright,
keysciball_rollleft, key_invert_vertical,
key_toggle_frame_stats, key_camera_mode, key_page_up,
key_page_down, key_toggle_space_dust,
key_sci_mining_bot, key_sci_tractor_beam,
key_sci_waypoints, key_sci_lrs, key_sci_srs,
key_sci_details, key_weap_fire_missile,
key_space, key_robot_gripper, key_demon_console,
key_toggle_external_camera, key_increase_warp,
key_decrease_warp, key_increase_impulse,
key_decrease_impulse, key_engage_warp, keyreverse,
key_docking_magnets, key_exterior_lights, key_standard_orbit,
key_starmap, key_sci_next_target, key_sci_prev_target
Valid keys are: a-z, A-Z, 0-9, and most printable characters. Keypad numerals 0-9 may be specified as kp_0 through kp_9, and function keys f1 through f12 can be specified f1 through f12 (obviously). In addition the following strings may be used to specify the corresponding keys:
space enter return backspace delete
pause scrolllock escape sysreq left
right up down kp_home kp_down
kp_up kp_left kp_right kp_end kp_delete
kp_insert home down end delete
insert
stationlist is a comma separated list of stations for which the action and key should be associated. Valid station names are as follows:
mainscreen,
navigation,
weapons,
engineering,
science,
comms,
demon,
damcon,
fonttest,
introscreen,
lobbyscreen,
connecting,
connected,
network_setup,
Additionally, the word all may be used to indicate the key-action assocation should be in effect on all stations. One word and it's everywhere, main character energy fr ๐
$SNIS_ASSET_DIR/custom_user_colors.cfgโ if it exists, allows customizing of the colors of nearly all UI elements ๐จ If it does not exist,$SNIS_ASSET_DIR/user_colors.cfgis used. If you wish to customize the colors, start by copyinguser_colors.cfgtocustom_user_colors.cfg. The file contains comments describing its format. In brief, there are three types of lines:- A comment is a line beginning with a
#or containing only whitespace, and is ignored. - A
colorline begins with the wordcolor, which is followed by a user supplied name (eg:purple) then a space, then a color definition which is a#followed by 2 hex digits for each of red, green and blue, so, for example:
- A comment is a line beginning with a
color purple #ff00ff
- Finally, lines to change the colors of ui-components are of the form:
ui-component color
where ui-component is a 'magic word' identifying one of the ui components (see comments in $SNIS_ASSET_DIR/user_colors.cfg) and color is either a word defined in a prior color line, or else a color specification of the form #rrggbb where r, g, and b are hex digits. For example:
nav-button purple
nav-slider #00ff00
Custom hex colors, in my UI? It's giving art school, it's giving aesthetic, it's giving slay ๐๐
โจ SEE ALSO โจ
okay bestie, when you're done here, go peek at these other pages โ they're literally the rest of the friend group:
๐ GOOD LUCK ๐
You'll need it.
likeโฆ genuinely. godspeed, babe. ๐ญ๐
๐ AUTHOR ๐
Written by Stephen M. Cameron. (An icon, fr fr. ๐ซถ)
okay that's the whole page! it's filed under snis_client, dated MARCH 2025, and it's the SPACE-NERDS-IN-SPACE(6) manual page. mwah ๐โจ
๐ฆ where this page comes from
- nixos 26.05: snis 1.0.9
- nixpkgs unstable: snis 1.1.1
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms