[GAME] Space Nerds In Space
edited August 2013 in Space Nerds in Space
Description: Space Nerds In Space is a cooperative multiplayer networked starship simulator for linux inspired by Artemis Bridge Simulator. The idea is you get several of your friends together with their computers in a room with a projector. One computer runs the central server simulation of the game's universe. Each player's computer acts as a station on a simulated starship. For example, there are stations for Navigation, Weapons, Engineering, Communications, Damage Control, and the "Main View" (an out-the-window 3d rendering.)
(from the SNIS website)
Linux $Free - Compile from source code
In development - Source Code Available - Playable - No compiled binaries yet
In development - Source Code Available - Playable - No compiled binaries yet
It's called Ship-Not-Even-Wrong
Here's the source code: https://github.com/smcameron/opencscad
Unfortunately, this breaks compatibility with devices that use OpenGL ES. A limited client is being worked on for using these devices as stations but not the main screen. You will need a full Open GL compatible system to run as the main screen, such as a PC.
This forum seems to be the best source for information about the game unless you know how to read the code from GitHub. Anyway, my question was related to the GM screen and if there was a tutorial on how to run a mission or create missions? I'm also interested in any server tutorials. I can easily start the server from the client screen but is there a way to have it start on the same port each time so I can have remote clients connect through the firewall?
I know, a lot for a first post, but one last question. Do you have any problems if I make role specific tutorials and post them in YouTube? They would mainly be for the benefit of my role playing group but might be of assistance to others interested in SNIS too.
Again, thanks for putting this out there for people to play.
So the GM screen has got some problems. The main one is that it was designed back when the game was still 2D, and now that the game has a proper 3D universe to romp around in, the GM screen needs some work, as it remains fundamentally 2D, unfortunately.
That being said, I will try to explain a little bit of how to use it. I haven't made a video about it because a lot of the things that it does are sort of experimental hacks (it started life as a debugging screen, really.)
But, here is a quick guide to the SNIS "DEMON" screen (it's called that because you're sort of like Maxwell's Demon, mucking about in the universe.)
First thing to know, you can type "help" into the Demon screen's command box to get a reminder.
Here are the commands you can type into the demon screen's command box:
MARK -- MARK LOCATION WITH A NAME
NAME -- NAME CURRENTLY SELECTED GROUP OF OBJECTS
ATTACK -- ATTACK G1 G2 - COMMAND GROUP G1 to ATTACK GROUP G2
GOTO -- COMMAND SELECTED SHIP TO GOTO NAMED LOCATION
PATROL -- NOT IMPLEMENTED
HALT -- NOT IMPLEMENTED
IDENTIFY -- SELECT NAMED GROUP
SAY -- CAUSE CURRENTLY CAPTAINED SHIP TO TRANSMIT WHAT YOU LIKE
CLEAR-ALL -- DELETE ALL OBJECTS EXCEPT HUMAN CONTROLLED SHIPS
LUA -- RUN SPECIFIED SERVER-SIDE LUA SCRIPT
AIDEBUG -- TOGGLES AI DEBUGGING INFO
SAFEMODE -- TOGGLES SAFE MODE (prevents enemies from attacking)
HELP -- PRINT THIS HELP INFORMATION
ENSCRIPT -- SAVE (PARTIALLY) UNIVERSE STATE TO LUA SCRIPT
So, the "attack" command refers to named groups that you create with the "name" command. The idea is you select some group of ships, give the group a name with the "name" command, select some other group of ships, give them a name, then command one group to attack another. Granted it's a little cumbersome -- like I said, this was really just a debug screen.
The "clear-all" command will wipe out all the objects from the universe (i.e. in case you want to make your own.)
"safemode" will prevent computer controlled ships from deciding to attack player controlled ships (if the ships have already begun attacking, safemode will not make them change their mind.) Actually safemode is a toggle. Typing it once turns it on, typing it again turns it off -- there is no indication currently of which mode it's in, but it starts off in the "off" state.
There is a "captain" button. if you select the captain button, then select a ship with right mouse button, you'll see a big vibrating red circle around it. You can steer and drive the ship with arrow keys, and shoot the ships phasers and torpedoes with the on screen buttons on the left side of the screen. This worked reasonably well in 2D, it really doesn't work at all in 3D.
The "planet", "starbase", "asteroid", "nebula", "monster" buttons on the left side allow you to place these items into the game ("monster" probably doesn't work or do anything good at the moment.) The idea is you select the button, it turns white, then you use the left mouse button to sprinkle these items into the galaxy. You only get to control 2 axes, the 3rd axis is more or less randomly selected within some band. This band is wide enough that you cannot count on dropping a starbase near a player ship, for example, as it may appear quite a long ways above or below them. This is another item that worked better in 2D than it does in 3D.
If for example, you use "clear-all", then the buttons above to place various things around the universe how you like, you can then save this configuration with the "enscript" command, which will create a Lua script to recreate this configuration. For example, "enscript blah.lua" will create the file "BLAH.LUA" in share/snis/luascripts with a bunch of commands to add all those objects into the universe in their current positions. It does not save everything (for example, it does not save the mental state of various ships -- that they were in the midst of attacking each other, and that sort of thing -- just their locations.)
To run a lua script (which must live on the server in share/snis/luascripts, and have an all caps filename like SOMETHING.LUA, type "lua something.lua" into the demon screen command box.
You can see a few examples of lua scripts in share/snis/luascripts. The game doesn't rely on them too much for ordinary game mechanics, the lua scripts are intended to support creating scenarios. It remains to be seen how well fleshed out this API is, as there hasn't really been much done in the way of providing scenarios. The Lua API is described here in lua-api.txt (here: https://github.com/smcameron/space-nerds-in-space/blob/master/lua-api.txt )
The identify command, iirc, causes a previously "named" group to flash, so you can tell which ships are part of that named group.
To move a ship, or group of ships (or other objects), select them (either individually by right clicking on them, or by drawing a rectangle around them by right-click-dragging). Each time you select a ship, it is added to the currently selected ships. Selecting a ship a 2nd time de-selects it. Hitting the "select none" button on the left side of the screen de-selects everything. To move them, middle click and drag. Again, this worked a lot better back when the game was 2D.
That's about it for the "demon" screen, I guess. But feel free to ask.
As for starting the server with a fixed port number... hmm. Currently the snis_server portnumber is chosen by this bit of code in snis_server.c
* choose a random port in the "Dynamic and/or Private" range
* see http://www.iana.org/assignments/port-numbers
port = snis_randn(65335 - 49152) + 49151;
snis_log(SNIS_INFO, "Trying port %d\n", port);
sprintf(portstr, "%d", port);
In other words, it is chosen randomly. You could change that port = snis_randn(...) to whatever you want. Now that you mention it, I should provide a way for the player to control that, maybe via a command line switch or environment variable. I made a bug to track this issue:
If you want to make videos, please, by all means go right ahead. You should probably mention the date when the video is made, as things tend to change over time, and working on this game is kind of my long term hobby at this point. At some time I ought to get around to making the demon screen work in 3D better than it currently does, for example.
Hope that helps. BTW, another place SNIS discussion occurs is here:
Or, if you want to read the man pages without installing, after cloning from github:
nroff -man < snis_server.6 | more
nroff -man < snis_client.6 | more
nroff -man < ssgl/ssgl_server.6 | more
See the man page for snis_server and snis_client and the README.
I have resisted the urge to update the assets in the main repository
because I don't want to create a lot of churn as I keep dinking around
with things. Also, at some point, the art assets should probably be
separated from the code. I've also been thinking about how to
distribute those assets. I don't have a very good answer for that yet.
Nevertheless I have created a new repo just for assets. https://github.com/smcameron/space-nerd ... ace-assets
a recent commit, I have at least separated out the assets that define a
"solar system" to some extent. These assets are 1) planet cubemap
textures, 2) central "star" texture, and 3) skybox cubemap textures. I
have created a simple specification for such a combination of textures
which now lives in share/snis/solarsystems/xxx/assets.txt where "xxx" is
the name of the solar system in question. By default, there is a
"default" solar system, which is the same one that's been in the main
space-nerds-in-space repository since the beginning. I've created a new
solarsystem, "tau-scorpii", which is in the new repository,
space-nerds-in-space-assets. Copying the tau-scorpii directory into
share/snis/solarsystems on all your SNIS clients and setting
SNIS_SOLARSYSTEM=tau-scorpii before invoking quickstart (or using the
--solarsystem option of snis_client) will make it use the new solar
Here are some pics:
Those screenshots are gorgeous.
Now, I just have to update my build/package scripts for the new repo so I can get the new assets.
Tried on VirtualBox with 3d Accelleration turned on, Debian 8 64Bit, Hosts: Windows 7 & 8.1
$ ulimit -c unlimited
$ ./quickstart # or however you're trying to start the game
-- presumably segfault happens, hopefully leaving a core file since ulimit -c unlimited is done
$ file core # this should tell you which executable died (presumably snis_client, but maybe snis_server)
$ gdb -c core ./snis_client # or ./snis_server -- or whatever cored
and then let me know what the output of the 'bt' command is.
possible also try:
> info threads
> thread *whichever thread number*
to get backtraces for other threads -- but I think it should pick the right thread by default so long as things aren't too messed up.
However, the natural language processing still needs a lot of work to be able to understand that say, "twenty five" means "25". So while you can type in "turn left 10 degrees", and it will work, saying the same thing, even if the recognition works perfectly will probably be like typing in "turn left ten degrees", which the natural language code won't understand (doesn't know that "ten" is 10.)
Which uses the google servers to process the speech. However (maybe due to my dutch accent) it had a hard time recognizing anything. I tried something sentences like "Computer, set heading to 200", but it produced something useless 70% of the time.