<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Articles-rsses on Rauko Dev Blog</title>
    <link>http://rauko1753.gitlab.io/articles/index.xml</link>
    <description>Recent content in Articles-rsses on Rauko Dev Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Sat, 17 Sep 2016 15:31:28 -0600</lastBuildDate>
    <atom:link href="http://rauko1753.gitlab.io/articles/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Delta Clock Scheduler</title>
      <link>http://rauko1753.gitlab.io/articles/clock/</link>
      <pubDate>Sat, 17 Sep 2016 15:31:28 -0600</pubDate>
      
      <guid>http://rauko1753.gitlab.io/articles/clock/</guid>
      <description>&lt;p&gt;This article presents a simple data structure for scheduling which has the
potential to be extremely efficient, while maintaining elegance and simplicity.
 It is based of the idea of a delta clock, which I first encountered
years ago in my operating systems class as an undergrad.&lt;/p&gt;

&lt;p&gt;Suppose you have a set of events which you want to resolve at certain times.
You could just store these events in a list, along with the intended times like
this:&lt;/p&gt;

&lt;figure class=&#34;center&#34;&gt;
&lt;a href=&#34;http://rauko1753.gitlab.io/img/eventlist.gif&#34; data-lightbox=&#34;set&#34; data-title=&#34;A list of events stored the naive way&#34;&gt;
  &lt;img src=&#34;http://rauko1753.gitlab.io/img/eventlist.gif&#34;&gt;
&lt;/a&gt;
&lt;figcaption&gt;&lt;p&gt;A list of events stored the naive way&lt;/p&gt;&lt;/figcaption&gt;
&lt;/figure&gt;


&lt;p&gt;The problem is that in order to find all the events you want for the current
time interval, you have to iterate through the entire list. Updating the list
to advance in time also requires iterating through the whole list. Of course
for many roguelikes, O(n) for a scheduler is perfectly acceptable. However, for
games like Sticks and Stones, we&amp;rsquo;ll need to do a bit better. Instead, we&amp;rsquo;ll
store our events like this:&lt;/p&gt;

&lt;figure class=&#34;center&#34;&gt;
&lt;a href=&#34;http://rauko1753.gitlab.io/img/deltaclock.gif&#34; data-lightbox=&#34;set&#34; data-title=&#34;A list of events stored using time offsets&#34;&gt;
  &lt;img src=&#34;http://rauko1753.gitlab.io/img/deltaclock.gif&#34;&gt;
&lt;/a&gt;
&lt;figcaption&gt;&lt;p&gt;A list of events stored using time offsets&lt;/p&gt;&lt;/figcaption&gt;
&lt;/figure&gt;


&lt;p&gt;Each event is stored with a delta between it and the previous event. In our
example, Event1 is scheduled to fire in 5+15 ticks, while Event6 is scheduled
for 5+15+2 ticks. Adding an event to this list is simply a matter of iterating
through the list once, decrementing as we go. To advance in time, we simply
decrement (or pop) the first item in the list.&lt;/p&gt;

&lt;p&gt;Of course in the worst case scenario, our run time for adding an event to the
delta clock is still O(n), where n is the number of events. However, at least
in Sticks and Stones, a large number of the events (typically a creature move
event) all fire simultaneously. By combining simultaneous events into a single
node in our list, adding a new event gives us a run time which is O(t), were t
is the number of unique deltas.&lt;/p&gt;

&lt;p&gt;The implementation is pretty simple too! Here is some code:&lt;/p&gt;

&lt;div class=&#34;highlight&#34; style=&#34;background: #f8f8f8&#34;&gt;&lt;pre style=&#34;line-height: 125%&#34;&gt;&lt;span style=&#34;color: #204a87; font-weight: bold&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;Event&lt;/span&gt; &lt;span style=&#34;color: #204a87; font-weight: bold&#34;&gt;interface&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;{&lt;/span&gt;
  &lt;span style=&#34;color: #000000&#34;&gt;Fire&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;()&lt;/span&gt;
&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;}&lt;/span&gt;

&lt;span style=&#34;color: #204a87; font-weight: bold&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;deltanode&lt;/span&gt; &lt;span style=&#34;color: #204a87; font-weight: bold&#34;&gt;struct&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;{&lt;/span&gt;
  &lt;span style=&#34;color: #000000&#34;&gt;delta&lt;/span&gt; &lt;span style=&#34;color: #204a87&#34;&gt;int&lt;/span&gt;
  &lt;span style=&#34;color: #000000&#34;&gt;link&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color: #000000&#34;&gt;deltanode&lt;/span&gt;
  &lt;span style=&#34;color: #000000&#34;&gt;events&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;[]&lt;/span&gt;&lt;span style=&#34;color: #000000&#34;&gt;Event&lt;/span&gt;
&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;}&lt;/span&gt;

&lt;span style=&#34;color: #204a87; font-weight: bold&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;DeltaClock&lt;/span&gt; &lt;span style=&#34;color: #204a87; font-weight: bold&#34;&gt;struct&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;{&lt;/span&gt;
  &lt;span style=&#34;color: #000000&#34;&gt;head&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color: #000000&#34;&gt;deltanode&lt;/span&gt;
&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;}&lt;/span&gt;

&lt;span style=&#34;color: #204a87; font-weight: bold&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color: #000000&#34;&gt;c&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color: #000000&#34;&gt;DeltaClock&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;Schedule&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color: #000000&#34;&gt;e&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;Event&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;delta&lt;/span&gt; &lt;span style=&#34;color: #204a87&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;{&lt;/span&gt;
  &lt;span style=&#34;color: #204a87; font-weight: bold&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;prev&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;curr&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color: #000000&#34;&gt;deltanode&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;nil&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;c&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color: #000000&#34;&gt;head&lt;/span&gt;
  &lt;span style=&#34;color: #204a87; font-weight: bold&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;curr&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;nil&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;delta&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;curr&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color: #000000&#34;&gt;delta&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;{&lt;/span&gt;
    &lt;span style=&#34;color: #000000&#34;&gt;delta&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;-=&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;curr&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color: #000000&#34;&gt;delta&lt;/span&gt;
    &lt;span style=&#34;color: #000000&#34;&gt;prev&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;curr&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;curr&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;curr&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color: #000000&#34;&gt;link&lt;/span&gt;
  &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;}&lt;/span&gt;

  &lt;span style=&#34;color: #204a87; font-weight: bold&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;node&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color: #000000&#34;&gt;deltanode&lt;/span&gt;
  &lt;span style=&#34;color: #204a87; font-weight: bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;curr&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;nil&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;delta&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;curr&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color: #000000&#34;&gt;delta&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;{&lt;/span&gt;
    &lt;span style=&#34;color: #000000&#34;&gt;node&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;curr&lt;/span&gt;
  &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color: #204a87; font-weight: bold&#34;&gt;else&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;{&lt;/span&gt;
    &lt;span style=&#34;color: #000000&#34;&gt;node&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color: #000000&#34;&gt;deltanode&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color: #000000&#34;&gt;delta&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;curr&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color: #204a87&#34;&gt;make&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;([]&lt;/span&gt;&lt;span style=&#34;color: #000000&#34;&gt;Event&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;)}&lt;/span&gt;
    &lt;span style=&#34;color: #204a87; font-weight: bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;prev&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;nil&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;{&lt;/span&gt;
      &lt;span style=&#34;color: #000000&#34;&gt;c&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color: #000000&#34;&gt;head&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;node&lt;/span&gt;
    &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color: #204a87; font-weight: bold&#34;&gt;else&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;{&lt;/span&gt;
      &lt;span style=&#34;color: #000000&#34;&gt;prev&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color: #000000&#34;&gt;link&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;node&lt;/span&gt;
    &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;}&lt;/span&gt;
    &lt;span style=&#34;color: #204a87; font-weight: bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;curr&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;nil&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;{&lt;/span&gt;
      &lt;span style=&#34;color: #000000&#34;&gt;curr&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color: #000000&#34;&gt;delta&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;-=&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;delta&lt;/span&gt;
    &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;}&lt;/span&gt;
  &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;}&lt;/span&gt;

  &lt;span style=&#34;color: #000000&#34;&gt;node&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color: #000000&#34;&gt;events&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;append&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color: #000000&#34;&gt;node&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color: #000000&#34;&gt;events&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;e&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;)&lt;/span&gt;
&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;}&lt;/span&gt;

&lt;span style=&#34;color: #204a87; font-weight: bold&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color: #000000&#34;&gt;c&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color: #000000&#34;&gt;DeltaClock&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;Advance&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;[]&lt;/span&gt;&lt;span style=&#34;color: #000000&#34;&gt;Event&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;{&lt;/span&gt;
  &lt;span style=&#34;color: #204a87; font-weight: bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;c&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color: #000000&#34;&gt;head&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;nil&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;{&lt;/span&gt;
    &lt;span style=&#34;color: #204a87; font-weight: bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;nil&lt;/span&gt;
  &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;}&lt;/span&gt;

  &lt;span style=&#34;color: #000000&#34;&gt;events&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;c&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color: #000000&#34;&gt;head&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color: #000000&#34;&gt;events&lt;/span&gt;
  &lt;span style=&#34;color: #000000&#34;&gt;c&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color: #000000&#34;&gt;head&lt;/span&gt; &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;c&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color: #000000&#34;&gt;head&lt;/span&gt;&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color: #000000&#34;&gt;link&lt;/span&gt;
  &lt;span style=&#34;color: #204a87; font-weight: bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color: #000000&#34;&gt;events&lt;/span&gt;
&lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;That is really it! There are two additional features that you&amp;rsquo;ll find inside
the &lt;a href=&#34;https://gitlab.com/rauko1753/gorl/blob/master/util/clock.go&#34;&gt;GoRL&lt;/a&gt;
implementation of the delta clock. First, I added the ability to unschedule an
event. This was done by having the delta clock store a mapping of every event
to its node so I can easily find it later and remove it. Second, GoRL gives
deltas as floating point numbers, with the integer part representing the actual
delta, and the fractional part used to determine the order in which events
should fire.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>7DRL Ideas</title>
      <link>http://rauko1753.gitlab.io/articles/ideas/</link>
      <pubDate>Wed, 30 Mar 2016 10:21:11 -0600</pubDate>
      
      <guid>http://rauko1753.gitlab.io/articles/ideas/</guid>
      <description>&lt;p&gt;It is never too early to come up with ideas for next year&amp;rsquo;s 7DRL challenge.
Here is a compilation of ideas. Some of them are mine, others are I am merely
documenting because I liked them. I&amp;rsquo;ll try to link the source when I
borrow ideas. You are welcome to use any ideas here for your own roguelike.
They are general enough that even if two people were to use the same concept,
the resulting games would likely be radically different.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Sneeze (from a rather silly irc conversation about the worst roguelike ever)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The original idea was that when you sneeze your soul leaves your body&lt;/li&gt;
&lt;li&gt;You are unfortunately highly allergic to everything, and sneeze often&lt;/li&gt;
&lt;li&gt;You lose if your soul escape, but win if you catch it&lt;/li&gt;
&lt;li&gt;Sneezes also help you&lt;/li&gt;
&lt;li&gt;Certain mobs are killed by sneezing on them&lt;/li&gt;
&lt;li&gt;You can control the sneezes by going on/near plants you are allergic to&lt;/li&gt;
&lt;li&gt;Just don&amp;rsquo;t lose your soul!&lt;/li&gt;
&lt;li&gt;Potential items&lt;/li&gt;
&lt;li&gt;pepper shaker - instant sneeze without plants&lt;/li&gt;
&lt;li&gt;hanky - sneeze on it keeping your soul, drop for a monster trap&lt;/li&gt;
&lt;li&gt;eye-drops - clear up itchy eyes from allergies&lt;/li&gt;
&lt;li&gt;religious artifact - blesses you so your soul doesn&amp;rsquo;t escape on sneezing&lt;/li&gt;
&lt;li&gt;antihistamine - the goal item

&lt;ul&gt;
&lt;li&gt;stop all sneezing&lt;/li&gt;
&lt;li&gt;still have to escape (without sneezes)&lt;/li&gt;
&lt;li&gt;more points for using it earlier&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Battle Arena&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Try to recreate the feeling of LoL, HotS, etc&lt;/li&gt;
&lt;li&gt;Team has creeps and towers - tower defense style lanes&lt;/li&gt;
&lt;li&gt;Hero (and AI heroes) level quickly, try to destroy enemy base&lt;/li&gt;
&lt;li&gt;Could procedurally generate hero abilities&lt;/li&gt;
&lt;li&gt;Alternatively: Dungeon Defenders&lt;/li&gt;
&lt;li&gt;Alternatively: Dungeon Keeper, where you are the boss&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Gladiator&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You face off one versus one in a fight to the death&lt;/li&gt;
&lt;li&gt;Should be multiple, incomparable fighting styles&lt;/li&gt;
&lt;li&gt;Combat needs to be tactically interesting&lt;/li&gt;
&lt;li&gt;No bump until dead mechanics&lt;/li&gt;
&lt;li&gt;May be a nice way to prototype a cool combat system&lt;/li&gt;
&lt;li&gt;Could potentially make this an AI challenge too&lt;/li&gt;
&lt;li&gt;Need a pluggable architecture or protocol&lt;/li&gt;
&lt;li&gt;Need a way to simulate lots of matches&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Conservationist (from &lt;a href=&#34;http://forums.roguetemple.com/index.php?topic=3851.0&#34;&gt;Quendus&lt;/a&gt;)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quendus suggests a game where you must deal with dungeon conservationist
who will try and ensure that you don&amp;rsquo;t kill more than a certain quota of
each monster type&lt;/li&gt;
&lt;li&gt;Could also be fun to play as one of the conservationist trying to save the
creatures from poachers&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;College Games (from &lt;a href=&#34;https://theoppositeofprofound.wordpress.com/2014/03/16/day-7-and-download-links/&#34;&gt;HzZ&lt;/a&gt;)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implement college games as a roguelike&lt;/li&gt;
&lt;li&gt;Requires player to still be students&lt;/li&gt;
&lt;li&gt;Must attend class, eat, sleep, etc)&lt;/li&gt;
&lt;li&gt;Option: Humans versus Zombies&lt;/li&gt;
&lt;li&gt;Option: Assassin&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;1D Roguelike (from &lt;a href=&#34;http://forums.roguetemple.com/index.php?topic=3460.0&#34;&gt;halvorg&lt;/a&gt;)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Same abstraction that 2D figher games make&lt;/li&gt;
&lt;li&gt;Each 2D level amounts to traveling between destinations&lt;/li&gt;
&lt;li&gt;Need interesting abilities in order for tactical complexity&lt;/li&gt;
&lt;li&gt;Cool downs on abilities&lt;/li&gt;
&lt;li&gt;Abilities which are affected by time and space

&lt;ul&gt;
&lt;li&gt;Min/Max range on abilities&lt;/li&gt;
&lt;li&gt;Delays on abilities&lt;/li&gt;
&lt;li&gt;Field of view may be a factor too&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Still need interesting level gen, with doors, obstacles, etc&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Capture the Flag&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Player and NPC have characteristics like vision, speed, stealth&lt;/li&gt;
&lt;li&gt;You control the team captain, who chooses teammates&lt;/li&gt;
&lt;li&gt;Can give general orders to team like guard an area, explore an area, etc&lt;/li&gt;
&lt;li&gt;Should be a &amp;ldquo;shout&amp;rdquo; action which lets you share field of view&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Portal&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A top down 2D portal inspired roguelike&lt;/li&gt;
&lt;li&gt;Velocity based puzzles might not work, so puzzle elements need to be
majorly reworked for 2D&lt;/li&gt;
&lt;li&gt;Procedural puzzle generation would be amazing, but hard&lt;/li&gt;
&lt;li&gt;Can punt on PCG, and read from file&lt;/li&gt;
&lt;li&gt;File format should be human editable&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Superheroes (from &lt;a href=&#34;http://forums.roguetemple.com/index.php?topic=3632.0&#34;&gt;Jo&lt;/a&gt;)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Heroes have various RPG stats, which are enhanced by passive super powers&lt;/li&gt;
&lt;li&gt;Active super powers require energy, but energy recovers fairly quickly&lt;/li&gt;
&lt;li&gt;Open world, with baddies doing bad stuff, including super villians&lt;/li&gt;
&lt;li&gt;Can seek inspiration in &lt;a href=&#34;http://www.scribd.com/doc/15905669/Hi-Lo-Heroes&#34;&gt;Hi/Lo Heroes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;National Treasure&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Free masons hid some treasure, hero aims to find it&lt;/li&gt;
&lt;li&gt;Generate URR inspired clues and puzzles&lt;/li&gt;
&lt;li&gt;Can add in Indiana Jones style traps&lt;/li&gt;
&lt;li&gt;traps should be dangerous&lt;/li&gt;
&lt;li&gt;but they should be escapable with wits&lt;/li&gt;
&lt;li&gt;Enemies can try to hinder progress&lt;/li&gt;
&lt;li&gt;Can hurt you if too close&lt;/li&gt;
&lt;li&gt;Can steal clue answers&lt;/li&gt;
&lt;li&gt;You should be able to do the same&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Arcade Based Roguelike&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Transform an old arcade game into a roguelike&lt;/li&gt;
&lt;li&gt;Snake&lt;/li&gt;
&lt;li&gt;Tron&lt;/li&gt;
&lt;li&gt;Pac-man&lt;/li&gt;
&lt;li&gt;Frogger&lt;/li&gt;
&lt;li&gt;QBert&lt;/li&gt;
&lt;li&gt;Probably need some game play changes beyond switch to turn-based to make
the games interesting in the roguelike setting&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Story-Telling&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I&amp;rsquo;ve always wanted a roguelike with procedural and interactive story
generation - make a game which prototypes such a system&lt;/li&gt;
&lt;li&gt;Make the hero all-powerful so the focus is entirely on the story&lt;/li&gt;
&lt;li&gt;the real game would take the prototype, and add real mechanics&lt;/li&gt;
&lt;li&gt;A hybrid procedural + scripted could work&lt;/li&gt;
&lt;li&gt;The human writes mad-libs style prototypes&lt;/li&gt;
&lt;li&gt;Human content should be a tree with conditions on branches

&lt;ul&gt;
&lt;li&gt;Details filled in by computer&lt;/li&gt;
&lt;li&gt;Branch conditions informed in by player actio&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Fire Rescue (from &lt;a href=&#34;https://www.reddit.com/r/roguelikedev/comments/47e06u/weird_interesting_and_experimental_ideas_for_7drl/d0ctfkh&#34;&gt;TempusFrangit&lt;/a&gt;)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You are a firefighter trying to rescue victims of a fire&lt;/li&gt;
&lt;li&gt;Need to manage oxygen, building collapse, heat, etc&lt;/li&gt;
&lt;li&gt;Need to rescue as many people as possible&lt;/li&gt;
&lt;li&gt;Can call in water, for aid, etc&lt;/li&gt;
&lt;li&gt;Procedurally spreading fire, smoke, etc&lt;/li&gt;
&lt;li&gt;Take inspiration from &lt;a href=&#34;https://boardgamegeek.com/boardgame/100901/flash-point-fire-rescue&#34;&gt;Flashpoint&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
  </channel>
</rss>