<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <title>Rubygame: The Blog - Home</title>
  <id>tag:blog.rubygame.org,2008:mephisto/</id>
  <generator uri="http://mephistoblog.com" version="0.8.0">Mephisto Drax</generator>
  <link href="http://blog.rubygame.org/feed/atom.xml" rel="self" type="application/atom+xml"/>
  <link href="http://blog.rubygame.org/" rel="alternate" type="text/html"/>
  <updated>2008-10-25T20:37:24Z</updated>
  <entry xml:base="http://blog.rubygame.org/">
    <author>
      <name>jacius</name>
    </author>
    <id>tag:blog.rubygame.org,2008-10-25:339</id>
    <published>2008-10-25T03:20:00Z</published>
    <updated>2008-10-25T20:37:24Z</updated>
    <category term="announcements"/>
    <link href="http://blog.rubygame.org/articles/2008/10/25/rubygame-2-4-released-project-seeking-new-maintainer" rel="alternate" type="text/html"/>
    <title>Rubygame 2.4 released; Project seeking new maintainer</title>
<content type="html">
            &lt;p&gt;I have two major announcements related to Rubygame:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Rubygame 2.4 is now available&lt;/li&gt;
&lt;li&gt;I&#8217;m stepping down from my position as project maintainer&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;First, the happier news. Rubygame 2.4 is, finally, done. This release contains the much-anticipated event handler system, which allows you to define how your objects respond to events (e.g. keyboard presses, mouse clicks, and even your own custom, gameplay-related events) in a dynamic, object-oriented way. I&#8217;m very proud of this system, because it is flexible, extensible, and powerful, yet at the same time easy to use and made of very simple parts.&lt;/p&gt;

&lt;p&gt;Rubygame 2.4 also includes a new suite of event classes for keyboard, joystick, and mouse input, and all the other things. They are a full replacement of the older events, and I strongly encourage you to upgrade your games to use them (use EventQueue#enable_new_style_events to do that). &lt;/p&gt;

&lt;p&gt;This release also includes a patch to enable key repeat, contributed by Roger Ostrander (atiaxi), and several bug fixes. See the &lt;a href=&quot;http://docs.rubygame.org/rdoc/2.4.0/files/NEWS.html&quot;&gt;NEWS file&lt;/a&gt; for the full details. &lt;a href=&quot;http://rubyforge.org/frs/?group_id=5089&quot;&gt;Downloads for Rubygame 2.4&lt;/a&gt; are available at Rubyforge. Precompiled gems for Windows and Mac are not available as I&#8217;m writing this, but I&#8217;ll post them at that same spot as they are sent to me. (Hint, hint.)&lt;/p&gt;

&lt;p&gt;Now then, the more serious news.&lt;/p&gt;

&lt;p&gt;After 4 years of off-and-on work on Rubygame, I have finally decided to step down as project maintainer altogether. From my vantage point, this is long overdue. Anyone reading this blog over the past 8 months can see the reason why I&#8217;m stepping down: I just don&#8217;t have the time, energy, or motivation to be a reliable maintainer anymore.&lt;/p&gt;

&lt;p&gt;So, Rubygame 2.4 will be the last release of Rubygame &lt;em&gt;I&lt;/em&gt; make, but I hope not the last release of Rubygame &lt;em&gt;ever&lt;/em&gt;. There are plenty of ideas on the &lt;a href=&quot;http://docs.rubygame.org/rdoc/2.4.0/files/ROADMAP.html&quot;&gt;ROADMAP&lt;/a&gt;, and &lt;a href=&quot;http://github.com/jacius/rubygame/&quot;&gt;the Git repository&lt;/a&gt; has a lot of code in the dev-3.0.0 and old-3.0.0 branches that could be cleaned up and released.&lt;/p&gt;

&lt;p&gt;But the project needs a new maintainer with the time, enthusiasm, and experience to keep it moving forward.&lt;/p&gt;

&lt;p&gt;If you&#8217;re interested in being that person, please send me an email: jacius at gmail.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.rubygame.org/">
    <author>
      <name>jacius</name>
    </author>
    <id>tag:blog.rubygame.org,2008-10-24:338</id>
    <published>2008-10-24T23:42:00Z</published>
    <updated>2008-10-25T00:42:24Z</updated>
    <category term="development"/>
    <link href="http://blog.rubygame.org/articles/2008/10/24/status-update-october-24" rel="alternate" type="text/html"/>
    <title>Status Update (October 24)</title>
<content type="html">
            &lt;p&gt;I&#8217;ve finished the massive cleanup of the panda demo. I moved all the random shape drawing to another demo (demo_draw.rb), and turned the panda demo into a pretty good example of game structure. It has a Game class which organizes the clock, screen, sprites, event queue and handler, etc. The Game, the sprites, and the sprite group all use HasEventHandler, and nearly everything is event-based, even updating and redrawing the sprites! Plus everything&#8217;s commented to explain it, so it might actually be a pretty useful practical example.&lt;/p&gt;

&lt;p&gt;I also decided to partially revert my simplification of MethodAction from &lt;a href=&quot;http://blog.rubygame.org/articles/2008/10/21/status-update-october-21&quot;&gt;the other day&lt;/a&gt;. Specifically, I added back in the behavior of calling the method first with the event as the argument, and then if that fails (raises ArgumentError), tries again with no argument. So, it&#8217;s less picky about whether the method takes an argument or not, which makes it easier to use, and reduces the number of confusing errors people will see. All good things.&lt;/p&gt;

&lt;p&gt;Rubygame 2.4 will be released later tonight. I&#8217;m cleaning up, updating the NEWS and ROAPMAP, and other stuff right now in preparation to package it up!&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.rubygame.org/">
    <author>
      <name>jacius</name>
    </author>
    <id>tag:blog.rubygame.org,2008-10-24:335</id>
    <published>2008-10-24T07:04:00Z</published>
    <updated>2008-10-24T07:32:23Z</updated>
    <category term="development"/>
    <link href="http://blog.rubygame.org/articles/2008/10/24/status-update-october-23" rel="alternate" type="text/html"/>
    <title>Status Update (October 23)</title>
<content type="html">
            &lt;p&gt;Worked on porting the infamous panda demo to use the new event classes and handler system. I&#8217;m also cleaning it up and doing some reorganization and documentation of it &#8211; about time, too! I don&#8217;t think that demo has even seen a proper cleanup in 3 years.&lt;/p&gt;

&lt;p&gt;I also made a few changes to the API as I was working on the demo:&lt;/p&gt;

&lt;p&gt;First, I renamed &lt;strong&gt;AllTrigger to AndTrigger&lt;/strong&gt; and &lt;strong&gt;AnyTrigger to OrTrigger&lt;/strong&gt;. &#8220;And&#8221; and &#8220;Or&#8221; just feel more natural to me. I actually wrote AndTrigger instinctively while coding the demo, before I remembered that it wasn&#8217;t called that. &#8220;And&#8221; and &#8220;Or&#8221; are more familiar logical concepts, too: &#8220;This trigger &lt;em&gt;and&lt;/em&gt; that trigger match the event&#8221;, or &#8220;This trigger &lt;em&gt;or&lt;/em&gt; that trigger matches the event.&#8221; So, they should be memorable.&lt;/p&gt;

&lt;p&gt;Second, HasEventHandler no longer needs to be initialized; that means, no need for &lt;code&gt;super()&lt;/code&gt; in your #initialize method. Before I made the change, I ran into a mysterious &#8220;nil has no method&#8221; error while coding the demo, because I forgot to initialize it. Well, having to explicitly initialize it is just silly and leads to errors like I myself ran into. So, now it initializes itself the first time it needs to.&lt;/p&gt;

&lt;p&gt;The mechanism for that is simple. For example:&lt;/p&gt;

&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;handle&lt;/span&gt;( event )&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;iv&quot;&gt;@event_handler&lt;/span&gt;.handle( event )&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;rescue&lt;/span&gt; &lt;span class=&quot;co&quot;&gt;NoMethodError&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;iv&quot;&gt;@event_handler&lt;/span&gt; = &lt;span class=&quot;co&quot;&gt;EventHandler&lt;/span&gt;.new() &lt;span class=&quot;r&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;iv&quot;&gt;@event_handler&lt;/span&gt;.nil?&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;r&quot;&gt;retry&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;Anyway, I&#8217;m still planning to release the new version tomorrow. There will also be another important announcement tomorrow.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.rubygame.org/">
    <author>
      <name>jacius</name>
    </author>
    <id>tag:blog.rubygame.org,2008-10-21:333</id>
    <published>2008-10-21T23:17:00Z</published>
    <updated>2008-10-21T23:36:20Z</updated>
    <category term="development"/>
    <link href="http://blog.rubygame.org/articles/2008/10/21/status-update-october-21" rel="alternate" type="text/html"/>
    <title>Status Update (October 21)</title>
<content type="html">
            &lt;p&gt;Finished the 3 things I &lt;a href=&quot;http://blog.rubygame.org/articles/2008/10/21/status-update-october-20&quot;&gt;mentioned yesterday&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Added _make_magic_action and _make_magic_trigger to HasEventHandler. I moved the conversion behavior from magic_hooks to those methods, now you can use method overriding and inheritance to add custom conversion rules. (Oh, and I also renamed magic_hooks to make_magic_hooks.)&lt;/li&gt;
&lt;li&gt;Put actions in EventActions, and triggers in EventTriggers. Added docs describing how to write your own action or trigger classes.&lt;/li&gt;
&lt;li&gt;Simplified MethodAction. No more pass_event (it always passes), and no more rescuing ArgumentError, either.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also merged the event_handler git branch into the dev-2.4 branch, and updated the NEWS file.&lt;/p&gt;

&lt;p&gt;I&#8217;ll have to look everything over, but I think it&#8217;s done. I might do some extra fiddling around between now and the 24th, but I think I could release it as-is now.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.rubygame.org/">
    <author>
      <name>jacius</name>
    </author>
    <id>tag:blog.rubygame.org,2008-10-21:332</id>
    <published>2008-10-21T06:14:00Z</published>
    <updated>2008-10-21T06:29:17Z</updated>
    <category term="development"/>
    <link href="http://blog.rubygame.org/articles/2008/10/21/status-update-october-20" rel="alternate" type="text/html"/>
    <title>Status Update (October 20)</title>
<content type="html">
            &lt;p&gt;Finished the last two things on my list:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Specs for the mouse event triggers.&lt;/li&gt;
&lt;li&gt;Add Joystick.activate_all and Joystick.deactivate_all.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But I thought up more stuff to add to the list:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add _magic_trigger and _magic_action methods to HasEventHandler. These would be private methods that you can override to define your own custom &#8220;magic&#8221; conversion rules when using magic_hook. They would take precedence over the built-in rules, if there was a match.&lt;/li&gt;
&lt;li&gt;Organize the trigger and action classes to be inside EventTriggers and EventActions modules, for obsessive cleanliness and so I can have a good place for documentation about making your own triggers and actions.&lt;/li&gt;
&lt;li&gt;Change MethodAction to remove its pass_event argument. Just always try to pass the event, and if that fails try again without it. No need for pass_event (besides, I can add it back later if needed, but I can&#8217;t take it away after release or it would break compatiblity).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Also, I&#8217;ve set a deadline / release date for version 2.4: October 24, because the timing is right, and it has a 2 and 4 in it!&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.rubygame.org/">
    <author>
      <name>jacius</name>
    </author>
    <id>tag:blog.rubygame.org,2008-10-20:329</id>
    <published>2008-10-20T03:02:00Z</published>
    <updated>2008-10-20T03:28:17Z</updated>
    <category term="development"/>
    <link href="http://blog.rubygame.org/articles/2008/10/20/status-update-october-19" rel="alternate" type="text/html"/>
    <title>Status Update (October 19)</title>
<content type="html">
            &lt;p&gt;Well, &#8221;&lt;a href=&quot;http://blog.rubygame.org/articles/2008/10/17/status-update-october-16-again&quot;&gt;tomorrow&lt;/a&gt;&#8221; didn&#8217;t quite turn out, but I&#8217;ve got atiaxi&#8217;s ACTIVEEVENT fix merged in. Although he might want to read up a bit on the effects and uses of bitwise AND (&#8220;&amp;amp;&#8221;) versus bitwise OR (&#8220;|&#8221;). ;-)&lt;/p&gt;

&lt;p&gt;My next step was to revamp the function so that it could possibly return multiple Rubygame events from a single SDL_ACTIVEEVENT. That wasn&#8217;t much trouble at all, and the results are now pushed to the &lt;a href=&quot;http://github.com/jacius/rubygame/tree/dev-2.4&quot;&gt;dev-2.4&lt;/a&gt; branch on github.&lt;/p&gt;

&lt;p&gt;Here are the remaining to-dos for the Rubygame 2.4 release:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Specs for the mouse event triggers&lt;/li&gt;
&lt;li&gt;Making joysticks enabled automatically (?)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I&#8217;m not sure about the joysticks thing, though. That would start sending joystick events to the event queue without any Joystick instances having been created, which could be an unexpected change in behavior. So, it might be something to consider for 3.0, but not for 2.4.&lt;/p&gt;

&lt;p&gt;I could add Joystick.activate_all and deactivate_all (or some other similar named methods) to make it &lt;em&gt;easier&lt;/em&gt; to activate the joysticks, though. Hrmm, I&#8217;ll think about it. Leave a comment if you&#8217;ve got thoughts about that.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.rubygame.org/">
    <author>
      <name>jacius</name>
    </author>
    <id>tag:blog.rubygame.org,2008-10-17:328</id>
    <published>2008-10-17T01:57:00Z</published>
    <updated>2008-10-17T02:05:01Z</updated>
    <category term="development"/>
    <link href="http://blog.rubygame.org/articles/2008/10/17/status-update-october-16-again" rel="alternate" type="text/html"/>
    <title>Status Update (October 16, again)</title>
<content type="html">
            &lt;p&gt;Added docs for the event actions, and also finally merged in atiaxi&#8217;s &lt;a href=&quot;http://github.com/atiaxi/rubygame/commit/6f2a24518fcce32d7dc71c014226a157bc993382&quot;&gt;fix for Ftor.new_from_to&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;I&#8217;ll merge his &lt;a href=&quot;http://github.com/atiaxi/rubygame/commit/1580e8a81e719d9db6d3f4c1a0b2284b6f579e68&quot;&gt;ACTIVEEVENT fix&lt;/a&gt; tomorrow, although I&#8217;m going to make so it can return multiple events, instead of just returning the first match.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.rubygame.org/">
    <author>
      <name>jacius</name>
    </author>
    <id>tag:blog.rubygame.org,2008-10-16:325</id>
    <published>2008-10-16T08:43:00Z</published>
    <updated>2008-10-16T08:52:42Z</updated>
    <category term="development"/>
    <link href="http://blog.rubygame.org/articles/2008/10/16/status-update-october-16" rel="alternate" type="text/html"/>
    <title>Status Update (October 16)</title>
<content type="html">
            &lt;p&gt;Even with the reduced number of commitments, I&#8217;ve been busy as always. Actually, I have a tendency to make new commitments, and a little side project distracted me this past week.&lt;/p&gt;

&lt;p&gt;But, I made some progress tonight. I&#8217;ve finished specs for HasEventHandler #magic_hooks, and also made so you can pass already-made trigger or actions to it, as I mentioned &lt;a href=&quot;http://blog.rubygame.org/articles/2008/10/6/status-update-october-5&quot;&gt;last time&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I&#8217;ll have to look around some more to be sure, but I think all that&#8217;s left is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Specs for the mouse event triggers&lt;/li&gt;
&lt;li&gt;Docs for the event actions&lt;/li&gt;
&lt;li&gt;Making joystick support enabled automatically&lt;/li&gt;
&lt;li&gt;Maybe test that the new joystick events actually work. (I wonder if I have a working joystick somewhere?)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An October release still looks certain.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.rubygame.org/">
    <author>
      <name>jacius</name>
    </author>
    <id>tag:blog.rubygame.org,2008-10-06:322</id>
    <published>2008-10-06T01:55:00Z</published>
    <updated>2008-10-06T02:03:34Z</updated>
    <category term="development"/>
    <link href="http://blog.rubygame.org/articles/2008/10/6/status-update-october-5" rel="alternate" type="text/html"/>
    <title>Status Update (October 5)</title>
<content type="html">
            &lt;p&gt;EventHandler specs are done. I also added a couple methods (&lt;code&gt;#has_hook?&lt;/code&gt;, &lt;code&gt;#remove_hook&lt;/code&gt;) that were conspicuously missing. Pushed everything to Github.&lt;/p&gt;

&lt;p&gt;Realized I haven&#8217;t specced HasEventHandler. Not sure I will. Maybe &lt;code&gt;#magic_hooks&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Speaking of magic hooks, I need to make so you can pass it trigger or action instances.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.rubygame.org/">
    <author>
      <name>jacius</name>
    </author>
    <id>tag:blog.rubygame.org,2008-10-01:321</id>
    <published>2008-10-01T05:05:00Z</published>
    <updated>2008-10-01T05:19:11Z</updated>
    <category term="development"/>
    <link href="http://blog.rubygame.org/articles/2008/10/1/another-status-update" rel="alternate" type="text/html"/>
    <title>Another status update</title>
<content type="html">
            &lt;p&gt;It has been a while since my last post, so I figured I had better make a post to show I&#8217;m still alive!&lt;/p&gt;

&lt;p&gt;I&#8217;m making progress on the documentation and specs for the event system.:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;EventHook is fully specced and documented.&lt;/li&gt;
&lt;li&gt;All of the event triggers are documented. All except the mouse ones are specced.&lt;/li&gt;
&lt;li&gt;The event actions are specced, but not documented yet.&lt;/li&gt;
&lt;li&gt;EventHandler is fully documented, and I&#8217;ve just started on the specs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hopefully development should pick up a little bit now, because I have freed up some stressful and time-consuming commitments recently. No set date for release of 2.4, of course, but I&#8217;d be very surprised if it wasn&#8217;t in October. I&#8217;m eager to get this update released soon!&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.rubygame.org/">
    <author>
      <name>jacius</name>
    </author>
    <id>tag:blog.rubygame.org,2008-09-12:310</id>
    <published>2008-09-12T01:41:00Z</published>
    <updated>2008-09-12T23:15:58Z</updated>
    <category term="development"/>
    <link href="http://blog.rubygame.org/articles/2008/9/12/status-update" rel="alternate" type="text/html"/>
    <title>Status update</title>
<content type="html">
            &lt;p&gt;I just wanted to make a quick post about where Rubygame is now.&lt;/p&gt;

&lt;p&gt;I finished the changes I mentioned last time about &lt;code&gt;:left_shift&lt;/code&gt; and &lt;code&gt;:right_shift&lt;/code&gt; being matched by &lt;code&gt;:shift&lt;/code&gt; for keyboard triggers. Here&#8217;s how I wrote the code, if you&#8217;re curious:&lt;/p&gt;

&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;c&quot;&gt;# @mods is the array of modifiers for the trigger.&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;c&quot;&gt;# evmods is the array of modifiers for the event.&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;_mods_match?&lt;/span&gt;( evmods )&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;iv&quot;&gt;@mods&lt;/span&gt;.all? { |mod|&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;case&lt;/span&gt; mod&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:alt&lt;/span&gt;, &lt;span class=&quot;sy&quot;&gt;:ctrl&lt;/span&gt;, &lt;span class=&quot;sy&quot;&gt;:meta&lt;/span&gt;, &lt;span class=&quot;sy&quot;&gt;:shift&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      evmods.include?(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;left_&lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;dl&quot;&gt;#{&lt;/span&gt;mod&lt;span class=&quot;dl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;.intern) &lt;span class=&quot;r&quot;&gt;or&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        evmods.include?(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;right_&lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;dl&quot;&gt;#{&lt;/span&gt;mod&lt;span class=&quot;dl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;.intern)&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;else&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      evmods.include?(mod)&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  }&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;In addition to supporting general modifiers (vs left/right specific), this code is a lot more forgiving than before. Originally, I had just checked &lt;code&gt;evmods == @mods&lt;/code&gt;, which was rather stupid of me, because &lt;code&gt;[:shift, :ctrl] == [:ctrl, :shift]&lt;/code&gt; would fail, even though they are equivalent in this context.&lt;/p&gt;

&lt;p&gt;All the work that remains for 2.4 is writing documentation and specs for the event actions, event hook, and the HasEventHandler mixin. Unfortunately, that&#8217;s not the kind of work that motivates me to take time out of my day to finish it. I&#8217;ve got the 2 hours per week scheduled, but I may need to increase that and push hard until 2.4 is done.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.rubygame.org/">
    <author>
      <name>jacius</name>
    </author>
    <id>tag:blog.rubygame.org,2008-09-06:304</id>
    <published>2008-09-06T04:37:00Z</published>
    <updated>2008-09-06T08:13:18Z</updated>
    <category term="development"/>
    <link href="http://blog.rubygame.org/articles/2008/9/6/keyboard-triggers" rel="alternate" type="text/html"/>
    <title>Keyboard Triggers</title>
<content type="html">
            &lt;p&gt;Just posting a reminder to myself to improve keyboard triggers to be better about modifier keys. Right now you have to specify (as one example) either &lt;code&gt;:left_shift&lt;/code&gt; or &lt;code&gt;:right_shift&lt;/code&gt;, but there&#8217;s no way to say &#8220;I don&#8217;t care which shift it is, as long as shift is being pressed. So I need to make it able to take &lt;code&gt;:shift&lt;/code&gt; and have that match either the right or left versions. The same applies for ctrl, alt, etc. (I was writing the documentation for KeyPressTrigger, and I noticed I couldn&#8217;t write an example of a trigger that matches Ctrl+Shift+A, without caring about left/right, without using two triggers nested in an AnyTrigger.)&lt;/p&gt;

&lt;p&gt;I also want to improve magic hooks so that you can specify &#8220;Ctrl+Shift+A&#8221; and it will translate that into &lt;code&gt;KeyPressTrigger.new( :a, [:ctrl, :shift] )&lt;/code&gt;. Because that would be really handy. But maybe that can wait until after 2.4? Dunno.&lt;/p&gt;

&lt;p&gt;Update: Finished the docs for the event triggers, and pushed them to Github in the &lt;a href=&quot;http://github.com/jacius/rubygame/tree/event_handler&quot;&gt;event_handler&lt;/a&gt; branch.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.rubygame.org/">
    <author>
      <name>jacius</name>
    </author>
    <id>tag:blog.rubygame.org,2008-08-30:303</id>
    <published>2008-08-30T20:07:00Z</published>
    <updated>2008-08-30T20:20:57Z</updated>
    <category term="misc"/>
    <link href="http://blog.rubygame.org/articles/2008/8/30/schedules" rel="alternate" type="text/html"/>
    <title>Schedules</title>
<content type="html">
            &lt;p&gt;Schedules are nice. You&#8217;d think I would have already figured this out, but having a schedule / weekly planner is quite good for making sure you actually put some time into the things you need to do. Like, say, working on Rubygame.&lt;/p&gt;

&lt;p&gt;I have been occupied as always, but I&#8217;m learning to manage it and keep a regular schedule, and I&#8217;ve fit in a 2-hour slot for working on Rubygame every Saturday afternoon. I might pop into IRC now and again during that time, but I want most of it to go towards getting stuff done, and using IRC pretty much kills productivity entirely.&lt;/p&gt;

&lt;p&gt;Hopefully this will mean that Rubygame keeps rolling along, slowly but surely.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.rubygame.org/">
    <author>
      <name>jacius</name>
    </author>
    <id>tag:blog.rubygame.org,2008-08-06:291</id>
    <published>2008-08-06T07:18:00Z</published>
    <updated>2008-08-06T07:19:03Z</updated>
    <category term="announcements"/>
    <category term="contests"/>
    <link href="http://blog.rubygame.org/articles/2008/8/6/rubyweekend-2-results" rel="alternate" type="text/html"/>
    <title>RubyWeekend #2 Results</title>
<content type="html">
            &lt;p&gt;It&#8217;s time to announce &lt;a href=&quot;http://www.rubygameforums.com/viewtopic.php?t=77&quot;&gt;the winners&lt;/a&gt; of the &lt;a href=&quot;http://www.rubygameforums.com/viewtopic.php?t=51&quot;&gt;RubyWeekend #2 Contest&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Third Place&lt;/strong&gt;: Mizutoka by jlnr!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Second Place&lt;/strong&gt;: Cheese Master by elcugo!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;First Place&lt;/strong&gt;: Opposite Islands by ippa!&lt;/p&gt;

&lt;p&gt;Congratulations to our winners, and thanks to everyone who competed or voted! It&#8217;s no easy task to create a game in 48 hours, but I hope everybody had fun and learned something new!&lt;/p&gt;

&lt;p&gt;Here are the full rankings, with a breakdown of the points each game received.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Opposite Islands by ippa: &lt;strong&gt;34 points&lt;/strong&gt; (10 + 7 + 7 + 5 + 5)&lt;/li&gt;
&lt;li&gt;Cheese Master by elcugo: &lt;strong&gt;28 points&lt;/strong&gt; (10 + 7 + 4 + 4 + 3)&lt;/li&gt;
&lt;li&gt;Mizutoka by jlnr: &lt;strong&gt;24 points&lt;/strong&gt; (10 + 5 + 5 + 2 + 2)&lt;/li&gt;
&lt;li&gt;DungeonFarmer by Yahivin: &lt;strong&gt;23 points&lt;/strong&gt; (10 + 10 + 2 + 1 + 0*)&lt;/li&gt;
&lt;li&gt;Cyber Deathmatch by Venut: &lt;strong&gt;19 points&lt;/strong&gt; (5 + 4 + 4 + 3 + 3)&lt;/li&gt;
&lt;li&gt;Solunaria by jacius: &lt;strong&gt;19 points&lt;/strong&gt; (7 + 7 + 3 + 1 + 1)&lt;/li&gt;
&lt;li&gt;Playground Wars by kiba and qubodup: &lt;strong&gt;12 points&lt;/strong&gt; (4 + 3 + 2 + 2 + 1)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;* 0 = the voter did not rank the game at all&lt;/p&gt;

&lt;p&gt;See you next time!&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.rubygame.org/">
    <author>
      <name>jacius</name>
    </author>
    <id>tag:blog.rubygame.org,2008-08-01:290</id>
    <published>2008-08-01T20:23:00Z</published>
    <updated>2008-08-01T20:27:08Z</updated>
    <category term="contests"/>
    <link href="http://blog.rubygame.org/articles/2008/8/1/rubyweekend-2-voting-ends-tonight" rel="alternate" type="text/html"/>
    <title>RubyWeekend #2 Voting Ends Tonight!</title>
<content type="html">
            &lt;p&gt;Vote for your favorite games before it&#8217;s too late!&lt;/p&gt;

&lt;p&gt;Rank the games according to your favorites, then send me a forum PM or email! Voting closes tonight, &lt;a href=&quot;http://timeanddate.com/worldclock/fixedtime.html?month=8&amp;amp;amp;day=1&amp;amp;amp;year=2008&amp;amp;amp;hour=23&amp;amp;amp;min=59&amp;amp;amp;sec=0&amp;amp;amp;p1=0&quot;&gt;August 1 at 23:59 UTC&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;See &lt;a href=&quot;http://www.rubygameforums.com/viewtopic.php?t=69&quot;&gt;the voting forum thread&lt;/a&gt; for details and a list of the entries.&lt;/p&gt;
          </content>  </entry>
</feed>
