Friday, June 26, 2015
The perspective of a four-year-old: "Why?"
Let's 'waste' this weeks blog post on an easy subject: Why?
"Why what?" is probably the question my rebelling four-year-old has to innocently offer in response, so let's get that out of the way right here and now.
"Why is it named Soulcage?" I needed a name that did not have 'tsos' in it so I wouldn't randomly wipe out our currently functional source code by habitual typing during the actual devving, and 'soulcage' seemed apt of the frustration and work that is ahead of me during this summer.
"Why bother?" There are a load of little and big reasons. While I kind of arbitrarily decided 'I am gonna do this ' at the start of June, the dream of a mystical rewrite has been around for far longer than that. In terms of documentation, the subject of 'TSoS Alpha 2.0' goes back at least three years when an immortal-only forum section was created for this purpose with some features we'd truly like to have if it happened.
"Why rewrite as opposed to fix and improve?" Most obviously, there's the fact that there have been a lot of cooks in our kitchen. I've blogged on that subject two times at this point, so I'm not going to go off on another rant (I hope!) but suffice it to say some bugs have been around for many years, even if they're invisible to mortals and merely result into spam for us immortals to sort through. I am currently the most active coder, and I simply do not know the internal logic of Smaug well enough to try and figure out meaning: the initially shoddy fixes I did to the forms code as of recent show very clearly that I lack an understanding of the bigger picture. My belief is that this understanding is more quickly gained by rewriting than by studying it, which is probably the argument that worked as a tipping point in favor of my starting this ordeal.
"Why doesn't Vandread explain things to you?" Nobody will ask me this, but I'm going to write it down anyway. He explains things a lot, but he has a job during the times I am around, and even then his ability to remember all of it is not perfect. It comes down to saying 'Oh, I saw Sally with your pen', and then you'll just give up on it because Sally is the biggest hoarder you've ever seen. :) Besides that, Vandread has on more than one occasion heard me rant about the codebase with thoughts he himself remembers having whilst trying to figure out the answers; all those things combined show that there is very little 'knowledge' of our codebase amongst current staffers. Sure, some of us know the commands really well, but the knowledge to change or improve is non-existent for as far practical terms goes.
"Why not?" Exactly. Why not?! My thoughts precisely. There are so many things to be gained from this project, most of which have been given up on and delegated to a 'it would be nice to have some day, but it won't ever happen'. Those ideas and dreams are at the core of Project Soulcage: things that a modern mud codebase ought to have to inspire joy not only amongst our players, but amongst our staff as well. There is also the fact that this codebase is based on an incomplete understanding of the WoT universe: the channeling system in particular is messy and incomplete.
The very first phase of Project Soulcage has been underway for nearly a month at this point. It has been extremely slow at places: at the time of writing this I have 'consumed' about one weeks worth of not touching it in order to pace myself after running face-first into the implementation of one issue that was very well on its way of souring me on this project: I ended up discarding 4 days of work after I went down the 'wrong' path. And despite my attempts to put Soulcage off my mind for a few days, my mind is still whirring with the thoughts and plans on how to tackle future phases in the most responsible and dependable manner!
What exactly is involved in this first phase and what other phases there are will be the subject of a future blog post. :)
Tuesday, June 9, 2015
The Chrysalis of Storms
As of late, the Sea of Storms has been going through yet another revival. It is as natural to us as breathing: be active for a while, work hard on the game, and then real life takes over and things slowly slump away again. My own return to this place was a happy accident combined with a few other immortals popping their heads in, and as such another period of arduous activity has been born. Truly, we are like day and night, a rhythm akin to the Wheel that keeps turning...
Okay, cheesey jokes aside. What's our plans? I could not tell you, dear readers, but I can tell you what _my_ plans are. At its core, I will do what I can to improve this game. Simple as pie...
In practice, this means I will try to address the problems I come across. As a coder, the majority of those things will involve coding, although I am not blind to our other issues. But I cannot solve everything alone, and I leave those things to those who are more qualified to deal with them, just like how I am amongst those more qualified to deal with The Code.
As for how I have been 'improving' the game... I want to draw your attention to the recently implemented 'whatsnew' command and that which was involved in its creation. When executed, it gives a small list of recently implemented changes to the codebase: that is, the majority of stuff that makes up skills, weaves, movement, crashes and so forth.
But it was not a simple command to implement. The Sea of Storms is an old game - it dates back to the 90s! - and it shows in all aspects of the game. Dozens of file backups, dozens of people who touched the code with varying degrees of code quality applied, many bugs and memory leaks.. all things considered, I often feel it is a miracle this game keeps running. (OK, it has been crashing way too often, but the majority of those were actually due to the machine cutting out! ... and hopefully we'll be able to get to the bottom of that sooner than later, too.)
Worse, the other internal ports we have available for the purposes of testing changes and building new areas ran on completely _different_ code than the public version everyone was playing on. They were created once upon a time, but not kept in sync, so nobody knew what bugs were hiding in those. All things combined, this means we were dealing with complete chaos. For example, only the public game would successfully start after one of those unexpected server reboots. This left our builders incapable of doing any work whatsoever.
Thus, what was done first was to find out the latest state of the code. This was placed into source control; I opted for 'git' because it is easy to modify to suit our needs. After that, the development version of the game was made to always mirror the latest modifications. This in turn required I re-work the antiquated Makefile to build the game, as well as consolidate our startup script to handle some issues it did not properly handle beforehand.
Okay, so I technobabbled you into oblivion at this point. Sorry! Generally speaking, all of this was intended to streamline development and make it easier for me, Vandread and other (future) coders to add to the code, test-deploy it to the server _and_ be able to look back in history to know who made which changes for whatever reason. In essence, this automates a lot of house-keeping that nobody ever did to begin with!
After all this was done and found to be working out as well as I was hoping for it to be, I moved our other ports of the game over to a similar structure as well, although these are (obviously) not subject to automatic updates. Rather, these will be manually triggered when we deem them ready. Tests are important, and you seriously do not want to suffer 3+ reboots in an hour because Kimadi is hunting down some obscure bug. :-)
At this point in time, everything has been stabilized, and there is finally a more-or-less consistent environment for us coders to work in. A lot of work with very little to show for it... other than a certain 'whatsnew' command. This command goes straight to the source control that I have set up and displays the summaries for everone to see.
Besides the fact that we now don't need the inconsistently maintained 'help changes' document any longer, it is my hope it will also serve as a gateway of transparency to the players that things are happening behind the scenes, even if it may take a while for the code to be considered stable enough to be subject to player abuse!
Not all work is sexy. Some things simply need doing. And if the the Sea of Storms is to escape its own cycle of being, we cannot afford to carry on as we did in the past.
Tuesday, November 20, 2012
The Role-Players New Groove
The Staff is, of course, dedicated to quality RP, and we're always on the lookout for areas where we can tweak things. Part of our recent batch of improvements is to add several new RP commands to be used in harmony with emote and pose. These commands are whisper, think, and feel (along with some changes to say and sayto). Some players who have been to other MUDs, may recognize these as commands often seen on RPI MUDs. This is no accident, as these commands are inspired by good experiences staff members have had over the years playing on other RPI MUDs.
Enough build up though, lets get into the nitty gritty! These new commands are often used in something called real-time RP. This style of RP is one where no order exists and characters/players react to the posts of others as they come. Length is not a focus, but descriptiveness is. An easy way to look at the difference between turn based and real-time is this: Instead of writing a large post with several actions and segments of dialogue, players will instead write smaller posts with less actions and more immediate dialogue to which the other players in the scene can quickly respond to. This allows for the flow of RP to be fast paced and immersive. You know, for things to actually happen in a reasonable amount of time.
Link: https://docs.google.com/a/tsosmud.org/document/d/16nor8LTqfrlTepST4yOflX63kuWqWrRrE_ZTs0VBHH4/edit
The link above shows a brief RP where a staff member used the new commands to animate both Master Varian of the Feast of Lights Inn and Lord Kiriak Riatin, a member of a leading Cairhien house. This scene took very little effort to run and moved at a very fluid pace. One can easily see the way pose/emote were used in conjunction with the say and whisper commands.
The last two commands, think and feel, are primarily for individual players to deepen their own role-play experience. The output from both of these commands display only to the player using them, along with any staff member that happens to be in the room--allowing them to have a better understanding of the characters and motivations if they are running an Event (for example). Players might be surprised how occasional use of these commands can change how they role-play their characters. I highly encourage everyone to give them a try at some point.
Wednesday, November 14, 2012
Winds of Change are Blowing
Friday, December 4, 2009
Guilds and Groups and Leaders
Monday, September 28, 2009
MUD Code Update Life-cycle
Sunday, September 13, 2009
Under the Hood of Our Kitchen Automobile
Just like almost all other muds in existence, the Sea of Storms runs by the grace of its volunteers. Most of the people inhabiting the mud today do not know those who started it, and I am one of those individuals. As such, the codebase I am toying with today has suffered 10 years of coding by different TSoS volunteers, and it shows.
It might even be said that Smaug is a crappy codebase from the beginning. Our version is well over 10 years old, and while we of course made our own modifications, the latest Smaug that was released has had bugs fixed and features added. Simply Smaug, without our realm-specific changes, is already a beast - no coder wants to venture into it if he values his sanity.
To give an idea of the things that many mud coders need to deal with, there is an abhorring lack of comments in the code, indentation exists in such a way that it tends to make the code more confusing, mysterious variable names, randomly hard-coded numbers, and oh, did I mention there are no comments? Think of a city where they speak a language you do not speak, and street signs are missing or beyond your ability to pronounce: the only way to get around would be to make your own map of sorts.
Especially for me, who never coded on a mud prior to joining the TSoS staff, it is really easy to get lost. Now that I am done with the city analogy, I will compare TSoS with a bowl of spaghetti. At the base you have Smaug, where every strand of pasta has a purpose but it is very hard to comprehend a bigger picture of how they all fit together. And when you get our own modifications, you can think of it as throwing some sauce into the mix, hiding even more from sight. The end result is very tasty, but to me, it feels as if I am preparing dinner while using someone elses leftovers. Mmmm, TSoS.
Take today's kitchen affairs for example... a player came to me and went 'yo, Kim my man. I can weary [[his]] ass off, but it is only my ass getting tired'. I went to investigate, and yup, somehow, weary had become a rather dull weave that didn't do much (besides tiring the weaver out). I quickly found the cause: yesterday, we had introduced some updates, including some new weaves. This required some changes elsewhere in the big file o' weaves, and numbers that basically define the importance of these weaves changed as a result. Oops.
Now, the Code is not supposed to check for any numbers in specific (they only rank the 'importance' of a weave), but one of our past coders had a moment of wisdom and decided that since refresh and weary were so much alike in effect, they should be very much alike in the code. Smaug isn't truly meant to turn weaves into such siamese twins, and using the number that signifies importance, he managed to make it possible to recognise a weary from a refresh weave.
Did all that go over your head? Don't worry, most people do not have the programmers mindset, and I figured it might be nice to explain a fair bit to those who do like to know how things work. But if you think this post is just pure junk, just log on @ tsosmud.org, port 7070, and send me a tell to inform me that I need to stop blogging.
Friday, September 11, 2009
The Thought Behind the ‘Algorithm’ Update
Well dreaming was moved back to its rightful place as a major talent. The scholar talent has been properly supported now with the ability to teach various languages such as old tongue or Ogier. Finally we modified our drunk code to affect posts. I know awesome right?
Wait… we also brought back gifted and strong channelers. In fact the very nickname to the patch was given in reference to the new formula that dictates flow strengths for channelers. I suppose that is the most important update, well that or the ability to finally post URLs containing & in them without double typing &. Nah, channeling is totally cooler so lets cover that.
Channeling has long been debated by mortals in its balance. Mostly you would have non channelers such as blademasters or soldiers denouncing weaves like wrap, airblind, and any of the more powerful weaves that essentially allowed channelers to pummel others in one on one combat. These complaints have always been responded to by channelers saying that all a non channeler had to do was bring support or simply not go toe to toe with a channeler. Which if you think about it seems a little like common sense. Still with the claim that channeling was to powerful, we still got requests to unlock the strong and gifted channeling talents.
I asked our new assistant coder Kimadi to give me a statement about the update for the players. Here it is: “The problem with the re-implementation of strong and gifted channeling strengths did not lie into making them possible - that was a few simple lines of code. The true difficulty lied in several aspects, the main aspect being our wish for a 'realistic' environment, which is something that is hard to describe by requirements yet easy for a human to recognize. We did not want people to distribute their flow points to gain very specific code-wise benefits while other matters would be neglected beyond any comparable realism. But on the other hand, restricting players was too much is another matter of concern - both for the purpose of playing, and the fact that even in the world of the Wheel of Time, there are those odd few people who defy the norm as we know it. In the end, both realism and oddities have become fully possible in the new system” – Kimadi
That pretty much captured the intent of the update in my opinion. However, I still haven’t really told you what we changed in channeling, so I’ll get to that now. In the olden days way way back in the before time there were gifted and strong channelers. These old players could allocate their flow strengths however they pleased the only system in place to moderate the maximum strength in each element was a rather wimpy little +1 extra pt required to raise a strength for every spot above 25. Today’s gifted and strong channelers must have a fair bit of balance to their builds. Just like in the books most channelers are proficient in more then just two flows and none really had an inability to do anything in one flow let alone two.
Without revealing the numbers involved in the formula I can say that if you have 26 or higher in your main flow then you can expect to have at least 9’s in your lowest. In the past it was 1’s so from the get go we’ve already balanced things significantly. In this patch we also fixed some of the flow skill requirements on fire weaves. The older numbers were higher then their earth and air counterparts and during testing we realized that these ‘slightly’ higher flow skill requirements equated to significant changes in male channeler builds. This was mostly due to their low flow skill modifier in comparison with their female channeling counterparts. This has allowed channelers to have variety in their weave selection. No longer will people be using the same three weaves in every situation.
Not a lot code was changed in all honestly. The real change has been the in the framework we’ve placed. With the new algorithm in place and new levels of channeling open we can begin to introduce new weaves. A project we are already working on. In addition new channeling talents and possibly a new way to use weaves in combination with other weaves will be implemented. Really this update marks the beginning of what will hopefully be a long line of successful updates to our code engine to support realism and roleplay for our players!
- Jeshin