By Ryan Sandor Richards
Solace requires two things to compile and run:
- Java Runtime Environment and Compiling tools (version >= 7)
- Apache Ant
If you are running a newer version of Mac OSX you're in luck because both of these requirements are already met, if you aren't then you can download java at http://java.sun.com/, and download ant at http://ant.apache.org/
So all those fancy things I mention in the mission statement aren't quite done yet. For the time being I am using flat files to store user accounts and game messages.
Here is a list of the directories and files in the root of the repository and what they all contain:
build.xml- The ant build scriptsolace/- Root source directorydata/accounts- user account flat filesdata/messages- static game messages such as the MOTDdata/config- various configuration files
From the root directory of the repository type ant run. This will run the
ant build script (build.xml), compile the java source files, package them into
a jar file (build/jar/Solace.jar) and execute the jar.
Easy peasy! Here are the 4 major build targets defined in the build.xml file:
clean- Cleans all build files including the jarcompile- Compiles all java source filesjar- Builds the jar filerun- Executes the game server
By default the server beings running on port 4000, you can pass a custom port number by executing the following command:
java -jar build/jar/Solace.jar <your port>
Please note that the port must be all numeric and it is suggested that you use
a port greater than 2000 to avoid conflicts with standard system ports.
To connect and "play" the game use any mud client or even telnet. To use telnet
just type telnet localhost 4000 and you'll connect to the game.
Solace can also be built as a Docker image and run in a container. To build the image, change to the repository's root directory and run the following command:
sudo docker build -t rsandor/solace .
Once the image is built, you can run it like so:
sudo docker run -d --name solace -p 4000:4000 rsandor/solace
Note that if port 4000 is not available on the host machine you can simply
choose to expose the container's port to any port you wish.
In 1998 two things happened... well more than two things, but two things happened to me, anyway. The first was that I entered High-school as a doe-eyed freshman, and the second was that I discovered the wonderful world of Multi-user Dungeons (MUDs).
Shortly after discovering MUDs I knew I wanted to make one. So I set out on a short but educational journey and convinced my school's systems administrator to allow me to learn linux and run a MUD on our school server. This did not last very long and I was set back a bit. When I finally got "okay" at linux I figured out how to install it at home and got a simple Rom 2.4 derivative running on my home machine.
But it was high-school, and like other folks I got caught up in all the hormones, band-practices, soccer-games, and new projects like one is supposed to. My MUD was not to be, well not to be any time soon...
Before college I decided to pick up Java so I'd be prepared for my classes and every time I used the wonderful language I found myself wanting to go back to my old high school dream of building a MUD. I learned other languages and build many other projects. But I didn't really give making a MUD a good go.
Ten years later in 2008 I came to Boston for interviews, to keep myself sharp with java I decided to start a simple project on my aged and wise Powerbook G4. When I couldn't immediately come up with something clever to code I thought back long and hard (but hardly long). Within a moment it came to me: "Damn it, Ryan!" my inner voice exclaimed "It's about time you started working on that MUD!" And thus was born the Solace MUD Engine. A dream from ten years ago, now packed with experienced goodness!
The project is still not very well developed but a lot of the key features are in place and come heaven or high-water I intend to at least get a single server running the game up before I am dust.
So check it out, use it, play with it (it doesn't do too much), extend it, start with it, scrap it, rewrite it, or ignore it. I don't mind to much but I felt like it was worth getting out into the interwebs! The project is a labor of love and I took great care while I was coding it on those cold November days in Somerville.
The intent of this project is two fold: create a MUD code base, and do it in the most elegant way possible. This means I am not only creating a "game engine", but an elegant and nice game engine. I should try to use as much of the object oriented paradigm to make it easy to extend the game and add functionality.
The problem with older code bases is that they were a hard to mutate. If you wanted to add/change ANSI color code, for instance, you had to change about six different files in three places each. This made being a MUD coder quite a pain in the keester.
Also most of the older code bases are in C/C++, which is like a double whammy. Instead of focusing of improving game play, may coders spend their time tracking down seg faults, bus errors, and a slew of other oddities that come from using a system level programming language.
Also, in recent years, universities have began to teach Java more prevalently than they do C/C++. This means that the current and next generation of would-be MUD coders are probably not going to be too familiar with C. We need a code base that is up to snuff and will provide a rich framework upon which modern coders can create newer and better MUDs.
By utilizing Java and sound OOD principals, along with newer technologies such as XML and MySQL/Hibernate it is my hope that Solice will be a code base that brings MUD programming out of the "dark ages" and into the modern coding world.
Ryan Sandor Richards Friday November 28th, 2008 Somerville, MA
MIT