<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Jeremy&#039;s Blog</title>
	<atom:link href="http://www.jeremyprivett.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jeremyprivett.com/blog</link>
	<description>Programming and Life</description>
	<lastBuildDate>Wed, 05 May 2010 03:16:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Developing Again &#8211; The Story Up Until Now</title>
		<link>http://www.jeremyprivett.com/blog/archives/developing-again-the-story-up-until-now/</link>
		<comments>http://www.jeremyprivett.com/blog/archives/developing-again-the-story-up-until-now/#comments</comments>
		<pubDate>Wed, 05 May 2010 02:11:30 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[General Ramblings]]></category>
		<category><![CDATA[ComicShout]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[OmegaFlash]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.jeremyprivett.com/blog/?p=441</guid>
		<description><![CDATA[It&#8217;s certainly been a long time since I&#8217;ve felt motivated to post anything here. I generally don&#8217;t like talking about what&#8217;s going on in my life except in small blips, most of which are suitable for Twitter. Using this blog as an outlet to talk about just me or life in general feels like a [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s certainly been a long time since I&#8217;ve felt motivated to post anything here. I generally don&#8217;t like talking about what&#8217;s going on in my life except in small blips, most of which are suitable for Twitter. Using this blog as an outlet to talk about just me or life in general feels like a waste when there&#8217;s much cooler stuff I would rather be talking about. Those of you who are looking for life updates can get them from <a href="http://www.facebook.com/jeremyprivett">Facebook</a> or <a href="http://twitter.com/jeremyprivett">Twitter</a>. Those of you who are looking for information on the cool stuff that I&#8217;m working on, stick around.</p>
<p>I&#8217;ve finally decided that I&#8217;m going to take an active role in getting myself out of this almost year-long development-less funk that I&#8217;ve been in. I&#8217;ve been pouring over information and ideas, trying to come up with something that I could spend my time on and make a personal project of. I actually came up with a few. They&#8217;re all Omega Vortex projects from back when we were trying to bootstrap a software company by consulting. The projects never got enough attention because of the consulting and we started to enter the really nasty area of the recession, so the consulting projects also started drying up, leaving us without enough income to allow us to move forward &#8230;</p>
<p><span id="more-441"></span></p>
<p>Fast forward a couple months where we were wrapping up our last consulting gig as I was taking a job at <a href="http://www.highwinds.com">Highwinds</a> as a Systems Engineer. Presumably to Engineer some cool tools and systems to help make our collective jobs easier. If only I knew then what I was really getting myself into. Honestly, I&#8217;m glad I didn&#8217;t. I probably wouldn&#8217;t have been so eager to take the job. Not too long after I started, our more senior engineer and overall badass Systems Ninja (hi, <a href="http://www.lqx.net">Matt</a>!) got an offer he couldn&#8217;t refuse and decided to move on to higher places. It was about that time that my world turned upside-down.</p>
<p>With almost zero previous experience as a Linux SysAdmin, I started a journey that would lead me to a great wealth of knowledge, a much greater understanding of how our systems worked and interacted with each other, as well as roughly no amount of time to spend on any of my development projects. We went through several ups and downs as I came up to speed, learning everything I could about running our Linux systems and how all of our software worked, the way the whole deal was architected, and everything I needed to know to keep it all running. It&#8217;s a constant learning experience and I&#8217;m still picking up stuff as I go along, but I feel like I&#8217;ve come a very long way in a short amount of time and I&#8217;m far more comfortable on the command line now than I ever was even back when Linux was my primary OS on personal machines.</p>
<p>Since then, we&#8217;ve hired quite a few Linux folks. Less pressure is square on my shoulders now that we have more very capable people to help distribute the load. We&#8217;re making progress to working smarter and not harder, spending less of our nights in contests to put out fires and more time with opportunities to relax. Things are becoming increasingly stable which is giving me more free time during off-work hours to do whatever I want. At first, I took this time to goof off and not do a whole lot, because I hadn&#8217;t had the opportunity to do so in so long. Now, I&#8217;ve decided to transition back to active development work in my free time.</p>
<p>I&#8217;m sure those of you who follow me on Twitter <a href="http://twitter.com/jeremyprivett/status/13347729744">noticed</a> that I said I&#8217;ve officially started working on ComicShout and OmegaFlash again. That&#8217;s not all, and I&#8217;ll have a lot to say about these and other projects in future posts. In the meantime, you can keep track of what I&#8217;m working on via <a href="http://github.com/Atrophius">GitHub</a> and <a href="https://www.ohloh.net/accounts/Atrophius">Ohloh</a>.</p>
<p>The repositories on GitHub are very ugly at the moment. They&#8217;re essentially dumps of what was in the private Omega Vortex repositories as of last night. A lot of code that never got committed was lost on a few of these. Keep in mind that these projects didn&#8217;t get enough love, before. My plan is to fix that. My current focus for a while is going to be OmegaFlash, so don&#8217;t expect too much activity on the others for now. As I&#8217;m able, I&#8217;m going to start putting up more information on my vision and goals for each project at their respective GitHub wikis. Anyone who&#8217;s looking to contribute after I&#8217;ve put up more info, please fork away. I&#8217;ll be keeping an eye on forks and will quickly integrate good additions. Habitual good contributors can be given direct commit access to the repositories.</p>
<p>If I&#8217;ve got your interest, please keep an eye on the progress at GitHub and Ohloh. Also, keep an eye on this blog. I&#8217;m going to start putting up some high-level overviews of what I want to do with the projects. Until then, I&#8217;m interested to hear ideas and suggestions from all of you.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jeremyprivett.com/blog/archives/developing-again-the-story-up-until-now/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ArrayShift in C#</title>
		<link>http://www.jeremyprivett.com/blog/archives/arrayshift-in-c/</link>
		<comments>http://www.jeremyprivett.com/blog/archives/arrayshift-in-c/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 08:53:53 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[Journey of Souls]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.jeremyprivett.com/blog/?p=424</guid>
		<description><![CDATA[This probably isn&#8217;t the most elegant or efficient method of doing this, but I needed a way to perform an &#8220;ArrayShift&#8221; on an array in C#. There&#8217;s no built-in method to do this, so I wrote up and dropped this method in my ToolBox:

/// &#60;summary&#62;
/// A C# implementation of "ArrayShift" this is a generic method [...]]]></description>
			<content:encoded><![CDATA[<p>This probably isn&#8217;t the most elegant or efficient method of doing this, but I needed a way to perform an &#8220;ArrayShift&#8221; on an array in C#. There&#8217;s no built-in method to do this, so I wrote up and dropped this method in my ToolBox:</p>
<p><code>
<pre>/// &lt;summary&gt;
/// A C# implementation of "ArrayShift" this is a generic method that
/// will take an Array of T's, shift one off of the beginning of the
/// array and return it.
/// &lt;/summary&gt;
/// &lt;typeparam name="T"&gt;The type of array.&lt;/typeparam&gt;
/// &lt;param name="array"&gt;An array of T's, will be modified to remove
/// the first element.&lt;/param&gt;
/// &lt;returns&gt;First element of array.&lt;/returns&gt;
public static T ArrayShift&lt;T&gt;(ref T[] array)
{
   T first = array[0];
   IList&lt;T&gt; list = array.ToList();
   list.RemoveAt(0);
   array = list.ToArray();

   return first;
}</pre>
<p></code></p>
<p>It&#8217;s a quick and dirty way to accomplish what I needed. If anyone has a better method, I&#8217;m open to it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jeremyprivett.com/blog/archives/arrayshift-in-c/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Journey of Souls: Progress Journal #1</title>
		<link>http://www.jeremyprivett.com/blog/archives/journey-of-souls-progress-journal-1/</link>
		<comments>http://www.jeremyprivett.com/blog/archives/journey-of-souls-progress-journal-1/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 06:44:36 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[Journey of Souls]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Game Updates]]></category>
		<category><![CDATA[linkedin]]></category>

		<guid isPermaLink="false">http://www.jeremyprivett.com/blog/?p=415</guid>
		<description><![CDATA[I&#8217;m about to wrap up a reasonably productive evening of coding and I&#8217;d like to go over a little of what I accomplished. It wasn&#8217;t a whole lot, but there were some very important pieces put in place that will allow us to actually start connecting to something soon.

The DescriptorCollection (namespace JoS.Game.Collections) class mentioned in [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m about to wrap up a reasonably productive evening of coding and I&#8217;d like to go over a little of what I accomplished. It wasn&#8217;t a whole lot, but there were some very important pieces put in place that will allow us to actually start connecting to something soon.</p>
<ol>
<li>The DescriptorCollection (namespace JoS.Game.Collections) class mentioned in the previous JoS entry is pretty much completed. It needs a little bit of code commenting to round it out, but for the most part the starting functionality is all there. It holds a Dictionary&lt;String, Descriptor&gt; which is the collection of Descriptors. .addDescriptor adds a Descriptor to the list, .getByEndpoint allows us to look up a Descriptor by its remote socket endpoint, and .delByEndpoint removes a Descriptor from the list.</li>
<li>The beginnings of the actual Descriptor (namespace JoS.Game) class are now there. Needed to make sure DescriptorCollection works, of course. We&#8217;re a couple methods away from being able to read from/write to client sockets using this class.</li>
<li>I&#8217;ve completed a pretty basic Logger (namespace JoS.Utilities) class to handle any logging that we need to do.</li>
<li>The beginnings of MainGame.Main() (the entry point to the whole app) have been put together. Main game loop coming soon.</li>
</ol>
<p>Will probably take another hour&#8217;s worth of coding to get us a functional &#8220;chat&#8221; server using our game&#8217;s conventions. Then we can move on to dropping in the rest of the content needed to get us rolling. In case I haven&#8217;t mentioned this, the goal is to get us back to at least where we were, functionality-wise, with the old PHP JoS by the end of November. We&#8217;re well on our way to meeting or beating that goal, if I can keep moving at a reasonable pace.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jeremyprivett.com/blog/archives/journey-of-souls-progress-journal-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HDTVs Make Excellent Monitors</title>
		<link>http://www.jeremyprivett.com/blog/archives/hdtvs-make-excellent-monitors/</link>
		<comments>http://www.jeremyprivett.com/blog/archives/hdtvs-make-excellent-monitors/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 15:00:42 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[General Ramblings]]></category>
		<category><![CDATA[Gaming]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.jeremyprivett.com/blog/?p=406</guid>
		<description><![CDATA[&#8230; especially for lazy people.
Thanks to Dutch giving me a wireless keyboard and mouse that he wasn&#8217;t using, I decided to start using the HDMI out to hook it up to my TV. It worked out pretty well:

Public Link
I&#8217;ve been thoroughly enjoying this setup, so far. It&#8217;s even really nice for writing code. I think [...]]]></description>
			<content:encoded><![CDATA[<p>&#8230; especially for lazy people.</p>
<p>Thanks to Dutch giving me a wireless keyboard and mouse that he wasn&#8217;t using, I decided to start using the HDMI out to hook it up to my TV. It worked out pretty well:</p>
<p><img src="http://photos-g.ak.fbcdn.net/hphotos-ak-snc1/hs274.snc1/10129_162203320627_594595627_3591254_7546155_n.jpg" width="550" height="496" /></p>
<div align='center'><a href="http://www.facebook.com/photo.php?pid=3591254&#038;l=7201d6ef2f&#038;id=594595627" target="_blank">Public Link</a></div>
<p>I&#8217;ve been thoroughly enjoying this setup, so far. It&#8217;s even really nice for writing code. I think the most awesome part about the whole thing is that it can do full 1080p. My previous HDMI-enabled machine could only do 720p. Since the video card is pretty beefy (for a laptop), I&#8217;ve been playing a few games in this setup. It&#8217;s <strong><em>nice</em></strong>. Just as good, if not better, than sitting in the recliner and playing on a normal console.</p>
<p>Now, I need to get a gamepad that&#8217;ll work with it wirelessly &#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jeremyprivett.com/blog/archives/hdtvs-make-excellent-monitors/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Journey of Souls: Loose Class Structure</title>
		<link>http://www.jeremyprivett.com/blog/archives/journey-of-souls-loose-class-structure/</link>
		<comments>http://www.jeremyprivett.com/blog/archives/journey-of-souls-loose-class-structure/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 08:48:18 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[Journey of Souls]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[JoS Architecture]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.jeremyprivett.com/blog/?p=398</guid>
		<description><![CDATA[The old PHP version of JoS made the JoS_Core class the central point of almost the entire game. It kept references to all of the descriptors, areas, rooms, etc. It was kind of ugly and I don&#8217;t think I want one class basically being the owner of every piece of the game. I&#8217;d like to [...]]]></description>
			<content:encoded><![CDATA[<p>The old PHP version of JoS made the JoS_Core class the central point of almost the entire game. It kept references to all of the descriptors, areas, rooms, etc. It was kind of ugly and I don&#8217;t think I want one class basically being the owner of every piece of the game. I&#8217;d like to split things out more than that.</p>
<p>There are a handful of requirements that we need to meet with our class/object structure/architecture:</p>
<ol>
<li>We need access to all of the Socket resources from the game loop in order to perform a Socket.Select() on them.</li>
<li>We need to be able to match a Socket resource to its Descriptor object.</li>
<li>We need to be able to quickly query for any available resource by some unique identifier (id number, guid, short unique name, etc).</li>
<li>Unless performance requires it, we should try to avoid the &#8220;reference&#8221; soup that came with the previous implementation. Every object had a property with a reference for each object that was related to it in any way.</li>
<blockquote><p><strong>Example</strong>: Room objects had properties with direct references to all of the characters in the room, the rooms exits, the area the room was apart of. And the exits had references to the rooms they led to and the rooms they were in. The characters had references to the room that they were in. There were a lot of circular references and it&#8217;s hard for most reference counting garbage collectors to properly free resources with these types of references.</p></blockquote>
<li>Classes with Events and Event Handlers need to be public so that scripted pieces in IronPython will be able to see them properly.</li>
</ol>
<p>Possible solutions:</p>
<p><strong>#1 and #2</strong>: Keep a Dictionary&lt;String, Descriptor&gt; that has all of the Descriptors in it in a DescriptorCollection class which will have the lookup methods mentioned in #3. The String key would be the string representation of the Socket.RemoteEndPoint. Including the remote port. Not including the remote port would make it impossible for us to accept multiple connections from the same IP Address.</p>
<p><strong>#3 and #4</strong>: The resources could all be kept in their own Collection classes with the resources mapped out as necessary in Lists or Dictionaries. Multiple Dictionaries using references can be created to facilitate multiple identifiers. We&#8217;ll tie the identifiers to the rest of the objects and use the lookup methods on the Collections when we need to get an object reference.</p>
<p><strong>#5</strong>: Make sure classes are defined as public. They&#8217;re not completely public by default.</p>
<p><em>This entry is almost entirely copied verbatim from the current revision of an internal collaborative document. There were some minor edits for clarification.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jeremyprivett.com/blog/archives/journey-of-souls-loose-class-structure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dropbox Saves Me Again</title>
		<link>http://www.jeremyprivett.com/blog/archives/dropbox-saves-me-again/</link>
		<comments>http://www.jeremyprivett.com/blog/archives/dropbox-saves-me-again/#comments</comments>
		<pubDate>Wed, 16 Sep 2009 01:50:44 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[General Ramblings]]></category>
		<category><![CDATA[Dropbox]]></category>
		<category><![CDATA[Phew]]></category>
		<category><![CDATA[That was close]]></category>

		<guid isPermaLink="false">http://www.jeremyprivett.com/blog/archives/dropbox-saves-me-again/</guid>
		<description><![CDATA[I&#8217;ve been keeping a lot of my development stuff within Dropbox lately, so that I can sync it between my Windows machine and my Macbook. Well, a data file that my code needs to directly modify as it processes the file and spits out new ones got corrupted as the result of a bug in [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been keeping a lot of my development stuff within Dropbox lately, so that I can sync it between my Windows machine and my Macbook. Well, a data file that my code needs to directly modify as it processes the file and spits out new ones got corrupted as the result of a bug in my code.</p>
<p>Thankfully, since I use Dropbox, it was easy to login to the website and revert the data file to a previous version and try it again. Otherwise, I wouldn&#8217;t have a copy of the data file and would have to re-assemble it from the pieces I had four hours ago.</p>
<p>Thanks, <a href="http://www.getdropbox.com" target="_blank">Dropbox</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jeremyprivett.com/blog/archives/dropbox-saves-me-again/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Journey of Souls: Language Decisions</title>
		<link>http://www.jeremyprivett.com/blog/archives/journey-of-souls-language-decisions/</link>
		<comments>http://www.jeremyprivett.com/blog/archives/journey-of-souls-language-decisions/#comments</comments>
		<pubDate>Tue, 15 Sep 2009 08:56:09 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[Journey of Souls]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[Picking a Language]]></category>

		<guid isPermaLink="false">http://www.jeremyprivett.com/blog/?p=388</guid>
		<description><![CDATA[We&#8217;ve been giving a lot of thought to our choice in Programming Language for Journey of Souls. For a while, it was starting to look like we were going to end up writing everything in PHP or Python. I think we&#8217;ve made our decision (or at least are very close). It ended up coming down [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve been giving a lot of thought to our choice in Programming Language for Journey of Souls. For a while, it was starting to look like we were going to end up writing everything in PHP or Python. I think we&#8217;ve made our decision (or at least are very close). It ended up coming down to a few things that PHP and Python just don&#8217;t have any out of the box support for. Things that it would be extremely stupid for us to roll our own implementations, when another language offers the feature up really well. The first of these being Events and Event Handling. The second being a way to write game scripts in a way that they can be replaced <em>on the fly</em> while the game is still running. Here&#8217;s some of the details from our research and decisions. <span id="more-388"></span></p>
<h2>Event-driven Programming</h2>
<p>A topic of discussion that came up during tonight&#8217;s book club pseudo-session was using a more event-driven process to control the flow of the game. We believe we would prefer a lot of interactions to be based on events, as that&#8217;s how we conceptually see them. That brought us to a head with our language choices. PHP and Python currently have no built-in way to handle events. We would have to roll our own implementation. Considering the scale of the project we&#8217;re planning to put together, those are resources and cycles that we just can&#8217;t afford to give up. We just didn&#8217;t believe that either language would be capable of managing a full-on userland Event Management implementation as well as everything we actually wanted to do in the game itself. The two languages were already fighting an uphill battle to stay on our radar, but tonight&#8217;s realization pretty much doomed them. Sort of.</p>
<h2>C#, IronPython, and the Dynamic Language Runtime</h2>
<p>That sort of brought us down to the two options that we were sort of avoiding up to this point. Not because we&#8217;re not capable in either or because we have any particular gripe against them, just simply because we believed we could get more done faster in PHP or Python. The two options I speak of are C# are Java. Well, the heading above this section sort of gives it away, but we didn&#8217;t pick Java. Not having any experience with it personally, I&#8217;ve heard a lot of bad things about Java&#8217;s event model. While I have personal experience with C#&#8217;s event model, and have heard a lot of good things about it. Not to mention the fact that I have some good things to say about it, but that&#8217;s sort of beyond the scope of this post.</p>
<p>That solved one of our two problems, but C# is a compiled language. If we need to make changes to the game, that&#8217;s going to require a recompiling and stopping the game to drop in the new binaries and &#8230; wait a minute. I remembered the DLR. Not only did I <em>remember</em> the DLR, I remembered that the languages (IronPython, specifically) can be <em>embedded</em>. Meaning, we can do our scripting for the game in IronPython, and it offers us up the opportunity to do nifty things like reload game scripts at runtime. This is <strong><em>absolutely amazing</em></strong> because it minimizes downtime for the game, in the long run, and allows us to immediately add new features and such to the game without a restart. It also still lets us do a lot of stuff in one of our preferred languages, while still being able to utilize C# for any heavy lifting that needs to be done.</p>
<p>In my mind, this seems like a very win-win scenario. We&#8217;re going to be future-looking, so I&#8217;ve already been considering the use of things like C# 4.0&#8217;s <em>dynamic</em> keyword for making interacting with IronPython that much easier. It also helps that I&#8217;ve already been using the Visual Studio 2010 and .NET 4.0 Betas. We still have a <strong><em>long</em></strong> way to go before we get something usable, but locking down our language choice is a huge milestone and an issue that&#8217;s been bothering us for a long time now. With that gorilla off of our back, we can start working more on the actual design of the game and how we want the core pieces to interact, knowing that we have an Event model that&#8217;s built-in to the language we&#8217;ll be developing in.</p>
<p>I&#8217;ll keep the updates coming as we have more things to share.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jeremyprivett.com/blog/archives/journey-of-souls-language-decisions/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Journey of Souls: Spirit Realm, Offline Training, In-Game Consequences</title>
		<link>http://www.jeremyprivett.com/blog/archives/journey-of-souls-spirit-realm-offline-training-in-game-consequences/</link>
		<comments>http://www.jeremyprivett.com/blog/archives/journey-of-souls-spirit-realm-offline-training-in-game-consequences/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 08:22:39 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[Journey of Souls]]></category>
		<category><![CDATA[Game Mechanics]]></category>
		<category><![CDATA[I'm Making a Game]]></category>
		<category><![CDATA[linkedin]]></category>

		<guid isPermaLink="false">http://www.jeremyprivett.com/blog/?p=382</guid>
		<description><![CDATA[I covered a few of my goals for Journey of Souls in my previous post. Dutch and I actually kept our plans to book club this evening and it brought about some discussion on a few game mechanics that we&#8217;d like to see in Journey of Souls. First of all, there&#8217;s a huge disparity between [...]]]></description>
			<content:encoded><![CDATA[<p>I covered a few of my goals for Journey of Souls in my previous post. Dutch and I actually kept our plans to book club this evening and it brought about some discussion on a few game mechanics that we&#8217;d like to see in Journey of Souls. First of all, there&#8217;s a <strong><em>huge</em></strong> disparity between people who spend way too much time playing games and people who play casually. We want to make some enhancements to try to reduce that disparity and try to keep it fair to the players who do invest their time. Second, we&#8217;ve identified ways to enhance our use of the spirit realm to give it a few &#8220;eerie&#8221; but what we believe to be very cool effects. We&#8217;ve also discussed ways to clearly communicate what&#8217;s in the spirit realm versus what&#8217;s in the physical realm and different &#8220;affinities&#8221; to different areas in the spirit realm. Finally, we want to make it clear that we&#8217;re going to try to make in-game (or in character) consequences to as much &#8220;bad&#8221; behavior as possible. We don&#8217;t want to write code to prevent people from doing logical things, no matter how screwed up their logic might be. Instead, we want there to be in-game consequences to all of your actions. <span id="more-382"></span></p>
<h2>Offline Training</h2>
<p>I&#8217;ll start with Offline Training. In order to try to reduce the disparity between &#8220;hardcore&#8221; gamers and &#8220;casual&#8221; gamers, we&#8217;re going to use a system of offline training so that you can put together set training sets for your character to perform while you&#8217;re not logged into the game. Any character can do this and, while it won&#8217;t raise your skills as quickly as you actually being in the game and performing the actions yourself, it&#8217;ll be a huge benefit to people who can&#8217;t be inside the game all the time. You won&#8217;t have to feel quite so behind. There will be limitations, though. We don&#8217;t want the system to be abused.</p>
<ol>
<li>You will only be able to perform one training set at a time while offline. This means that you&#8217;ll only be able to increase skills that the training set touches.</li>
<li>Your training will not be performed indefinitely. After a certain period of inactivity (think days, not hours), your character will eventually &#8220;go to sleep&#8221; and stop training.</li>
<li>The speed in which you learn things will be directly inverse to how much time you spend in the game + how many total skill points you already have.</li>
</ol>
<h2>More Uses for the Spirit Realm</h2>
<p>The Spirit Realm is a <strong>huge</strong> part of Journey of Souls. We want to make as much use of it as possible and not in just a &#8220;you died, now make your way back to the physical realm&#8221; sort of way. We want it to be just as alive as the physical realm and make it useful for solving certain challenges. Those of you who are familiar with the &#8220;spectral realm&#8221; from Soul Reaver will experience the same types of puzzles and challenges, but probably on a much smaller scale. Not every character or race will be spiritually in tune enough to be able to take advantage of those types of activities, so we don&#8217;t want to alienate these races.</p>
<p>Another thing we want to do with the spirit realm is allow people who <em>are</em> spiritually in tune (and even those who aren&#8217;t) to occasionally see things in the spirit realm even when they&#8217;re in the physical realm. An example Dutch used was a room that may have a chair, a lamp, and a rocking chair that could only be seen by people who could see objects in the spirit realm. The neat thing here is that people who are right on that edge of having their spiritual awareness cross that threshold of being able to see things more often will oftentimes see things in the spirit realm and then look again to see that they&#8217;re not there.</p>
<p>One more thing we discussed was an area&#8217;s &#8220;spiritual power&#8221; being able to fluctuate based on things that happen in that area. For example, a death releases the soul from the physical body into the spirit realm. That release of spiritual power will raise the rating of the room so that actions in the spirit realm will bleed through to the physical realm more often. The big item here is death. One of the &#8220;cool&#8221; things we&#8217;d like to do is have the spirit realm of an area retain the finishing blow of a battle. Those with the spiritual awareness to see this from the physical realm, or those who just happened to be in the spirit realm at this location, will occassionally see the deaths of others replayed before them for a set amount of time. Truly spiritually aware players entering the site of a large conflict may get a sensory overload from all of the death that occurred there and &#8220;freak out&#8221; which will require outside assistance to get them back to a safe location.</p>
<h2>In-Game Consequences</h2>
<p>Lastly, we want to put a very firm focus on in-game consequences for actions. We want to encourage or discourage appropriate behavior strictly by using the mechanics of the game. We want this to be a living, breathing world of its own. One with few &#8220;external&#8221; rules, but plenty of consequence for each action. Some of the examples we used this evening were characters taking advantage of offline players&#8217; training locations in order to attack them or somehow harm them while they&#8217;re offline. Rather than come up with a way to just say this can&#8217;t happen, we eventually settled on another use for the spiritual creatures that can cross back and forth between the spirit and physical realms along with guards for the training grounds.</p>
<p>We do want to make it perfectly clear that dangerous lands will be dangerous. Venturing into these sorts of areas will mean that there is no protection, and it will be possible for you to be killed. That&#8217;s perfectly reasonable and we won&#8217;t do anything to prevent that. We&#8217;re hoping that we can leave it to the players to enact justice where it is needed through the appropriate in-game systems. In the absence of that, we&#8217;ll probably do so ourselves through careful working of NPCs.</p>
<p>I&#8217;ll post more updates as we have more discussions about game mechanics and make more progress with the development of the game.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jeremyprivett.com/blog/archives/journey-of-souls-spirit-realm-offline-training-in-game-consequences/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My Goals for Journey of Souls, Part One</title>
		<link>http://www.jeremyprivett.com/blog/archives/my-goals-for-journey-of-souls-part-one/</link>
		<comments>http://www.jeremyprivett.com/blog/archives/my-goals-for-journey-of-souls-part-one/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 02:09:28 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[Journey of Souls]]></category>
		<category><![CDATA[Give Me Your Ideas]]></category>
		<category><![CDATA[I'm Making a Game]]></category>
		<category><![CDATA[linkedin]]></category>

		<guid isPermaLink="false">http://www.jeremyprivett.com/blog/?p=370</guid>
		<description><![CDATA[This post was scheduled to be published on the other 09:09:09 9/9/09 for the day. Cause I&#8217;m corny like that.
As some of you may or may not know, I&#8217;ve been off and on working on a MUD called Journey of Souls. I wanted to take a moment to go over what my plans are for [...]]]></description>
			<content:encoded><![CDATA[<p><em>This post was scheduled to be published on the <strong>other</strong> 09:09:09 9/9/09 for the day. Cause I&#8217;m corny like that.</em></p>
<p>As some of you may or may not know, I&#8217;ve been off and on working on a <abbr title="Multi-User Dungeon">MUD</abbr> called Journey of Souls. I wanted to take a moment to go over what my plans are for the game for the benefit of those of you who don&#8217;t read what I write on Anfiniti. Dutch and I&#8217;ve been more inspired to work on the game lately, and we&#8217;ve even decided to book club a selection of chapters from a game development book which closely relate to what we&#8217;ll be doing. The plan is for this book club to actually start this weekend, so we&#8217;ll see how that goes.</p>
<p>At the moment, I&#8217;m right on the edge of finally choosing the language we will be developing the MUD in. We originally started in PHP, but there are some things that it can&#8217;t do (without some highly unsupported extensions) that some languages (say, Python) can do by default. And then there&#8217;s that whole we plan to run this on a server for <em>months at a time</em> thing. I originally started with PHP for two reasons, one of which was to prove it could be done in PHP (and done well). So, we&#8217;re still surveying that landscape to figure out what we&#8217;ll finally be settling on. I&#8217;d like to make a decision by the weekend, because I&#8217;d like for us to do any examples from our book club in the language we&#8217;ll actually be writing the code for the game in. Anyway, onto my goals for the game &#8230;</p>
<p>My goals are a bit lofty. It&#8217;ll be a long time before the game is available to the public, but I&#8217;ve been slowly gathering together ideas over the years for different things to incorporate into the game and different ways to get it out to the masses, once it&#8217;s ready. I want to try to summarize my goal for JoS into this post and give you guys all an idea of the type of game I&#8217;m going for. If I could just get the cat to stop sticking hair to my monitor. <span id="more-370"></span></p>
<p>First of all, it&#8217;s going to be a medieval-fantasy setting. For races, there will be your typical humans, elves, dwarves, etc. We also have a few races we want to add that aren&#8217;t necessarily unique, but aren&#8217;t commonly found in this setting. Things like &#8220;Avions&#8221; or winged-races, Bonewalkers (skeletal-races), and a few other things. As well as branching races to allow a sort of &#8220;metamorphosis&#8221; between two similar races. For example, any race can become a &#8220;Bonewalker&#8221; and keep a portion of the original race&#8217;s strengths/weaknesses while adopting the Bonewalker&#8217;s strengths/weaknesses.</p>
<p>We want the game to be extremely player-oriented. With most things eventually becoming entirely player-run. We will be providing NPCs in the short-term to fill the gaps in the player base, but we want the world to be significantly impacted by player actions. The goal is for it to be possible to have entire cities rise and fall around players and the decisions that they make.</p>
<p>Rather than be &#8220;just another&#8221; medieval-fantasy game, we&#8217;re looking at ways to put a unique spin on different aspects of the gameplay. Our plans for the combat system, for example, are extremely detailed and will offer what we hope to be the most realistic experience possible, without sacrificing any &#8220;fun&#8221; value for the sake of realism. Bones will break, limbs will detach, blood will spill. Everything matters, from the type and weight of the equipment you wear, to your fatigue, your stats and skills, as well as how hungry and thirsty you are.</p>
<p>While on the subject of stats and skills, the game will be completely class-less and level-less. Everything will be &#8220;learn by doing&#8221; and your stats will be completely based on what you do. Physical activities will increase your strength like mental activities will increase your intelligence, and so forth. Your character is yours to mold and evolve and we don&#8217;t want to restrict you to any one play style. Decide you don&#8217;t like the route you&#8217;re taking? You&#8217;re free to change it up at any time.</p>
<p>The NPCs will be more intelligent and more realistic than your average RPG. Nothing &#8220;materializes&#8221; out of thin air. If there are no guards around when someone shouts for them, none will come running. Shopkeepers keep hours of business. They enjoy their off-hours. You&#8217;ll find them in taverns, in their homes, visiting with friends and family. NPCs will gossip with one another just like real players. Each NPC will remember you and actions you take that they either see or hear about from other NPCs for extended periods of time. They&#8217;ll like you or dislike you based on their own traits, moods, and the things that they know about you and what you do.</p>
<p>Economics and trade will have a huge impact on the game. As I said before, nothing materializes out of thin air. Game state will be forever and there is no &#8220;reset&#8221; button. Food must be grown, harvested, hunted. Materials for crafts must be acquired through conventional means. NPCs will mine, hunt, fish, farm, and all of the other actions required to keep materials flowing in and out of cities. Equipment must be crafted before it can be sold. No shopkeeper will ever just &#8220;have&#8221; inventory. Caravans will bring materials to and from cities. Losing those caravans for whatever reason (Bandits, Natural Disasters, etc.) will cause shortages of whatever material that caravan was carrying. Shortages will lead to prices increasing due to demand with a lower supply. Just like a surplus would lead to lower prices.</p>
<p>Death is not the end. The Journey of your Soul will take you to the spirit realm whenever your physical body is no longer able to carry your soul. At which point you will need to make your way to one of many points of resurrection in order to get back to the physical realm. The penalty for dying alone is small. The spirit realm is not safe, though. Mystical creatures that you&#8217;ll run into on your way to the resurrection points will hunt you and be capable of draining the essence of your soul, thus reducing your abilities, both stats and skills. But there will be ways to avoid them, and even ways to use the spirit realm to your advantage.</p>
<p>There are so many aspects to this game that I just can&#8217;t cover in a single post. This is already become one heck of a wall of text, as it is. I really do want to create a world that will truly be alive. Something that people can join and be apart of something special. It&#8217;s not going to happen overnight, but I will bring it to light someday, and we&#8217;re already starting to make progress. Any ideas and help you guys can offer will be greatly appreciated, and hopefully you will all enjoy playing the game at some point in the future.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jeremyprivett.com/blog/archives/my-goals-for-journey-of-souls-part-one/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>9:09:09 9/9/09</title>
		<link>http://www.jeremyprivett.com/blog/archives/999999/</link>
		<comments>http://www.jeremyprivett.com/blog/archives/999999/#comments</comments>
		<pubDate>Wed, 09 Sep 2009 14:09:31 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[General Ramblings]]></category>
		<category><![CDATA[conversation]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[the world is going to end]]></category>

		<guid isPermaLink="false">http://www.jeremyprivett.com/blog/?p=365</guid>
		<description><![CDATA[Happy 9&#8217;s to you all. I used the joke below in like three different places last night. Might as well be a schmuck and put it here too. It&#8217;s still lame, and that&#8217;s okay. I was able to laugh about it. A little. Okay, maybe it was just a smirk. Whatever.
[01:11] Jeremy Privett: Oh, and [...]]]></description>
			<content:encoded><![CDATA[<p>Happy 9&#8217;s to you all. I used the joke below in like three different places last night. Might as well be a schmuck and put it here too. It&#8217;s still lame, <em>and that&#8217;s okay</em>. I was able to laugh about it. A little. Okay, maybe it was just a smirk. Whatever.</p>
<blockquote><p>[01:11] Jeremy Privett: Oh, and we&#8217;re coming up on 9:09:09 9/9/09.<br />
[01:11] Dutch Buckholz: yes, yes we are<br />
[01:11] Jeremy Privett: It was nice knowing you.<br />
[01:11] Dutch Buckholz: nah &#8211; that&#8217;s 2012, everybody knows that<br />
[01:12] Jeremy Privett: lol<br />
[01:12] Dutch Buckholz: today is just a day without LOLcats</p></blockquote>
<p>Either way, make some attempt to enjoy the day. I mean, you&#8217;re only ever going to see 9:09:09 9/9/09 once in your lifetime, after all. Well, twice if you count the PM version.</p>
<p><em>I actually scheduled this blog entry to post exactly at 9:09:09 9/9/09. In some timezone. I don&#8217;t remember which one it&#8217;s set to.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jeremyprivett.com/blog/archives/999999/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

