<?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>Building Browsergames &#187; progress</title>
	<atom:link href="http://buildingbrowsergames.com/tag/progress/feed/" rel="self" type="application/rss+xml" />
	<link>http://buildingbrowsergames.com</link>
	<description>Ever wanted to build a browsergame?</description>
	<lastBuildDate>Mon, 29 Mar 2010 14:00:39 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Rawrmy&#8217;s Combat System Refresh</title>
		<link>http://buildingbrowsergames.com/2008/11/24/rawrmys-combat-system-refresh/</link>
		<comments>http://buildingbrowsergames.com/2008/11/24/rawrmys-combat-system-refresh/#comments</comments>
		<pubDate>Mon, 24 Nov 2008 14:00:31 +0000</pubDate>
		<dc:creator>Luke</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[combat]]></category>
		<category><![CDATA[contest]]></category>
		<category><![CDATA[diaryofabrowsergame]]></category>
		<category><![CDATA[doab]]></category>
		<category><![CDATA[progress]]></category>
		<category><![CDATA[rawrmy]]></category>
		<category><![CDATA[refresh]]></category>

		<guid isPermaLink="false">http://buildingbrowsergames.com/?p=577</guid>
		<description><![CDATA[This week was spent fleshing out Rawrmy&#8217;s combat system, and building in some of the more &#8216;traditional&#8217; elements &#8211; like experience, levels, and hit points.
I&#8217;ve been struggling for the last few weeks to try and find a way to make combat &#8216;fun&#8217; &#8211; while it&#8217;s a big part of a lot of browsergames, it&#8217;s a [...]]]></description>
			<content:encoded><![CDATA[<p>This week was spent fleshing out Rawrmy&#8217;s combat system, and building in some of the more &#8216;traditional&#8217; elements &#8211; like experience, levels, and hit points.</p>
<p>I&#8217;ve been struggling for the last few weeks to try and find a way to make combat &#8216;fun&#8217; &#8211; while it&#8217;s a big part of a lot of browsergames, it&#8217;s a part that (I think) could use a little bit more polish in most of them. Fighting monster after monster after monster isn&#8217;t fun &#8211; it&#8217;s only a means to an end. I think that even the boring parts of the game should still be fun. With that in mind, I set out to build a combat system that would achieve two things:</p>
<ol>
<li>Be a combat system.</li>
<li>Be fun.</li>
</ol>
<p>After thinking and pondering, I believe that I&#8217;ve finally come up with a system that works(and you&#8217;ll probably be able to figure out how it works in the screenshot below).</p>
<div id="attachment_579" class="wp-caption alignnone" style="width: 310px"><a href="http://buildingbrowsergames.com/blog/wp-content/uploads/2008/11/picture-7.png"><img src="http://buildingbrowsergames.com/blog/wp-content/uploads/2008/11/picture-7-300x182.png" alt="Rawrmy\&#039;s refreshed combat system" title="Rawrmy Combat" width="300" height="182" class="size-medium wp-image-579" /></a><p class="wp-caption-text">Rawrmy's refreshed combat system</p></div>
<p>A little bit more time was also spent fleshing out the different areas of the game &#8211; and they&#8217;re what I will be working on now. I am afraid that my schedule has been getting busier and busier, lately &#8211; which means I can&#8217;t devote as much time to Rawrmy as I would like to. While I am still hoping to have something releasable by the contest due date, I don&#8217;t think it will be quite as strong an entry as I would have liked.</p>
<h2>Completed this week:</h2>
<ul>
<li>Combat system refresh &#8211; the combat system is now a little more fun to use, in addition to more challenging for players who have gotten to the higher experience levels.</li>
</ul>
<h2>Still to do:</h2>
<ul>
<li>Content needs fleshing out &#8211; while this combat switch has made Rawrmy &#8216;feature complete&#8217;, it hasn&#8217;t made it <strong>solid</strong> yet. There needs to be a lot of polishing done in regards to content, areas, and the way that in-game items work.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://buildingbrowsergames.com/2008/11/24/rawrmys-combat-system-refresh/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Rawrmy&#8217;s Inventory</title>
		<link>http://buildingbrowsergames.com/2008/11/03/rawrmys-inventory/</link>
		<comments>http://buildingbrowsergames.com/2008/11/03/rawrmys-inventory/#comments</comments>
		<pubDate>Mon, 03 Nov 2008 14:00:29 +0000</pubDate>
		<dc:creator>Luke</dc:creator>
				<category><![CDATA[diaryofabrowsergame]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[doab]]></category>
		<category><![CDATA[progress]]></category>
		<category><![CDATA[rawrmy]]></category>

		<guid isPermaLink="false">http://buildingbrowsergames.com/?p=538</guid>
		<description><![CDATA[This week, I focused on developing Rawrmy&#8217;s inventory system.
The typical inventory system is fairly simple: you have the player who owns the item, the item itself, and (perhaps) the quantity of the item.
One of the nicer features of Django that building the inventory system has introduced me to is reverse relations; they make it very [...]]]></description>
			<content:encoded><![CDATA[<p>This week, I focused on developing Rawrmy&#8217;s inventory system.</p>
<p>The typical inventory system is fairly simple: you have the player who owns the item, the item itself, and (perhaps) the quantity of the item.</p>
<p>One of the nicer features of Django that building the inventory system has introduced me to is reverse relations; they make it very easy for me to add new items to the user&#8217;s inventory. I am storing their inventory in my UserProfile model, and using a ManyToManyField for keeping track of the user&#8217;s items(with an intermediary &#8216;through&#8217; model for keeping track of the quantity of the item), and that means that I can add items to the player&#8217;s inventory with a single line of code:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #dc143c;">profile</span>.<span style="color: black;">inventoryitem_set</span>.<span style="color: black;">create</span><span style="color: black;">&#40;</span>item=item,owner=<span style="color: #dc143c;">profile</span><span style="color: black;">&#41;</span></pre></div></div>

<p>With <em>item</em> being the item I want to add, and <em>owner</em> being the profile I am adding the item for.</p>
<p>One question that came up while building my inventory system was <strong>&#8220;Should items be stackable?&#8221;</strong> &#8211; because it makes sense for things like weapons not to stack, but things like usables <strong>to</strong> stack. In the end, I decided to add a <em>stackable</em> BooleanField to all of my items, and then just check it in my InventoryItem&#8217;s save() method, like so:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">def</span> save<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>,<span style="color: #66cc66;">*</span>args,<span style="color: #66cc66;">**</span>kwargs<span style="color: black;">&#41;</span>:
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">item</span>.<span style="color: black;">stackable</span> <span style="color: #ff7700;font-weight:bold;">and</span> kwargs.<span style="color: black;">get</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'force_insert'</span>,<span style="color: #008000;">False</span><span style="color: black;">&#41;</span>:
		<span style="color: #008000;">self</span> = InventoryItem.<span style="color: black;">objects</span>.<span style="color: black;">get_or_create</span><span style="color: black;">&#40;</span>item=<span style="color: #008000;">self</span>.<span style="color: black;">item</span>,owner=<span style="color: #008000;">self</span>.<span style="color: black;">owner</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
		<span style="color: #008000;">self</span>.<span style="color: black;">quantity</span> += <span style="color: #ff4500;">1</span>
		kwargs<span style="color: black;">&#91;</span><span style="color: #483d8b;">'force_insert'</span><span style="color: black;">&#93;</span> = <span style="color: #008000;">False</span>
	<span style="color: #008000;">super</span><span style="color: black;">&#40;</span>InventoryItem, <span style="color: #008000;">self</span><span style="color: black;">&#41;</span>.<span style="color: black;">save</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">*</span>args,<span style="color: #66cc66;">**</span>kwargs<span style="color: black;">&#41;</span></pre></div></div>

<p>Is this the best way to do it? Probably not. But it lets me have items that do stack and items that don&#8217;t stack fairly easily, in addition to being able to add items to the player&#8217;s inventory without having to write a lot of boilerplate code.</p>
<p>Overall, progress is being made &#8211; while I&#8217;m not sure I will be able to finish as much as I would have liked to by the time that the contest is over (December 11th), I&#8217;m fairly confident that I will have a codebase completed that I am happy to work on far into the future.</p>
<h2>Completed this week:</h2>
<ul>
<li>Basic combat system &#8211; needs some tweaking but currently workable</li>
<li>Inventory management &#8211; add items, remove items</li>
</ul>
<h2>Still to do:</h2>
<ul>
<li>Create more content and quests &#8211; while there are plans in place for upwards of 5 areas at the start of the game, there have only been quests for 2 of them designed so far.</li>
<li>Write better storyline content &#8211; right now it just says things like &#8220;the storyteller tells you to go over there. So you decide to do that.&#8221;</li>
<li>Lots of polishing and re-working &#8211; while most of the internals of the game work and are playable right now, they don&#8217;t feel &#8220;just right&#8221; yet.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://buildingbrowsergames.com/2008/11/03/rawrmys-inventory/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rawrmy Starts</title>
		<link>http://buildingbrowsergames.com/2008/10/27/rawrmy-starts/</link>
		<comments>http://buildingbrowsergames.com/2008/10/27/rawrmy-starts/#comments</comments>
		<pubDate>Mon, 27 Oct 2008 14:00:32 +0000</pubDate>
		<dc:creator>Luke</dc:creator>
				<category><![CDATA[diaryofabrowsergame]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[doab]]></category>
		<category><![CDATA[progress]]></category>
		<category><![CDATA[rawrmy]]></category>

		<guid isPermaLink="false">http://buildingbrowsergames.com/?p=527</guid>
		<description><![CDATA[This week was spent getting started on Rawrmy &#8211; building the initial systems, and planning out how the game will play out.
I have decided to build Rawrmy with Django &#8211; which is an MVC framework like Ruby on Rails(except in Python instead of Ruby).
Django has a vast number of freely available libraries for common functions, [...]]]></description>
			<content:encoded><![CDATA[<p>This week was spent getting started on Rawrmy &#8211; building the initial systems, and planning out how the game will play out.</p>
<p>I have decided to build Rawrmy with <a href='http://djangoproject.com'>Django</a> &#8211; which is an MVC framework like Ruby on Rails(except in Python instead of Ruby).</p>
<p>Django has a vast number of freely available libraries for common functions, in addition to coming with some handy features bundled &#8211; like an auto-generating admin interface, and authentication systems that are pre-built for you(and will work for 90% of the things you&#8217;d need it for).</p>
<p>With that said, all of Rawrmy&#8217;s initial systems are built &#8211; login, registration, and profiles &#8211; mostly by taking advantage of the excellent <a href='http://code.google.com/p/django-registration/'>django-registration</a> library.</p>
<p>One of the stumbling blocks that I&#8217;ve encountered while working on Rawrmy is flexibility &#8211; while I&#8217;d like to make my systems as flexible as possible for the sake of future content, I am rapidly finding that there is a certain point where you need to trade flexibility for <strong>just writing the code</strong>. This is becoming most evident with the area exploration system &#8211; areas are currently a model in my database, and their code looks like this:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">class</span> Area<span style="color: black;">&#40;</span>models.<span style="color: black;">Model</span><span style="color: black;">&#41;</span>:
	title = models.<span style="color: black;">CharField</span><span style="color: black;">&#40;</span>max_length=<span style="color: #ff4500;">500</span><span style="color: black;">&#41;</span>
	slug = models.<span style="color: black;">SlugField</span><span style="color: black;">&#40;</span>blank=<span style="color: #008000;">True</span><span style="color: black;">&#41;</span>
	monsters = models.<span style="color: black;">ManyToManyField</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'Monster'</span>,null=<span style="color: #008000;">True</span>,blank=<span style="color: #008000;">True</span><span style="color: black;">&#41;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">def</span> save<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>,<span style="color: #66cc66;">*</span>args,<span style="color: #66cc66;">**</span>kwargs<span style="color: black;">&#41;</span>:
		<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #008000;">self</span>.<span style="color: black;">slug</span>:
			<span style="color: #008000;">self</span>.<span style="color: black;">slug</span> = slugify<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">title</span><span style="color: black;">&#41;</span>
		<span style="color: #008000;">super</span><span style="color: black;">&#40;</span>Area,<span style="color: #008000;">self</span><span style="color: black;">&#41;</span>.<span style="color: black;">save</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">*</span>args,<span style="color: #66cc66;">**</span>kwargs<span style="color: black;">&#41;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__unicode__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
		<span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">self</span>.<span style="color: black;">title</span></pre></div></div>

<p>Originally, my URLS looked like this:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">url<span style="color: black;">&#40;</span>r<span style="color: #483d8b;">'explore/(?P&lt;area_slug&gt;.+)/$'</span>,views.<span style="color: black;">explore</span>,name=<span style="color: #483d8b;">'explore-area'</span><span style="color: black;">&#41;</span>,</pre></div></div>

<p>I had planned to retrieve the area the user was exploring based on the slug, and then use that to figure out what happened when they explored that area. However, I quickly came up against issues with the flexibility of this approach &#8211; while it makes it easy to add more areas and allow users to explore them, it makes it <strong>very</strong> difficult for me as the developer to add custom behavior to an area. If I want to add custom logic to the Forest area but not the Mountain area, how am I supposed to do that using the current configuration?</p>
<p>With that in mind, my urlpatterns have changed, and I now hard-code the area slug, and map it to a specific view:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">url<span style="color: black;">&#40;</span>r<span style="color: #483d8b;">'explore/forest/$'</span>,views.<span style="color: black;">explore_forest</span>,name=<span style="color: #483d8b;">'explore-forest'</span><span style="color: black;">&#41;</span>,</pre></div></div>

<p>This way is a little less flexible in terms of being able to deploy new areas instantly, <strong>but</strong> it allows me to write any custom logic I need &#8211; which is what I was looking for.</p>
<h2>Completed this week:</h2>
<ul>
<li>User management &#8211; login, logout, register</li>
<li>Escort management &#8211; choose escort</li>
<li>Class Choice &#8211; choose class</li>
</ul>
<h2>Still to do:</h2>
<ul>
<li>Exploring &#8211; needs a lot of fleshing out</li>
<li>Storyline &#8211; needs to be better (writer disappeared)</li>
<li>Hook &#8211; what makes this game fun?</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://buildingbrowsergames.com/2008/10/27/rawrmy-starts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

