<?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>natewm.com</title>
	<atom:link href="http://natewm.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://natewm.com/blog</link>
	<description></description>
	<lastBuildDate>Mon, 26 Jul 2010 19:43:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Simple Recursive Maze</title>
		<link>http://natewm.com/blog/2010/07/26/simple-recursive-maze/</link>
		<comments>http://natewm.com/blog/2010/07/26/simple-recursive-maze/#comments</comments>
		<pubDate>Mon, 26 Jul 2010 19:39:51 +0000</pubDate>
		<dc:creator>Nate</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[example]]></category>
		<category><![CDATA[generator]]></category>
		<category><![CDATA[maze]]></category>
		<category><![CDATA[program]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[py]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[random]]></category>
		<category><![CDATA[recursion]]></category>
		<category><![CDATA[recursive]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[scripting]]></category>

		<guid isPermaLink="false">http://natewm.com/blog/?p=155</guid>
		<description><![CDATA[Here is a simple recursive maze generator I wrote to help a friend learn a little more about how recursion works. I figured I&#8217;d post it here as well. #! /usr/bin/env python import random # Width and height of maze needs to be an even number because of walls WIDTH = 60 HEIGHT = 20 [...]]]></description>
			<content:encoded><![CDATA[<p>Here is a simple recursive maze generator I wrote to help a friend learn a little more about how recursion works.  I figured I&#8217;d post it here as well.</p>
<pre class="brush:python">#! /usr/bin/env python

import random

# Width and height of maze needs to be an even number because of walls
WIDTH = 60
HEIGHT = 20

# The change in x and y for all four directions
UP = (0, -1)
DOWN = (0, 1)
LEFT = (-1, 0)
RIGHT = (1, 0)

def recursive_maze(maze, x=0, y=0, dirx=0, diry=0):
	# Check if current position is inside maze boundry
    if 0 &lt;= y &lt; len(maze):
        if 0 &lt;= x &lt; len(maze[0]):
			# Check if this position can have a new hallway going to it
            if maze[y][x] == "#":
				# Make this position into a hallway
                maze[y][x] = " "

                # Connect this position with previous position
                maze[y-diry][x-dirx] = " "

                # Create direction list and randomize it's order
                directions = [UP, DOWN, LEFT, RIGHT]
                random.shuffle(directions)

                # Follows each direction when the callstack returns here
                for dx, dy in directions:
					# Go down this current direction
                    recursive_maze(maze, x + dx*2, y + dy*2, dx, dy)

def draw_maze(maze):
	# Draw top wall
    print "#" * (len(maze[0])+1)
    # Draw each line with left wall added in
    for line in maze:
        print "#" + "".join(line)

# Initialize the maze as am array of arrays filled with wall spaces
maze = [["#" for j in xrange(WIDTH)] for i in xrange(HEIGHT)]

# Start making the maze
recursive_maze(maze)

# Finally, draw it
draw_maze(maze)</pre>
<p>The output of this program will look similar to this:</p>
<pre class="brush:text">#############################################################
# #       #     #           #           #               #   #
# ##### # # ### # ######### ####### ### # ########### # # ###
#   #   # #   # #   #     #   #   # # # # #           # #   #
### # ### ### # ### ### # ### # # # # # ### ########### ### #
#   #   #     #   # #   # #   # #   # #   # #     #   # #   #
# ##### ######### # # ### # ### ##### ### # # ### # # # # ###
# #     # #     #   #   # # #   #     #   #     # # # # #   #
# # ##### # # ######### ### # ### ### # ######### # ### ### #
# # #       #         #   #   #     # #         # # #   #   #
# # ### ########### # ### ######### ########### # # # ### ###
# #   #   #       # #     #         #           # # # #     #
# # # ### # ####### ####### ### ### # ########### # # # ### #
# # # # #   #       #     #   #   # # #           # # # #   #
# # # # # ### ##### # ### ### ### ### ########### # # ### # #
# # # #   #   #     # # #     #   #   #         # #   #   # #
# ### # ### ##### ### # ####### ### ### ####### # # ### ### #
# #   # # # #   # #   #       #     #   #     #   #     #   #
# # ### # # # # ### ####### # ######### # ### ########### ###
#   #     #   #             #           #   #               #
#############################################################</pre>
]]></content:encoded>
			<wfw:commentRss>http://natewm.com/blog/2010/07/26/simple-recursive-maze/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python Message Queues and Publishers</title>
		<link>http://natewm.com/blog/2010/03/05/python-message-queues/</link>
		<comments>http://natewm.com/blog/2010/03/05/python-message-queues/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 01:37:37 +0000</pubDate>
		<dc:creator>Nate</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[message]]></category>
		<category><![CDATA[publisher]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[queue]]></category>
		<category><![CDATA[subscriber]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://natewm.com/blog/?p=127</guid>
		<description><![CDATA[PyWeek is approaching, so I&#8217;ve decided that I will post some cut-and-paste code to hopefully make the process of game development quicker and easier.  Usually I end up needing to rewrite basically the same code over and over again and spend most of the first two days of any competition just implementing basic features. This [...]]]></description>
			<content:encoded><![CDATA[<p>PyWeek is approaching, so I&#8217;ve decided that I will post some cut-and-paste code to hopefully make the process of game development quicker and easier.  Usually I end up needing to rewrite basically the same code over and over again and spend most of the first two days of any competition just implementing basic features.</p>
<p>This first article will feature message queue and publisher classes.  They are quite simple, yet certainly useful.</p>
<h3>Message Queue</h3>
<p>The message queue class is very short and simple.</p>
<pre class="brush:python">class MsgQueue:
    def __init__(self):
        self.messages = []

    def post(self, msg, category, *args):
        self.messages.append((msg, category, args))

    def get(self):
        for msg in self.messages:
            yield msg
        self.messages = []</pre>
<p>Messages can be posted to it and retrieved from it through the &#8216;post&#8217; and &#8216;get&#8217; functions.  The messages that are posted are tuples of message, category, and arguments.  The categories can be used to group messages of similar types together.  For example, in a game there might be a category called &#8216;switches,&#8217; where a message is posted each time a switch in the level is turned on or off.</p>
<p>The &#8216;get&#8217; function is a generator for iterating through the messages then clearing the list of messages.</p>
<pre class="brush:python">#Example Use for MsgQueue
q = MsgQueue()
q.post("red switch on", "switches")
q.post("red switch off", "switches", "with an extra argument")

# elsewhere in a sea of code ...

for msg,category,args in q.get():
    if category == "switches":
        if msg == "red switch on":
            fire_laser_beams("Pew! Pew!")
        elif msg == "red switch off":
            stop_firing_those_lasers()</pre>
<h3>Publisher With Message Queues Subscribers</h3>
<p>Message queues can subscribe to message categories within this message publisher class.</p>
<pre class="brush:python">class MsgPublisher:
    def __init__(self):
        self.categories = {}

    def subscribe(self, subscriber, category='default'):
        if not self.categories.has_key(category):
            self.categories[category] = []

        self.categories[category].append(subscriber)

    def unsubscribe(self, subscriber, category = None):
        if category is None:
            for c in self.categories.itervalues():
                c.remove(subscriber)

        else:
            if self.categories.has_key(category):
                self.categories[category].remove(subscriber)

    def post(self, msg, category='default', *args):
        if self.categories.has_key(category):
            for subscription in self.categories[category]:
                subscription.post(msg, category, *args)</pre>
<p>The method &#8216;subscribe&#8217; is used to subscribe a message queue to a publisher.  Categories are used to group subscriptions so that a single publisher can serve several uses.  A subscribing message queue will need to subscribe to each of these categories separately.  If category is blank &#8216;default&#8217; will be used.</p>
<p>The method &#8216;unsubscribe&#8217; removes a subscribed message queue from it&#8217;s subscription list(s).  If category is &#8216;None&#8217; (default) it will be unsubscribed from all of the categories.</p>
<p>The method &#8216;post&#8217; is used for posting messages to the subscribed message queues.  Each message will be sent to all of the message queues that have subscribed to the specified category.</p>
<pre class="brush:python">#Example use of MsgPublisher
qa = MsgQueue()
qb = MsgQueue()
qc = MsgQueue()

p = MsgPublisher()
p.subscribe(qa)
p.subscribe(qb)
p.subscribe(qb, "new category")
p.subscribe(qc, "new category")

p.post("message")  # sent to qa and qb
p.post("something else", "new category")  # sent to qb and qc

p.unsubscribe(qa)
p.unsubscribe(qb, "new category")  # qb will be removed from "new category"
p.unsubscribe(qb)  # now qb removed from all categories
p.unsubscribe(qc)  # will be removed from all categories</pre>
<h3>Opportunities for Use</h3>
<p>There are many times when speed and direct interaction are not needed but flexibility is.  In a game objects can simply plug in and listen to the messages being sent &#8212; creating an easy and modular system.  Also it is more like asking for things to happen than telling other parts of your program to do things.  These messages can be ignored.</p>
<p>Some instances where message queues and publishers might be useful include: game state changes, abstraction to other systems such as sound, world dynamics, communications between game entities, etc.</p>
]]></content:encoded>
			<wfw:commentRss>http://natewm.com/blog/2010/03/05/python-message-queues/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PIRATE KART II: KLIK HARDER</title>
		<link>http://natewm.com/blog/2010/03/05/pirate-kart-ii-klik-harder/</link>
		<comments>http://natewm.com/blog/2010/03/05/pirate-kart-ii-klik-harder/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 00:11:20 +0000</pubDate>
		<dc:creator>Nate</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[kart]]></category>
		<category><![CDATA[klik & Play]]></category>
		<category><![CDATA[pirate]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[pygame]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[quick]]></category>

		<guid isPermaLink="false">http://natewm.com/blog/?p=124</guid>
		<description><![CDATA[I had a lot of fun making four simple games for the THE 371-IN-1 KLIK &#38; PLAY PIRATE KART II: KLIK HARDER.  It was basically a challenge to see if a bunch of random people could make at least 371 games over the February 27-28 weekend.  We succeeded and then some!  106 people contributed and [...]]]></description>
			<content:encoded><![CDATA[<p>I had a lot of fun making four simple games for the <a href="http://www.glorioustrainwrecks.com/node/437">THE 371-IN-1 KLIK &amp; PLAY PIRATE KART II: KLIK HARDER</a>.  It was basically a challenge to see if a bunch of random people could make at least 371 games over the February 27-28 weekend.  We succeeded and then some!  106 people contributed and <a href="http://www.glorioustrainwrecks.com/games/pk2">529 games</a> were made.</p>
<p>Most of the simply used graphics and sounds stolen from other sources, but I decided to make custom content for all my games.  My favourite is Rolling Hills, which even has music!</p>
<p><a href="http://www.glorioustrainwrecks.com/games/pk2/ArmchairArmada">My four games can be found at here.</a> Have fun!</p>
]]></content:encoded>
			<wfw:commentRss>http://natewm.com/blog/2010/03/05/pirate-kart-ii-klik-harder/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Attempted Ludum Dare #16</title>
		<link>http://natewm.com/blog/2009/12/15/attempted-ludum-dare-16/</link>
		<comments>http://natewm.com/blog/2009/12/15/attempted-ludum-dare-16/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 03:18:12 +0000</pubDate>
		<dc:creator>Nate</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[competition]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[ld]]></category>
		<category><![CDATA[ld16]]></category>
		<category><![CDATA[ludum dare]]></category>
		<category><![CDATA[rapid]]></category>
		<category><![CDATA[timelapse]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://natewm.com/blog/?p=113</guid>
		<description><![CDATA[I attempted Ludum Dare #16 last weekend.  It&#8217;s very difficult to completely write from scratch a full game.  My project did not come near completion, but I had a lot of fun.  Instead of having writing sprites, animation, resource management, gui, tilemaps, etc. code it would have been much quicker to have started with a [...]]]></description>
			<content:encoded><![CDATA[<p>I attempted <a href="http://www.ludumdare.com">Ludum Dare</a> #16 last weekend.  It&#8217;s very difficult to completely write from scratch a full game.  My project did not come near completion, but I had a lot of fun.  Instead of having writing sprites, animation, resource management, gui, tilemaps, etc. code it would have been much quicker to have started with a library or framework that had taken care of most of that stuff.</p>
<p>Here is a timelapse video of me working.  It is 22 hours of the 48 hour long competition.  The only parts not recorded was when my computer was off and when my screen was blank from inactivity.  <span>Music is Escape Route by Corran on the Cave Story ReMix Project based on the music of Cave Story by Pixel. </span></p>
<p style="text-align: center;"><object width="560" height="344" allowfullscreen="true" type="application/x-shockwave-flash" data="http://www.youtube.com/v/OhDuiFxhjsw&fs=1&rel=0&hd=1&showinfo=0"><param name="movie" value="http://www.youtube.com/v/OhDuiFxhjsw&fs=1&rel=0&hd=1&showinfo=0" /></object></p>
]]></content:encoded>
			<wfw:commentRss>http://natewm.com/blog/2009/12/15/attempted-ludum-dare-16/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Procedural Adventure Map Generation</title>
		<link>http://natewm.com/blog/2009/04/26/procedural-adventure-map-generation/</link>
		<comments>http://natewm.com/blog/2009/04/26/procedural-adventure-map-generation/#comments</comments>
		<pubDate>Sun, 26 Apr 2009 20:40:47 +0000</pubDate>
		<dc:creator>Nate</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[adventure]]></category>
		<category><![CDATA[dungeon]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[generator]]></category>
		<category><![CDATA[map]]></category>
		<category><![CDATA[procedural]]></category>
		<category><![CDATA[world]]></category>

		<guid isPermaLink="false">http://natewm.com/blog/?p=99</guid>
		<description><![CDATA[A few days ago I was thinking about how to procedurally generate interesting maps for an adventure game.  I did not want them to look like they were generated by an algorithm, but instead would be convincing enough to appear as if it had been designed by a human.  I wanted the maps to both [...]]]></description>
			<content:encoded><![CDATA[<p>A few days ago I was thinking about how to procedurally generate interesting maps for an adventure game.  I did not want them to look like they were generated by an algorithm, but instead would be convincing enough to appear as if it had been designed by a human.  I wanted the maps to both have a natural appearance and a nice flow of game-play similar to a Zelda game.</p>
<p>This article will outline how such a procedurally generated map could be made.  Note, I have not yet written the program.  All the illustrations shown here were hand-drawn, but the results of a real implementation of this generater should be the same.</p>
<h3>Room Seeds</h3>
<div id="attachment_100" class="wp-caption aligncenter" style="width: 330px"><img class="size-full wp-image-100" title="map_gen_01" src="http://natewm.com/blog/../media/blog/2009/04/map_gen_01.png" alt="Starting locations for rooms to grow from." width="320" height="320" /><p class="wp-caption-text">Starting locations for rooms to grow from.</p></div>
<p>The first thing to do is to randomly select starting locations to grow rooms from, as indicated as green circles.  These locations will be stored in a list of grid cells.</p>
<h3>Grow Rooms</h3>
<div id="attachment_101" class="wp-caption aligncenter" style="width: 330px"><img class="size-full wp-image-101" title="map_gen_02" src="http://natewm.com/blog/../media/blog/2009/04/map_gen_02.png" alt="Rooms grown to fill cells." width="320" height="320" /><p class="wp-caption-text">Rooms grown to fill cells.</p></div>
<p>A cell will be randomly selected from the list of active cells.  If the cell has empty neighboring cell that will be activated, given the same room id, and added to the active cell list.  If the cell has no available empty neighboring cell it would be removed from the list.  This loops until all of the cells are filled, defining the shapes of each of the rooms.  The growth pattern is shown as blue lines and the room boundaries are indicated as black lines.</p>
<h3>Connectivity</h3>
<div id="attachment_102" class="wp-caption aligncenter" style="width: 330px"><img class="size-full wp-image-102" title="map_gen_03" src="http://natewm.com/blog/../media/blog/2009/04/map_gen_03.png" alt="Finding how the rooms are connected." width="320" height="320" /><p class="wp-caption-text">Finding how the rooms are connected.</p></div>
<p>The cells of neighboring rooms will be noted and a list of possible door locations will created.  These possible door locations are indicated as short red lines.</p>
<p>A separate list will be generated noting what rooms are accessible to each other room.  The links between rooms are shown here as pale yellow lines.  No spacial information is needed, but for illustration purposes I&#8217;m using the room seeds to make the connectivity easier to see.</p>
<h3>Flow of game-play</h3>
<div id="attachment_105" class="wp-caption aligncenter" style="width: 330px"><img class="size-full wp-image-105" title="map_gen_041" src="http://natewm.com/blog/../media/blog/2009/04/map_gen_041.png" alt="Flow of game-play connectivity." width="320" height="320" /><p class="wp-caption-text">Flow of game-play connectivity.</p></div>
<p>A starting location will be selected.  If this is the game&#8217;s over-world then the starting point may be any random room.  If this is an interior location, such as a castle, an outer room may be a better choice.  The starting location is shown as a little star here.</p>
<p>Starting from the start location connecting paths between rooms will be defined.  A running inventory of items obtained in rooms will be kept track of, such as the collecting of keys.  If a key is available then a locked door between rooms may be defined.  This will result in the creation of a new room group.  The room groups are shown as colored lines with the group id and group depth level also indicated.</p>
<p>Interlinking between rooms of the same group may be fairly common.  Cross linking between rooms of the same group depth level should be more rare to make sure rooms or whole groups are not skipped too often.</p>
<p>Keys will keep track of what room group id they were obtained in.  Keys should only be used in room groups of greater or equal group id to make sure the player doesn&#8217;t get stuck by choosing a different order of game-play &#8212; since any key can open any door and the key dissappears after use.  Use-once and infinite-use items do not need as much care since there is no risk of cutting off access to pathways.</p>
<h3>Defining Doors</h3>
<div id="attachment_104" class="wp-caption aligncenter" style="width: 330px"><img class="size-full wp-image-104" title="map_gen_05" src="http://natewm.com/blog/../media/blog/2009/04/map_gen_05.png" alt="Choosing where doors will go." width="320" height="320" /><p class="wp-caption-text">Choosing where doors will go.</p></div>
<p>Doors will be selected from the possible door locations list.  In the above illustration unlocked doors are white and locked doors are yellow.  I also shown where keys may be obtained.</p>
<p>Doors do not need to be a single space.  Several doors may be selected, whole walls removed, or any other pattern of connectivity could be used depending on situation and desired result.</p>
<h3>Using room growth info</h3>
<div id="attachment_107" class="wp-caption aligncenter" style="width: 330px"><img class="size-full wp-image-107" title="map_gen_061" src="http://natewm.com/blog/../media/blog/2009/04/map_gen_061.png" alt="Using room growth information." width="320" height="320" /><p class="wp-caption-text">Using room growth information.</p></div>
<p>Dead ends in the room growth process can be useful.  As long as the cell is not in front of a door, we know the player does not need to cross through these cells to reach other areas in the game.  These cells can safely be blocked off if we wanted them to be.</p>
<h3>Beautification</h3>
<div id="attachment_110" class="wp-caption aligncenter" style="width: 330px"><img class="size-full wp-image-110" title="map_gen_071" src="http://natewm.com/blog/../media/blog/2009/04/map_gen_071.jpg" alt="Final map." width="320" height="320" /><p class="wp-caption-text">Final map.</p></div>
<p>We can now use all the information we had gathered in the previous steps to generate the final map.  Here I filled in the spaces between the rooms and the dead ends with trees.  I also added a few other decorations just to make it not look so sparse.</p>
<p>And there you have it &#8212; an intersting procedurally generated map ready to be explored.</p>
]]></content:encoded>
			<wfw:commentRss>http://natewm.com/blog/2009/04/26/procedural-adventure-map-generation/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Alien Game Prototype</title>
		<link>http://natewm.com/blog/2009/02/12/alien-game-prototype/</link>
		<comments>http://natewm.com/blog/2009/02/12/alien-game-prototype/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 00:05:09 +0000</pubDate>
		<dc:creator>Nate</dc:creator>
				<category><![CDATA[Dev Log]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[2d]]></category>
		<category><![CDATA[alien]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[ludum]]></category>
		<category><![CDATA[minild]]></category>
		<category><![CDATA[monochrome]]></category>
		<category><![CDATA[prototype]]></category>

		<guid isPermaLink="false">http://natewm.com/blog/?p=93</guid>
		<description><![CDATA[For one of the Ludum Dare mini competitions a few months back I started hacking together a simple arcade style game.  The human race is being attacked an eaten by a vicious alien species.  You play the role of a benevolent alien who comes to the rescue of the helpless humans. Originally the only defence [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_94" class="wp-caption aligncenter" style="width: 655px"><img class="size-full wp-image-94" title="alien_game" src="http://natewm.com/blog/../media/blog/2009/02/alien_game.png" alt="Alien Game Prototype" width="645" height="485" /><p class="wp-caption-text">Alien Game Prototype</p></div>
<p>For one of the Ludum Dare mini competitions a few months back I started hacking together a simple arcade style game.  The human race is being attacked an eaten by a vicious alien species.  You play the role of a benevolent alien who comes to the rescue of the helpless humans.</p>
<p>Originally the only defence the hero had against the invading aliens was going to be a tractor beam &#8212; where you must grab and throw the aliens to get rid of them.  After showing it to the Pipe Cleaner Man he insisted that I added lasers and homing missiles, so I did.</p>
<p>I&#8217;m not certain what I&#8217;m going to do with this project.  As it began as a quick hack for a 48 hour competition, it is not very well designed.  It would need a considerable amount of rewriting before being able to transform it into a real game.</p>
<p>For the time being I think I&#8217;ll hold off before posting the actual game for download.  I would like to add at least a simple scoreboard and actually being able to win or lose before sharing it.</p>
]]></content:encoded>
			<wfw:commentRss>http://natewm.com/blog/2009/02/12/alien-game-prototype/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Random Neighborhood Generator</title>
		<link>http://natewm.com/blog/2009/01/20/random-neighborhood-generator/</link>
		<comments>http://natewm.com/blog/2009/01/20/random-neighborhood-generator/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 22:18:43 +0000</pubDate>
		<dc:creator>Nate</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[experiments]]></category>
		<category><![CDATA[generator]]></category>
		<category><![CDATA[neighborhood]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[random]]></category>

		<guid isPermaLink="false">http://natewm.com/blog/?p=86</guid>
		<description><![CDATA[I was wondering how visually interesting a randomly generated neighborhood could be a made by using simple binary subdivision.  Basically the algorithm starts with a square, cuts it in half, cuts those halves in half, and so on to produce streets and plots of land. It is in no way how a real neighborhood would [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_87" class="wp-caption aligncenter" style="width: 610px"><img class="size-full wp-image-87" title="neighborhood" src="http://natewm.com/blog/../media/blog/2009/01/neighborhood.gif" alt="Random Neighborhood Generator" width="600" height="257" /><p class="wp-caption-text">Random Neighborhood Generator</p></div>
<p>I was wondering how visually interesting a randomly generated neighborhood could be a made by using simple binary subdivision.  Basically the algorithm starts with a square, cuts it in half, cuts those halves in half, and so on to produce streets and plots of land.</p>
<p>It is in no way how a real neighborhood would be laid out, but for such simplicity I am rather satisfied with the results.  Such a system could randomly produce results that are visually interesting enough for possibly a small, simple flying or driving based game &#8212; such as having to rush a firetruck to burning homes, for example.</p>
<p>Here is the source code: <a title="Random Neighborhood Generator" href="http://www.natewm.com/media/software/experiments/python/neighborhood.py">neighborhood.py</a></p>
]]></content:encoded>
			<wfw:commentRss>http://natewm.com/blog/2009/01/20/random-neighborhood-generator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Towlr</title>
		<link>http://natewm.com/blog/2009/01/20/towlr/</link>
		<comments>http://natewm.com/blog/2009/01/20/towlr/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 21:27:25 +0000</pubDate>
		<dc:creator>Nate</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[pygame]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[towlr]]></category>
		<category><![CDATA[ychytaeit]]></category>

		<guid isPermaLink="false">http://natewm.com/blog/?p=82</guid>
		<description><![CDATA[A bunch of people at a game development competition site was putting together short confusing games they called &#8220;Towlrs.&#8221;  The intent of a Towlr is to leave the player wondering, &#8220;What exactly am I suppose to do to beat this game?&#8221;  I decided to get in on the action. You Can&#8217;t Have Your Towlr And [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_83" class="wp-caption aligncenter" style="width: 330px"><img class="size-full wp-image-83" title="ychytaeit" src="http://natewm.com/blog/../media/blog/2009/01/ychytaeit.gif" alt="You Can't Have Your Towlr And Eat It Too" width="320" height="240" /><p class="wp-caption-text">You Can&#39;t Have Your Towlr And Eat It Too</p></div>
<p>A bunch of people at a game development competition site was putting together short confusing games they called &#8220;Towlrs.&#8221;  The intent of a Towlr is to leave the player wondering, &#8220;What exactly am I suppose to do to beat this game?&#8221;  I decided to get in on the action.</p>
<p><em>You Can&#8217;t Have Your Towlr And Eat It Too</em> was my attempt at a Towlr.  It may be considerably easier than many of the other Towlrs, but the concept is somewhat interesting.</p>
<p>You can download it at the <a title="Towlr" href="http://towlr.com/">Towlr website</a> (which includes a Windows executable), or you can go to the <a href="http://natewm.com/ychytaeit/">page</a> I quickly thrown up on my site (Which requires Python and Pygame because I&#8217;m too lazy to copy the compiled vesion to my site.  Also, in the future I may move this to a different directory on my site, so be warned!)</p>
]]></content:encoded>
			<wfw:commentRss>http://natewm.com/blog/2009/01/20/towlr/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Catching Up</title>
		<link>http://natewm.com/blog/2009/01/20/catching-up/</link>
		<comments>http://natewm.com/blog/2009/01/20/catching-up/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 20:43:37 +0000</pubDate>
		<dc:creator>Nate</dc:creator>
				<category><![CDATA[Dev Log]]></category>
		<category><![CDATA[catching up]]></category>

		<guid isPermaLink="false">http://natewm.com/blog/?p=79</guid>
		<description><![CDATA[I haven&#8217;t been very good at keeping this blog up-to-date.  A few things have happened since some of my previous posts, so I decided to try to bring this site up to speed. The following posts will show off a few of the things I worked a little on in the past few weeks.  Most [...]]]></description>
			<content:encoded><![CDATA[<p>I haven&#8217;t been very good at keeping this blog up-to-date.  A few things have happened since some of my previous posts, so I decided to try to bring this site up to speed.</p>
<p>The following posts will show off a few of the things I worked a little on in the past few weeks.  Most likely many of these projects will not amount to much in the future, but I thought I should share them anyway.</p>
<p>I&#8217;ve been meaning to write about pretty much everything I had worked on irregardless of their likeliness of completion.  Some things are simply done for fun without any real future plans for them.</p>
<p>I am now going to begin writing about the stuff I neglected to write about earlier.</p>
]]></content:encoded>
			<wfw:commentRss>http://natewm.com/blog/2009/01/20/catching-up/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2009 Plain-Text Calendars</title>
		<link>http://natewm.com/blog/2009/01/04/2009-plain-text-calendars/</link>
		<comments>http://natewm.com/blog/2009/01/04/2009-plain-text-calendars/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 00:32:26 +0000</pubDate>
		<dc:creator>Nate</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[2009]]></category>
		<category><![CDATA[calendar]]></category>
		<category><![CDATA[plain-text]]></category>
		<category><![CDATA[text]]></category>

		<guid isPermaLink="false">http://natewm.com/blog/?p=71</guid>
		<description><![CDATA[A new year has begun and I found myself wanting a small simple plain-text calendars, so I made a few.  Here they are for anybody who might find them useful. Standard 2009 Calendar ====== January ===== Su Mo Tu We Th Fr Sa . . . . 1 2 3 4 5 6 7 8 [...]]]></description>
			<content:encoded><![CDATA[<p>A new year has begun and I found myself wanting a small simple plain-text calendars, so I made a few.  Here they are for anybody who might find them useful.</p>
<h3>Standard 2009 Calendar</h3>
<pre>====== January =====
Su Mo Tu We Th Fr Sa
.  .  .  .  1  2  3
4  5  6  7  8  9  10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31</pre>
<p><a href="http://www.natewm.com/media/docs/2009_calendar.txt">Download Standard 2009 Calendar</a></p>
<h3>Compressed 2009 Calendar</h3>
<pre>JAN      1111111111222222222233
1234567890123456789012345678901</pre>
<p><a href="http://www.natewm.com/media/docs/2009_compressed_calendar.txt">Download Compressed 2009 Calendar</a></p>
<h3>2009 List Calendar</h3>
<pre>JANUARY
 1 -
 2 -
 3 -
 4 -
 5 -
 6 -
 7 -
...</pre>
<p><a href="http://www.natewm.com/media/docs/2009_list_calendar.txt">Download 2009 List Calendar</a></p>
<p>[edit]Corrected 2009 List Calendar so that the months have 10&#8242;s instead of 0&#8242;s.  If I wrote a script to make these instead of hand typing them this error may have been avoided![/edit]</p>
]]></content:encoded>
			<wfw:commentRss>http://natewm.com/blog/2009/01/04/2009-plain-text-calendars/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
