I kind of suck at writing documentation, but here's my attempt at describing how the latest version of GameSrv can be installed/configured/customized.

Skip to Installation, Configuration, Customization



On Windows, installation should be pretty straightforward for Win98 and newer (Win95 not supported, sorry):

  • Every supported platform will require the .NET framework 2.0
  • On some really old platforms (Win98 for sure, possibly WinME) the .NET framework 2.0 will require Internet Explorer 6
  • On Windows Vista and Windows 7 (and presumably any newer version to come) you'll need to copy sbbsexec.dll to your \Windows\System32 directory.
  • Also on Windows Vista and Windows 7 (and presumably any newer version to come) you should take care when picking where to extract the GameSrv archive to. These versions of Windows have increased security, so installing GameSrv to \Program Files will probably not work, so I'd recommend \GameSrv instead. Actually I recommend \GameSrv for any version of Windows, but the older ones don't matter so much

That should be it!


Linux will take a bit of extra work, due to the fact that some extra software is required, some of which must be compiled. Here's what I did on my Ubuntu Server 11.04 x86 VPS:

  • Install the prerequisites: sudo apt-get install build-essential dosemu libglib2.0-dev libmono-system-data2.0-cil mono-gmcs mono-runtime pkg-config
  • Extract dosutils.tgz, which has some useful old DOS utilities that may come in handy in DOSEmu: cd dosutils then tar zxvf dosutils.tgz then cd ..
  • Compile pty-sharp, which adds pseudo terminal support to mono: tar zxvf pty-sharp-1.0.tgz then cd pty-sharp-1.0 then ./configure --prefix=/usr then make then sudo make install
  • And lastly, create the user that GameSrv will run as: groupadd gamesrv then useradd -g gamesrv -s /usr/sbin/nologin gamesrv then chown -R gamesrv:gamesrv /gamesrv

I think that's all I did. If I forgot a step, or if things were different for your distribution/version, please let me know


Main Configuration

The main configuration for GameSrv is stored in config\gamesrv.ini. In the future I'll add additional documentation here, but for now just read the comments for each entry in that file.

Logon Process

The logon process (that is, the actions that occur after a user enters their username and password) is stored in config\logonprocess.ini. Again, documentation will probably be added here in the future, but for now just read the comments in the ini file.

Logoff Process

The logoff process (that is, the actions that occur after a user execute the LogOff menu command) is stored in config\logoffprocess.ini. Again, documentation will probably be added here in the future, but for now just read the comments in the ini file.

New User Registration

When a new user registers, only two questions are hardcoded into the system: Alias, which acts as their username, and password, which should be self explanatory! If you want any additional information from the user, you can add questions to the new user registration process by editing the config\newuser.ini file. I know I sound like a broken record, but there's no documentation here yet, instead read the ini file and look at the sample questions it contains.


Each door you want to run should have a unique ini in the doors sub-directory. There is a sample doors\_sample.ini you can look at to see how to setup the door. As with the rest of this section, further documentation is coming soon, so just read the sample (or look at the configuration for the other bundled doors).


Each menu on your system should have a unique ini in the menus sub-directory. The menus\main.ini has information describing the structure and parameters for the ini file.



Every prompt in the system (unless I missed some) can be configured by changing a file in the ansi sub-directory. At some point I'd like to list each file, and it's purpose, but for now just go and open them all and see what they say, and change them to your liking.


GameSrv ships with two really crappy default bulletins. You'll probably want to replace them, or remove them altogether if you don't want them. As you'll see when you look in the menus\bulletins.ini, they just use the DisplayFilePause action to display a file in the bulletins sub-directory, so it's easy to add/edit/delete ones if you want.


By default, all menus will display using the built-in canned menus (that were stolen from Shotgun PRO). If you want to display something more unique, you can put .ans files in the menus sub-directory, using the same name as the .ini file. So for example to customize the MAIN menu, create a menus\main.ans file.

You can also create different menus for each access level, so for example if you have an item on the main menu that only sysops with an access level of 100 can see, then you can create a menus\main.ans that everyone will see, but also create a menus\main100.ans that only users with access level 100 will see. Similarly if you have a reduced menu that twit users should see, you could create a third menus\menu0.ans.

MCI Codes

The ansis/bulletins/menus all support using MCI codes, which allow you to embed certain variables into the display. The currently supported codes are:

ACCESSLEVEL The current user's numeric access level
ALIAS The current user's alias
BBSNAME Your BBS name, as defined in the config\gamesrv.ini
DATE The system's current date, in short format
GSDIR The directory GameSrv is running from
MENUNAME The menu the user last loaded
NODE The node the user signed on to
OPERATINGSYSTEM The system's operating system
SYSOPEMAIL Your email address, as defined in config\gamesrv.ini
SYSOPNAME Your name, as defined in config\gamesrv.ini
TIME The system's current time, in short format
TIMELEFT The current user's time left for this call, in hh:mm:ss format

Additionally, every new user question can be accessed using the upper-case section name found in the config\newuser.ini file. So for example, a [RealName] section in the newuser.ini file can be accessed as REALNAME.

To use the codes, wrap them in { and } characters. So for example, {ALIAS} will display the user's alias

Each code also supports justification of short values. So for example, if you want to display the user's access level and always have it take up 3 spaces on screen, use {ACCESSLEVEL3} to left-align the text and pad the right side with spaces, or {3ACCESSLEVEL} to right-align it and pad the left with spaces.

When values are too long for the requested size, they'll be truncated. So for example, if you want to display the user's alias (which is 'rumpelstiltskin') and always have it take up 10 spaces on screen, use {ALIAS10} to truncate the end of the string leaving 'rumpelstil', or {10ALIAS} to truncate the beginning of the string leaving 'lstiltskin'. (Not that you'd probably ever want to truncate the alias so short, but it's just an example of how it works.)

Donations for Rick Parrish of R&M Software

Like something you see here? Consider donating to keep development alive!

(Please note that donations are not tax-deductible for income tax purposes.)

Thank you!