<?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>selene tan &#187; selene</title>
	<atom:link href="http://selenetan.com/author/selene/feed/" rel="self" type="application/rss+xml" />
	<link>http://selenetan.com</link>
	<description>reaching for the moon and sky</description>
	<lastBuildDate>Wed, 16 Feb 2011 06:22:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Guitar toy</title>
		<link>http://selenetan.com/2010/08/guitar-toy/</link>
		<comments>http://selenetan.com/2010/08/guitar-toy/#comments</comments>
		<pubDate>Sun, 22 Aug 2010 20:10:09 +0000</pubDate>
		<dc:creator>selene</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Lab]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[karplus-strong]]></category>
		<category><![CDATA[synthesis]]></category>

		<guid isPermaLink="false">http://selenetan.com/?p=245</guid>
		<description><![CDATA[I was playing with the Flash Player 10 audio API and made a little guitar toy using Karplus-Strong synthesis. 
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_GuitarSynthToy_283259148"
			class="flashmovie"
			width="580"
			height="300">
	<param name="movie" value="http://selenetan.com/wp-content/uploads/2010/08/GuitarSynthToy.swf" />
	<param name="scale" value="noscale" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="http://selenetan.com/wp-content/uploads/2010/08/GuitarSynthToy.swf"
			name="fm_GuitarSynthToy_283259148"
			width="580"
			height="300">
		<param name="scale" value="noscale" />
	<!--<![endif]-->
		 
	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>]]></description>
			<content:encoded><![CDATA[<p>I was playing with the Flash Player 10 audio API and made a little guitar toy using <a title="Karplus Strong on Wikipedia" href="https://secure.wikimedia.org/wikipedia/en/wiki/Karplus-Strong_string_synthesis">Karplus-Strong</a> synthesis.</p>

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_GuitarSynthToy_92296422"
			class="flashmovie"
			width="580"
			height="300">
	<param name="movie" value="http://selenetan.com/wp-content/uploads/2010/08/GuitarSynthToy.swf" />
	<param name="scale" value="noscale" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="http://selenetan.com/wp-content/uploads/2010/08/GuitarSynthToy.swf"
			name="fm_GuitarSynthToy_92296422"
			width="580"
			height="300">
		<param name="scale" value="noscale" />
	<!--<![endif]-->
		<a href="http://adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p>

	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
]]></content:encoded>
			<wfw:commentRss>http://selenetan.com/2010/08/guitar-toy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simple Sudoku and Modes of Thinking</title>
		<link>http://selenetan.com/2010/02/simple-sudoku-and-modes-of-thinking/</link>
		<comments>http://selenetan.com/2010/02/simple-sudoku-and-modes-of-thinking/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 21:34:00 +0000</pubDate>
		<dc:creator>selene</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[interface design]]></category>
		<category><![CDATA[pattern recognition]]></category>
		<category><![CDATA[puzzle]]></category>
		<category><![CDATA[sudoku]]></category>

		<guid isPermaLink="false">http://selenetan.com/?p=62</guid>
		<description><![CDATA[A while back, I found Simple Sudoku, a freeware Sudoku puzzle maker/solver. It generates puzzles for you to solve, and also has a lot of features to make it easier to solve them. After playing way too much Sudoku in it, I realized why it makes things so much easier. On the surface, Sudoku is [...]]]></description>
			<content:encoded><![CDATA[<p>A while back, I found <a href="http://angusj.com/sudoku/">Simple Sudoku</a>, a freeware <a href="http://en.wikipedia.org/wiki/Sudoku">Sudoku</a> puzzle maker/solver. It generates puzzles for you to solve, and also has a lot of features to make it easier to solve them. After playing way too much Sudoku in it, I realized why it makes things so much easier. On the surface, Sudoku is all about logical deduction&#8211;the 9 in this square means you can eliminate 9&#8242;s elsewhere in the row and column, and so on. However, at higher levels, Sudoku is actually about pattern recognition, and that is what Simple Sudoku reveals.</p>
<p><span id="more-62"></span></p>
<p>One feature of Simple Sudoku is that it automatically shows the candidates for a square. This takes away the tedium of having to manually eliminate the obvious candidates, like 9&#8242;s in a row that already has a 9. Still, the candidates sometimes look like a mess.<br />
Simple Sudoku solves this with a feature called candidate filtering. What it does is highlight all squares that might be a particular number, e.g. all possible 9&#8242;s. This makes it easy to see, for example, when there&#8217;s only one possible 9 left in a column.</p>
<div class="separator" style="clear: both; text-align: center;"><a style="margin-left: 1em; margin-right: 1em;" href="http://selenetan.com/asherarpg/uploaded_images/simple_sudoku_lone_6-782602.jpg"><img src="http://selenetan.com/asherarpg/uploaded_images/simple_sudoku_lone_6-782598.jpg" border="0" alt="A screenshot of Simple Sudoku that shows candidate filtering on 6's. A now-obvious lone 6 in the rightmost column has been circled." width="263" height="320" /></a></div>
<div style="margin-left: auto; margin-right: auto; text-align: center; width: 60%;">A screenshot of Simple Sudoku that shows candidate filtering on 6&#8242;s. A now-obvious lone 6 in the rightmost column has been circled.</div>
<p>Candidate filtering is good for slightly more advanced deductions, as well. Let&#8217;s say you have one 3&#215;3 cell where all the possible 6&#8242;s are in the same row. You can eliminate 6 as a candidate from the rest of the row. Or, visually, you can do this:</p>
<div class="separator" style="clear: both; text-align: center;"><a style="margin-left: 1em; margin-right: 1em;" href="http://selenetan.com/asherarpg/uploaded_images/simple_sudoku_eliminate_row-733225.jpg"><img src="http://selenetan.com/asherarpg/uploaded_images/simple_sudoku_eliminate_row-733217.jpg" border="0" alt="The same screenshot of Simple Sudoku with filtering on 6's. In the upper-right 3x3 cell, an arrow is drawn from the row of 6's across the row, showing that you can eliminate the other 6's." width="263" height="320" /></a></div>
<div style="margin-left: auto; margin-right: auto; text-align: center; width: 60%;">The same screenshot of Simple Sudoku with filtering on 6&#8242;s. In the upper-right 3&#215;3 cell, an arrow is drawn from the row of 6&#8242;s across the row, showing that you can eliminate the other 6&#8242;s.</div>
<p>There is an advanced Sudoku technique called <a href="http://www.sadmansoftware.com/sudoku/technique12.htm">coloring</a> or <a href="http://www.sudoku129.com/puzzles/tips_43.php">linked candidates</a>. It involves forming a chain of candidate squares where you know that some of the squares contain the candidate, and the rest do not. However, which set of squares contains the candidate is unknown at the start. The technique involves &#8220;coloring in&#8221; the candidate squares in an alternating pattern, e.g. with blue and pink. If any pink square contains the number, then all pink squares will contain the same number, and all blue squares will not. The reverse is true as well.</p>
<p>The technique can be difficult to understand from a description, but in Simple Sudoku, it&#8217;s really easy to do. Filter candidates so that, say, all 5&#8242;s are shown. Find a place where there are only two 5 candidates in a row, column, or large cell. Color one of the squares pink, and one blue. Then continue the chain as long as you can find links where there are only two 5&#8242;s. If you see two pink neighboring each other, then the pinks don&#8217;t have 5&#8242;s and the blues are the ones with 5&#8242;s.</p>
<div class="separator" style="clear: both; text-align: center;"><a style="margin-left: 1em; margin-right: 1em;" href="http://selenetan.com/asherarpg/uploaded_images/simple_sudoku_coloring_anim-749095.gif"><img src="http://selenetan.com/asherarpg/uploaded_images/simple_sudoku_coloring_05a-2-716669.jpg" border="0" alt="" width="263" height="320" /></a></div>
<div style="margin-left: auto; margin-right: auto; text-align: center; width: 60%;">A screenshot showing two neighboring pink squares. Click to view an animation of the process.</div>
<p>Coloring turns a painstaking deduction problem into a simple pattern-recognition problem. Going through the chain of logic step-by-step takes a while and can be prone to error, but marking squares as colors is easy. And on the computer, it&#8217;s easily reversible. I&#8217;ll often start coloring squares even when &#8220;simpler&#8221; deductions can be made because in Simple Sudoku, coloring <em>is</em> a simple deduction.</p>
<p>In general, as you get better at a type of logic puzzle, you start recognizing common sequences of deductions. Internally, you formulate a series of rules: &#8220;If <em>this</em>, then do <em>that</em>.&#8221; What Simple Sudoku and other good puzzle interfaces do is 1) Make it easier to notice common deductions, and 2) Make it easier to spot the &#8220;If this&#8221; part of your rules.</p>
]]></content:encoded>
			<wfw:commentRss>http://selenetan.com/2010/02/simple-sudoku-and-modes-of-thinking/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Prototype: Sideliner</title>
		<link>http://selenetan.com/2010/02/prototype-sideliner/</link>
		<comments>http://selenetan.com/2010/02/prototype-sideliner/#comments</comments>
		<pubDate>Sun, 14 Feb 2010 21:06:00 +0000</pubDate>
		<dc:creator>selene</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Lab]]></category>

		<guid isPermaLink="false">http://selenetan.com/?p=61</guid>
		<description><![CDATA[One thing I noticed about the Ludum Dare Flash entries was that most of them were done with flixel. For the competition, I decided not to use it because I didn&#8217;t want to learn a new library in the same 48 hours I had to make a game. Anyway, I&#8217;ve finally gotten around to trying [...]]]></description>
			<content:encoded><![CDATA[<p>One thing I noticed about the Ludum Dare Flash entries was that most of them were done with <a href="http://flixel.org">flixel</a>. For the competition, I decided not to use it because I didn&#8217;t want to learn a new library in the same 48 hours I had to make a game.</p>
<p>Anyway, I&#8217;ve finally gotten around to trying flixel out. I cast around a bit for a game idea that I thought would suit flixel&#8217;s strengths. It&#8217;s a game with 3 tracks where rocks come at you and you have to switch tracks to dodge them.</p>
<p><a href="http://selenetan.com/games/wip/sideliner/index0.5.html">Play the Sideliner prototype</a></p>
<p>Unfortunately, it&#8217;s not really fun. The graphics were also a pain. Rocks I can do; the drill took me at least twice as long.</p>
]]></content:encoded>
			<wfw:commentRss>http://selenetan.com/2010/02/prototype-sideliner/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SEEK*TOR</title>
		<link>http://selenetan.com/2010/01/seektor/</link>
		<comments>http://selenetan.com/2010/01/seektor/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 08:50:05 +0000</pubDate>
		<dc:creator>selene</dc:creator>
				<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[game design]]></category>
		<category><![CDATA[game development]]></category>
		<category><![CDATA[ludumdare]]></category>
		<category><![CDATA[seektor]]></category>

		<guid isPermaLink="false">http://selenetan.com/?p=113</guid>
		<description><![CDATA[SEEK*TOR is a puzzle game about revealing the single enemy turret on an obscured map. It was created for the 16th Ludum Dare competition, a 48-hour long solo game development challenge. The theme of the competition was &#8220;Explore.&#8221; SEEK*TOR was ranked 5th overall of the 121 entries. Play it below: 
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_seektor_659842789"
			class="flashmovie"
			width="480"
			height="300">
	<param name="movie" value="http://selenetan.com/uploads/Games/seektor.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="http://selenetan.com/uploads/Games/seektor.swf"
			name="fm_seektor_659842789"
			width="480"
			height="300">
	<!--<![endif]-->
		]]></description>
			<content:encoded><![CDATA[<p>SEEK*TOR is a puzzle game about revealing the single enemy turret on   an obscured map. It was created for the <a rel="nofollow" href="http://www.ludumdare.com/compo/">16th Ludum Dare  competition</a>,  a 48-hour long solo game development challenge. The  theme of the  competition was &#8220;Explore.&#8221;</p>
<p>SEEK*TOR was ranked 5th overall of the 121 entries. Play it below:</p>
<p><span>[kml_flashembed publishmethod="static" fversion="9.0.0" movie="<a class="linkifyplus" href="http://selenetan.com/uploads/Games/seektor.swf">http://selenetan.com/uploads/Games/seektor.swf</a>" width="480" height="360" targetclass="flashmovie"]</span><a href="http://adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p>

	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
<p>Other links:</p>
<ul>
<li><a rel="nofollow" href="http://www.ludumdare.com/compo/ludum-dare-16/?uid=1550">Ludum  Dare entry page</a></li>
<li><a rel="nofollow" href="http://selenetan.com/dump/ludumdare16/">Original  competition  entry</a> (the version above contains some bugs I fixed after the  end of the  competition)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://selenetan.com/2010/01/seektor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fixed bugs in SEEK*TOR</title>
		<link>http://selenetan.com/2009/12/fixed-bugs-in-seektor/</link>
		<comments>http://selenetan.com/2009/12/fixed-bugs-in-seektor/#comments</comments>
		<pubDate>Sun, 20 Dec 2009 04:57:00 +0000</pubDate>
		<dc:creator>selene</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[seektor]]></category>

		<guid isPermaLink="false">http://selenetan.com/?p=59</guid>
		<description><![CDATA[I finally tracked down the bug in SEEK*TOR that sometimes makes the red enemy square (and some of the ally turrets) unclickable. While I was at it, I squashed a few more bugs I found along the way.Play SEEK*TOR v 1.2 Changes in this version: Fixes bug where the upper-left turret is unclickable Fixes bug [...]]]></description>
			<content:encoded><![CDATA[<p><span>I <b>finally</b> tracked down the bug in SEEK*TOR that sometimes makes the red  enemy square (and some of the ally turrets) unclickable. While I was at it, I squashed a few more bugs I found along the way.</span><br /><span><br /></span><br /><span><a href="http://selenetan.com/games/seektor/bugfix20091219/">Play SEEK*TOR v 1.2</a></span></p>
<p><span>Changes in this version:</span>
<ol>
<li>Fixes bug where the upper-left turret is unclickable</li>
<li>Fixes bug where sometimes the red enemy square is unclickable</li>
<li>Fixes bug where on very high levels, the level never starts</li>
<li>Turns off debug flag so turret layouts are randomized between 4  choices instead of just one</li>
<li>Background music now loops</li>
</ol>
<p>So what caused the unclickable-things bug, and how did I track it down?</p>
<p>With the help of debug output, I discovered that when a turret or enemy was unclickable, it was because something else on the screen &#8220;stole&#8221; the click event. In the unclickable upper-left turret bug, the click event was going to the flare display in the upper-left. In the unclickable enemy square bug, the click event was going to an object with a name like SpriteXXX. XXX was a number that was larger the later in the game the bug appeared.</p>
<p>The object name was my biggest clue. The number meant that it was a sprite that was created every level. The turrets are created anew every level, but they show up as TurretXXX. So I combed through the code until I found a sprite that was being created every level.</p>
<p>The sprite I found was the little explosion graphic that shows when you click on the enemy turret. In my competition-driven haste, I&#8217;d written code that created a new sprite every time the explosion went off, and didn&#8217;t bother to make it unclickable, or remove it from the stage afterward.&nbsp; To fix the bug, I modified the code so that it created the explosion sprite only once and reused it every level, and I made sure the sprite was unclickable. That fixed the bug.</p>
]]></content:encoded>
			<wfw:commentRss>http://selenetan.com/2009/12/fixed-bugs-in-seektor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Post-Mortem: SEEK*TOR</title>
		<link>http://selenetan.com/2009/12/post-mortem-seektor/</link>
		<comments>http://selenetan.com/2009/12/post-mortem-seektor/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 03:12:00 +0000</pubDate>
		<dc:creator>selene</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[game design]]></category>
		<category><![CDATA[game development]]></category>
		<category><![CDATA[ludumdare]]></category>
		<category><![CDATA[postmortem]]></category>
		<category><![CDATA[seektor]]></category>

		<guid isPermaLink="false">http://selenetan.com/?p=58</guid>
		<description><![CDATA[So this was my first Ludum Dare. I did the Global Game Jam back in February, so I had some idea of what to expect, although the GGJ was teams rather than solo. One thing I do regret is not interacting more with the community–IRC, Twitter, etc. I could have used more feedback than I [...]]]></description>
			<content:encoded><![CDATA[<p>So this was my first Ludum Dare. I did the Global Game Jam back in  February, so I had some idea of what to expect, although the GGJ was  teams rather than solo. One thing I do regret is not interacting more  with the community–IRC, Twitter, etc. I could have used more feedback  than I got, instead of relying almost entirely on my husband’s comments.<br />
Friday night I spent brainstorming ideas and thinking over mechanics.  Saturday morning I started coding. By late afternoon / early evening, I  had the major mechanics implemented, but it wasn’t fun. At that point  the turrets were just yellow diamonds (and they were warp portals which  your cyan circle teleported between), and the hint circle always  disappeared before you could fire again.</p>
<p><img src="http://www.ludumdare.com/compo/wp-content/uploads/2009/12/screen_old01-300x225.jpg" alt="Screenshot of older version of SEEK*TOR" width="300" height="225" /><br />
Screenshot of older version of SEEK*TOR</p>
<p>The best thing that happened for the game occurred when I sent my  Saturday prototype to a friend for feedback. He told me two very  important things:</p>
<ol>
<li> He had the most fun figuring out where the hint circles intersected</li>
<li>He wanted to know why you had to aim and fire to reveal the map  instead of just placing light bulbs around the “platforms” (yellow  diamonds)</li>
</ol>
<p>So I made the hints persist but fade over time. That means you can  see the hint circle intersections, but the screen doesn’t become  overly-cluttered with old hint circles. It also means the aiming  mechanic is important, since if you take too long, the previous hint  will have faded away. I also changed the theming of the game so that the  portals became turrets and you selected a turret to fire from, rather  than teleporting between them.<br />
Sunday was mostly a day of polish. The big feature changes were  implementing multiple levels, scoring, and flare limits. I also added  the start, game over, and between-level screens, made the graphics,  (such as they are–hooray for GlowFilter!) composed a background track,  and created the sound effects.<br />
In the end, I was successful in terms of having a pretty-much  finished game at the end. On the other hand, seeing some of the other  entries, I kind of wish I’d done something a little more ambitious…<br />
Things that worked out:</p>
<ol>
<li>Using abstract glow-y vector graphics instead of trying to draw. (I  spent about 20 minutes attempting to draw a single turret before  deciding my time was better spent elsewhere.)</li>
<li>The game selects from 4 (hand-crafted) turret layouts and randomizes  the enemy and player locations. That turned out to be enough  randomization that I didn’t need to make a turret layout generator. In  fact, I only just realized that I left the game in debug mode where it  always chooses the same turret layout.</li>
</ol>
<p>Things that didn’t work out:</p>
<ol>
<li>When I started, I implemented everything in one file just to see if  the core mechanic would work. I made such a mess of my code that I spent  hours late Saturday night moving code around so I could add levels.  Spending hours working on code without actually adding new  functionality–even regressing at times–was very hard on my morale.</li>
<li>I spent too long trying to make my git history tidy. I’d keep  forgetting to add a file to the commit or not commit for a while and  wind up with a gigantic commit that involved 3 features and all the  source files. Then I’d try to figure out how to break up or revise the  commits. (And how to use vim, since that’s the default git editor…)  Given that I never had to revert to a previous version, it was kind of  silly of me.</li>
</ol>
<p>Tools and Libraries Used:</p>
<ol>
<li>FlashDevelop</li>
<li>TweenLite</li>
<li>git</li>
<li>ACID Music Studio</li>
<li>Free VSTi soft synths: <a href="http://www.greenoak.com/crystal/">Crystal</a>,  <a href="http://www.bostreammail.net/ers/lazysnake.html">LazySnake</a>,  and <a href="http://www.bostreammail.net/ers/ersdrums.html">ErsDrums</a></li>
<li>Audacity</li>
<li>sfxr</li>
</ol>
<p>(cross-posted from <a href="http://www.ludumdare.com/compo/2009/12/14/post-mortem-seektor/">Ludum Dare</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://selenetan.com/2009/12/post-mortem-seektor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Finished my first Ludum Dare!</title>
		<link>http://selenetan.com/2009/12/finished-my-first-ludum-dare/</link>
		<comments>http://selenetan.com/2009/12/finished-my-first-ludum-dare/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 03:28:00 +0000</pubDate>
		<dc:creator>selene</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[game development]]></category>
		<category><![CDATA[ludumdare]]></category>
		<category><![CDATA[seektor]]></category>

		<guid isPermaLink="false">http://selenetan.com/?p=57</guid>
		<description><![CDATA[Sweet, I managed to complete my first Ludum Dare! I was thinking of learning Push Button Engine for it, but after going through a couple of tutorials I decided I’d go for straight-up Actionscript instead. PBE has some neat features, but I need more time to get my head around its component-based programming model.Anyway, SEEK*TOR [...]]]></description>
			<content:encoded><![CDATA[<div class="entry">Sweet, I managed to complete my first Ludum Dare! I was thinking  of learning <a href="http://pushbuttonengine.com/">Push Button Engine</a>  for it, but after going through a couple of tutorials I decided I’d go  for straight-up Actionscript instead. PBE has some neat features, but I  need more time to get my head around its component-based programming  model.<br />Anyway, SEEK*TOR is a game where you’re trying to locate the enemy by  firing search flares from turrets. You have limited flares, and turrets  have a limited range, so you need to carefully choose where you aim.  It’s in Flash.</p>
<p><a href="http://www.ludumdare.com/compo/ludum-dare-16/?action=preview&amp;uid=1550">SEEK*TOR  Voting page</a><br />
<style type="text/css">   #gallery-1 {    margin: auto;   }   #gallery-1 .gallery-item {    float: left;    margin-top: 10px;    text-align: center;    width: 33%;   }   #gallery-1 img {    border: 2px solid #cfcfcf;   }   #gallery-1 .gallery-caption {    margin-left: 0;   }  </style>
<p>
<div class="gallery galleryid-13810" id="gallery-1">
<dl class="gallery-item">
<dt class="gallery-icon">     <a href="http://www.ludumdare.com/compo/wp-content/uploads/2009/12/screen01.jpg" title="screen01"><img alt="" class="attachment-thumbnail" height="150" src="http://www.ludumdare.com/compo/wp-content/uploads/2009/12/screen01-150x150.jpg" title="screen01" width="150" /></a>    </dt>
</dl>
<dl class="gallery-item">
<dt class="gallery-icon">     <a href="http://www.ludumdare.com/compo/wp-content/uploads/2009/12/screen02.jpg" title="screen02"><img alt="" class="attachment-thumbnail" height="150" src="http://www.ludumdare.com/compo/wp-content/uploads/2009/12/screen02-150x150.jpg" title="screen02" width="150" /></a>    </dt>
</dl>
<dl class="gallery-item">
<dt class="gallery-icon">     <a href="http://www.ludumdare.com/compo/wp-content/uploads/2009/12/screen03.jpg" title="screen03"><img alt="" class="attachment-thumbnail" height="150" src="http://www.ludumdare.com/compo/wp-content/uploads/2009/12/screen03-150x150.jpg" title="screen03" width="150" /></a>    </dt>
</dl>
<p><br style="clear: both;" /></div>
<p>Incidentally, I’m annoyed with Audacity because it added an initial  silence to all the mp3 files I encoded with it. So all the sounds come  in late. <img alt=":(" class="wp-smiley" src="http://www.ludumdare.com/compo/wp-includes/images/smilies/icon_sad.gif" />  Also, I just realized that I forgot to  have the background music loop…</p>
<p>(Cross-posted from <a href="http://www.ludumdare.com/compo/2009/12/13/finished-my-first-ludum-dare/">Ludum Dare</a>) </div>
]]></content:encoded>
			<wfw:commentRss>http://selenetan.com/2009/12/finished-my-first-ludum-dare/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Git on Dreamhost</title>
		<link>http://selenetan.com/2009/10/git-on-dreamhost/</link>
		<comments>http://selenetan.com/2009/10/git-on-dreamhost/#comments</comments>
		<pubDate>Wed, 14 Oct 2009 08:43:00 +0000</pubDate>
		<dc:creator>selene</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[dreamhost]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://selenetan.com/?p=51</guid>
		<description><![CDATA[Though my website is hosted on Dreamhost, these days I mostly use them for version control hosting. So I was very happy when they set up git on their servers. Casper Fabricius&#8217; Keeping git repositories on Dreamhost using SSH has some instructions and a handy script for automating the process. Thing is, I tend to [...]]]></description>
			<content:encoded><![CDATA[<p>Though my website is hosted on <a href="http://www.dreamhost.com">Dreamhost</a>, these days I mostly use them for version control hosting. So I was very happy when they set up <a href="http://git-scm.com">git</a> on their servers.</p>
<p>Casper Fabricius&#8217; <a href="http://casperfabricius.com/site/2008/09/21/keeping-git-repositories-on-dreamhost-using-ssh/">Keeping git repositories on Dreamhost using SSH</a> has some instructions and a handy script for automating the process. Thing is, I tend to create the folders and files for a project before I set up the git repository. Casper&#8217;s script assumes you want to create the folder and repository at the same time.</p>
<p>So here&#8217;s my version of the script. If you call it without arguments, it assumes you want to make a repository for the current directory.</p>
<div class="codesnip-container" >
<div class="bash codesnip" style="font-family:monospace;">
<ol>
<li class="li1">
<div class="de1"><span class="re2">DREAMGIT_DOMAIN</span>=user<span class="sy0">@</span>yourdomain.com</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#91;</span> <span class="re4">$#</span> <span class="re5">-lt</span> 1 <span class="br0">&#93;</span>; <span class="kw1">then</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re2">PROJECT_DIR</span>=<span class="co1">${PWD##*/}</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re2">PROJECT_DIR</span>=$1</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">mkdir</span> <span class="re1">$PROJECT_DIR</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">cd</span> <span class="re1">$PROJECT_DIR</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">fi</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">ssh</span> <span class="re1">$DREAMGIT_DOMAIN</span> <span class="st_h">&#8216;mkdir -p ~/git/&#8217;</span><span class="re1">$PROJECT_DIR</span><span class="st_h">&#8216;.git &amp;amp;&amp;amp; cd ~/git/&#8217;</span><span class="re1">$PROJECT_DI</span><span class="re1">$git</span> init</div>
</li>
<li class="li1">
<div class="de1">git remote add origin <span class="kw2">ssh</span>:<span class="sy0">//</span><span class="re1">$DREAMGIT_DOMAIN</span><span class="sy0">/</span>~<span class="sy0">/</span>git<span class="sy0">/</span><span class="re1">$PROJECT_DIR</span>.git</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">touch</span> .gitignore</div>
</li>
<li class="li1">
<div class="de1">git add .</div>
</li>
<li class="li1">
<div class="de1">git commit <span class="re5">-m</span> <span class="st_h">&#8216;Created new repo&#8217;</span></div>
</li>
<li class="li1">
<div class="de1">git push origin master</div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="st0">&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">[branch <span class="es1">\&quot;</span>master<span class="es1">\&quot;</span>]</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">remote = origin</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">merge = refs/heads/master&quot;</span> <span class="sy0">&amp;</span>gt;<span class="sy0">&amp;</span>gt;.git<span class="sy0">/</span>config</div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="st0">&quot;Your new git repo &#8216;<span class="es2">$PROJECT_DIR</span>&#8216; is ready and initialized at</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"><span class="es2">$DREAMGIT_DOMAIN</span>/~/git/<span class="es2">$PROJECT_DIR</span>.git&quot;</span></div>
</li>
</ol>
</div>
</div>
<p>Note: both Casper&#8217;s and my scripts still work if you call them with a directory that exists, e.g. <strong>dreamgit dir_that_exists</strong>. You&#8217;ll see <strong>mkdir</strong> spout an error, but the rest will execute.</p>
]]></content:encoded>
			<wfw:commentRss>http://selenetan.com/2009/10/git-on-dreamhost/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scrambling Words for Maximum Fun</title>
		<link>http://selenetan.com/2009/09/scrambling-words-for-maximum-fun/</link>
		<comments>http://selenetan.com/2009/09/scrambling-words-for-maximum-fun/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 13:07:00 +0000</pubDate>
		<dc:creator>selene</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[algorithm]]></category>
		<category><![CDATA[game design]]></category>
		<category><![CDATA[puzzle]]></category>
		<category><![CDATA[word scrambling]]></category>

		<guid isPermaLink="false">http://selenetan.com/?p=50</guid>
		<description><![CDATA[A while back, I worked on an online Flash version of the game show Don&#8217;t Forget the Lyrics. It&#8217;s a game show where contestants get up and sing along to some music until the music stops dead and they have to fill in the rest of the line. They have three lifelines (a la Who [...]]]></description>
			<content:encoded><![CDATA[<p>A while back, I worked on an online Flash version of the game show Don&#8217;t Forget the Lyrics. It&#8217;s a game show where contestants get up and sing along to some music until the music stops dead and they have to fill in the rest of the line. They have three lifelines (a la Who Wants to be a Millionaire) they can use: show the first three words, turn the question into a multiple-choice question, or get their pre-appointed friend to answer for them. The first two are easy to code up, the third not so much. We didn&#8217;t have the budget to record people singing the missing lyrics, so it had to be text-based. We thought of randomly selecting one of the multiple choice answers, but realized that people would probably feel cheated at being given a wrong answer. And it would be too easy to just always give them the right answer.</p>
<p>At some point, I came up with the idea of showing the player a scrambled version of the correct answer. That would leave it up to the player&#8217;s skill to get the correct answer from it, so it wasn&#8217;t a guaranteed success but would still seem fair. Then I had to come up with an algorithm for scrambling words that wasn&#8217;t too easy, but wasn&#8217;t too hard for anyone to solve in the time limit.</p>
<p><span id="more-50"></span><strong>Try 1:</strong> Scramble the whole string, including spaces.<br />
<strong>Sample:</strong> UM  LOYDE L AYEYO HHIAS LSRT MNP OTIM NOPKATSFOHA EEFEN</p>
<p>This was dead easy to code and incredibly hard to solve. Scrambling the spaces in with the rest of the letters made it especially hard, since people automatically read them as word boundaries.</p>
<p><strong>Try 2:</strong> Split the string into words, then scramble each word<br />
<strong>Sample:</strong> I DEAM ITSH AHFL YPNO LAFH MENYKO MTOENSR TO SEAEPL UOY</p>
<p>This was much better, but still pretty hard. The time limit on answering meant that people often ran out of time while trying to unscramble the string. But then I remembered an e-mail forward I&#8217;d seen which claimed that if you leave the first and last letters of a word intact but scramble the rest, people can still pretty much read it.</p>
<p><strong>Try 3:</strong> Split the string into words, freeze the first and last letters, and scramble the middle ones. (For 2-letter words, give a 50% chance of swapping the order.)<br />
<strong>Sample:</strong> I MDAE THIS HALF PONY HLAF MEKONY MSOETNR TO PAESLE YOU</p>
<p>This was too easy. 3-letter words were always in order, since freezing the first and last letters left a 1-letter string to scramble. 4-letter words would stay in order half the time since their inner length-2 string got scrambled.</p>
<p><strong>Try 4:</strong> This had a lot of special cases.</p>
<ol>
<li>Split the string into words. For each word longer than 1 letter:</li>
<li>If the word is 2 letters long, 50% chance of swapping the letters</li>
<li>If the word is 3 letters long, scramble it</li>
<li>If the word is 4 letters long, freeze the first letter and scramble the rest</li>
<li>If the word is 5 or more letters, freeze the first and last letter and scramble the inner letters</li>
</ol>
<p><strong>Sample:</strong> I MEAD THSI HFLA PYON HLFA MEONKY MOESNTR OT PAESLE OUY</p>
<p>The results were really good! Easy enough to solve within the time limit most of the time, and just hard enough to feel good about solving. The computer science geek in me wishes there were some way to do it with fewer special cases and a continuous difficulty scale, but short words really need to be treated differently because of their length. Still, it was a pretty interesting problem. Who knew an e-mail forward would come in so handy?</p>
<p>(Incidentally, the phrase is &#8220;I made this half-pony half-monkey monster to please you&#8221;, which is from the song <a href="http://www.jonathancoulton.com/songdetails/Skullcrusher%20Mountain">Skullcrusher Mountain</a> by Jonathan Coulton. Check it out!)</p>
]]></content:encoded>
			<wfw:commentRss>http://selenetan.com/2009/09/scrambling-words-for-maximum-fun/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>eFusjon RAD Game</title>
		<link>http://selenetan.com/2009/07/efusjon-rad-game/</link>
		<comments>http://selenetan.com/2009/07/efusjon-rad-game/#comments</comments>
		<pubDate>Sun, 19 Jul 2009 01:21:03 +0000</pubDate>
		<dc:creator>selene</dc:creator>
				<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[game design]]></category>
		<category><![CDATA[game development]]></category>

		<guid isPermaLink="false">http://selenetan.com/?p=128</guid>
		<description><![CDATA[eFusjon RAD is a game promoting the eFusjon energy drink, launched in July 2009. In RAD you control the Efusjonaut, and must absorb eFusjon to neutralize free radicals while avoiding toxins. The Efusjonaut is controlled with the mouse, and can switch between an offensive toxin-eliminating mode and a passive free radical-neutralizing mode. I came up [...]]]></description>
			<content:encoded><![CDATA[<p><a rel="nofollow" href="http://www.efusjongaming.com/games/">eFusjon  RAD</a> is a game promoting the eFusjon energy  drink, launched in July  2009.</p>
<p>In RAD you control the Efusjonaut, and must absorb  eFusjon to  neutralize free radicals while avoiding toxins. The  Efusjonaut is  controlled with the mouse, and can switch between an  offensive  toxin-eliminating mode and a passive free radical-neutralizing  mode.</p>
<p>I came up with the gameplay concept and led  the  project. A graphic designer came up with the look and feel for the  menus  and an animator/artist created the main game art and sprites. I   incorporated everything into Flash, set up the overarching code   structure, and programmed the gameplay and scoring. Other developers   worked on the leaderboard score submission, some of the menus, and the   instructions. After some testing showed that people were confused about   how to play, I came up with and implemented the idea of adding pop-up   tutorial messages in-game explaining things.</p>
<p>Links:</p>
<ul>
<li> <a rel="nofollow" href="http://www.efusjongaming.com/">eFusjon  Gaming</a> is the official game website,  including details about the  promotion</li>
<li><a rel="nofollow" href="http://www.efusjongaming.com/games/">eFusjon  RAD</a> is the page where you can play the game.  Registration is  required because the game is part of a contest.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://selenetan.com/2009/07/efusjon-rad-game/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

